![]() |
来源:安全中国 |
偶的《ACProtect V1.21专业版主程序的脱壳》一文,想必大家都已经看过了。地址: http://tongtian.net/pediybbs/viewtopic.php?t=4483 有人可能会问:为什么有2个函数修复不了?而且也没有去修复呢?这里我将要告诉大家为什么。 1.消除代码替换暗桩(即ACPr中的Code Replace) 用W32Dasm打开dump出来的文件反汇编,然后搜索call 006(壳的代码位于006d4000以上) 就会发现许多代码暗桩都是call 006d540c,为此经过分析该段代码后修改如下: 006D540C push ebp 006D540D mov ebp,esp 006D540F pushad 006D5410 mov esi,006D56E2 006D5415 mov ebx,dword ptr ss:[ebp+4] 006D5418 xor ecx,ecx 006D541A lods dword ptr ds:[esi] 006D541B add eax,00400000 006D5420 cmp eax,ebx 006D5422 nop 006D5423 nop 006D5424 je short Acp.006D542C 006D5426 inc ecx 006D5427 jmp 006D541A 006D542C mov edi,006D85C2 006D5431 mov eax,0A 006D5436 mul ecx 006D5438 add edi,eax 006D543A mov ecx,0A 006D543F mov al,byte ptr ds:[edi] 006D5441 xor al,6D 006D5443 stos byte ptr es:[edi] 006D5444 loopd short 006D543F 006D5446 sub edi,0A 006D5449 mov dword ptr ds:[06d4000],edi 006D544F sub edi,ebx 006D5451 mov dword ptr ds:[ebx-4],edi 006D5454 popad 006D5455 pop ebp 006D5456 jmp dword ptr ds:[06d4000] 偶本想写段代码直接把原来的代码还原到CALL的位置,因为长度都是5字节,但由于要用反汇编识别垃圾代码比较麻烦所以作摆。 2.跨平台问题 经过第一步修复,虽然在你dump时的操作系统下可以运行,但不能跨平台。比如偶的在win2k下运行没问题,但是到win98出错。于是再次进行跟踪分析,原来存在数据暗桩即共享壳中数据。原理是:在壳中对部分API函数取地址并在前面加标示识别,然后在主程序中通过搜索标示找到该部分函数的地址再进行调用。由于脱壳后,API地址仍然是原来的没有随着系统的变化而变化所以出错。该段取API地址代码位于壳06e369a处,现修改如下: 006E369A call 006E1460 006E369F lea eax,dword ptr ss:[ebp+40D5E7] 006E36A5 mov ebx,eax 006E36A7 push eax 006E36A8 push eax 006E36A9 jmp 006E36C0 006E36AB nop 006E36AC nop 006E36AD nop 006E36AE nop 006E36AF nop 006E36B0 nop 006E36B1 nop 006E36B2 nop 006E36B3 nop 006E36B4 nop 006E36B5 nop 006E36B6 nop 006E36B7 nop 006E36B8 nop 006E36B9 nop 006E36BA nop 006E36BB nop 006E36BC nop 006E36BD nop 006E36BE nop 006E36BF nop 006E36C0 pop eax ; 006E36C1 call dword ptr ds:[691194] 006E36C7 jmp 006E36E0 006E36C9 nop 006E36CA nop 006E36CB nop ...... 006E36E0 or eax,eax 006E36E2 jnz 006E3721 006E36E4 retn 006E36E5 nop 006E36E6 nop 006E36E7 nop ...... 006E3721 mov ebx,eax 006E3723 mov dword ptr ss:[ebp+4023F0],eax 006E3729 mov eax,0040D5F4 006E372E mov edx,0040D763 006E3733 call 006E148A 006E3738 mov eax,0040D600 006E373D mov edx,0040D767 006E3742 call 006E148A 006E3747 mov eax,0040D60B 006E374C mov edx,0040D77B 006E3751 call 006E148A 006E3756 mov eax,0040D61F 006E375B mov edx,0040D77F 006E3760 call 006E148A 006E3765 mov eax,0040D638 006E376A mov edx,0040D783 006E376F call 006E148A 006E3774 mov eax,0040D647 006E3779 mov edx,0040D787 006E377E call 006E148A 006E3783 mov eax,0040D655 006E3788 mov edx,0040D78B 006E378D call 006E148A 006E3792 mov eax,0040D661 006E3797 mov edx,0040D78F 006E379C call 006E148A 006E37A1 mov eax,Acp.0040D66D 006E37A6 mov edx,Acp.0040D793 006E37AB call Acp.006E148A 006E37B0 mov eax,Acp.0040D67E 006E37B5 mov edx,Acp.0040D7AB 006E37BA call Acp.006E148A 006E37BF mov eax,Acp.0040D690 006E37C4 mov edx,Acp.0040D7AF 006E37C9 call Acp.006E148A 006E37CE mov eax,Acp.0040D69C 006E37D3 mov edx,Acp.0040D7B3 006E37D8 call Acp.006E148A 006E37DD mov eax,Acp.0040D6A5 006E37E2 mov edx,Acp.0040D7B7 006E37E7 call Acp.006E148A 006E37EC mov eax,Acp.0040D6AF 006E37F1 mov edx,Acp.0040D7BB 006E37F6 call Acp.006E148A 006E37FB mov eax,Acp.0040D6BB 006E3800 mov edx,Acp.0040D7BF 006E3805 call Acp.006E148A 006E380A mov eax,Acp.0040D6C8 006E380F mov edx,Acp.0040D7C3 006E3814 call Acp.006E148A 006E3819 mov eax,Acp.0040D6E1 006E381E mov edx,Acp.0040D7CB 006E3823 call Acp.006E148A 006E3828 mov eax,Acp.0040D6F2 006E382D mov edx,Acp.0040D7CF 006E3832 call Acp.006E148A 006E3837 mov eax,Acp.0040D703 006E383C mov edx,Acp.0040D7D3 006E3841 call Acp.006E148A 006E3846 mov eax,Acp.0040D803 006E384B mov edx,Acp.0040D7FF 006E3850 call Acp.006E148A 006E3855 lea eax,dword ptr ss:[ebp+40D714] 006E385B mov ebx,eax |