淡静 發表於 2008-10-8 19:04:31

手动脱壳入门第四篇Aspack 2.11

<br />

【脱文标题】 手动脱壳入门第四篇Aspack 2.11<br />

【脱文作者】 weiyi75 <br />

【作者邮箱】 weiyi75@sohu.com <br />

【作者主页】 Dfcg官方大本营 <br />

【使用工具】 Peid,Ollydbg<br />

【脱壳平台】 Win2K/XP<br />

【软件名称】 NOTEPAD<br />

【软件简介】 Aspack 2.11加壳Win98的记事本<br />

【软件大小】 19.6K<br />

【加壳方式】 ASPack 2.11 -&gt; Alexey Solodovnikov<br />

【脱壳声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享: <br />

好,我们这次脱Aspack2.11的壳看看它的特性。<br />

首先必须的工具要准备好,<br />

附件中壳为Peid测壳为Aspack2.11<br />

手动脱壳建议大家用Ollydbg,工作平台Win2000,WinXp,Win9x不推荐。<br />

手动脱壳时,用Olldbg载入程序,脱壳程序里面会有有好多循环。对付循环时,只能让程序往前运行,基本不能让它往回跳,要想法跳出循环圈。不要用Peid查入口,单步跟踪,提高手动找入口能力。<br />

用OD载入程序后。<br />

确定一个入口警告,Od提示程序加壳,选不继续分析。<br />

停在这里<br />

0040D001 60 pushad 我们先记住Aspack壳的加壳入口第一句是PUSHAD<br />

0040D002 E9 3D040000 jmp NOTEPAD.0040D444 语句结构和Aspack1.08大不相同,直接跳走。<br />

0040D444 81DD 719D255&gt;sbb ebp, 55259D71 到这里。<br />

0040D44A E8 14000000 call NOTEPAD.0040D463 比较近的Call,F7过,F8就跑飞。应该是变形的Jmp<br />

0040D44F 47 inc edi<br />

0040D450 DA7C6B E1 fidivr dword ptr ds:[ebx ebp*2-1&gt;<br />

0040D454 43 inc ebx<br />

0040D455 C547 33 lds eax, fword ptr ds:<br />

0040D458 EC in al, dx<br />

0040D459 46 inc esi<br />

0040D45A 2C D9 sub al, 0D9<br />

0040D45C 64:2C AF sub al, 0AF<br />

0040D45F 3F aas<br />

0040D460 53 push ebx<br />

0040D461 F8 clc<br />

0040D462 BF BA6755B6 mov edi, B65567BA<br />

0040D467 5A pop edx<br />

0040D463 BA 6755B65A mov edx, 5AB65567 到这里。<br />

0040D468 81D2 19620C9&gt;adc edx, 9A0C6219<br />

0040D46E 59 pop ecx<br />

0040D46F 80CE E3 or dh, 0E3<br />

0040D472 81C2 A9B064F&gt;add edx, F164B0A9<br />

0040D478 E9 14000000 jmp NOTEPAD.0040D491<br />

0040D491 51 push ecx ; NOTEPAD.0040D44F<br />

0040D492 BD 69806869 mov ebp, 69688069<br />

0040D497 0FBFEF movsx ebp, di<br />

0040D49A 5E pop esi<br />

0040D49B 66:8BFB mov di, bx<br />

0040D49E E9 14000000 jmp NOTEPAD.0040D4B7<br />

0040D4B7 81C6 3D82E11&gt;add esi, 14E1823D<br />

0040D4BD 80CE 31 or dh, 31<br />

0040D4C0 0FBFF9 movsx edi, cx<br />

0040D4C3 BD 114E421D mov ebp, 1D424E11<br />

0040D4C8 BB C3802D0F mov ebx, 0F2D80C3<br />

0040D4CD 66:8BE8 mov bp, ax<br />

0040D4D0 E9 14000000 jmp NOTEPAD.0040D4E9<br />

0040D4E9 81F2 83CB7C9&gt;xor edx, 9F7CCB83<br />

0040D4EF B2 D5 mov dl, 0D5<br />

0040D4F1 0FBFEA movsx ebp, dx<br />

0040D4F4 8186 AF7D1EE&gt;add dword ptr ds:,&gt;<br />

0040D4FE 81D5 99DD7E1&gt;adc ebp, 127EDD99<br />

0040D504 B2 C0 mov dl, 0C0<br />

0040D506 0FBFE9 movsx ebp, cx<br />

0040D509 43 inc ebx<br />

0040D50A 81D9 8F5710F&gt;sbb ecx, F910578F<br />

0040D510 81EE 0200000&gt;sub esi, 2<br />

0040D516 81EE 0200000&gt;sub esi, 2<br />

0040D51C 0FBFFA movsx edi, dx<br />

0040D51F B2 9B mov dl, 9B<br />

0040D521 81FB D1812D0&gt;cmp ebx, 0F2D81D1<br />

0040D527 ^ 0F85 C4FFFFF&gt;jnz NOTEPAD.0040D4F1 往回跳<br />

0040D52D 66:8BD5 mov dx, bp F4到这里<br />

0040D530 81D9 4192AA9&gt;sbb ecx, 90AA9241<br />

0040D536 ^ E9 00FFFFFF jmp NOTEPAD.0040D43B 又往回跳<br />

0040D53B A9 55C3500F test eax, 0F50C355 F4到这里不行,跑飞了。<br />

Ctrl F2从来。<br />

到不了下一句,没办法,让0040D536 ^ E9 00FFFFFF jmp NOTEPAD.0040D43B 往回跳<br />

0040D43B ^\E9 C7FBFFFF jmp NOTEPAD.0040D007 到这里,往回跳<br />

0040D440 0000 add byte ptr ds:, al 不能F4到这里,只能让它回跳。<br />

0040D001 N&gt; 60 pushad<br />

0040D002 E9 3D040000 jmp NOTEPAD.0040D444<br />

0040D007 E8 24040000 call NOTEPAD.0040D430 跳到这里,这不是入口处的第三条代码吗?<br />

0040D00C /EB 00 jmp short NOTEPAD.0040D00E 隔壁也跳。<br />

0040D00E \BB 30394400 mov ebx, 443930 <br />

0040D013 03DD add ebx, ebp<br />

0040D015 2B9D D03F440&gt;sub ebx, dword ptr ss:[ebp 443FD&gt;<br />

0040D01B 83BD FC49440&gt;cmp dword ptr ss:, 0<br />

0040D022 899D FC49440&gt;mov dword ptr ss:, e&gt;<br />

0040D028 0F85 6603000&gt;jnz NOTEPAD.0040D394<br />

0040D02E C785 3339440&gt;mov dword ptr ss:, 0<br />

0040D038 8D85 044A440&gt;lea eax, dword ptr ss:[ebp 444A0&gt;<br />

0040D03E 50 push eax<br />

0040D03F FF95 004B440&gt;call dword ptr ss: ; 注意: kernel32.GetModuleHandleA<br />

0040D045 8985 004A440&gt;mov dword ptr ss:, e&gt;<br />

0040D04B 8BF8 mov edi, eax<br />

0040D04D 8D9D 114A440&gt;lea ebx, dword ptr ss:[ebp 444A1&gt;<br />

0040D053 53 push ebx<br />

0040D054 50 push eax<br />

0040D055 FF95 FC4A440&gt;call dword ptr ss: ;注意: kernel32.GetProcAddress<br />

0040D05B 8985 FC3F440&gt;mov dword ptr ss:, e&gt;<br />

0040D061 8D9D 1E4A440&gt;lea ebx, dword ptr ss:[ebp 444A1&gt;<br />

0040D067 53 push ebx<br />

0040D068 57 push edi<br />

0040D069 FF95 FC4A440&gt;call dword ptr ss: 注意: kernel32.GetProcAddress<br />

0040D06F 8985 0040440&gt;mov dword ptr ss:, e&gt;<br />

0040D075 8D85 B539440&gt;lea eax, dword ptr ss:[ebp 4439B&gt;<br />

0040D07B FFE0 jmp eax ; NOTEPAD.0040D085<br />

0040D085 8B9D D83F440&gt;mov ebx, dword ptr ss:[ebp 443FD&gt;<br />

0040D08B 0BDB or ebx, ebx<br />

0040D08D 74 0A je short NOTEPAD.0040D099 跳<br />

0040D08F 8B03 mov eax, dword ptr ds:<br />

0040D091 8785 DC3F440&gt;xchg dword ptr ss:, &gt;<br />

0040D097 8903 mov dword ptr ds:, eax<br />

0040D099 8DB5 1940440&gt;lea esi, dword ptr ss:[ebp 44401&gt;<br />

0040D09F 833E 00 cmp dword ptr ds:, 0<br />

0040D0A2 0F84 1F01000&gt;je NOTEPAD.0040D1C7<br />

............................................<br />

0040D0F8 50 push eax<br />

0040D0F9 53 push ebx<br />

0040D0FA E8 DA060000 call NOTEPAD.0040D7D9 往回Call,F8放心过。<br />

0040D0FF 80BD 1040440&gt;cmp byte ptr ss:, 0<br />

0040D106 75 5E jnz short NOTEPAD.0040D166<br />

0040D108 FE85 1040440&gt;inc byte ptr ss:<br />

0040D10E 8B3E mov edi, dword ptr ds:<br />

0040D110 03BD FC49440&gt;add edi, dword ptr ss:[ebp 4449F&gt;<br />

0040D116 FF37 push dword ptr ds:<br />

0040D118 C607 C3 mov byte ptr ds:, 0C3<br />

0040D11B FFD7 call edi<br />

.................................................<br />

0040D141 43 inc ebx<br />

0040D142 49 dec ecx<br />

0040D143 ^ EB EB jmp short NOTEPAD.0040D130 往回跳。<br />

0040D145 8B06 mov eax, dword ptr ds: F4过。<br />

0040D147 EB 00 jmp short NOTEPAD.0040D149<br />

0040D149 803E 00 cmp byte ptr ds:, 0<br />

0040D14C ^ 75 F3 jnz short NOTEPAD.0040D141 往回跳。<br />

0040D14E 24 00 and al, 0 F4过。<br />

0040D150 C1C0 18 rol eax, 18<br />

0040D153 2BC3 sub eax, ebx<br />

0040D15A 83C6 04 add esi, 4<br />

0040D15D 83E9 05 sub ecx, 5<br />

0040D160 ^ EB CE jmp short NOTEPAD.0040D130 往回跳。<br />

0040D162 5B pop ebx F4 ; NOTEPAD.00401000<br />

0040D163 5E pop esi<br />

0040D164 59 pop ecx<br />

0040D165 58 pop eax<br />

0040D166 8BC8 mov ecx, eax<br />

0040D168 8B3E mov edi, dword ptr ds:<br />

0040D196 83C6 08 add esi, 8<br />

0040D199 833E 00 cmp dword ptr ds:, 0<br />

0040D19C ^ 0F85 26FFFFF&gt;jnz NOTEPAD.0040D0C8 往回跳<br />

0040D1A2 68 00800000 push 8000 F4 <br />

0040D1A7 6A 00 push 0<br />

0040D1A9 FFB5 F83F440&gt;push dword ptr ss:<br />

0040D1AF FF95 0040440&gt;call dword ptr ss:<br />

0040D25E /74 11 je short NOTEPAD.0040D271 跳。<br />

0040D260 |03F2 add esi, edx<br />

0040D271 8BB5 B139440&gt;mov esi, dword ptr ss:[ebp 4439B&gt;<br />

0040D277 8B95 FC49440&gt;mov edx, dword ptr ss:[ebp 4449F&gt;<br />

0040D27D 03F2 add esi, edx<br />

0040D27F 8B46 0C mov eax, dword ptr ds:<br />

0040D282 85C0 test eax, eax<br />

0040D284 0F84 0A01000&gt;je NOTEPAD.0040D394 <br />

0040D28F FF95 004B440&gt;call dword ptr ss: ; kernel32.GetModuleHandleA<br />

0040D295 85C0 test eax, eax<br />

0040D297 75 07 jnz short NOTEPAD.0040D2A0<br />

0040D299 53 push ebx<br />

0040D29A FF95 044B440&gt;call dword ptr ss:<br />

.............................................................<br />

0040D370 8907 mov dword ptr ds:, eax<br />

0040D372 8385 F03F440&gt;add dword ptr ss:, 4<br />

0040D379 ^ E9 32FFFFFF jmp NOTEPAD.0040D2B0 往回跳<br />

0040D37E 8906 mov dword ptr ds:, eax F4 ; NOTEPAD.004061CC<br />

0040D380 8946 0C mov dword ptr ds:, eax<br />

0040D383 8946 10 mov dword ptr ds:, eax<br />

0040D386 83C6 14 add esi, 14<br />

0040D389 8B95 FC49440&gt;mov edx, dword ptr ss:[ebp 4449F&gt;<br />

0040D38F ^ E9 EBFEFFFF jmp NOTEPAD.0040D27F 往回跳<br />

0040D394 8B85 AD39440&gt;mov eax, dword ptr ss:[ebp 4439A&gt;F4下来。<br />

0040D39A 50 push eax<br />

0040D39B 0385 FC49440&gt;add eax, dword ptr ss:[ebp 4449F&gt;<br />

0040D3A1 59 pop ecx<br />

0040D3A2 0BC9 or ecx, ecx<br />

0040D3A4 8985 E63C440&gt;mov dword ptr ss:, e&gt;<br />

0040D3AA 61 popad 看到这个,入口就在附近。<br />

0040D3AB /75 08 jnz short NOTEPAD.0040D3B5<br />

0040D3AD |B8 01000000 mov eax, 1<br />

0040D3B2 |C2 0C00 retn 0C<br />

0040D3B5 \68 CC104000 push NOTEPAD.004010CC 放入入口值4010CC<br />

0040D3BA C3 retn 返回。<br />

004010CC 55 push ebp 004010CC 程序跨段,并且经过了PoPad关键字。我们再这里用Od的Dump插件直接脱壳。<br />

004010CD 8BEC mov ebp, esp<br />

004010CF 83EC 44 sub esp, 44<br />

004010D2 56 push esi<br />

004010D3 FF15 E463400&gt;call dword ptr ds: ; kernel32.GetCommandLineA<br />

004010D9 8BF0 mov esi, eax<br />

004010DB 8A00 mov al, byte ptr ds:<br />

004010DD 3C 22 cmp al, 22<br />

重建输入表时,插件有两个选项。Method2重建输入表很快,脱壳后运行率高。Method1重建输入表慢,脱壳后运行率较低。不过本程序用Method2重建输入表无法运行,Method1重建输入表后程序可直接运行。

<br />
頁: [1]
查看完整版本: 手动脱壳入门第四篇Aspack 2.11