首页
社区
课程
招聘
[原创]双层UPX脱壳
发表于: 2012-7-31 21:01 11986

[原创]双层UPX脱壳

2012-7-31 21:01
11986
【文章标题】: 双层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

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 249
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢楼主的精彩文章,虽然UPX很老套。
2012-7-31 21:53
0
雪    币: 2956
活跃值: (66)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
64位win7下不运行?
2012-8-1 03:36
0
雪    币: 63
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
win7没试过,但XP应该可以运行
2012-8-1 10:40
0
雪    币: 63
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
对了,你得有源程序,才可运行的,源程序上面教程里有下载
2012-8-1 10:41
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你这好像有问题吧,点登录后就闪退!你试过了吗?
2012-9-11 01:45
0
雪    币: 63
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
你下了源程序吗?然后用脱壳后的文件应该好使啊,本人脱壳破解后亲测过,好使
2012-9-11 17:16
0
游客
登录 | 注册 方可回帖
返回
//