Mas0n
to be reverse engineer🐧
翻车鱼

CTF中简单壳的n种脱壳方法

CTF中简单壳的n种脱壳方法

在CTF中常遇到一些壳,影响分析。常见的简易壳有UPX,ASPACK

至于vmp,对于新手算是极其不友好了,听大佬们说3.0版本以下的vmp比较简单,我一个菜鸡听着只有一个想法:mad你说话好伤人啊 = =

当然,这篇文章应该算是记录一些常用的脱壳办法。

  • 单步分析法
  • 双断点分析法
  • ESP分析法(大名鼎鼎 ESP定律)
  • 异常分析法
  • SPX分析法(OD的功能,挺鸡肋,不介绍了)
  • ……

原理

找到 OEP,只需要找到程序入口点,使用一些alloc工具Dump即可。

单步分析法

  1. OD载入
  2. 不断单步向下(F8),让程序指令向下运行
  3. 遇到程序往回跳的(包括循环),在下一句代码处按F4(右健单击代码,选择断点——运行到所选) 
  4. 判断方法
    • 如果刚载入程序,在附近就有一个CALL的,我们就F7跟进去,这样很快能找到程序的OEP
    • 如果运行到某个CALL程序就运行的,就在这个CALL中F7进入
    • 一般有很大的跳转,比如jmp XXXXXX或者JE XXXXXX或者有RETE的一般很快能找到OEP。

双断点分析法

  1. OD载入
  2. 选项——调试选项——异常,把里面的忽略全部√上,CTRL+F2重载程序
  3. 按ALT+M,DA 打开Memory Map,找到第一个.rsrc区段,按F2下断点
  4. Shift + F9运行到断点
  5. Alt + M,打开Memory Map,找到.code区段,按F2下断点
  6. Shift +F9,到达OEP

ESP分析法

  1. OD载入
  2. 单步步入F8,寄存器窗口中ESP标红
  3. 在命令行下:
    • dd 00xxxxx(指在当前代码中的ESP地址,回车
    • 右键——数据窗口中跟随
  4. 随便选取几个字节,下硬件断点(类型都可)
  5. F9运行到断下
  6. F8,到达OEP

异常分析法

  1. OD载入
  2. 选项——调试选项——异常,把里面的√全部去掉,CTRL+F2重载 
  3. 在开头跳转处Shift + F9,记下从开始按F9到程序 运行的次数n,直到程序正常运行
  4. Ctrl + F2重载,n-1次 Shift + F9 
  5. 右下角的ESP堆栈选中 SE 句柄
  6. Ctrl+G,跳转到SE 句柄对应地址
  7. F2下断点,Shift + F9 断下 
  8. 去掉断点,F8向下走
  9. 到达OEP

后话

对于CTF而言,大多考察算法,也就是静态分析的能力,一般不需要修复让其正常运行。但在某些情况下,需要动态分析,那么修复就是必要的了。

本文链接:https://blog.shi1011.cn/ctf/919
本文采用 CC BY-NC-SA 4.0 Unported 协议进行许可

Mas0n

文章作者

发表回复

textsms
account_circle
email

翻车鱼

CTF中简单壳的n种脱壳方法
在CTF中常遇到一些壳,影响分析。常见的简易壳有UPX,ASPACK 至于vmp,对于新手算是极其不友好了,听大佬们说3.0版本以下的vmp比较简单,我一个菜鸡听着只有一个想法:mad你说话好伤人…
扫描二维码继续阅读
2021-02-19