脱壳步骤
最近在学习脱壳的教程,接下来总结一下手动脱壳的方式
1. 使用OD调试
常用的方式有以下
- 单步跟踪法: 这个方法是万能的, 思路就是, 碰到向上跳转, F4执行到下一步;如果函数中断, 则步入函数,继续单步, 一直到找到入口
- ESP定律法: 找到开头关键的push后的一句,然后数据窗口跟随到 ESP寄存器的地址,在数据窗口的地址处右键下访问断点,然后直接运行,如果不是真正的入口,则继续单步寻找入口
2. 脱壳
脱壳是比较麻烦的,因为可能一种方法行不通,那就需要使用其他的方法,接下来是总结的几种方式(找到OEP(入口)之后)
- 右键选中“用ollyDump调试进程”, 然后另存文件
- 使用loadPE,首先选中进程,修正镜像大小,然后右键完整转存
- 如果使用loadPE,则需要手动修复文件(使用工具:import reconstructor)
- 选中进程
- 查找API
- 获取输入表
- 获取无效函数
- 删除无效函数
- 转存到文件
- 如果还是不行,则需要手动获取 RVA和Size,方法是:
- 在入口之后找一个函数的地址addr
- 使用 d addr, 找到地址数据
- 向上滚动到00000000处,记录当前地址addr1
- 向下滚动到00000000处,记录当前地址addr2
- RVA即是addr1
- Size即是addr2-addr1
- 如果修正完文件之后,还是运行报错,可以使用loadPE重建PE尝试一下