使用 Bochs 和 IDA Pro 调试 Shellcode

逆向工程 艾达
2021-07-06 22:17:39

我正在使用 Local Bochs Debugger 和 IDA Pro 来调试 shellcode。这个shellcode在IDA Pro中可以正确反汇编,但是,现在我想调试它。

我试过调试,但由于Bochs的配置是裸机,它无法正确执行一些代码,例如:

xor eax, eax
mov eax, dword ptr fs:[eax+0x30] // PEB

由于PEB 是Windows 操作系统中定义的结构,因此Bochs 不会正确执行此代码(不会在eax 中加载PEB 地址)。

同样,解析 kernel32.dll 结构以查找各种 API 地址的其他代码段也不起作用。

如何使用 IDA Pro 和 Bochs Debugger 调试 shellcode?

我还有以下几点:

Windows XP SP3 Guest OS running in VMWare workstation.
IDA Pro running on the host OS.

是否可以将 shellcode.txt 文件放在来宾操作系统中,然后在主机操作系统上使用 IDA Pro 对其进行调试?我想在这种情况下,可以使用Windows Debugger,windbg 的引擎。

会有什么配置?在以下文章中:

https://www.hex-rays.com/products/ida/support/tutorials/debugging_windbg.pdf

它描述了如何调试在 Windows 上运行的远程进程。但就我而言,它不是一个进程,而是从文本文件加载的 shellcode。

1个回答

为了在 Windows 上和一般情况下测试 shellcode,将它包装在一个执行它的小程序中是个好主意。

您可以做的是编写一个小程序,将 shellcode 从文件读取到 malloc() ed 缓冲区,然后跳转到它。

在 Windows 上,您可能希望在跳转到该内存区域之前使用VirtualProtect设置该内存区域的 PAGE_EXECUTE_READWRITE 权限。

在将 shellcode 读入 malloced 内存并设置执行权限后,您可以简单地使用函数指针调用/跳转到它。

这将生成可以在任何调试器中运行的可执行二进制文件,在函数指针调用之前设置断点,然后根据需要调试 shellcode。

编辑:

快速搜索会发现一篇关于Windows x64 Shellcode的文章中的类似程序相同的代码可以应用于 32 位 Windows。