【文章标题】: 双层UPX壳脱壳
【文章作者】: 大春
【软件名称】: 象棋助手
【软件大小】: 503KB
【下载地址】: 自己搜索下载
【加壳方式】: UPX
【编写语言】: VC++
【使用工具】: FLYOD,PEID,IMPROT REC
【操作平台】: XP SP3
【软件介绍】: 象棋助手
【作者声明】: 本人是新手,纯的,绝对是第一次脱壳,恩恩!!
--------------------------------------------------------------------------------
【详细过程】
在新手区,看见一位仁兄,脱这个壳当中遇到一些问题,在这里做个简单的脱壳+破解,望能给新手朋友们解惑,其实我也有
其他问题,想请教大神,但是找不到啊~~小小感叹一下,那么闲聊就到这里看是整题。
关于目标http://bbs.pediy.com/showthread.php?p=1091447#post1091447
这里有下载
PEID查壳,本人采用的是0.95版PEID查得PEBundle 2.0b5 - 3.0x -> Jeremy Collake 头一次见到。
再观其区段
UPX0
UPX1
.RSRC
.PE
UPX0
UPX1
.RSRC
PEBUNDLE
应该是里面一层UPX壳,外面再一层UPX壳。。不知道作者的目的,鄙人感觉一层和两层,对于UPX壳来说都是浮云。
那么FLYODBG载入吧,OD忽略所有异常
0051F000 > 9C pushfd
0051F001 60 pushad
0051F002 E8 02000000 call Me2QQZGX.0051F009
0051F007 33C0 xor eax,eax
0051F009 8BC4 mov eax,esp
停在这里了,不管她是不是UPX看到这个就应该想到ESP定律了(老牛B了,鄙人感觉仅次于牛顿定律)
那么F8走到CALL XXXXXXX也就是过了PUSHAD以后的第一行代码处,可以下硬件访问DWORD断点了,如何下?
在寄存器ESP上右键---数据窗口中跟随---数据窗口中点中第一行---右键断点--硬件访问--DWORD断点。
下好就可以F9了。断下来了,取消硬件访问断点。。。???如何取消????OD菜单中选调试---硬件断点--把能看见的断点
都取消。OK
0051F1A7 9D popfd
0051F1A8 68 F0774600 push Me2QQZGX.004677F0
0051F1AD C3 retn
停在这里,恩恩!第一层跑完了!!
F8单步,过了RETN后来到了这里
004677F0 60 pushad
004677F1 BE 00004400 mov esi,Me2QQZGX.00440000
004677F6 8DBE 0010FCFF lea edi,dword ptr ds:[esi+FFFC1000]
004677FC 57 push edi
这应该就是里面那层的UPX了,恩恩,再次联想到ESP定律,把上面的操作从来之。
F8到PUSHAD下面的MOV ESI,XXXX行 下硬件访问DWORD断点,
F9运行之,
断下来后,取消硬件访问断点,看代码
0046798F 8D4424 80 lea eax,dword ptr ss:[esp-80]
00467993 6A 00 push 0
00467995 39C4 cmp esp,eax
00467997 ^ 75 FA jnz short Me2QQZGX.00467993
00467999 83EC 80 sub esp,-80
0046799C - E9 8680FAFF jmp Me2QQZGX.0040FA27
呵呵,到了要把UPX妹子推倒的时候了,呵呵
F8单步走到JMP XXXXX处。F7跟进
恩恩!!!!呵呵到OEP了,从此UPX妹子对我们再没有秘密可言。
0040FA27 55 push ebp
0040FA28 8BEC mov ebp,esp
0040FA2A 6A FF push -1
0040FA2C 68 E8974100 push Me2QQZGX.004197E8
0040FA31 68 86FB4000 push Me2QQZGX.0040FB86 ; jmp to msvcrt._except_handler3
0040FA36 64:A1 00000000 mov eax,dword ptr fs:[0]
0040FA3C 50 push eax
注意:鄙人尝试了多次以后发现如果F7跟进JMP XXXX后来到代码处,看见的不是以上代码,而是各种DB DB 什么的,就需要从来
一次,估计因为没有解码,用IMPORT REC 修复后也无法运行,恩恩!!!!
到了OEP,脱壳之,脱壳完后用IMPROT REC修复选中进程,把OEP填上 0040FA27-00400000=FA27,点自动搜寻IAT,搜到以后
点显示无效指针,直接剪切掉。抓取目标,可以成功运行程序。
脱壳完成
破解,个人感觉无意义。有需要再说吧
--------------------------------------------------------------------------------
【经验总结】
注意:鄙人尝试了多次以后发现如果F7跟进JMP XXXX后来到代码处,看见的不是以上代码,而是各种DB DB 什么的,就需要
从来
一次,估计因为没有解码,用IMPORT REC 修复后也无法运行,恩恩!!!!
付上脱壳后的文件
--------------------------------------------------------------------------------
【版权声明】: 本文原创于大春, 转载请注明作者并保持文章的完整, 谢谢!
2012年07月31日 下午 08:50:02
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)