调试环境:WinXP、Ollydbg、PEiD、LordPE、ImportREC、WinHex
―――――――――――――――――――――――――――――――――
一、脱壳
005A0020 B9 B6005A00 mov ecx,Skype.005A00B6//进入OD后停在这
005A0025 B8 39005A00 mov eax,Skype.005A0039
005A002A 29C1 sub ecx,eax
005A002C BB 12120320 mov ebx,20031212
005A0031 301C01 xor byte ptr ds:[ecx+eax],bl
005A0034 C1C3 03 rol ebx,3
005A0037 E2 F8 loopd short Skype.005A0031
005A0039 BA 31164000 mov edx,Skype.00401631//F4过这个解码循环
很短的“壳”,可能是作者自己写的。
直接去下面的ret处下断,F9运行,中断后就走到OEP了。
――――――――――――――――――――――――
插曲:AnTi SoftIce
用Ollydbg脱壳可以不管他
005A0075 E8 26010000 call Skype.005A01A0//检测 SoftIce
005A007A 84C0 test al,al
005A007C 74 1C je short Skype.005A009A
005A007E 6A 00 push 0
005A0080 FF35 50BCA900 push dword ptr ds:[A9BC50]
005A0086 FF35 54BCA900 push dword ptr ds:[A9BC54]
005A008C 6A 00 push 0
005A008E E8 7982E6FF call <jmp.&user32.MessageBoxA>//警告发现
005A0093 6A 01 push 1
005A0095 E8 D276E6FF call <jmp.&kernel32.ExitProcess>//OVER
――CreateFileW――
005A0129 E8 D675E6FF call <jmp.&kernel32.CreateFileW>
005A012E 8945 F4 mov dword ptr ss:[ebp-C],eax
005A0131 837D F4 00 cmp dword ptr ss:[ebp-C],0
005A0135 76 15 jbe short Skype.005A014C
005A0137 837D F4 FF cmp dword ptr ss:[ebp-C],-1
005A013B 73 0F jnb short Skype.005A014C
005A013D C645 FB 01 mov byte ptr ss:[ebp-5],1
005A0141 8B45 F4 mov eax,dword ptr ss:[ebp-C]
005A0144 50 push eax
005A0145 E8 6A75E6FF call <jmp.&kernel32.CloseHandle>
005A014A EB 04 jmp short Skype.005A0150
005A00C4 5C 00 5C 00 2E 00 5C 00 4E 00 54 00 49 00 43 00 \.\...\.N.T.I.C.
005A00D4 45 00 00 00 5C 00 5C 00 2E 00 5C 00 53 00 69 00 E...\.\...\.S.i.
005A00E4 77 00 76 00 69 00 64 00 00 00 00 00 5C 5C 2E 5C w.v.i.d.....\\.\
005A00F4 53 49 43 45 00 00 00 00 5C 5C 2E 5C 53 69 77 76 SICE....\\.\Siwv
005A0104 69 64 00 00 4E 00 55 00 4C 00 00 id..N.U.L..
――――――――――――――――――――――――
005A009A BA 011E1600 mov edx,161E01
005A009F 81C2 F74F9300 add edx,Skype.00934FF7
//EDX=00161E01 + 00934FF7=00A96DF8 OEP值 ★
005A00A5 52 push edx
005A00A6 BF 20005A00 mov edi,Skype.<ModuleEntryPoint>
005A00AB B9 B6005A00 mov ecx,Skype.005A00B6
005A00B0 29F9 sub ecx,edi
005A00B2 31C0 xor eax,eax
005A00B4 F3:AA rep stos byte ptr es:[edi]//清扫
005A00B6 E8 113F0100 call Skype.005B3FCC
005A00BB E8 B4FEFFFF call Skype.0059FF74
005A00C0 C3 retn//飞向光明之巅!:-)
00A96DF8 55 push ebp//OEP ★ DumP ★
00A96DF9 8BEC mov ebp,esp
00A96DFB B9 0A000000 mov ecx,0A
00A96E00 6A 00 push 0
00A96E02 6A 00 push 0
00A96E04 49 dec ecx
00A96E05 75 F9 jnz short Skype.00A96E00
00A96E07 51 push ecx
00A96E08 53 push ebx
00A96E09 56 push esi
00A96E0A 57 push edi
00A96E0B B8 2067A900 mov eax,Skype.00A96720
00A96E10 E8 FF0597FF call Skype.00407414
用ImportREC修复输入表。
OEP: 00696DF8,IATRVA: 006A822C,IATSize: 00000A74
―――――――――――――――――――――――――――――――――
二、自校验
发现程序有Overlay数据,地址908600直至末尾,发现不补上这段数据也可以运行。
还是用WinHex复制、写入脱壳后的程序吧。
BP MessageBoxA就可以拦到出错的对话框了
0059EA70 8B0D C8BAA900 mov ecx,dword ptr ds:[A9BAC8]
0059EA76 8B15 B4BAA900 mov edx,dword ptr ds:[A9BAB4]
0059EA7C A1 B0BAA900 mov eax,dword ptr ds:[A9BAB0]
0059EA81 E8 96110000 call dumped_1.0059FC1C
0059EA86 8945 F8 mov dword ptr ss:[ebp-8],eax
0059EA89 C645 FF 01 mov byte ptr ss:[ebp-1],1
0059EA8D 8B45 F8 mov eax,dword ptr ss:[ebp-8]
0059EA90 3B05 ECBAA900 cmp eax,dword ptr ds:[A9BAEC]//改为JMP ★
0059EA96 74 45 je short dumped_1.0059EADD
0059EA98 A1 C8BAA900 mov eax,dword ptr ds:[A9BAC8]
0059EA9D 8B15 CCBAA900 mov edx,dword ptr ds:[A9BACC]
0059EAA3 2BD0 sub edx,eax
0059EAA5 7C 18 jl short dumped_1.0059EABF
0059EAA7 42 inc edx
0059EAA8 8955 F0 mov dword ptr ss:[ebp-10],edx
0059EAAB 8945 F4 mov dword ptr ss:[ebp-C],eax
0059EAAE 8B45 F4 mov eax,dword ptr ss:[ebp-C]
0059EAB1 C700 55000000 mov dword ptr ds:[eax],55
0059EAB7 FF45 F4 inc dword ptr ss:[ebp-C]
0059EABA FF4D F0 dec dword ptr ss:[ebp-10]
0059EABD 75 EF jnz short dumped_1.0059EAAE
0059EABF 6A 00 push 0
0059EAC1 68 3CEB5900 push dumped_1.0059EB3C ; ASCII "Skype"
0059EAC6 68 44EB5900 push dumped_1.0059EB44 ; ASCII "Error(9901): Unfortunately the Skype executable is corrupted! Please re-install!"
0059EACB 6A 00 push 0
0059EACD E8 3298E6FF call <jmp.&user32.MessageBoxA>//错误警告
0059EAD2 6A 00 push 0
0059EAD4 E8 8398E6FF call <jmp.&user32.PostQuitMessage>
0059EAD9 C645 FF 00 mov byte ptr ss:[ebp-1],0
0059EADD E8 0A130000 call dumped_1.0059FDEC
0059EAE2 8945 F8 mov dword ptr ss:[ebp-8],eax
0059EAE5 8B45 F8 mov eax,dword ptr ss:[ebp-8]
0059EAE8 3B05 F4BAA900 cmp eax,dword ptr ds:[A9BAF4]
0059EAEE 74 45 je short dumped_1.0059EB35
―――――――――――――――――――――――――――――――――
, _/
/| _.-~/ \_ , 青春都一晌
( /~ / \~-._ |\
`\\ _/ \ ~\ ) 忍把浮名
_-~~~-.) )__/;;,. \_ //'
/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-. 换了破解轻狂
`~ _( ,_..--\ ( ,;'' / ~-- /._`\
/~~//' /' `~\ ) /--.._, )_ `~
" `~" " `" /~'`\ `\\~~\
" " "~' ""
Cracked By 巢水工作坊――fly [FCG][NUKE][DCM]
2004-07-26 01:00