ACProtect V1.21专业版主程序的修复,ACProtect,脱壳技术 2008年06月23日 星期一 下午 04:59 偶的《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 006E385D push eax 006E385E push eax 006E385F nop 006E3860 nop 006E3861 nop 006E3862 nop 006E3863 nop 006E3864 nop 006E3865 nop 006E3866 nop 006E3867 nop 006E3868 nop 006E3869 nop 006E386A nop 006E386B nop 006E386C nop 006E386D nop 006E386E nop 006E386F nop 006E3870 nop 006E3871 nop 006E3872 nop 006E3873 nop 006E3874 nop 006E3875 nop 006E3876 pop eax 006E3877 call dword ptr ds:[691194] 006E387D jmp short Acp.006E3896 006E387F nop 006E3880 nop 006E3881 nop ...... 006E3896 or eax,eax 006E3898 jnz short Acp.006E38D7 006E389A retn 006E389B nop 006E389C nop 006E389D nop ...... 006E38D7 mov ebx,eax 006E38D9 mov dword ptr ss:[ebp 4023F4],eax 006E38DF mov eax,Acp.0040D71F 006E38E4 mov edx,Acp.0040D76B 006E38E9 call Acp.006E148A 006E38EE mov eax,Acp.0040D72B 006E38F3 mov edx,Acp.0040D76F 006E38F8 call Acp.006E148A 006E38FD mov eax,Acp.0040D73A 006E3902 mov edx,Acp.0040D773 006E3907 call Acp.006E148A 006E390C mov eax,Acp.0040D748 006E3911 mov edx,Acp.0040D777 006E3916 call Acp.006E148A 006E391B retn 006E148A push ebx 006E148B push eax 006E148C push edx 006E148D add eax,ebp 006E148F push eax 006E1490 push ebx 006E1491 push eax 006E1492 mov eax,dword ptr ss:[ebp 41A614] 006E1498 nop 006E1499 nop 006E149A nop 006E149B nop 006E149C nop 006E149D nop 006E149E nop 006E149F nop 006E14A0 nop 006E14A1 nop 006E14A2 nop 006E14A3 nop 006E14A4 nop 006E14A5 nop 006E14A6 nop 006E14A7 nop 006E14A8 nop 006E14A9 pop eax ; 006E14AA call dword ptr ds:[691190] 006E14B0 jmp short Acp.006E14C9 006E14B2 nop 006E14B3 nop 006E14B4 nop ...... 006E14C9 pop edx 006E14CA mov dword ptr ss:[ebp edx],eax 006E14CE pop eax ; 006E14CF pop ebx ; 006E14D0 retn 3.调用壳SDK的修复 在IAT修复时有2个函数没有修复,这2个函数都是指向MessageBoxA,看ACPr说明原来用作SDK接口。 程序对该函数调用相应也是2处:00407830和00407838.都指向壳代码006e084d.如果不修复直接指向原来的USer32.dll那么主程序总是显示未注册版而且对程序加壳后也显示未注册,很不爽。偶在6d4010处写入不分代码,然后修改407830和407838代码跳转到006d4010: 00407830:jmp 006d4010 00407838:jmp 006d4010 006D4010 cmp dword ptr ss:[esp 4],-1 006D4015 jnz 006D4023 006D4017 cmp dword ptr ss:[esp 8],0 006D401C je 006D4023 006D401E jmp 006E084D 006D4023 jmp dword ptr ds:[691588] ;JMP到user32.MessageBoxA 这样处理后只能算基本可以了。但还是有点问题,由于要浪费很多时间就不进一步处理了。 4.部分数据校验: 主程序的入口必须是2D4000 IMAGESIZE必须是:2F537A 因为数据校验代码部分是动态还原后执行的,不便修改该部分代码。 入口代码: 006D4000:PUSHAD CALL 006E369A POPAD JMP 004CC210 |
|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )
GMT+8, 2024-9-29 21:19 , Processed in 0.245716 second(s), 12 queries , Gzip On, MemCache On.
Powered by Discuz! X3.5
© 2001-2023 Discuz! Team.