脱壳教程-1-upx,aspack, FSG,PECompact2.X脱壳

UPX是一种压缩壳,接下来介绍UPX脱壳的四种方式

1. 单步执行法

  1. OD加载程序,F8单步步入程序,向上返回的要按键F4跳转到向上返回的下一句语句
  2. 特征代码是 popad , 执行下一句语句,会有一个很大的跳转,执行次跳转语句,即会进入压缩程序的真正入口
  3. 右键点击 用OD脱壳调试进程,下面有方式一和方式二,任选一种,点击脱壳,保存到文件夹

2. 使用工具 - LoadPE

  1. 打开目标程序的进程
  2. 右键修正镜像大小
  3. 右键完整转存

3. 命令查找法(upx,aspack)

  1. 查找命令popad
  2. 参考单步执行法

4. esp定律法

  1. 单步执行一步
  2. 选择ESP的数值,右键数据窗口中跟随
  3. 数据窗口中选中ESP的数值,设置硬件访问断点
  4. 直接运行,断点处就是要跳转到程序真正入口的jmp语句
  5. 单步执行,进入真正的入口

5. 两次内存镜像法

  1. 打开查看内存窗口,或点击快捷键M进入内存查看
  2. 在 .rsrc 处(一般是第一个)设置访问断点,并运行至断点处
  3. 在 .text 处(一般是第一个)设置访问断点,并运行至断点处
  4. 接着线下就能进入真正的入口

6. 模拟跟踪(aspack压缩壳可用)

  1. 打开内存查看窗口,找到第一个 .aspack 区段, 记录最前面的地址为addr
  2. tc eip<addr
  3. 此方法很慢

7. SFX

  1. 打开 选项 - 调试设置
  2. 点击SFX,选中块方式跟踪真正入口处
  3. 点击重新运行程序
  4. 注意:此方法不一定准确

8. 手动修复IAT

  1. 通过OD找到脱壳后的程序入口
  2. 随便找一个call的地址addr,OD使用命令 d addr,向上滚动,一直到上面的地数值都是0000 0000,记录当前 addr1
  3. 然后向下滚动, 一直到下面都是0000,记录当前地址 addr2
  4. 打开 Import Reconstructor软件,在IAT的RVA填入addr1-基址,size填入addr2-addr1(或者直接填1000)
  5. 点击无效函数,右键剪切
  6. 转存到文件
    OD的数值窗口打开方法,数据窗口中,右键 - 长型 - 地址

9. 最后一次异常法;

  1. 取消所有异常。

  2. 记录跑飞次数 n

  3. 找SE句柄,即第 n-1 处

  4. 转到SE xxxx处,单步调试

10. BP VirtualFree

  1. BP VirtualFree,下断点
  2. SHIFT+F9,取消断点SHIFT+F9,取消断点
  3. ALT+F9
  4. 查找 push 8000(特征码),并运行到这
  5. 单步跟

11. bp VirtualAlloc

  1. bp VirtualAlloc 下断点
  2. SHIFT+F9运行SHIFT+F9运行
  3. 取消断点
  4. ALT+F9
  5. 向下拉,看到JMP。运行到这

12. at GetVersion

  1. at GetVersion 下断点
  2. 单步调

猜你喜欢

转载自blog.csdn.net/cs840610862/article/details/87927164