通过前面介绍的 win_32 平台下搜索 API 地址的办法, 我们可以从 FS 所指的线程环境块开始, 一直追溯到动态链接库的函数名导出表, 在其中搜索出所需的 API 函数是第几个, 然后在函数偏移地址 (RVA) 导出表中找到这个地址.
image
对于王清的《0DAY 安全软件漏洞分析技术》(第二版)第 3.4.3 章节中动态获取 API 地址的 shellcode 的一点改进, 将原书中对于 dll 基地的获取由:
image
具有更好的通用性, 可以适用于 XP,win7,win10 等各类操作系统
修改后的代码如下, 请放入 vc++6.0 中编译:
image
因为在 Win10 中, ntdll.dll 和 kernel32.dll 库中间还有一个 kernelbase.dll 库, Xp 是没有的, 所以上面的代码在 Win10 跑会出错, 而且 Win10 的 VS2017 对汇编的支持力度不够, 用 cl.exe 编译的话, 会出现 hash_loop 无定义的问题, 所以下面的代码我用汇编来实现.
image
最后, 如果你想学习 c++, 可以加入小编 c++ 学习群: 825414254 获取素材资料以及开发工具和听课权限!(不是学 c++ 的同学非诚勿扰哦!)
image
来源: http://www.jianshu.com/p/4a86fb15b85c