【文章标题】: 轻松手动脱壳ASPack 2.12 -> Alexey Solodovnikov
【文章作者】: cnstars
【作者邮箱】: cnstars@21cn.com
【作者QQ号】: 8202655
【软件名称】: *******投票机
【软件大小】: 0.835M
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: ASPack 2.12 -> Alexey Solodovnikov
【编写语言】: VB
【使用工具】: OD、PEID
【操作平台】: WINXP+ SP2
【软件介绍】: *******投票机软件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【方法介绍】: 通常采用ASPACK自动脱壳机和OLLYDBG手动脱壳
【经验总结】: 动态调试时找到大的跳转即为OEP,然后DUMP,用ImportREC v1.6F修复输入表IAT即可。
1、在ASPACK中PUSGAD 与POPAD 成对,找到POPAD即离OEP 很近。
2、向未执行过的代码跳的语句按F8,往已执行过的代码跳的语句在下一句处按F4。脱壳过程中一定不能让它往执行过的代码区跳,想办法跳出循环圈,在回跳语句的下一句处按F4跳出。
--------------------------------------------------------------------------------
【详细过程】
脱壳前先用PEID查壳,得出为ASPack 2.12 -> Alexey Solodovnikov加壳类型。使用OD脱壳可增强手动脱能力
00452001 > 60 pushad ; pushhad关键字 F8跳过
00452002 E8 03000000 call 0045200A ; 关键CALL F7进入
00452007 - E9 EB045D45 jmp 45A224F7
0045200C 55 push ebp
0045200D C3 retn
=====进入call 0045200A代码区=====
00452008 /EB 04 jmp short 0045200E
0045200A 5D pop ebp ; fjsdmp-1.00452007(按F8,向前跳的按F8,往后跳的在下一句按F4)
0045200B 45 inc ebp
0045200C 55 push ebp
0045200D C3 retn ;第一次返回时,跳转到00452008
0045200E E8 01000000 call 00452014 ;只有00452002和此处是关键CALL按F7进入,其他F8跳过
………………………进CALL后一路F8下来……………………
0045212D 0BC9 or ecx, ecx
0045212F 74 2E je short 0045215F
00452131 78 2C js short 0045215F
00452133 AC lods byte ptr [esi]
00452134 3C E8 cmp al, 0E8
00452136 74 0A je short 00452142
00452138 EB 00 jmp short 0045213A
0045213A 3C E9 cmp al, 0E9
0045213C 74 04 je short 00452142
0045213E 43 inc ebx
0045213F 49 dec ecx
00452140 ^ EB EB jmp short 0045212D ; 不能让他朝回跳到0045212D,要在下一句处下断按F4
00452142 8B06 mov eax, [esi] ; 按F4
00452144 EB 00 jmp short 00452146
00452146 803E 05 cmp byte ptr [esi], 5
00452149 ^ 75 F3 jnz short 0045213E ; 不能让他朝回跳到0045213E,要在下一句处下断按F4
0045214B 24 00 and al, 0 ; 按F4
0045214D C1C0 18 rol eax, 18
00452150 2BC3 sub eax, ebx
00452152 8906 mov [esi], eax
00452154 83C3 05 add ebx, 5
00452157 83C6 04 add esi, 4
0045215A 83E9 05 sub ecx, 5
0045215D ^ EB CE jmp short 0045212D ; 不能让他朝回跳到0045212D,要在下一句处下断按F4
0045215F 5B pop ebx ; 按F4
00452160 5E pop esi
00452161 59 pop ecx
00452162 58 pop eax
00452163 EB 08 jmp short 0045216D
………………………进JMP后一路F8下来……………………
0045216D 8BC8 mov ecx, eax
0045216F 8B3E mov edi, [esi]
00452171 03BD 22040000 add edi, [ebp+422]
00452177 8BB5 52010000 mov esi, [ebp+152]
0045217D C1F9 02 sar ecx, 2
00452180 F3:A5 rep movs dword ptr es:[edi], dword p>
00452182 8BC8 mov ecx, eax
00452184 83E1 03 and ecx, 3
00452187 F3:A4 rep movs byte ptr es:[edi], byte ptr>
00452189 5E pop esi
0045218A 68 00800000 push 8000
0045218F 6A 00 push 0
00452191 FFB5 52010000 push dword ptr [ebp+152]
00452197 FF95 51050000 call [ebp+551]
0045219D 83C6 08 add esi, 8
004521A0 833E 00 cmp dword ptr [esi], 0
004521A3 ^ 0F85 1EFFFFFF jnz 004520C7 ; 不能让他朝回跳到004520C7,要在下一句处下断按F4
004521A9 68 00800000 push 8000 ; 按F4下断
………………………进PUSH后一路F8下来……………………
00452305 /75 6F jnz short 00452376
00452307 |F7C3 00000080 test ebx, 80000000
0045230D |75 19 jnz short 00452328
0045230F |57 push edi
00452310 |8B46 0C mov eax, [esi+C]
00452313 |0385 22040000 add eax, [ebp+422]
00452319 |50 push eax
0045231A |53 push ebx
0045231B |8D85 75040000 lea eax, [ebp+475]
00452321 |50 push eax
00452322 |57 push edi
00452323 |E9 98000000 jmp 004523C0
00452328 |81E3 FFFFFF7F and ebx, 7FFFFFFF
0045232E |8B85 26040000 mov eax, [ebp+426]
00452334 |3985 45050000 cmp [ebp+545], eax
0045233A |75 24 jnz short 00452360
0045233C |57 push edi
0045233D |8BD3 mov edx, ebx
0045233F |4A dec edx
00452340 |C1E2 02 shl edx, 2
00452343 |8B9D 45050000 mov ebx, [ebp+545]
00452349 |8B7B 3C mov edi, [ebx+3C]
0045234C |8B7C3B 78 mov edi, [ebx+edi+78]
00452350 |035C3B 1C add ebx, [ebx+edi+1C]
00452354 |8B0413 mov eax, [ebx+edx]
00452357 |0385 45050000 add eax, [ebp+545]
0045235D |5F pop edi
0045235E |EB 16 jmp short 00452376
00452360 |57 push edi
00452361 |8B46 0C mov eax, [esi+C]
00452364 |0385 22040000 add eax, [ebp+422]
0045236A |50 push eax
0045236B |53 push ebx
0045236C |8D85 C6040000 lea eax, [ebp+4C6]
00452372 |50 push eax
00452373 |57 push edi
00452374 |EB 4A jmp short 004523C0
00452376 \8907 mov [edi], eax
00452378 8385 49050000 0>add dword ptr [ebp+549], 4
0045237F ^ E9 32FFFFFF jmp 004522B6 ; 不能让他朝回跳到004522B6,要在下一句处下断按F4
00452384 8906 mov [esi], eax ; 按F4下断
00452386 8946 0C mov [esi+C], eax
00452389 8946 10 mov [esi+10], eax
0045238C 83C6 14 add esi, 14
0045238F 8B95 22040000 mov edx, [ebp+422]
00452395 ^ E9 EBFEFFFF jmp 00452285 ; 不能让他朝回跳到00452285,要在下一句处下断按F4
0045239A B8 842F0000 mov eax, 2F84 ; 按F4下断
0045239F 50 push eax
004523A0 0385 22040000 add eax, [ebp+422]
004523A6 59 pop ecx
004523A7 0BC9 or ecx, ecx
004523A9 8985 A8030000 mov [ebp+3A8], eax
004523AF 61 popad
004523B0 75 08 jnz short 004523BA
004523B2 |B8 01000000 mov eax, 1
004523B7 |C2 0C00 retn 0C
004523BA \68 842F4000 push 00402F84 ; ASCII h@,关键字请注意
004523BF C3 retn ; F8后跳到入口点00402F84
………………………进RETN后跳到原码入口点……………………
00402F84 ? 68 F8D64000 push 0040D6F8 ;入口点停在此处可以脱了
(点右键后选DUMP_Debugger_process脱壳调试进程,再点击DUMP脱壳。下面的我相信都会了)
00402F89 E8 db E8
00402F8A EE db EE
00402F8B FF db FF
用PEID查脱。显示PowerBASIC/Win 8.00,大功告成!!我也是个菜鸟!!写的不好,仅仅以些贴写给刚入门的菜们!!
--------------------------------------------------------------------------------
【经验总结】
,慢慢就会掌握OD的使用技巧。只在有信心,难学的东西都会学会。想信自已,自已搞不定的还有看学里的前辈给我们指导!第一次写关于脱壳的文章写的有点不好,请大家批评指出。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年1月28日 20:54:17
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!