今天刚刚写的,也是在这里的处女作^^,不知道有没有用处,只是觉得过程中还是学了不少东西。文件下载到我的blog看看吧:
http://hi.baidu.com/idreamer28/blog/item/8f0ed51777451d0fc83d6d6d.html
如果管理员觉得太简单就删了吧。。。
新手脱壳,UPX Modified Stub -> Farb-rausch Consumer Consulting
Author: IDreamer
Date Time: 2008.8.29
Original File: fr08v101.exe (65,024 Byte)
Unpack File: u.exe (3,323,392 Byte)
Tools: PEiD v0.94
OllyDbg 1.10 with OllyDump V2.21 (flyODBG)
脱壳目标是 fr08 (http://www.theproduct.de/),计算机多媒体程序的一个奇迹作品,传说把2G的数据压缩到64KB。由于想进一步分析程序的奥秘,所以分析开始了。。。
之前学习了两篇文章,建议大家看看;如果想深入了解脱壳和其他加密/解密内容,可以看 看雪(http://www.pediy.com/)的《加密与解密》,这也是快速学习汇编语言的一种途径。
http://hi.baidu.com/biweilun/blog/item/bb2b53fb01da42106d22eb0a.html
http://www.pediy.com/bbshtml/bbs6/pediy6083.htm
针对目标的脱壳步骤:
1. 用PEiD打开目标文件,显示有壳保护/压缩,这也很容易理解,毕竟是追求Min Size的艺术品。显示壳为UPX Modified Stub -> Farb-rausch Consumer Consulting。
2. 用OllyDbg打开目标文件,第一行代码如下:
007296B0 fr08v101.<Mod> 60 pushad
007296B1 BE 00A07100 mov esi,fr08v101.0071A000
007296B6 8DBE 0070CEFF lea edi,dword ptr ds:[esi+FFCE7000]
..................
3. 利用“ESP定律”查找OEP,参考网上的一篇文章发现如果程序就一个壳的话,上面的pushad会有一个popad对应之,当然这只是表面现象,就提论题了。在Olydbg CPU窗口/反汇编中 搜索/指令,输入popad,定位到下面代码:
007297D8 61 popad
007297D9 - E9 FA03CEFF jmp fr08v101.00409BD8
007297DE 0000 add byte ptr ds:[eax],al
..................
我们暂且断定popad就是所谓的OEP,其实对于类似情况的壳,不知道这些好像也无所谓,比如我还没学会。
4. 在007297D8之处按F2或双击十六进制,设置断点;按F9或点击工具栏上的运行按钮,运行程序到断点。这样做的目的就是让程序自己给自己脱壳。
5. 导出脱壳后的程序。一个EXE程序不仅仅是导出的指令区块,还有资源和头部分。这里用Ollydbg的OllyDump插件自动导出有效的EXE。选择 插件/OllyDump/脱壳在当前调试的进程,点脱壳之保存EXE文件。最后测试一下脱壳的EXE文件就可以了。
注:fr08v101.udd为Ollydbg的工程文件,如果自己找不到OEP可以放到Ollydbg的udd目录中,看看注释的地方。影片Untitled.exe是用Blueberry Software的BB FlashBack录制的。
总结:这里仅仅介绍了很容易脱的一个壳,UPX只是压缩用的。文章只针对这个程序进行,对于其他程序也未必如此简单。如需讨论,请联系:houxiao86@yahoo.com.cn (www.houxiao.org)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)