定位未导出的函数地址(SHCreateProcess)

本文介绍了如何在Windows 7 64位系统中,通过栈回朔技术定位未导出的函数SHCreateProcess的地址。通过Hook CreateProcessW并跟踪调用者,结合Windbg和特定的搜索策略,找到SHCreateProcess的大概位置,并通过特征码搜索最终确定其地址。在32位和64位环境下采用了不同的方法。
摘要由CSDN通过智能技术生成


定位未导出的函数地址(SHCreateProcess)

搬运自我的百度空间,文章基于windows7 64位

     

    我们要Hook shell32.dllSHCreateProcess这个函数,苦于他没有被导出,也无从知道地址。

    其实我们还是有办法的。windbg有功能叫做栈回朔技术,可以看到函数的调用者,函数的调用者的调用者,函数的调用者的调用者的调用者。。。。。。。。。。。。。。。。。。(略过1000字)

    原理是什么呢?我们知道函数的调用是靠栈来完成的,每当调用一个函数,都会把函数的返回地址存入栈中。

    windbg就是看栈中的返回地址来确定调用者的。

    好,铺叙完毕。看看SHCreateProcess这个函数,他的地址我们虽然不知道,但是我们知道他会调用CreateProcessW,那我们HookCreateProcessW后,假装调用ShellExecute(内部会使用SHCreateProcess函数),回朔调用者,就能得到SHCreateProcess的大致地址了(因为得到的是CreateProcessW返回到SHCreateProcess内部的地址,而不是SHCreateProcess的首地址,所以我说是“大致地址”)。

     

    (2016-8-3更新:有朋友私信问我SHCreateProcess的原型,我当时在网上搜得到,现在看了看好像找不到了,还好我的工程里还有,定义如下:

    typedef  int (__stdcall *PSHCreateProcess)(int p1,HANDLE hToken,wchar_t *lpApplicationName,wchar_t * lpCommandLine,DWORD dwCreationFlags,LPSECURITY_ATTRIBUTES lpProcessAttributes,LPSECURITY_ATTRIBUTES lpThreadAttributes,BOOL bInheritHandles,LPVOID lpEnvironment,LPCWSTR lpCurrentDirectory,LPSTARTUPINFOW lpStartupInfo,LPPROCESS_INFORMATION lpProcessInformation,int p2,char p3,int p4);

    <

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值