SFX 功能定位 OEP
对壳一无所知的情况下,通过简单的操作完成程序的脱壳,从而增加成就感,获得学习的乐趣及动力;
使用工具
- OllyDbg 1.10原版,简称
OD
; OD
汉化
和插件
均来自互联网;- 加壳工具使用了UPX,感谢 🙏 开源,以及 ASPACK:收费软件,可以试用;
- UnPackMe来自互联网,仅供学习使用;
- 文中特殊数字均是
HEX
,为了书写方便采用DEC
;
壳
壳(也叫“外壳”)是一种专用加密软件技术;
壳分为:压缩壳、加密壳、虚拟机保护软件;
分析思路
首先,将原始程序导入 OD,然后查看 OEP:
可以看到,原始程序的 OEP 是:00401000;
安装 UPX,然后打开并给 CM 加壳:
将 CM 拖入 UPX,选项默认,点击 RUN 即可;
不会生成新文件,而是直接在源程序上加壳,所以,记得备份源程序;
打开 OD 设置 SFX:
打开调试设置,在异常选项卡下,勾选全部选项,是为了防止 SFX 在自动分析中,中断在某个异常而导致失败;
然后,在 SFX 选项卡下,勾选
块方式跟踪
或字节方式跟踪
其一,它们的区别是查找速度与准确率,首先选择速度较快的块方式跟踪
;然后将加壳后的程序载入 OD,发现没有任何反应,即使切换 SFX 选项卡为
字节方式跟踪
也没有任何反应,这是为什么呢?原来,SFX 使用是有限制的:程序在载入 OD 后,入口点必须位于代码段(.code)之外,才会生效;
打开内存窗口:
发现当前程序的代码段起始位置为:00409000,大小为 1000,也就是说,当前程序代码段的范围是 00409000 ~ 00409FFF;
而程序载入 OD 后,EP(入口点)位于 00409BF0,处于代码段范围,所以 SFX 没有生效;
既然 UPX 加壳后入口点在代码段,那就切换加壳软件,使用 ASPACK;
安装 ASPACK 并打开,在打开文件选项卡下点击打开并选择原始程序,就会自动加壳:
ASPACK 同样不会生成新文件,所以,记得备份源程序;
首先,打开 OD 确认 SFX 以及异常选项卡设置 OK,然后将 ASPACK 加密后的程序导入 OD:
CM 运行起来了,然而,程序并非停留在 OEP 上,因为第 1 步的时候,已经确认了原始程序的 OEP 是:00401000;
看来 SFX 的
块方式跟踪
速度很快但是不够准确,不过,既然 CM 能够运行,也侧面说明了,ASPACK 加壳后,EP 位于代码段之外;切换 SFX 选项为
字节方式跟踪
并删除 OD 操作日志(UDD 文件夹内),重新将 ASPACK 加密后的程序导入 OD:此时 EP 停留在 00401000 上,也就 OEP 上,说明程序已经脱壳了;
加壳方式多种多样,这种脱壳方式可用范围应该很小,毕竟换了加壳工具后就失效了,不过,很振奋人心;