xor eax, eax
mov eax, dword ptr fs:[eax+0x30] // PEB
由于PEB是Windows操作系统中定义的结构,因此Bochs无法正确执行此代码(不会在eax中加载PEB地址)。 br />
同样,解析kernel32.dll结构以查找各种API地址的其他代码段也不起作用。 ?
我也有以下内容:在主机操作系统上使用IDA Pro?我认为在这种情况下,可以使用Windows调试器,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读取到已分配的内存中并设置了执行权限后,您只需使用函数指针即可对其进行调用/跳转。
这将生成可执行二进制文件,您可以在任何调试器中运行该二进制文件,在调用函数指针之前设置断点,然后根据需要调试shellcode。
编辑:
快速搜索仅显示有关Windows x64 Shellcode的文章中的程序。相同的代码可以在32位Windows上应用。
评论
如果不必一定是Bochs,则在此处介绍一种简单的方法来调试Shellcode,方法是使用OllyDbg将其注入正在运行的进程中:blackc0.de/2014/06/shellcode-debugging-ollydbg