detours对加壳程序有效的原因

detours对加壳程序有效的原因

detours能拦截普通程序的函数调用,其实它也能拦截加壳程序的函数调用。
不过你要动态把dll注入目标进程,才能拦截到加壳程序的函数调用。
关于在windows nt下如何动态把dll注入目标进程的方法,这里就掠过不提了。

本文内容如下:
1)场景假设
2)代码编写
3)加壳文件a.exe对windows函数send的调用
4)未加壳文件a.exe对windows函数send的调用
5)detours 在windows nt下拦截 wsock32.dll 的send函数的方法
6)注入a.exe的dll b.dll 对send函数的拦截
7)a.exe对send函数的调用被拦截
总结

1)场景假设:
a.exe是个用ASPack加壳的程序,它调用了windows函数send(在wsock32.dll中)。
用vc6.0带的 dumpbin.exe 看不到 a.exe 对 wsock32.dll的send函数的引用。
现在,我们的目标是在把 b.dll 注入 a.exe 后,能把a.exe(包括其它所有相关
dll)对wsock32.dll send函数的调用,替换成 b.dll 中 Mine_send函数。

2)代码编写:
b.dll的代码就不用说了吧?
参见“hook socket send recv的代码“
http://www.gameres.com/bbs/showthread.asp?threadid=3379&;page=3

3)加壳文件a.exe对windows函数send的调用:
1.假设进程 a.exe中的函数 mysend 调用了 wsock32.dll 的send 函数,
同时 a.exe用UPX或ASPack加壳了。a.exe被压缩,iat等被隐藏。
ASPack在a.exe的开头加了自己的代码。

2. a.exe 启动的时候,ASPack的代码解压文件,根据原来的iat加载
wsock32.dll,并找到send 函数的地址,假设这个地址是 0xbbbb。

3.ASPack的代码修改 a.exe中mysend对send调用的地址为0xbbbb。

4)未加壳文件a.exe对windows函数send的调用:
1.windows首先检查a.exe的 iat中引用的dll是否都存在
2.把wsock32.dll映射入内存,把a.exe映射入内存
3.修改 a.exe中mysend对send调用的地址

5)detours 在windows nt下拦截 wsock32.dll 的send函数的方法:
1.detours 先找到 send 的地址
2.detours 判断这个地址是否是 wsock32.dll send函数的真正地址。
  如果不是的话,detours会根据send的地址一直找到send函数真正地址。
  架设detours最后找到了这个地址 0xbbbb.
3.detours 修改wsock32.dll 中send函数地址0xbbbb开始处的指令,
  把这些指令变成对Mine_send函数的调用

6)注入a.exe的dll b.dll 对send函数的拦截:
1.b.dll调用detours函数.
  detours函数修改 wsock32.dll send函数地址0xbbbb开始处的指令,
  以便把wsock32.dll的send函数替换成 Mine_send 函数

7)a.exe对send函数的调用被拦截:
1.a.exe 对 send 的调用最终会 调用 0xbbbb 地址
2.b.dll 的 detours 函数已经把 0xbbbb 地址替换成 b.dll 的 Mine_send
  函数
3. a.exe 对 send 的调用变成对 Mine_send调用

总结:
    1. detours能拦截能拦截加壳程序的函数调用,不过你要动态
       把dll注入目标进程,才能拦截到加壳程序的函数调用。
    2. 拦截加壳程序的函数调用和拦截普通程序的函数调用原理上没有区别。
    3. 错误之处,还请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值