为了简洁一些,作者将运行 IDA 的机器叫做“MAIN”,将运行加壳程序的机器称为“TARGET”。

设置调试服务器

将远程调试服务文件 win32_remote.exe 复制到 TARGET 上,由于我们的这个加壳文件是 32 位的,所以需要 32 位的远程调试服务器。

远程调试服务器的位置在前面的文章已经提到过很多次了,这里再说一下:在ida目录下的 dbgsrv 目录里面,这个名字就是 debugserver 的简写,应该很好记住。

远程调试

首先将 PACKED_PRACTICA_1.exe 文件复制到本地进行静态分析,通过 IDA 加载器打开,勾选 MANUAL LOAD 手动加载,加载文件所有的区段。

切记不要重命名数据库文件 IDB。因为如果本机的可执行程序叫做 PACKED_PRACTICA_1.exe,IDA 会在同一目录下保存数据库文件,名称为 PACKED_PRACTICA_1.idb,不要用其他名字,否则在识别远程机器上进程的时候会出一些奇怪的问题。

在 TARGET 中运行 win32_remote.exe 远程调试服务器,会显示出服务器的地址与端口:

image.png

然后启动调试器,选择 Remote Windows debugger:

image.png

在 PROCESS OPTIONS 中,输入读者自己的 IDA 服务器地址和端口。还需要将可执行文件地址路径也改为 TARGET 机器中加壳文件的路径:

image.png

打开调试器菜单选择 START PROCESS,调试开始之后会在程序入口暂停。

可执行文件进行了随机化处理,因而每次执行的地址都会变化,所以必须在同一次运行中完成转存和重建 IAT 的工作,中途不能关闭程序。

什么是地址随机化

地址随机化(Address Space Layout Randomization,简称 ASLR)是一种安全技术,用于防止某些类型的安全攻击,如缓冲区溢出攻击和返回导向编程(ROP)攻击。ASLR 通过随机化内存中关键数据区(如堆、栈、共享库和程序代码)的起始地址,使得攻击者难以预测这些区域的确切位置,从而增加了攻击的难度。

工作原理

  1. 内存布局随机化:在程序每次运行时,ASLR 会随机化程序的内存布局。包括程序的代码段、数据段、堆、栈以及共享库等。
  2. 堆和栈地址随机化:ASLR 会随机选择堆和栈的起始地址,这样攻击者就无法预测缓冲区溢出或其他攻击的内存地址。