脱PESpin0.3x壳总结

地址:https://bbs.pediy.com/thread-225617.htm
总结
1.有反调试去掉反调试 dump seh 回调函数出来用ida查看
脱PESpin0.3x壳总结
脱PESpin0.3x壳总结
2.找OEP 一般有esp定律,下断点法(如下断到BP GetVersion 运行到返回 再f7就返回上一层 就是OEP 在系统领空就不是)等
3.下IAT写入断点 (有可能要几次才到真正的写入IAT指令) 。
4.在写入断点处下软件断点(防止跑飞)
5.下断成功上下 看下指令 大部都是花指令 像下图在上一条指令要nop一条指令才能看出
脱PESpin0.3x壳总结
6.找到后只能f7跟一圈 去掉花指令(ctrl 加方向键可以查看上下指令 会过掉花指令) 盯着寄存器 堆栈 它很定会匹配api 就会有api名称出现(有的可能不出现)这里可以直接自动单步(调试选项 打开run 跟踪 设置条件 然后在查看选项中 查看run跟踪)就能够快速定位到相应的位置)
脱PESpin0.3x壳总结
进去就发现感觉都有可能 那就下断再人肉跟一圈
脱PESpin0.3x壳总结
7.如果找到了api 盯着地址 盯着地址去向 (一般在eax里 因为一般是getxxxaddr())
8.找到三个关键点(找到OEP ,找到真正的api地址(一般是先获得相对虚拟地址 ,然后加上基地址)的指令,找到写入api地址的指令 )就可以写脚本了 。
下图是计算api的地址
脱PESpin0.3x壳总结
下图是代表匹配到了api

脱PESpin0.3x壳总结
9。如果要修复IAT 就先修改再dump
脱PESpin0.3x壳总结
脱PESpin0.3x壳总结
脱壳脚本

MOV vOEP,00409486  //OPE地址
MOV vGetAPIAddr,438F9F //获取APT地址
MOV vWriteIAIAddr,43918c //写入IAT 地址
MOV vHardwarePointAddr,0043AF51 //清除硬件断点的地方
MOV vAPIaddr,0
BPHWC //清除所有硬件断点
BC //清除所有软件断点
BPHWS vHardwarePointAddr, "x" 
BPHWS vOEP, "x" 
BPHWS vGetAPIAddr,"x" 
BPHWS vWriteIAIAddr,"x"
LOOP_1:
RUN
CMP eip,vHardwarePointAddr
JNZ SIGN_1
fill vHardwarePointAddr,22,90 //nop十个字节
SIGN_1:
CMP eip,vGetAPIAddr
JNZ SIGN_2
MOV vAPTaddr,eax
SIGN_2:
CMP eip,vWriteIAIAddr
JNZ SIGN_3
mov [edi],vAPTaddr
SIGN_3:
CMP eip,vOEP
JE EXIT_1
JMP LOOP_1
EXIT_1:
MSG "修复完毕"

两个问题,第一,在分析程序时不能修改了清除硬件断点代码然后保存程序,这样再调试程序,程序就会破坏,因为清除硬件断点的代码是动态解密出来的,修改了那段代码再运行壳执行解密时就会出错。第二,壳代码或是oep下断,在调试脱壳时尽可能使用硬件执行断点,这样防止动态解密把断点冲掉。

转载于:https://blog.51cto.com/haidragon/2120886

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值