能力值:
( LV2,RANK:10 )
|
-
-
2 楼
你先斷在GetModuleHandleA
/*7C80B736*/ cmp dword ptr ss:[ebp+8],0
/*7C80B73A*/ je short 7C80B754
/*7C80B73C*/ push dword ptr ss:[ebp+8]
我是都斷在je short 7C80B754這個地方
然後看堆棧,直到出現VirtualAlloc,在一次F9應該是Virtual Free,在一次就會沒有標誌,到這裡之後按alt+F9
你應該會到一個類似
/*119F457*/ call dword ptr ds:[124B090]
/*119F45D*/ mov edx,dword ptr ss:[ebp-8]
/*119F460*/ mov ecx,dword ptr ds:[1272C0C]
/*119F466*/ mov dword ptr ds:[ecx+edx*4],eax
/*119F469*/ mov edx,dword ptr ss:[ebp-8]
/*119F46C*/ mov eax,dword ptr ds:[1272C0C]
/*119F471*/ cmp dword ptr ds:[eax+edx*4],0
/*119F475*/ jnz short 0119F4D6
/*119F477*/ mov ecx,dword ptr ss:[ebp-4]
/*119F47A*/ mov edx,dword ptr ds:[ecx+8]
/*119F47D*/ and edx,2
/*119F480*/ je short 0119F4BD
/*119F482*/ mov eax,9
/*119F487*/ shl eax,2
/*119F48A*/ mov ecx,dword ptr ds:[126FF4C]
/*119F490*/ mov edx,dword ptr ds:[126FF4C]
/*119F496*/ mov esi,dword ptr ds:[126FF4C]
/*119F49C*/ mov ebx,dword ptr ds:[esi+10]
/*119F49F*/ xor ebx,dword ptr ds:[edx+88]
/*119F4A5*/ xor ebx,dword ptr ds:[ecx+eax]
/*119F4A8*/ and ebx,10
/*119F4AB*/ neg ebx
/*119F4AD*/ sbb ebx,ebx
/*119F4AF*/ neg ebx
/*119F4B1*/ movzx eax,bl
/*119F4B4*/ test eax,eax
/*119F4B6*/ jnz short 0119F4BD
/*119F4B8*/ jmp 0119F3D2
/*119F4BD*/ lea ecx,dword ptr ss:[ebp-110]
/*119F4C3*/ push ecx
/*119F4C4*/ call dword ptr ds:[124B098]
/*119F4CA*/ mov edx,dword ptr ss:[ebp-8]
/*119F4CD*/ mov ecx,dword ptr ds:[1272C0C]
/*119F4D3*/ mov dword ptr ds:[ecx+edx*4],eax
/*119F4D6*/ mov edx,dword ptr ss:[ebp-8]
/*119F4D9*/ mov eax,dword ptr ds:[1272C0C]
/*119F4DE*/ cmp dword ptr ds:[eax+edx*4],0
/*119F4E2*/ jnz short 0119F4E9
/*119F4E4*/ jmp 0119F3D2
這樣子的代碼段
接著我們要找magic jump,也就是加密iat的關鍵jmp
/*119F4C4*/ call dword ptr ds:[124B098]
/*119F4CA*/ mov edx,dword ptr ss:[ebp-8]
/*119F4CD*/ mov ecx,dword ptr ds:[1272C0C]
/*119F4D3*/ mov dword ptr ds:[ecx+edx*4],eax
/*119F4D6*/ mov edx,dword ptr ss:[ebp-8]
/*119F4D9*/ mov eax,dword ptr ds:[1272C0C]
/*119F4DE*/ cmp dword ptr ds:[eax+edx*4],0
/*119F4E2*/ jnz short 0119F4E9 ;這個就是magic jmp,我們把它改成nop
/*119F4E4*/ jmp 0119F3D2
接著 斷在 CreateThread
或者輸入bp CreateThread也可以
小弟都是斷在CreateThread的末端
然後alt+f9應該會回到程式領空
接著就慢慢單步走
retn之後,應該會看到這樣的代碼
/*11BCFB2*/ jnz short 011BCFF7
/*11BCFB4*/ mov ecx,dword ptr ds:[126FF4C]
/*11BCFBA*/ mov edx,dword ptr ds:[126FF4C]
/*11BCFC0*/ mov eax,dword ptr ds:[ecx+2C]
/*11BCFC3*/ xor eax,dword ptr ds:[edx+88]
/*11BCFC9*/ mov ecx,dword ptr ds:[126FF4C]
/*11BCFCF*/ xor eax,dword ptr ds:[ecx+60]
/*11BCFD2*/ mov dword ptr ss:[ebp-20],eax
/*11BCFD5*/ mov edx,dword ptr ss:[ebp+8]
/*11BCFD8*/ mov eax,dword ptr ds:[edx+18]
/*11BCFDB*/ push eax
/*11BCFDC*/ mov ecx,dword ptr ss:[ebp+8]
/*11BCFDF*/ mov edx,dword ptr ds:[ecx+14]
/*11BCFE2*/ push edx
/*11BCFE3*/ mov eax,dword ptr ss:[ebp+8]
/*11BCFE6*/ mov ecx,dword ptr ds:[eax+10]
/*11BCFE9*/ push ecx
/*11BCFEA*/ mov edx,dword ptr ss:[ebp-C]
/*11BCFED*/ sub edx,dword ptr ss:[ebp-20]
/*11BCFF0*/ call edx
/*11BCFF2*/ mov dword ptr ss:[ebp-4],eax
/*11BCFF5*/ jmp short 011BD042
/*11BCFF7*/ mov eax,dword ptr ss:[ebp+8]
/*11BCFFA*/ cmp dword ptr ds:[eax],1
/*11BCFFD*/ jnz short 011BD042
/*11BCFFF*/ mov ecx,dword ptr ds:[126FF4C]
/*11BD005*/ mov edx,dword ptr ds:[126FF4C]
/*11BD00B*/ mov eax,dword ptr ds:[ecx+2C]
/*11BD00E*/ xor eax,dword ptr ds:[edx+88]
/*11BD014*/ mov ecx,dword ptr ds:[126FF4C]
/*11BD01A*/ xor eax,dword ptr ds:[ecx+60]
/*11BD01D*/ mov dword ptr ss:[ebp-24],eax
/*11BD020*/ mov edx,dword ptr ss:[ebp+8]
/*11BD023*/ mov eax,dword ptr ds:[edx+4]
/*11BD026*/ push eax
/*11BD027*/ mov ecx,dword ptr ss:[ebp+8]
/*11BD02A*/ mov edx,dword ptr ds:[ecx+8]
/*11BD02D*/ push edx
/*11BD02E*/ push 0
/*11BD030*/ mov eax,dword ptr ss:[ebp+8]
/*11BD033*/ mov ecx,dword ptr ds:[eax+C]
/*11BD036*/ push ecx
/*11BD037*/ mov edx,dword ptr ss:[ebp-C]
/*11BD03A*/ sub edx,dword ptr ss:[ebp-24]
/*11BD03D*/ call edx ;OEP
接著就單步走,走道11bd03d的call edx,第一個call edx會跳過,就到OEP了
之後就是修復IAT,這個程序沒有其他的加密方式,所以直接dump,然後修復IAT即可
IAT有無效的就直接cut
|