附件:unpackme.rar
【破解作者】 layper
【作者邮箱】 layper2002@yahoo.com.cn
【作者主页】
254K9s2c8@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日开班!