攻防世界:EasyHook

查壳无壳,放进IDA 

 

看看401240,是一个假的判断的函数。

 再看sub_401220();

创建了函数指针,WriteFile_0 = (BOOL (__stdcall *)(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED))GetProcAddress(LibraryA, ProcName); 获取目标函数(真正的writefile)的地址,并将其存储在 WriteFile_0 中。这个函数指针 WriteFile_0才会是这个程序里用来写文件的函数。然后用40c9b4进行备份,然后把40c9bc写成跳转,后续跳转的地址是401080

再去看4010D0

完成hook的初始化。

所以逻辑已经清楚了。先获取writefile这个函数的位置,把这个函数备份下来。然后40C9BC处是个跳转,跳转到401080.之后把BC跳转写到writefile的位置,这样执行到writefile就进入了401080函数

401000进行真正的判断

 401140把40C9B4重新写回来,而这正式我们备份的真正的writefile。然后写入文件

按照真正的判断函数,我们重写就可以了,注意要把循环倒过来写

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值