Koo*_* Ng 1 c++ dll winapi shellcode
如果确保kernel32.dll被加载到进程虚拟内存中,为什么我不能在不包含windows.h的情况下调用Sleep这样的函数?以下是来自vividmachine.com的摘录
那么,窗户呢?如何找到所需DLL函数的地址?每个Service Pack升级都不会改变这些地址吗?
有很多方法可以找到需要在shellcode中使用的函数的地址.有两种解决功能的方法; 您可以在运行时找到所需的功能或使用硬编码的地址.本教程将主要讨论硬编码方法.唯一保证映射到shellcode地址空间的DLL是kernel32.dll.这个DLL将保存LoadLibrary和GetProcAddress,这两个函数需要获取可以映射到漏洞进程空间的任何函数地址.但是这种方法存在问题,地址偏移量将随着Windows的每个新版本(服务包,补丁等)而改变.因此,如果您使用此方法,则shellcode仅适用于特定版本的Windows.进一步阅读部分将在本文末尾引用进一步的动态寻址.
您引用的文章侧重于获取函数的地址.你仍然需要函数的函数原型(它不会在版本之间发生变化),以便生成调用函数的代码 - 适当处理输入和输出参数,寄存器值和堆栈.
所述windows.h
头提供的函数原型您想呼叫的C/C++编译器,以便可以生成用于调用功能(通过寄存器或堆栈的参数的传递,和获取函数的返回值)的代码.
在通过读取了解函数原型之后windows.h
,熟练的汇编程序员也可以编写汇编代码来调用Sleep
函数.与函数的地址一起,这些是您进行函数调用所需的全部内容.