在研读了SYSCOM,machenglin两位大侠的文章,历经n天,动手试验n次,终于用补区段的方法搞定一个Asprotect壳,发出来给跟我一样菜的人参考。
贴图片比较麻烦,我还是上传附件。
8.15心血来潮,对此程序进行恢复代码,记录如下:
文件夹保护 2006 2.10
ASProtect 2.1x SKE -> Alexey Solodovnikov
Version: ASProtect 2.11 SKE build 03.13 Release [1]
Microsoft Visual C++ 7.0 Method2 [Debug]
安装后不方便打开文件夹,拷贝地址备用:
E:\Program Files\文件夹保护 2006\fp.exe
1.OEP+DUMP+IAT:
Volx脚本IAT修复,提示Stolen code After API,保存在SCafAPI.bin,然后停在伪OEP:
017002EC 6A 74 push 74 ; 00040E8BD
017002EE F2: prefix repne:
017002EF EB 01 jmp short 017002F2
0040E8BD d>- E9 2A1A2F01 jmp 017002EC ; 真正的OEP
有Stolen OEP,上LordPE选择进程dump,保存为dump.exe。
Ctrl+G到401000,Ctrl+B:FF25
0040E052 - FF25 6C404D00 jmp dword ptr ds:[4D406C] ; crtool.CCRTools::Init
0040E058 - FF25 C4464D00 jmp dword ptr ds:[4D46C4] ; <jmp.&MSVCR71.free>
0040E05E - FF25 BC464D00 jmp dword ptr ds:[4D46BC] ; MFC71.7C1CAE35
数据窗口:dd 4D46C4,上下翻翻
004D4000 796D1E76 ADVAPI32.RegCloseKey
004D4004 796D6315 ADVAPI32.RegSetValueA
004D4008 796D33CB ADVAPI32.RegSetValueExA
...
004D52C0 00000000
004D52C4 77A344BA OLE32.CoInitialize
004D52C8 77A3435E OLE32.CoUninitialize
004D52CC 00000000
RVA=000D4000,Size=12CC
上ImportREC,选择进程,填入RVA+Size,获取函数,全部有效,修改OEP=0000E052,Refix dump。
2.变形跳转及变形call的分析:
01700461 68 690C7001 push dumped_1.01700C69 ; 变形call
01700466 E8 95FB0700 call dumped_1.01780000 ; 进入第一层
第一层:一直F7直到第一个call
01780157 /EB 01 jmp short dumped_1.0178015A
0178015A FFD3 call ebx ; 进入第二层
0178015C FF7424 04 push dword ptr ss:[esp+4]
01780160 EB 02 jmp short dumped_1.01780164
第二层:经过Route Check后来到循环
014D8A87 8B45 F8 mov eax,dword ptr ss:[ebp-8]
014D8A8A 0FB600 movzx eax,byte ptr ds:[eax]
014D8A8D 8B5483 40 mov edx,dword ptr ds:[ebx+eax*4+40]
014D8A91 8BC6 mov eax,esi
014D8A93 FFD2 call edx
014D8A95 3B45 FC cmp eax,dword ptr ss:[ebp-4]
014D8A98 75 1A jnz short dumped_1.014D8AB4
014D8A9A 8B45 10 mov eax,dword ptr ss:[ebp+10]
014D8A9D 50 push eax
014D8A9E 8B45 14 mov eax,dword ptr ss:[ebp+14]
014D8AA1 50 push eax
014D8AA2 E8 19FAFFFF call dumped_1.014D84C0
014D8AA7 50 push eax
014D8AA8 8BCE mov ecx,esi
014D8AAA 8B55 18 mov edx,dword ptr ss:[ebp+18]
014D8AAD 8BC3 mov eax,ebx
014D8AAF E8 D4FDFFFF call dumped_1.014D8888 ; 进入第3层
014D8AB4 4F dec edi
014D8AB5 0373 6C add esi,dword ptr ds:[ebx+6C]
014D8AB8 85FF test edi,edi
014D8ABA ^ 77 CB ja short dumped_1.014D8A87
第3层:变形种类的分类
014D88D8 FFD2 call edx
014D88DA 2C 02 sub al,2 ; 注意al值
014D88DC 72 12 jb short dumped_1.014D88F0
014D88DE 74 3D je short dumped_1.014D891D
014D88E0 FEC8 dec al
014D88E2 0F84 82000000 je dumped_1.014D896A
014D88E8 E9 DA000000 jmp dumped_1.014D89C7
...
014D89E5 FF75 0C push dword ptr ss:[ebp+C]
014D89E8 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; dumped_1.01510E28
014D89EB FF60 20 jmp dword ptr ds:[eax+20] ;跟进到第4层
014D89EE /EB 01 jmp short dumped_1.014D89F1
014D89F0 |9A 5F5E5B8B E55D call far 5DE5:8B5B5E5F
014D89F7 C2 0C00 retn 0C
014D89FA 8BC0 mov eax,eax
第4层:指向最后的地址
017900AD - FF6424 FC jmp dword ptr ss:[esp-4] ; dumped_1.01700A9B
如果不是code,那就是call里还有stolen。
3.Stolen OEP的恢复:
0040E8BD c> 6A 74 push 74
0040E8BF 68 20894D00 push cyto-wj.004D8920
0040E8C4 E8 F3010000 call cyto-wj.0040EABC ; (1)
0040E8C9 33DB xor ebx,ebx
0040E8CB 895D E0 mov dword ptr ss:[ebp-20],ebx
0040E8CE 53 push ebx
0040E8CF 8B3D AC414D00 mov edi,dword ptr ds:[<&kernel32.GetModuleHandleA>]
0040E8D5 FFD7 call edi
0040E8D7 66:8138 4D5A cmp word ptr ds:[eax],5A4D
0040E8DC 75 1F jnz short cyto-wj.0040E8FD
0040E8DE 8B48 3C mov ecx,dword ptr ds:[eax+3C]
0040E8E1 03C8 add ecx,eax
0040E8E3 8139 50450000 cmp dword ptr ds:[ecx],4550
0040E8E9 75 12 jnz short cyto-wj.0040E8FD
0040E8EB 0FB741 18 movzx eax,word ptr ds:[ecx+18]
0040E8EF 3D 0B010000 cmp eax,10B
0040E8F4 74 1F je short cyto-wj.0040E915
0040E8F6 3D 0B020000 cmp eax,20B
0040E8FB 74 05 je short cyto-wj.0040E902
0040E8FD 895D E4 mov dword ptr ss:[ebp-1C],ebx
0040E900 EB 27 jmp short cyto-wj.0040E929
0040E902 83B9 84000000 0E cmp dword ptr ds:[ecx+84],0E
0040E909 ^ 76 F2 jbe short cyto-wj.0040E8FD
0040E90B 33C0 xor eax,eax
0040E90D 3999 F8000000 cmp dword ptr ds:[ecx+F8],ebx
0040E913 EB 0E jmp short cyto-wj.0040E923
0040E915 8379 74 0E cmp dword ptr ds:[ecx+74],0E
0040E919 ^ 76 E2 jbe short cyto-wj.0040E8FD
0040E91B 33C0 xor eax,eax
0040E91D 3999 E8000000 cmp dword ptr ds:[ecx+E8],ebx
0040E923 0F95C0 setne al
0040E926 8945 E4 mov dword ptr ss:[ebp-1C],eax
0040E929 895D FC mov dword ptr ss:[ebp-4],ebx
0040E92C 6A 02 push 2
0040E92E FF15 D04E4D00 call dword ptr ds:[<&msvcr71.__set_app_type>]
0040E934 59 pop ecx
0040E935 830D 1CE34F00 FF or dword ptr ds:[4FE31C],FFFFFFFF
0040E93C 830D 20E34F00 FF or dword ptr ds:[4FE320],FFFFFFFF
0040E943 FF15 D44E4D00 call dword ptr ds:[<&msvcr71.__p__fmode>]
0040E949 8B0D BCCD4F00 mov ecx,dword ptr ds:[4FCDBC]
0040E94F 8908 mov dword ptr ds:[eax],ecx
0040E951 FF15 D84E4D00 call dword ptr ds:[<&msvcr71.__p__commode>]
0040E957 8B0D B8CD4F00 mov ecx,dword ptr ds:[4FCDB8]
0040E95D 8908 mov dword ptr ds:[eax],ecx
0040E95F A1 DC4E4D00 mov eax,dword ptr ds:[<&msvcr71._adjust_fdiv>]
0040E964 8B00 mov eax,dword ptr ds:[eax]
0040E966 A3 18E34F00 mov dword ptr ds:[4FE318],eax
0040E96B E8 4A020000 call cyto-wj.0040EBBA ; (2)
0040E970 E8 E5020000 call cyto-wj.0040EC5A
0040E975 391D B0C34F00 cmp dword ptr ds:[4FC3B0],ebx
0040E97B 75 0C jnz short cyto-wj.0040E989
0040E97D 68 5AEC4000 push cyto-wj.0040EC5A
0040E982 FF15 E04E4D00 call dword ptr ds:[<&msvcr71.__setusermatherr>]
0040E988 59 pop ecx
0040E989 E8 BA020000 call cyto-wj.0040EC48 ; (3)
0040E98E 68 E0C24F00 push cyto-wj.004FC2E0
0040E993 68 DCC24F00 push cyto-wj.004FC2DC
0040E998 E8 A5020000 call <jmp.&msvcr71._initterm>
0040E99D 68 FEEB4000 push cyto-wj.0040EBFE
0040E9A2 E8 87FDFFFF call cyto-wj.0040E72E ; (4)
0040E9A7 A1 B4CD4F00 mov eax,dword ptr ds:[4FCDB4]
0040E9AC 8945 D8 mov dword ptr ss:[ebp-28],eax
0040E9AF 8D45 D8 lea eax,dword ptr ss:[ebp-28]
0040E9B2 50 push eax
0040E9B3 FF35 B0CD4F00 push dword ptr ds:[4FCDB0]
0040E9B9 8D45 D0 lea eax,dword ptr ss:[ebp-30]
0040E9BC 50 push eax
0040E9BD 8D45 CC lea eax,dword ptr ss:[ebp-34]
0040E9C0 50 push eax
0040E9C1 8D45 C8 lea eax,dword ptr ss:[ebp-38]
0040E9C4 50 push eax
0040E9C5 FF15 404F4D00 call dword ptr ds:[<&msvcr71.__getmainargs>]
0040E9CB 83C4 20 add esp,20
0040E9CE 8945 C4 mov dword ptr ss:[ebp-3C],eax
0040E9D1 3BC3 cmp eax,ebx
0040E9D3 7D 08 jge short cyto-wj.0040E9DD
0040E9D5 6A 08 push 8
0040E9D7 E8 D8010000 call <jmp.&msvcr71._amsg_exit>
0040E9DC 59 pop ecx
0040E9DD 68 D8C24F00 push cyto-wj.004FC2D8
0040E9E2 68 00C04F00 push cyto-wj.004FC000
0040E9E7 E8 56020000 call <jmp.&msvcr71._initterm>
0040E9EC 59 pop ecx
0040E9ED 59 pop ecx
0040E9EE A1 484F4D00 mov eax,dword ptr ds:[<&msvcr71._acmdln>]
0040E9F3 8B30 mov esi,dword ptr ds:[eax]
0040E9F5 8975 DC mov dword ptr ss:[ebp-24],esi
0040E9F8 8A06 mov al,byte ptr ds:[esi]
0040E9FA 3C 20 cmp al,20
0040E9FC 77 5D ja short cyto-wj.0040EA5B
0040E9FE 3AC3 cmp al,bl
0040EA00 74 05 je short cyto-wj.0040EA07
0040EA02 395D E0 cmp dword ptr ss:[ebp-20],ebx
0040EA05 75 54 jnz short cyto-wj.0040EA5B
0040EA07 8A06 mov al,byte ptr ds:[esi]
0040EA09 3AC3 cmp al,bl
0040EA0B 74 0A je short cyto-wj.0040EA17
0040EA0D 3C 20 cmp al,20
0040EA0F 77 06 ja short cyto-wj.0040EA17
0040EA11 46 inc esi
0040EA12 8975 DC mov dword ptr ss:[ebp-24],esi
0040EA15 ^ EB F0 jmp short cyto-wj.0040EA07
0040EA17 895D A8 mov dword ptr ss:[ebp-58],ebx
0040EA1A 8D85 7CFFFFFF lea eax,dword ptr ss:[ebp-84]
0040EA20 50 push eax
0040EA21 FF15 18424D00 call dword ptr ds:[<&kernel32.GetStartupInfoA>]
0040EA27 F645 A8 01 test byte ptr ss:[ebp-58],1
0040EA2B 74 06 je short cyto-wj.0040EA33
0040EA2D 0FB745 AC movzx eax,word ptr ss:[ebp-54]
0040EA31 EB 03 jmp short cyto-wj.0040EA36
0040EA33 6A 0A push 0A
0040EA35 58 pop eax
0040EA36 50 push eax
0040EA37 56 push esi
0040EA38 53 push ebx
0040EA39 53 push ebx
0040EA3A FFD7 call edi
0040EA3C 50 push eax
0040EA3D E8 9EF10A00 call cyto-wj.004BDBE0
0040EA42 8BF0 mov esi,eax
0040EA44 8975 C0 mov dword ptr ss:[ebp-40],esi
0040EA47 395D E4 cmp dword ptr ss:[ebp-1C],ebx
0040EA4A 75 07 jnz short cyto-wj.0040EA53
0040EA4C 56 push esi
0040EA4D FF15 4C4F4D00 call dword ptr ds:[<&msvcr71.exit>]
0040EA53 FF15 504F4D00 call dword ptr ds:[<&msvcr71._cexit>]
0040EA59 EB 55 jmp short cyto-wj.0040EAB0
0040EA5B 3C 22 cmp al,22
0040EA5D 75 0B jnz short cyto-wj.0040EA6A
0040EA5F 33C9 xor ecx,ecx
0040EA61 395D E0 cmp dword ptr ss:[ebp-20],ebx
0040EA64 0F94C1 sete cl
0040EA67 894D E0 mov dword ptr ss:[ebp-20],ecx
0040EA6A 0FB6C0 movzx eax,al
0040EA6D 50 push eax
0040EA6E FF15 544F4D00 call dword ptr ds:[<&msvcr71._ismbblead>]
0040EA74 59 pop ecx
0040EA75 85C0 test eax,eax
0040EA77 74 04 je short cyto-wj.0040EA7D
0040EA79 46 inc esi
0040EA7A 8975 DC mov dword ptr ss:[ebp-24],esi
0040EA7D 46 inc esi
0040EA7E ^ E9 72FFFFFF jmp cyto-wj.0040E9F5
OEP中某些call内容也被偷了:
1) call dumped_.0040EABC
0040EABC - E9 DA1F2F01 jmp 01700A9B
0040EABC 68 6CE84000 push <jmp.&msvcr71._except_handler3>
0040EAC1 64:A1 00000000 mov eax,dword ptr fs:[0]
0040EAC7 50 push eax
0040EAC8 8B4424 10 mov eax,dword ptr ss:[esp+10]
0040EACC 896C24 10 mov dword ptr ss:[esp+10],ebp
0040EAD0 8D6C24 10 lea ebp,dword ptr ss:[esp+10]
0040EAD4 2BE0 sub esp,eax
0040EAD6 53 push ebx
0040EAD7 56 push esi
0040EAD8 57 push edi
0040EAD9 8B45 F8 mov eax,dword ptr ss:[ebp-8]
0040EADC 8965 E8 mov dword ptr ss:[ebp-18],esp
0040EADF 50 push eax
0040EAE0 8B45 FC mov eax,dword ptr ss:[ebp-4]
0040EAE3 C745 FC FFFFFFFF mov dword ptr ss:[ebp-4],-1
0040EAEA 8945 F8 mov dword ptr ss:[ebp-8],eax
0040EAED 8D45 F0 lea eax,dword ptr ss:[ebp-10]
0040EAF0 64:A3 00000000 mov dword ptr fs:[0],eax
0040EAF6 C3 retn
2) call cyto-wj.0040EBBA
0040EBBA - E9 991E2F01 jmp 01700A58
0040EBBA 6A 0C push 0C
0040EBBC 68 30894D00 push cyto-wj.004D8930
0040EBC1 E8 F6FEFFFF call cyto-wj.0040EABC
0040EBC6 C745 E4 48E24E00 mov dword ptr ss:[ebp-1C],cyto-wj.004EE248
0040EBCD 817D E4 48E24E00 cmp dword ptr ss:[ebp-1C],cyto-wj.004EE248
0040EBD4 73 22 jnb short cyto-wj.0040EBF8
0040EBD6 8365 FC 00 and dword ptr ss:[ebp-4],0
0040EBDA 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
0040EBDD 8B00 mov eax,dword ptr ds:[eax]
0040EBDF 85C0 test eax,eax
0040EBE1 74 0B je short cyto-wj.0040EBEE
0040EBE3 FFD0 call eax
0040EBE5 EB 07 jmp short cyto-wj.0040EBEE
0040EBE7 33C0 xor eax,eax
0040EBE9 40 inc eax
0040EBEA C3 retn
0040EBEB 8B65 E8 mov esp,dword ptr ss:[ebp-18]
0040EBEE 834D FC FF or dword ptr ss:[ebp-4],FFFFFFFF
0040EBF2 8345 E4 04 add dword ptr ss:[ebp-1C],4
0040EBF6 ^ EB D5 jmp short cyto-wj.0040EBCD
0040EBF8 E8 FAFEFFFF call cyto-wj.0040EAF7
0040EBFD C3 retn
call cyto-wj.0040EAF7
0040EAF7 - E9 7C1B2F01 jmp 01700678
0040EAF7 8B4D F0 mov ecx,dword ptr ss:[ebp-10]
0040EAFA 64:890D 00000000 mov dword ptr fs:[0],ecx
0040EB01 59 pop ecx
0040EB02 5F pop edi
0040EB03 5E pop esi
0040EB04 5B pop ebx
0040EB05 C9 leave
0040EB06 51 push ecx
0040EB07 C3 retn
3) call cyto-wj.0040EC48
0040EC48 - E9 BB1B2F01 jmp 01700808
0040EC48 68 00000300 push 30000
0040EC4D 68 00000100 push 10000
0040EC52 E8 07000000 call <jmp.&msvcr71._controlfp>
0040EC57 59 pop ecx
0040EC58 59 pop ecx
0040EC59 C3 retn
4) call cyto-wj.0040E72E
0040E72E - E9 17232F01 jmp 01700A4A
0040E72E FF7424 04 push dword ptr ss:[esp+4]
0040E732 E8 D1FFFFFF call cyto-wj.0040E708
0040E737 F7D8 neg eax
0040E739 1BC0 sbb eax,eax
0040E73B F7D8 neg eax
0040E73D 59 pop ecx
0040E73E 48 dec eax
0040E73F C3 retn
4.Stolen code After API:
8种Stolen code After API的分类处:
014DAA9B 8B55 F8 mov edx,dword ptr ss:[ebp-8]
014DAA9E 3A42 4A cmp al,byte ptr ds:[edx+4A]
014DAAA1 74 0B je short 014DAAAE
014DAAA3 8B55 F8 mov edx,dword ptr ss:[ebp-8]
014DAAA6 3A42 4B cmp al,byte ptr ds:[edx+4B]
014DAAA9 75 3E jnz short 014DAAE9
014DAAAB EB 01 jmp short 014DAAAE
0=eax,1=ecx,2=edx,3=ebx,4=esp,5=ebp,6=esi,7=edi
打开脚本运行后产生的文件SCafAPI.bin:
004D4000 >00401606 cyto-wj.00401606 // mov ecx,esi,隐藏
004D4004 >00401B75 cyto-wj.00401B75 // mov esi,eax,加密码
004D4008 >00402679 cyto-wj.00402679 //
004D400C >0040588C cyto-wj.0040588C //
004D4010 >00405F4C cyto-wj.00405F4C // mov ecx,edi,输入注册码
004D4014 >0040816B cyto-wj.0040816B //
004D4018 >00409AE4 cyto-wj.00409AE4 // mov ecx,esi,加密码
004D401C >00409C05 cyto-wj.00409C05 //
004D4020 >00411BCC cyto-wj.00411BCC //
004D4024 >0041286A cyto-wj.0041286A // mov eax,esi,程序启动
004D4028 >004167B2 cyto-wj.004167B2 //
004D402C >004167E9 cyto-wj.004167E9 //
004D4030 >00416F94 cyto-wj.00416F94 //
点击各个功能模块,有几个没能断下,可能要注册才能用到?
[注意]APP应用上架合规检测服务,协助应用顺利上架!