asprotect的stolen code
最近研究asprotect的壳,真是我的一块心病啊,这asprotect,真心不好搞。
01280253 68 26AE4500 push 45AE26 ; 401524 01280258 66:9C pushfw 0128025A 52 push edx 0128025B 035424 18 add edx, dword ptr [esp+18] 0128025F C1DA E7 rcr edx, 0E7 01280262 BA BE204600 mov edx, 4620BE 01280267 035424 18 add edx, dword ptr [esp+18] 0128026B 8D5424 52 lea edx, dword ptr [esp+52] 0128026F 83EA 52 sub edx, 52 01280272 8D52 14 lea edx, dword ptr [edx+14] 01280275 57 push edi 01280276 51 push ecx 01280277 F3: prefix rep: 01280278 EB 02 jmp short 0128027C 0128027A CD20 81DFCB0D vxdjump DCBDF81 01280280 90 nop 01280281 70 68 jo short 012802EB 01280283 26:09F7 or edi, esi 01280286 42 inc edx 01280287 53 push ebx 01280288 03DF add ebx, edi 0128028A EB 02 jmp short 0128028E 0128028C CD20 81CBDD83 vxdjump 83DDCB81 01280292 ^ E3 A6 jecxz short 0128023A 01280294 3E:EB 02 jmp short 01280299 01280297 CD20 8D5C35AB vxdcall AB355C8D 0128029D 2BDE sub ebx, esi 0128029F 8D5C0C 28 lea ebx, dword ptr [esp+ecx+28] 012802A3 2BD9 sub ebx, ecx 012802A5 8D5C03 D8 lea ebx, dword ptr [ebx+eax-28] 012802A9 2BD8 sub ebx, eax ; mov ebx,esp 012802AB 8D5C3B FC lea ebx, dword ptr [ebx+edi-4] 012802AF 83C3 04 add ebx, 4 012802B2 2BDF sub ebx, edi 012802B4 2E:EB 01 jmp short 012802B8 012802B7 - 0F8D 5C0B042B jge 2C2C0E19 012802BD D968 77 fldcw word ptr [eax+77] 012802C0 804D E6 8F or byte ptr [ebp-1A], 8F 012802C4 035B 33 add ebx, dword ptr [ebx+33] 012802C7 7C 24 jl short 012802ED 012802C9 0833 or byte ptr [ebx], dh 012802CB 7C 24 jl short 012802F1 012802CD 285F 57 sub byte ptr [edi+57], bl 012802D0 33CF xor ecx, edi 012802D2 59 pop ecx 012802D3 83C1 A0 add ecx, -60 012802D6 81C1 E37FB299 add ecx, 99B27FE3 012802DC F7D9 neg ecx 012802DE 87F9 xchg ecx, edi 012802E0 C1C7 01 rol edi, 1 012802E3 47 inc edi 012802E4 2BD7 sub edx, edi 012802E6 81E1 68CCB6D2 and ecx, D2B6CC68 012802EC 59 pop ecx 012802ED C1CF BF ror edi, 0BF 012802F0 C1CF 5B ror edi, 5B 012802F3 5F pop edi 012802F4 55 push ebp 012802F5 036C24 38 add ebp, dword ptr [esp+38] 012802F9 83ED 4B sub ebp, 4B 012802FC 8DAC26 EC444300 lea ebp, dword ptr [esi+4344EC] 01280303 2BEE sub ebp, esi 01280305 892A mov dword ptr [edx], ebp 01280307 5D pop ebp 01280308 5A pop edx 01280309 66:9D popfw 0128030B E8 0C1218FF call xp.0040151C ; jmp 到 msvbvm60.ThunRTMain
用脚本就可以停在001280253,上面这段代码就是stolen code ,就是壳把程序入口点处的一段代码放到壳中执行。对于处理stolen code,如果偷的代码少的话,我们可以手动补一下,偷的多的话就需要新建区段了。我现在遇到的这个就可以手动补,怎么补,我们随便看下一个没有加壳的vb6.0的入口点是什么样子的,对照一下我们就应该知道怎么加了。
0040151C $- FF25 30114000 jmp dword ptr [<&msvbvm60.ThunRTMain>; msvbvm60.ThunRTMain 00401522 > $ 68 EC444300 push 004344EC ;入口点 00401527 . E8 F0FFFFFF call <jmp.&msvbvm60.ThunRTMain>
原来一个没加壳的vb程序入口点的代码是一句push 然后一个call 到ThunRTMain。现在单步下001280253的代码,执行完01280309处的popfw,栈顶是004344ec,这个就是我们需要补的第一句代码,push 004344ec,然后再执行0128030B处的代码我们发现流程转移到了一个跳转表中
0040151C .- FF25 30114000 jmp dword ptr [401130] ; msvbvm60.ThunRTMain ;00128030B会跳转到这里!!! 00401522 0000 add byte ptr [eax], al 00401524 - E9 D70A0C00 jmp 004C2000 00401529 68 BC9E9D7A push 7A9D9EBC 0040152E 48 dec eax 0040152F 0000 add byte ptr [eax], al
所以我们第二句要补的代码就是call 0040151c , 我们在00401522地址处的汇编代码改为push 004344EC,下一句代码改为call 0040151C,然后dump出来,入口点要设置为00401522,就可以了。我这个样本不用修复IAT中的asprotect SDK。关于修复asprotect sdk那又是一个问题了。我现在不是很懂。
这样样本是一个盗qq的,运行的时候会显示出一张美女图片用以掩人耳目。