首页
社区
课程
招聘
PE Lock NT 2.04 -> :MARQUiS:脱壳
发表于: 2005-7-28 22:50 3924

PE Lock NT 2.04 -> :MARQUiS:脱壳

2005-7-28 22:50
3924
附件:unpackme.rar
【破解作者】 layper
【作者邮箱】 layper2002@yahoo.com.cn
【作者主页】 4d1K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3k6J5k6h3f1@1i4K6u0W2k6g2)9J5k6o6p5$3z5q4)9J5k6h3y4F1i4K6u0r3L8r3q4&6M7r3g2J5
【使用工具】 PEID,OD,
【破解平台】 Win9x/NT/2000/XP
【软件名称】 UnpackMe
【软件大小】 22kb
【加壳方式】 PE Lock NT 2.04 -> :MARQUiS:
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】

前几天在网上找了这么一个练习,查壳是PE Lock NT 2.04 -> :MARQUiS:,这种壳没玩过,想进一步提高自己的脱壳
水平,看看这个壳的流程,我先是对这个壳单步跟踪了一遍,看起来不是很难,现把我的脱壳总结如下:
OD载入,隐藏OD
00407000 > /EB 03           jmp short UnpackMe.00407005    ;停在这里
00407002   |CD20 C71EEB03   vxdcall 3EB1EC7
00407008    CD20 EA9CEB02   vxdjump 2EB9CEA
0040700E    EB 01           jmp short UnpackMe.00407011
00407010    EB 01           jmp short UnpackMe.00407013

经过跟踪这个壳有普通断点检测,所以在命令行下bp断点行不通了
Ctrl+G表达输入VirtualProtect后enter来到
77E4169E >  55              push ebp                ;找到这里
77E4169F    8BEC            mov ebp,esp
77E416A1    FF75 14         push dword ptr ss:[ebp+14]
77E416A4    FF75 10         push dword ptr ss:[ebp+10]
77E416A7    FF75 0C         push dword ptr ss:[ebp+C]
77E416AA    FF75 08         push dword ptr ss:[ebp+8]
77E416AD    6A FF           push -1
77E416AF    E8 A4BB0100     call kernel32.VirtualProtectEx
77E416B4    5D              pop ebp
77E416B5    C2 1000         retn 10                      ;F4直接下来,Alt+F9返回

00407B0C   /EB 02           jmp short UnpackMe.00407B10        ;返回到这里
00407B0E   |CD20 EB02CD20   vxdcall 20CD02EB
00407B14    8BBD 58A70400   mov edi,dword ptr ss:[ebp+4A758]
00407B1A    EB 02           jmp short UnpackMe.00407B1E
00407B1C    C785 8B473CEB 0>mov dword ptr ss:[ebp+EB3C478B],6920CD0>

接下来crc效验

Ctrl+F查找命令cmp dword ptr ds:[ecx],eax找到以下地方

00408EB9    3901            cmp dword ptr ds:[ecx],eax    ;F4来到这里,F8走
00408EBB    EB 03           jmp short UnpackMe.00408EC0   ;跳
00408EBD    3A4D 3A         cmp cl,byte ptr ss:[ebp+3A]
00408EC0    75 20           jnz short UnpackMe.00408EE2
00408EC2    EB 02           jmp short UnpackMe.00408EC6

00407B10   /EB 02           jmp short UnpackMe.00407B14   ;跳

00407B14    8BBD 58A70400   mov edi,dword ptr ss:[ebp+4A758]        ; UnpackMe.00400000
00407B1A    EB 02           jmp short UnpackMe.00407B1E

00407B1E    8B47 3C         mov eax,dword ptr ds:[edi+3C]
00407B21    EB 03           jmp short UnpackMe.00407B26
…………………
00408627    E8 03000000     call UnpackMe.0040862F        ;F7进后,F8继续
…………………
00408640    E8 00000000     call UnpackMe.00408645        ;F7
00408645    EB 03           jmp short UnpackMe.0040864A   ;F8
…………………
00408667    300F            xor byte ptr ds:[edi],cl      ;走到这里
00408669    EB 01           jmp short UnpackMe.0040866C

Ctrl+F查找命令xor byte ptr ds:[edi],cl
004086B7    300F            xor byte ptr ds:[edi],cl       ;F4下来,F8继续
004086B9    EB 04           jmp short UnpackMe.004086BF

004086D4  ^\75 D7           jnz short UnpackMe.004086AD    ;往回跳
004086D6    EB 02           jmp short UnpackMe.004086DA    ;F4下来,F8继续,逢必进
…………………
0040870D    9D              popfd   
0040870E    C3              retn

00404000    60              pushad
00404001    E8 2B000000     call UnpackMe.00404031

能走到这里证明crc效验没有发挥作用了
Alt+M打开内存窗口在00401000处F2,Shift+F9运行
0040499A    3107            xor dword ptr ds:[edi],eax     ;断在这里
0040499C    EB 02           jmp short UnpackMe.004049A0

Ctrl+S查找命令序列
rep stos byte ptr es:[edi]
popad

来到
00404C35    F3:AA           rep stos byte ptr es:[edi]  ;找到这里,F4下来,F8继续
00404C37    61              popad
00404C38    EB 01           jmp short UnpackMe.00404C3B  ;跳

00404C3B  - FFE0            jmp eax                                 ; UnpackMe.00401128这里就跳到OEP处了

00401128    68 B8124000     push UnpackMe.004012B8                  ;OEP
0040112D    E8 F0FFFFFF     call UnpackMe.00401122
00401132    0000            add byte ptr ds:[eax],al
00401134    0000            add byte ptr ds:[eax],al
00401136    0000            add byte ptr ds:[eax],al
00401138    3000            xor byte ptr ds:[eax],al
0040113A    0000            add byte ptr ds:[eax],al

直接用OD脱壳方式1脱壳就能运行了,脱完后看看大虾们的文章,应该有IAT修复和修复stolen code,这个脱后
直接可以运行了,可能是因为它是用VB写的缘故吧?:)

--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
大多数壳对vb保护都不好.另外,你没有修改代码,处理crc校验做什么?
2005-7-28 23:05
0
游客
登录 | 注册 方可回帖
返回