脱壳--03.exe OD脚本脱壳

和02程序类似 但是我们换一种方式脱壳 就是利用OD脚本脱壳

我们通过02程序知道壳代码在获取真正的api地址以后 会对api地址做一些处理 然后在填写到iat表中 在我们调用api的时候 并没有直接调用到api 而是加密后的api的代码

脚本的框架:只需要知道三个地址 获取真正api的地址 填写iat的地址和oep的地址

得到获取真正api的地址把api地址存放在一个临时变量里 中间不管他怎么加密 到填写IAT表的时候 都会填写我们事先保存的临时变量里的api的地址

我们现在只要调试出这三个地址 在用OD加载脚本 就可以自动填写iat了

//1. 初始化变量
MOV dwGetApiAddr,0   //获取api真正地址的地址
MOV dwWriteIATAddr,0 //iat的地址
MOV dwOEP,0 //OEP的地址

//2.删除断点
BC  //清除软件断点
BPHWC //删除所有硬件断点
BPMC  //清除内存断点

//3.设置硬件执行断点
BPHWS dwGetApiAddr,"X"
BPHWS dwWriteIATAddr,"X"
BPHWS dwOEP,"X"

//4.循环
LOOP0:
RUN   //F9
CMP dwGetApiAddr,eip
JNZ CASE1
MOV dwTmp,eax         //把正确的API地址放到临时变量里
JMP LOOP0
CASE1:
CMP dwWriteIATAddr,eip
JNZ CASE2
MOV [edi],dwTmp       //把正确的API地址填写到iat里
JMP LOOP0
CASE2:
CMP dwOEP,eip
JNZ LOOP0

MSG "修复成功"

这个程序完全和程序2一样 利用函数getVersion函数找到oep地址 填写到OD脚本中 

0049D5ee eax就是api加密后代码的地址 填写到正确的iat以后 我们再用正确的函数地址覆盖 所以0049D5F0下断点覆盖iat  0049D5F0填写到OD脚本中

向上翻 GetProcAddress函数获取真正的函数地址 走过这一句eax也就保存了函数地址  填写到OD脚本中

填写后的 od脚本

//1. 初始化变量
MOV dwGetApiAddr,0049D5BF    //获取api真正地址的地址
MOV dwWriteIATAddr,0049D5F0   //填写iat的地址
MOV dwOEP,0044848D  //OEP的地址

//2.删除断点
BC  //清除软件断点
BPHWC //删除所有硬件断点       a
BPMC  //清除内存断点

//3.设置硬件执行断点
BPHWS dwGetApiAddr,"x"
BPHWS dwWriteIATAddr,"x"
BPHWS dwOEP,"x"

//4.循环
LOOP0:
RUN   //F9
CMP dwGetApiAddr,eip
JNZ CASE1
MOV dwTmp,eax         //把正确的API地址放到临时变量里
JMP LOOP0
CASE1:
CMP dwWriteIATAddr,eip
JNZ CASE2
MOV [edi],dwTmp       //把正确的API地址填写到iat里
JMP LOOP0
CASE2:
CMP dwOEP,eip
JNZ LOOP0

MSG "修复成功"

OD右键 运行脚本 打开

 

 直接运行

说明跑到了OEP  

再看IAT表就已经修复完成了 

接下来就是dump

 

转存到文件 

 

成功运行 脱壳成功 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值