首页
社区
课程
招聘
ASProtect V1.3X 脱壳――Magic NetTrace V2.5.4
发表于: 2004-10-5 02:44 17982

ASProtect V1.3X 脱壳――Magic NetTrace V2.5.4

fly 活跃值
85
2004-10-5 02:44
17982

      
      
         
下载页面:  http://www.skycn.com/soft/17155.html
软件大小:  1544 KB
软件语言:  英文
软件类别:  国外软件 / 共享版 / 网络辅助
应用平台:  Win9x/NT/2000/XP
加入时间:  2004-06-30 11:11:45
下载次数:  601
推荐等级:  ****
软件介绍:  这个程序结合 ping,WHOIS 和 traceroute 功能。

【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

【调试环境】:WinXP、Ollydbg、PEiD、LordPE、ImportREC

―――――――――――――――――――――――――――――――――
【脱壳过程】:
         
         
新版ASProtect的脱壳教程国内还不多,脱壳后索性再整理一篇吧。
Thanks: VolX、stephenteh、jingulong
―――――――――――――――――――――――――――――――――
一、壳代码解压
            
            
设置Ollydbg忽略所有的异常选项。老规矩:用IsDebug V1.4插件去掉Ollydbg的调试器标志。

00401000     68 01F05A00         push mTrace.005AF001
//进入OD后停在这
00401005     E8 01000000         call mTrace.0040100B
0040100A     C3                  retn

下断:BP GetModuleHandleA
Shift+F9,中断2次后,就可以取消断点,Alt+F9返回。
直接F4至下面的popad处

00B994A6     FF95 EC314400       call dword ptr ss:[ebp+4431EC]
00B994AC     85C0                test eax,eax
00B994AE     75 07               jnz short 00B994B7
00B994B0     53                  push ebx
00B994B1     FF95 F0314400       call dword ptr ss:[ebp+4431F0]
00B994B7     8985 4D294400       mov dword ptr ss:[ebp+44294D],eax
00B994BD     C785 51294400 00000>mov dword ptr ss:[ebp+442951],0
00B994C7     8B95 D8304400       mov edx,dword ptr ss:[ebp+4430D8]
00B994CD     8B06                mov eax,dword ptr ds:[esi]
00B994CF     85C0                test eax,eax
00B994D1     75 03               jnz short 00B994D6
00B994D3     8B46 10             mov eax,dword ptr ds:[esi+10]
00B994D6     03C2                add eax,edx
00B994D8     0385 51294400       add eax,dword ptr ss:[ebp+442951]
00B994DE     8B18                mov ebx,dword ptr ds:[eax]
00B994E0     8B7E 10             mov edi,dword ptr ds:[esi+10]
00B994E3     03FA                add edi,edx
00B994E5     03BD 51294400       add edi,dword ptr ss:[ebp+442951]
00B994EB     85DB                test ebx,ebx
00B994ED     0F84 A2000000       je 00B99595
00B994F3     F7C3 00000080       test ebx,80000000
00B994F9     75 04               jnz short 00B994FF
00B994FB     03DA                add ebx,edx
00B994FD     43                  inc ebx
00B994FE     43                  inc ebx
00B994FF     53                  push ebx
00B99500     81E3 FFFFFF7F       and ebx,7FFFFFFF
00B99506     53                  push ebx
00B99507     FFB5 4D294400       push dword ptr ss:[ebp+44294D]
00B9950D     FF95 E8314400       call dword ptr ss:[ebp+4431E8]
00B99513     85C0                test eax,eax
00B99515     5B                  pop ebx
00B99516     75 6F               jnz short 00B99587
00B99518     F7C3 00000080       test ebx,80000000
00B9951E     75 19               jnz short 00B99539
00B99520     57                  push edi
00B99521     8B46 0C             mov eax,dword ptr ds:[esi+C]
00B99524     0385 D8304400       add eax,dword ptr ss:[ebp+4430D8]
00B9952A     50                  push eax
00B9952B     53                  push ebx
00B9952C     8D85 53314400       lea eax,dword ptr ss:[ebp+443153]
00B99532     50                  push eax
00B99533     57                  push edi
00B99534     E9 99000000         jmp 00B995D2
00B99539     81E3 FFFFFF7F       and ebx,7FFFFFFF
00B9953F     8B85 DC304400       mov eax,dword ptr ss:[ebp+4430DC]
00B99545     3985 4D294400       cmp dword ptr ss:[ebp+44294D],eax
00B9954B     75 24               jnz short 00B99571
00B9954D     57                  push edi
00B9954E     8BD3                mov edx,ebx
00B99550     4A                  dec edx
00B99551     C1E2 02             shl edx,2
00B99554     8B9D 4D294400       mov ebx,dword ptr ss:[ebp+44294D]
00B9955A     8B7B 3C             mov edi,dword ptr ds:[ebx+3C]
00B9955D     8B7C3B 78           mov edi,dword ptr ds:[ebx+edi+78]
00B99561     035C3B 1C           add ebx,dword ptr ds:[ebx+edi+1C]
00B99565     8B0413              mov eax,dword ptr ds:[ebx+edx]
00B99568     0385 4D294400       add eax,dword ptr ss:[ebp+44294D]
00B9956E     5F                  pop edi
00B9956F     EB 16               jmp short 00B99587
00B99571     57                  push edi
00B99572     8B46 0C             mov eax,dword ptr ds:[esi+C]
00B99575     0385 D8304400       add eax,dword ptr ss:[ebp+4430D8]
00B9957B     50                  push eax
00B9957C     53                  push ebx
00B9957D     8D85 A4314400       lea eax,dword ptr ss:[ebp+4431A4]
00B99583     50                  push eax
00B99584     57                  push edi
00B99585     EB 4B               jmp short 00B995D2
00B99587     8907                mov dword ptr ds:[edi],eax
00B99589     8385 51294400 04    add dword ptr ss:[ebp+442951],4
00B99590     E9 32FFFFFF         jmp 00B994C7
00B99595     8906                mov dword ptr ds:[esi],eax
00B99597     8946 0C             mov dword ptr ds:[esi+C],eax
00B9959A     8946 10             mov dword ptr ds:[esi+10],eax
00B9959D     83C6 14             add esi,14
00B995A0     8B95 D8304400       mov edx,dword ptr ss:[ebp+4430D8]
00B995A6     E9 EBFEFFFF         jmp 00B99496
00B995AB     8B85 652A4400       mov eax,dword ptr ss:[ebp+442A65]
00B995B1     50                  push eax
00B995B2     0385 D8304400       add eax,dword ptr ss:[ebp+4430D8]
00B995B8     5B                  pop ebx
00B995B9     0BDB                or ebx,ebx
00B995BB     8985 112F4400       mov dword ptr ss:[ebp+442F11],eax
00B995C1     61                  popad
//直接F4到这里
00B995C2     75 08               jnz short 00B995CC
00B995C4     B8 01000000         mov eax,1
00B995C9     C2 0C00             retn 0C
00B995CC     68 4C1DB900         push 0B91D4C
00B995D1     C3                  retn
//壳代码解压完毕

―――――――――――――――――――――――――――――――――
二、处理输入表,避开加密
           
           
壳代码已经解压完毕,可以开始处理输入表了,手动Patch,避开输入表的加密。
           
Ctrl+S 在“整个段块”搜索命令序列:
add esp,38
pop ebp
pop edi
pop esi
pop ebx
retn
找到在00B85F20处,下个断点吧。
下面是分析过程。可以在搜索到地址后直接修改了,免得检验出错。

00B85B0F     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85B12     8B30                mov esi,dword ptr ds:[eax]
00B85B14     8343 08 04          add dword ptr ds:[ebx+8],4
00B85B18     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85B1B     8A00                mov al,byte ptr ds:[eax]
00B85B1D     884424 07           mov byte ptr ss:[esp+7],al
00B85B21     FF43 08             inc dword ptr ds:[ebx+8]
00B85B24     85F6                test esi,esi
00B85B26     75 1A               jnz short 00B85B42
00B85B28     EB 01               jmp short 00B85B2B
//IAT处理完毕则自这里跳转
00B85B42     337424 28           xor esi,dword ptr ss:[esp+28]
00B85B46     0373 40             add esi,dword ptr ds:[ebx+40]
00B85B49     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85B4C     8A00                mov al,byte ptr ds:[eax]
00B85B4E     FF43 08             inc dword ptr ds:[ebx+8]
00B85B51     33D2                xor edx,edx
00B85B53     8AD0                mov dl,al
00B85B55     8BC7                mov eax,edi
00B85B57     E8 30F4FFFF         call 00B84F8C
00B85B5C     894424 14           mov dword ptr ss:[esp+14],eax
00B85B60     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85B63     8A00                mov al,byte ptr ds:[eax]
00B85B65     FF43 08             inc dword ptr ds:[ebx+8]
00B85B68     84C0                test al,al
00B85B6A     75 20               jnz short 00B85B8C
//根据AL值分别进行处理

――――――――――――――――――――――――
1、AL=1 时的处理

00B85CA8     3C 01               cmp al,1
//AL=1   ?
00B85CAA     0F85 B2000000       jnz 00B85D62
00B85CB0     EB 01               jmp short 00B85CB3
00B85CB3     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85CB6     8B00                mov eax,dword ptr ds:[eax]
00B85CB8     890424              mov dword ptr ss:[esp],eax
00B85CBB     8343 08 04          add dword ptr ds:[ebx+8],4
00B85CBF     837B 44 00          cmp dword ptr ds:[ebx+44],0
00B85CC3     74 09               je short 00B85CCE
00B85CC5     8B0424              mov eax,dword ptr ss:[esp]
00B85CC8     FF53 44             call dword ptr ds:[ebx+44]
00B85CCB     890424              mov dword ptr ss:[esp],eax
00B85CCE     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85CD1     66:8B00             mov ax,word ptr ds:[eax]
00B85CD4     66:894424 04        mov word ptr ss:[esp+4],ax
00B85CD9     8343 08 02          add dword ptr ds:[ebx+8],2
00B85CDD     807C24 1C 00        cmp byte ptr ss:[esp+1C],0
00B85CE2     74 0B               je short 00B85CEF
00B85CE4     8B4424 28           mov eax,dword ptr ss:[esp+28]
00B85CE8     C64424 1C 00        mov byte ptr ss:[esp+1C],0
00B85CED     EB 06               jmp short 00B85CF5
00B85CEF     8B4424 18           mov eax,dword ptr ss:[esp+18]
00B85CF3     8B00                mov eax,dword ptr ds:[eax]
00B85CF5     8BC8                mov ecx,eax
00B85CF7     66:8B5424 04        mov dx,word ptr ss:[esp+4]
00B85CFC     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85CFF     E8 9CE4FFFF         call 00B841A0
00B85D04     8B4424 10           mov eax,dword ptr ss:[esp+10]
00B85D08     E8 37C8FEFF         call 00B72544
00B85D0D     894424 0C           mov dword ptr ss:[esp+C],eax
00B85D11     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85D14     50                  push eax
00B85D15     8B4424 18           mov eax,dword ptr ss:[esp+18]
00B85D19     50                  push eax
00B85D1A     A1 C026B900         mov eax,dword ptr ds:[B926C0]
00B85D1F     8B00                mov eax,dword ptr ds:[eax]
00B85D21     FFD0                call eax
//GetProcAddress        ★
00B85D23     8BE8                mov ebp,eax
00B85D25     85ED                test ebp,ebp
00B85D27     75 0A               jnz short 00B85D33
00B85D29     68 405FB800         push 0B85F40    ; ASCII "11"
00B85D2E     E8 61E1FFFF         call 00B83E94
00B85D33     8B0424              mov eax,dword ptr ss:[esp]
00B85D36     50                  push eax
00B85D37     68 204AB800         push 0B84A20
00B85D3C     8D4C24 20           lea ecx,dword ptr ss:[esp+20]
00B85D40     8BD5                mov edx,ebp
00B85D42     8BC3                mov eax,ebx
00B85D44     E8 83F4FFFF         call 00B851CC
00B85D49     8B5424 0C           mov edx,dword ptr ss:[esp+C]
00B85D4D     8902                mov dword ptr ds:[edx],eax
//修改①:jmp 00B99950    ★   跳到Patch部分
00B85D4F     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85D53     8906                mov dword ptr ds:[esi],eax
00B85D55     0FB74424 04         movzx eax,word ptr ss:[esp+4]
00B85D5A     0143 08             add dword ptr ds:[ebx+8],eax
00B85D5D     E9 ADFDFFFF         jmp 00B85B0F

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
★ Patch 处理① ★ :
         
         
在程序下面找快空地,写入Patch 代码。00B99950下面都是空地,就这里吧
提前在[B9ACC0]处写入现在DLL的基址,在[B9ACC8]处写入准备放输入表的地址:0056A000

00B99950     51                  push ecx
00B99951     52                  push edx
00B99952     3E:8B5424 1C        mov edx,dword ptr ds:[esp+1C]
//[esp+1C]=0012FF10 此处保存的是处理的DLL基址 ★
00B99957     3B15 C0ACB900       cmp edx,dword ptr ds:[B9ACC0]
//在[0B1BFD0]处提前写入现在处理的DLL的基址:77E40000
00B9995D     74 0D               je short 00B9996C
//判断与上次DLL是否相同 ★
00B9995F     8915 C0ACB900       mov dword ptr ds:[B9ACC0],edx
//保存DLL基址
00B99965     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
//不同则地址+4 ★
00B9996C     8B0D C8ACB900       mov ecx,dword ptr ds:[B9ACC8]
//提前在[B9ACC8]处写入准备放输入表的地址:0056A000
00B99972     8929                mov dword ptr ds:[ecx],ebp
//EBP保存的是正确函数的地址 ★ 正确的函数写入
00B99974     890E                mov dword ptr ds:[esi],ecx
//取代原先入壳的跳转地址
00B99976     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
//地址 +4
00B9997D     5A                  pop edx
00B9997E     59                  pop ecx
00B9997F     E9 D1C3FEFF         jmp 00B85D55
//跳回去继续流程

――――――――――――――――――――――――
2、AL=2 时的处理

00B85B8C     3C 02               cmp al,2
//AL=2   ?
00B85B8E     0F85 14010000       jnz 00B85CA8
00B85B94     33C0                xor eax,eax
00B85B96     894424 20           mov dword ptr ss:[esp+20],eax
00B85B9A     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85B9D     8A00                mov al,byte ptr ds:[eax]
00B85B9F     FF43 08             inc dword ptr ds:[ebx+8]
00B85BA2     EB 01               jmp short 00B85BA5
00B85BA5     2C 01               sub al,1
00B85BA7     73 34               jnb short 00B85BDD
00B85BA9     8BC3                mov eax,ebx
00B85BAB     E8 84F0FFFF         call 00B84C34
00B85BB0     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85BB3     0FB600              movzx eax,byte ptr ds:[eax]
00B85BB6     FF43 08             inc dword ptr ds:[ebx+8]
00B85BB9     8B53 08             mov edx,dword ptr ds:[ebx+8]
00B85BBC     8B12                mov edx,dword ptr ds:[edx]
00B85BBE     8343 08 04          add dword ptr ds:[ebx+8],4
00B85BC2     8D4C24 24           lea ecx,dword ptr ss:[esp+24]
00B85BC6     51                  push ecx
00B85BC7     8A4C24 0B           mov cl,byte ptr ss:[esp+B]
00B85BCB     51                  push ecx
00B85BCC     8BCA                mov ecx,edx
00B85BCE     8BD3                mov edx,ebx
00B85BD0     92                  xchg eax,edx
00B85BD1     E8 EAF7FFFF         call 00B853C0
00B85BD6     894424 20           mov dword ptr ss:[esp+20],eax
00B85BDA     EB 01               jmp short 00B85BDD
00B85BDD     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85BE0     8B28                mov ebp,dword ptr ds:[eax]
00B85BE2     8343 08 04          add dword ptr ds:[ebx+8],4
00B85BE6     8B4424 10           mov eax,dword ptr ss:[esp+10]
00B85BEA     E8 55C9FEFF         call 00B72544
00B85BEF     894424 0C           mov dword ptr ss:[esp+C],eax
00B85BF3     8BD5                mov edx,ebp
00B85BF5     8B4424 14           mov eax,dword ptr ss:[esp+14]
00B85BF9     E8 5AECFFFF         call 00B84858
//GetProcAddress
00B85BFE     8BE8                mov ebp,eax
00B85C00     85ED                test ebp,ebp
00B85C02     75 0A               jnz short 00B85C0E
00B85C04     68 305FB800         push 0B85F30       ; ASCII "10"
00B85C09     E8 86E2FFFF         call 00B83E94
00B85C0E     837C24 20 00        cmp dword ptr ss:[esp+20],0
00B85C13     74 44               je short 00B85C59
00B85C15     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85C19     8B5424 20           mov edx,dword ptr ss:[esp+20]
00B85C1D     8910                mov dword ptr ds:[eax],edx
00B85C1F     8B4424 20           mov eax,dword ptr ss:[esp+20]
00B85C23     034424 24           add eax,dword ptr ss:[esp+24]
00B85C27     C600 68             mov byte ptr ds:[eax],68
00B85C2A     6A 00               push 0
00B85C2C     68 204AB800         push 0B84A20
00B85C31     8D4C24 20           lea ecx,dword ptr ss:[esp+20]
00B85C35     8BD5                mov edx,ebp
00B85C37     8BC3                mov eax,ebx
00B85C39     E8 8EF5FFFF         call 00B851CC
00B85C3E     8B5424 20           mov edx,dword ptr ss:[esp+20]
00B85C42     035424 24           add edx,dword ptr ss:[esp+24]
00B85C46     42                  inc edx
00B85C47     8902                mov dword ptr ds:[edx],eax
00B85C49     8B4424 20           mov eax,dword ptr ss:[esp+20]
00B85C4D     034424 24           add eax,dword ptr ss:[esp+24]
00B85C51     83C0 05             add eax,5
00B85C54     C600 C3             mov byte ptr ds:[eax],0C3
00B85C57     EB 29               jmp short 00B85C82
00B85C59     6A 00               push 0
00B85C5B     68 204AB800         push 0B84A20
00B85C60     8D4C24 20           lea ecx,dword ptr ss:[esp+20]
00B85C64     8BD5                mov edx,ebp
00B85C66     8BC3                mov eax,ebx
00B85C68     E8 5FF5FFFF         call 00B851CC
00B85C6D     8B5424 0C           mov edx,dword ptr ss:[esp+C]
00B85C71     8902                mov dword ptr ds:[edx],eax
00B85C73     8D4C24 0C           lea ecx,dword ptr ss:[esp+C]
00B85C77     8A5424 07           mov dl,byte ptr ss:[esp+7]
00B85C7B     8BC3                mov eax,ebx
00B85C7D     E8 BEF7FFFF         call 00B85440
00B85C82     8BC6                mov eax,esi
00B85C84     83E8 02             sub eax,2
00B85C87     66:8338 00          cmp word ptr ds:[eax],0
00B85C8B     75 10               jnz short 00B85C9D
//下面的00B85C9D分支没有用
00B85C8D     8B5424 0C           mov edx,dword ptr ss:[esp+C]
00B85C91     8B12                mov edx,dword ptr ds:[edx]
00B85C93     E8 4CDEFFFF         call 00B83AE4
//加密CALL   进入修改 ★
00B85C98     E9 72FEFFFF         jmp 00B85B0
//循环
00B85C9D     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85CA1     8906                mov dword ptr ds:[esi],eax
00B85CA3     E9 67FEFFFF         jmp 00B85B0F

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
★ Patch 处理② ★ :

00B83AE4     53                  push ebx
00B83AE5     8BD8                mov ebx,eax
00B83AE7     8BC3                mov eax,ebx
00B83AE9     E8 56FFFFFF         call 00B83A44
00B83AEE     C603 E8             mov byte ptr ds:[ebx],0E8
//修改②:jmp 00B99988  ★   跳到Patch部分
00B83AF1     43                  inc ebx
00B83AF2     8903                mov dword ptr ds:[ebx],eax
00B83AF4     5B                  pop ebx
00B83AF5     C3                  retn

00B99988     51                  push ecx
00B99989     52                  push edx
00B9998A     3E:8B5424 24        mov edx,dword ptr ds:[esp+24]
00B9998F     3B15 C0ACB900       cmp edx,dword ptr ds:[B9ACC0]
00B99995     74 0D               je short 00B999A4
00B99997     8915 C0ACB900       mov dword ptr ds:[B9ACC0],edx
00B9999D     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B999A4     8B0D C8ACB900       mov ecx,dword ptr ds:[B9ACC8]
00B999AA     8929                mov dword ptr ds:[ecx],ebp
00B999AC     C703 FF250000       mov dword ptr ds:[ebx],25FF
00B999B2     890E                mov dword ptr ds:[esi],ecx
00B999B4     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B999BB     5A                  pop edx
00B999BC     59                  pop ecx
00B999BD     E9 32A1FEFF         jmp 00B83AF4

――――――――――――――――――――――――
3、AL=3 时的处理
         
         
这部分对于ASProtect.exe只处理1个特殊函数:GetProcAddress
有3个分支,第一个是GetProcAddress,第三个是错误提示。你可以到00B04308看看就明白了

00B85E5E     3C 03               cmp al,3
//AL=3   ?
00B85E60     0F85 A5000000       jnz 00B85F0B
00B85E66     EB 01               jmp short 00B85E69

00B85E69     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85E6C     8A00                mov al,byte ptr ds:[eax]
00B85E6E     FF43 08             inc dword ptr ds:[ebx+8]
00B85E71     FEC8                dec al
00B85E73     74 09               je short 00B85E7E
00B85E75     FEC8                dec al
00B85E77     74 41               je short 00B85EBA
//下面的00B85EBA分支没有用
00B85E79     E9 91FCFFFF         jmp 00B85B0F
00B85E7E     8BC3                mov eax,ebx
00B85E80     E8 AFEDFFFF         call 00B84C34
00B85E85     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85E88     8A00                mov al,byte ptr ds:[eax]
00B85E8A     884424 06           mov byte ptr ss:[esp+6],al
00B85E8E     FF43 08             inc dword ptr ds:[ebx+8]
00B85E91     8B4424 10           mov eax,dword ptr ss:[esp+10]
00B85E95     E8 AAC6FEFF         call 00B72544
00B85E9A     894424 0C           mov dword ptr ss:[esp+C],eax
//修改③:jmp 00B999C8   ★   跳到Patch部分
00B85E9E     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85EA2     8906                mov dword ptr ds:[esi],eax
00B85EA4     8A4C24 06           mov cl,byte ptr ss:[esp+6]
00B85EA8     8B5424 14           mov edx,dword ptr ss:[esp+14]
00B85EAC     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85EB0     E8 FFF0FFFF         call 00B84FB4
00B85EB5     E9 55FCFFFF         jmp 00B85B0F
//循环
00B85EBA     8BC3                mov eax,ebx
//一直没碰到这个分支的使用,不知放了什么狠招
00B85EBC     E8 73EDFFFF         call 00B84C34
00B85EC1     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85EC4     8B28                mov ebp,dword ptr ds:[eax]
00B85EC6     8343 08 04          add dword ptr ds:[ebx+8],4
00B85ECA     8D4424 08           lea eax,dword ptr ss:[esp+8]
00B85ECE     8BD5                mov edx,ebp
00B85ED0     E8 4FE3FFFF         call 00B84224
00B85ED5     8BCD                mov ecx,ebp
00B85ED7     8B53 08             mov edx,dword ptr ds:[ebx+8]
00B85EDA     8B4424 08           mov eax,dword ptr ss:[esp+8]
00B85EDE     E8 4DF9FEFF         call 00B75830
00B85EE3     016B 08             add dword ptr ds:[ebx+8],ebp
00B85EE6     8B4424 10           mov eax,dword ptr ss:[esp+10]
00B85EEA     E8 55C6FEFF         call 00B72544
00B85EEF     894424 0C           mov dword ptr ss:[esp+C],eax
00B85EF3     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85EF7     8B5424 08           mov edx,dword ptr ss:[esp+8]
00B85EFB     8910                mov dword ptr ds:[eax],edx
00B85EFD     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85F01     8906                mov dword ptr ds:[esi],eax
00B85F03     E9 07FCFFFF         jmp 00B85B0F
00B85F0B     68 705FB800         push 0B85F70     ; ASCII "89"
00B85F10     E8 7FDFFFFF         call 00B83E94
//Protection Error
00B85F15     E9 F5FBFFFF         jmp 00B85B0F

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
★ Patch 处理③ ★ :

00B999C8     3E:8B4424 14        mov eax,dword ptr ds:[esp+14]
00B999CD     3B05 C0ACB900       cmp eax,dword ptr ds:[B9ACC0]
00B999D3     74 0D               je short 00B999E2
00B999D5     A3 C0ACB900         mov dword ptr ds:[B9ACC0],eax
00B999DA     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B999E1     A1 C8ACB900         mov eax,dword ptr ds:[B9ACC8]
//放入我们程序中的地址
00B999E6     894424 0C           mov dword ptr ss:[esp+C],eax
//00B85E9A处代码挪到这里执行
00B999EA     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B999EE     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B999F5     E9 A8C4FEFF         jmp 00B85EA2

――――――――――――――――――――――――
4、AL=4 时的处理

00B85D62     3C 04               cmp al,4
//AL=4   ?
00B85D64     0F85 F4000000       jnz 00B85E5E
00B85D6A     EB 01               jmp short 00B85D6D
00B85D6D     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85D70     8A00                mov al,byte ptr ds:[eax]
00B85D72     FF43 08             inc dword ptr ds:[ebx+8]
00B85D75     84C0                test al,al
00B85D77     75 5B               jnz short 00B85DD4
00B85D79     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85D7C     8B30                mov esi,dword ptr ds:[eax]
00B85D7E     8343 08 04          add dword ptr ds:[ebx+8],4
00B85D82     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85D85     8B28                mov ebp,dword ptr ds:[eax]
00B85D87     8343 08 04          add dword ptr ds:[ebx+8],4
00B85D8B     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85D8E     8B00                mov eax,dword ptr ds:[eax]
00B85D90     894424 2C           mov dword ptr ss:[esp+2C],eax
00B85D94     8343 08 04          add dword ptr ds:[ebx+8],4
00B85D98     837B 30 00          cmp dword ptr ds:[ebx+30],0
00B85D9C     75 0A               jnz short 00B85DA8
00B85D9E     68 505FB800         push 0B85F50     ; ASCII "81"
00B85DA3     E8 ECE0FFFF         call 00B83E94
00B85DA8     8D5424 30           lea edx,dword ptr ss:[esp+30]
00B85DAC     8BC3                mov eax,ebx
00B85DAE     E8 51F8FFFF         call 00B85604
00B85DB3     8B4424 2C           mov eax,dword ptr ss:[esp+2C]
00B85DB7     50                  push eax
00B85DB8     8D4424 34           lea eax,dword ptr ss:[esp+34]
00B85DBC     50                  push eax
00B85DBD     55                  push ebp
00B85DBE     A1 7C25B900         mov eax,dword ptr ds:[B9257C]
00B85DC3     8B00                mov eax,dword ptr ds:[eax]
00B85DC5     50                  push eax
00B85DC6     56                  push esi
00B85DC7     8B4424 28           mov eax,dword ptr ss:[esp+28]
00B85DCB     50                  push eax
00B85DCC     FF53 30             call dword ptr ds:[ebx+30]
00B85DCF     E9 3BFDFFFF         jmp 00B85B0F
//修改④:jmp 00B99A36   ★   跳到Patch部分
00B85DD4     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85DD7     8B00                mov eax,dword ptr ds:[eax]
00B85DD9     890424              mov dword ptr ss:[esp],eax
00B85DDC     8343 08 04          add dword ptr ds:[ebx+8],4
00B85DE0     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85DE3     66:8B00             mov ax,word ptr ds:[eax]
00B85DE6     66:894424 04        mov word ptr ss:[esp+4],ax
00B85DEB     8343 08 02          add dword ptr ds:[ebx+8],2
00B85DEF     8B0C24              mov ecx,dword ptr ss:[esp]
00B85DF2     66:8B5424 04        mov dx,word ptr ss:[esp+4]
00B85DF7     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85DFA     E8 A1E3FFFF         call 00B841A0
00B85DFF     8B4424 10           mov eax,dword ptr ss:[esp+10]
00B85E03     E8 3CC7FEFF         call 00B72544
00B85E08     894424 0C           mov dword ptr ss:[esp+C],eax
00B85E0C     8B43 08             mov eax,dword ptr ds:[ebx+8]
00B85E0F     50                  push eax
00B85E10     8B4424 18           mov eax,dword ptr ss:[esp+18]
00B85E14     50                  push eax
00B85E15     A1 C026B900         mov eax,dword ptr ds:[B926C0]
00B85E1A     8B00                mov eax,dword ptr ds:[eax]
00B85E1C     FFD0                call eax
00B85E1E     8BE8                mov ebp,eax
00B85E20     85ED                test ebp,ebp
00B85E22     75 0C               jnz short 00B85E30
00B85E24     68 605FB800         push 0B85F60    ; ASCII "250"
00B85E29     E8 66E0FFFF         call 00B83E94
00B85E2E     EB 15               jmp short 00B85E45
00B85E30     A1 F425B900         mov eax,dword ptr ds:[B925F4]
00B85E35     3B28                cmp ebp,dword ptr ds:[eax]
00B85E37     75 0C               jnz short 00B85E45
00B85E39     837B 34 00          cmp dword ptr ds:[ebx+34],0
00B85E3D     74 06               je short 00B85E45
00B85E3F     8B6B 34             mov ebp,dword ptr ds:[ebx+34]
00B85E42     036B 40             add ebp,dword ptr ds:[ebx+40]
00B85E45     8B4424 0C           mov eax,dword ptr ss:[esp+C]
00B85E49     8928                mov dword ptr ds:[eax],ebp
00B85E4B     8B4424 0C           mov eax,dword ptr ss:[esp+C]
//修改⑤:jmp 00B999FE   ★   跳到Patch部分
00B85E4F     8906                mov dword ptr ds:[esi],eax
00B85E51     0FB74424 04         movzx eax,word ptr ss:[esp+4]
00B85E56     0143 08             add dword ptr ds:[ebx+8],eax
00B85E59     E9 B1FCFFFF         jmp 00B85B0F

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
★ Patch 处理④ ★ :

00B99A36     51                  push ecx
00B99A37     52                  push edx
00B99A38     3E:8B5424 1C        mov edx,dword ptr ds:[esp+1C]
00B99A3D     3B15 C0ACB900       cmp edx,dword ptr ds:[B9ACC0]
00B99A43     74 0D               je short 00B99A52
00B99A45     8915 C0ACB900       mov dword ptr ds:[B9ACC0],edx
00B99A4B     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B99A52     8B0D C8ACB900       mov ecx,dword ptr ds:[B9ACC8]
00B99A58     3E:8B5424 E4        mov edx,dword ptr ds:[esp-1C]
00B99A5D     8911                mov dword ptr ds:[ecx],edx
00B99A5F     3E:8B5424 C0        mov edx,dword ptr ds:[esp-40]
//用 VolX 兄的方法,呵呵
00B99A64     3E:035424 C4        add edx,dword ptr ds:[esp-3C]
//[esp-40]和[esp-3C]要看你本机的代码来确定  ★
00B99A69     81C2 00004000       add edx,400000
00B99A6F     890A                mov dword ptr ds:[edx],ecx
00B99A71     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B99A78     5A                  pop edx
00B99A79     59                  pop ecx
00B99A7A     E9 90C0FEFF         jmp 00B85B0F

         
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
★ Patch 处理⑤ ★ :
         
        
00B999FE     51                  push ecx
00B999FF     52                  push edx
00B99A00     3E:8B5424 1C        mov edx,dword ptr ds:[esp+1C]
00B99A05     3B15 C0ACB900       cmp edx,dword ptr ds:[B9ACC0]
00B99A0B     74 0D               je short 00B99A1A
00B99A0D     8915 C0ACB900       mov dword ptr ds:[B9ACC0],edx
00B99A13     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B99A1A     8B0D C8ACB900       mov ecx,dword ptr ds:[B9ACC8]
00B99A20     8929                mov dword ptr ds:[ecx],ebp
00B99A22     890E                mov dword ptr ds:[esi],ecx
00B99A24     8305 C8ACB900 04    add dword ptr ds:[B9ACC8],4
00B99A2B     5A                  pop edx
00B99A2C     59                  pop ecx
00B99A2D     E9 1FC4FEFF         jmp 00B85E51

――――――――――――――――――――――――
修改完以上部分后在00B85F27处下断,Shift+F9中断

00B85F20     83C4 38             add esp,38
00B85F23     5D                  pop ebp
00B85F24     5F                  pop edi
00B85F25     5E                  pop esi
00B85F26     5B                  pop ebx
00B85F27     C3                  retn
//中断在这里后IAT处理完毕!

―――――――――――――――――――――――――――――――――
三、附注:看看AL=3的00B85E7E处三个分支处理

1、0B846B8是GetProcAddress

00B84FB4     53                  push ebx
00B84FB5     56                  push esi
00B84FB6     8BF2                mov esi,edx
00B84FB8     8BD8                mov ebx,eax
00B84FBA     FEC9                dec cl
00B84FBC     74 06               je short 00B84FC4
00B84FBE     FEC9                dec cl
00B84FC0     74 0C               je short 00B84FCE
00B84FC2     EB 2B               jmp short 00B84FEF
00B84FC4     B8 B846B800         mov eax,0B846B8
00B84FC9     8903                mov dword ptr ds:[ebx],eax
00B84FCB     5E                  pop esi
00B84FCC     5B                  pop ebx
00B84FCD     C3                  retn

00B846B8     55                  push ebp
00B846B9     8BEC                mov ebp,esp
00B846BB     8B55 0C             mov edx,dword ptr ss:[ebp+C]
00B846BE     8B45 08             mov eax,dword ptr ss:[ebp+8]
00B846C1     3B05 F823B900       cmp eax,dword ptr ds:[B923F8]
00B846C7     75 09               jnz short 00B846D2
00B846C9     8B0495 F823B900     mov eax,dword ptr ds:[edx*4+B923F8>
00B846D0     EB 07               jmp short 00B846D9
00B846D2     52                  push edx
00B846D3     50                  push eax
00B846D4     E8 2710FFFF         call 00B75700 ; jmp to kernel32.GetProcAddress
00B846D9     5D                  pop ebp
00B846DA     C2 0800             retn 8

――――――――――――――――――――――――
2、这个小分支似乎是为VB程序准备的

00B84FCE     68 FC4FB800         push 0B84FFC  ; ASCII "DllFunctionCall"
00B84FD3     56                  push esi
00B84FD4     A1 C026B900         mov eax,dword ptr ds:[B926C0]
00B84FD9     8B00                mov eax,dword ptr ds:[eax]
00B84FDB     FFD0                call eax
00B84FDD     8B15 9426B900       mov edx,dword ptr ds:[B92694]
00B84FE3     8902                mov dword ptr ds:[edx],eax
00B84FE5     B8 E046B800         mov eax,0B846E0
00B84FEA     8903                mov dword ptr ds:[ebx],eax
00B84FEC     5E                  pop esi
00B84FED     5B                  pop ebx
00B84FEE     C3                  retn

――――――――――――――――――――――――
3、0B84F98就OVER了:Protection Error

00B84FEF     B8 984FB800         mov eax,0B84F98
00B84FF4     8903                mov dword ptr ds:[ebx],eax
00B84FF6     5E                  pop esi
00B84FF7     5B                  pop ebx
00B84FF8     C3                  retn

00B84F98     68 AC4FB800         push 0B84FAC  ; ASCII "87"
00B84F9D     E8 F2EEFFFF         call 00B83E94
00B84FA2     C3                  retn

00B83E94     55                  push ebp
00B83E95     8BEC                mov ebp,esp
00B83E97     6A 00               push 0
00B83E99     8B45 08             mov eax,dword ptr ss:[ebp+8]
00B83E9C     E8 07FBFEFF         call 00B739A8
00B83EA1     33C0                xor eax,eax
00B83EA3     55                  push ebp
00B83EA4     68 F03EB800         push 0B83EF0
00B83EA9     64:FF30             push dword ptr fs:[eax]
00B83EAC     64:8920             mov dword ptr fs:[eax],esp
00B83EAF     8D45 FC             lea eax,dword ptr ss:[ebp-4]
00B83EB2     8B4D 08             mov ecx,dword ptr ss:[ebp+8]
00B83EB5     BA 043FB800         mov edx,0B83F04  ; ASCII "Error: "
00B83EBA     E8 81F9FEFF         call 00B73840
00B83EBF     8B45 FC             mov eax,dword ptr ss:[ebp-4]
00B83EC2     E8 F1FAFEFF         call 00B739B8
00B83EC7     50                  push eax
00B83EC8     68 0C3FB800         push 0B83F0C     ; ASCII "Protection Error"
00B83ECD     E8 4E000000         call 00B83F20
//Game Over
00B83ED2     33C0                xor eax,eax
00B83ED4     5A                  pop edx
00B83ED5     59                  pop ecx
00B83ED6     59                  pop ecx
00B83ED7     64:8910             mov dword ptr fs:[eax],edx
00B83EDA     68 F73EB800         push 0B83EF7
00B83EDF     8D45 FC             lea eax,dword ptr ss:[ebp-4]
00B83EE2     E8 B1F6FEFF         call 00B73598
00B83EE7     8D45 08             lea eax,dword ptr ss:[ebp+8]
00B83EEA     E8 A9F6FEFF         call 00B73598
00B83EEF     C3                  retn

―――――――――――――――――――――――――――――――――
四、Pre-Dip:用自己的名字注册

取消以前的所有断点,现在设置Ollydbg忽略除了“内存访问异常”之外的所有其他异常选项。
Shift+F9运行,注意看堆栈,当第2次在堆栈中看见“8wh3JAAQjOI=”硬盘指纹时,可以处理了。

00B90B36     893B                mov dword ptr ds:[ebx],edi
//异常,第2次看见硬盘指纹

0012FF20   0012FF2C   指针到下一个 SEH 记录
0012FF24   00B90CEF   SE 句柄
0012FF28   40E2AEE6
0012FF2C   0012FF80   指针到下一个 SEH 记录
0012FF30   00B9114C   SE 句柄
0012FF34   0012FF78
0012FF38   00B70000
0012FF3C   00B40000   ASCII "MZ?
0012FF40   00B9051C   ASCII "U?SVW′&?
0012FF44   00000000
0012FF48   00BAE59C   ASCII "8wh3JAAQjOI="//硬盘指纹
0012FF4C   00B8F0F6   返回到 00B8F0F6 来自 00B81868

Alt+M打开内存查看窗口,在00401000段下 内存访问断点,Shift+F9通过异常,断下

00535838     55                  push ebp
//中断在这里
00535839     8BEC                mov ebp,esp
0053583B     8B45 08             mov eax,dword ptr ss:[ebp+8]
0053583E     A3 0CCE5400         mov dword ptr ds:[54CE0C],eax
//保存注册名地址
00535843     5D                  pop ebp
00535844     C2 0400             retn 4

过了0053583E之后,[54CE0C]处应该是保存的注册用户名,找一段空地,在0056AB00处写入:fly  [CUG],然后把[54CE0C]处的值改为0056AB00。OK,这个Pre-Dip处理完毕。

―――――――――――――――――――――――――――――――――
五、以壳解壳――ASProtect V1.3壳的Stolen Code简便解决方案

取消以前的所有断点。继续Shift+F9 运行,直至中断在最后一次典型异常。

00B8F3F3     893B                mov dword ptr ds:[ebx],edi
//ASProtect V1.31壳的最后一次异常
00B8F3F5     3085 5798C864       xor byte ptr ss:[ebp+64C89857],al
00B8F3FB     1B3F                sbb edi,dword ptr ds:[edi]
00B8F3FD     05 7B462835         add eax,3528467B
00B8F402     67:64:8F06 0000     pop dword ptr fs:[0]
00B8F408     26:EB 02            jmp short 00B8F40D

提供一个简便的方法快速达到使用“以壳解壳”的时机!
在最后一次异常时,Ctrl+F在“当前位置下”搜索命令:
mov esp,dword ptr ss:[ebp-8]
OK,找到在00B8F65E 处!下断,Shift+F9运行,中断

00B8F64A     E8 8B45FC8B         call 8CB53BDA
00B8F64F     0085 C0752B8B       add byte ptr ss:[ebp+8B2B75C0],al
00B8F655     0D 904BB900         or eax,0B94B90
00B8F65A     85C9                test ecx,ecx
00B8F65C     74 0B               je short 00B8F669
00B8F65E     8B65 F8             mov esp,dword ptr ss:[ebp-8]
//中断后取消所有断点
00B8F661     FF35 904BB900       push dword ptr ds:[B94B90]
00B8F667     C3                  retn
//返回00DE0303

00DE0303     55                  push ebp
//这里开始处理Stolen Code ★
//在这儿用PETools完全DUMP这个进程
00DE0304     EB 02               jmp short 00DE0308
00DE0308     8D6C5E 4A           lea ebp,dword ptr ds:[esi+ebx*2+4A]
00DE0310     8D6C05 B6           lea ebp,dword ptr ss:[ebp+eax-4A]
00DE0318     2BE8                sub ebp,eax
00DE031A     2BEB                sub ebp,ebx

―――――――――――――――――――――――――――――――――
六、Dump、修复输入表

如果仅仅脱壳出上面的壳代码部分是不行的,如下面的访问地址就丢失了:
02720167     FFD7                call edi  ;00B8BC98
00409C6C     68 10D6BA00         push 0BAD610
00409C71     C3                  retn
00DE1C99     E8 62E39301         call 02720000
00B8BC53     FF60 24             jmp dword ptr ds:[eax+24]; 02730000

所以区域脱壳出以下部分壳代码:
00B70000-00B9B000.dmp
00BA8000-00BB0000.dmp
00DE0000-00DE4000.dmp
02720000-02721000.dmp
02730000-02731000.dmp

“组装”一下dumped.exe,从磁盘载入刚才部分脱壳的五部分。
“组装”一下dumped.exe,从磁盘载入刚才部分脱壳的3部分。
减去基址后分别修改其虚拟地址为00770000、007A8000、009E0000、02320000、02330000
只保留PETools的“验证PE文件”选项,重建PE。

运行ImportREC,填入RVA=0016A000、Size=00000850
获取输入表,会发现有2个无效指针
0016A078        ?        0000        00B846B8
0016A1E0        ?        0000        00B846B8
通过AL=3的分析,我们知道应该把这2个函数修复为:GetProcAddress
修改OEP=009E0303,FixDump!

―――――――――――――――――――――――――――――――――
七、暗桩修复

运行后会发现有异常,其实还是壳造成的问题。
――――――――――――――――――――――――
1、004021FA处异常

00402184     55                  push ebp
00402185     8BEC                mov ebp,esp
00402187     83C4 F8             add esp,-8
0040218A     53                  push ebx
0040218B     56                  push esi
0040218C     57                  push edi
0040218D     8BD8                mov ebx,eax
0040218F     803D 30E45400 00    cmp byte ptr ds:[54E430],0
//把54E430处的01修改为00,让其重新申请内存
00402196     75 13               jnz short dumped_.004021AB
00402198     E8 13F9FFFF         call dumped_.00401AB0
0040219D     84C0                test al,al
0040219F     75 0A               jnz short dumped_.004021AB
004021A1     33C0                xor eax,eax
004021A3     8945 FC             mov dword ptr ss:[ebp-4],eax
004021A6     E9 54010000         jmp dumped_.004022FF
004021AB     33C9                xor ecx,ecx
004021AD     55                  push ebp
004021AE     68 F8224000         push dumped_.004022F8
004021B3     64:FF31             push dword ptr fs:[ecx]
004021B6     64:8921             mov dword ptr fs:[ecx],esp
004021B9     803D 49E05400 00    cmp byte ptr ds:[54E049],0
004021C0     74 0A               je short dumped_.004021CC
004021C2     68 38E45400         push dumped_.0054E438
004021C7     E8 40F2FFFF         call <jmp.&kernel32.EnterCriticalSection>
004021CC     83C3 07             add ebx,7
004021CF     83E3 FC             and ebx,FFFFFFFC
004021D2     83FB 0C             cmp ebx,0C
004021D5     7D 05               jge short dumped_.004021DC
004021D7     BB 0C000000         mov ebx,0C
004021DC     81FB 00100000       cmp ebx,1000
004021E2     0F8F 93000000       jg dumped_.0040227B
004021E8     8BC3                mov eax,ebx
004021EA     85C0                test eax,eax
004021EC     79 03               jns short dumped_.004021F1
004021EE     83C0 03             add eax,3
004021F1     C1F8 02             sar eax,2
004021F4     8B15 90E45400       mov edx,dword ptr ds:[54E490]
004021FA     8B5482 F4           mov edx,dword ptr ds:[edx+eax*4-C]
//异常
004021FE     85D2                test edx,edx
00402200     74 79               je short dumped_.0040227B

――――――――――――――――――――――――
2、0040146C处异常

00401426     BE 54E45400         mov esi,dumped_.0054E454
0040142B     833E 00             cmp dword ptr ds:[esi],0
//把[0054E454]处的00153FF4修改为00  ★
0040142E     75 3A               jnz short dumped_.0040146A
00401430     68 44060000         push 644
00401435     6A 00               push 0
00401437     E8 A8FFFFFF         call <jmp.&kernel32.LocalAlloc>
0040143C     8BC8                mov ecx,eax
0040143E     85C9                test ecx,ecx
00401440     75 05               jnz short dumped_.00401447
00401442     33C0                xor eax,eax
00401444     5E                  pop esi
00401445     5B                  pop ebx
00401446     C3                  retn
00401447     A1 50E45400         mov eax,dword ptr ds:[54E450]
0040144C     8901                mov dword ptr ds:[ecx],eax
0040144E     890D 50E45400       mov dword ptr ds:[54E450],ecx
00401454     33D2                xor edx,edx
00401456     8BC2                mov eax,edx
00401458     03C0                add eax,eax
0040145A     8D44C1 04           lea eax,dword ptr ds:[ecx+eax*8+4]
0040145E     8B1E                mov ebx,dword ptr ds:[esi]
00401460     8918                mov dword ptr ds:[eax],ebx
00401462     8906                mov dword ptr ds:[esi],eax
00401464     42                  inc edx
00401465     83FA 64             cmp edx,64
00401468     75 EC               jnz short dumped_.00401456
0040146A     8B06                mov eax,dword ptr ds:[esi]
0040146C     8B10                mov edx,dword ptr ds:[eax]
//异常
0040146E     8916                mov dword ptr ds:[esi],edx
00401470     5E                  pop esi
00401471     5B                  pop ebx
00401472     C3                  retn

――――――――――――――――――――――――
3、退出时在00401C08处异常

00401BFF     A1 50E45400         mov eax,dword ptr ds:[54E450]
//把[54E450]处的数据修改为00000000
00401C04     85C0                test eax,eax
00401C06     74 17               je short dumped_.00401C1F
00401C08     8B10                mov edx,dword ptr ds:[eax]
//异常
00401C0A     8915 50E45400       mov dword ptr ds:[54E450],edx
00401C10     50                  push eax
00401C11     E8 D6F7FFFF         call <jmp.&kernel32.LocalFree>

OK,正常运行了,脱壳成功!

―――――――――――――――――――――――――――――――――                                    
         ,     _/
        /| _.-~/            \_     ,        青春都一晌
       ( /~   /              \~-._ |\
       `\\  _/                \   ~\ )          忍把浮名
   _-~~~-.)  )__/;;,.          \_  //'
  /'_,\   --~   \ ~~~-  ,;;\___(  (.-~~~-.        换了破解轻狂
`~ _( ,_..--\ (     ,;'' /    ~--   /._`\
  /~~//'   /' `~\         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`\    `\\~~\   
                         "     "   "~'  ""
   
              UnPacked By :  fly
               2004-10-03 19:00


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (45)
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
2
程序较大,节省论坛空间,不上传UnPacked了  :D
2004-10-5 03:15
0
雪    币: 250
活跃值: (105)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好文,收藏
2004-10-5 03:57
0
雪    币: 227
活跃值: (160)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
学习
2004-10-5 04:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
@fly,
for the 异常
u just need to change bytes to 00 from 54E430 - 54E498
not many asprotected program using this trick...
another program using this trick is RegOrganizer...
2004-10-5 04:58
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
牛啊
2004-10-5 07:27
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
7
最初由 stephenteh 发布
@fly,
for the 异常
u just need to change bytes to 00 from 54E430 - 54E498
not many asprotected program using this trick...
another program using this trick is RegOrganizer...


这里说的是关于Pre-Dip的处理吗?
2004-10-5 07:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
no, that 1 is not pre-dip...
i refer that location as an antidump...

btw... fly i found another location that write the bad iat address....but this location seldom use...
the location is right above the CMP AL, 2
u will see something like this
push eax
call xxxxxxxx <--- another bad call
jmp xxxxxxxx

do the same trick will fix the iat...
if u wan the exe i can send u...
2004-10-5 08:23
0
雪    币: 255
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
好文章
2004-10-5 09:25
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
10
支持:D
2004-10-5 10:01
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
11
嘿嘿越来越看不懂了:p
2004-10-5 10:31
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
12
Fly前辈历害,收藏学习::D
2004-10-5 11:02
0
雪    币: 6
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
13
ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
2004-10-5 11:16
0
雪    币: 223
活跃值: (106)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
今天又有事做啦!:D
2004-10-5 12:58
0
雪    币: 229
活跃值: (50)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
15
1.
00B85B68     84C0                test al,al
  00B85B6A     75 20               jnz short 00B85B8C

当 al=0 时是 import by ordinal

2.
  这里
00B99A5F     3E:8B5424 C0        mov edx,dword ptr ds:[esp-40]
//用 VolX 兄的方法,呵呵
00B99A64     3E:035424 C4        add edx,dword ptr ds:[esp-3C]
//[esp-40]和[esp-3C]要看你本机的代码来确定  ★
00B99A69     81C2 00004000       add edx,400000

不妨改成

   mov edx, dword ptr [esp-0C]
   add edx, ebp
   add edx, 400000
2004-10-5 13:04
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
16
@fly,
for the 异常
u just need to change bytes to 00 from 54E430 - 54E498
not many asprotected program using this trick...
another program using this trick is RegOrganizer...


是的,这样处理可以

push eax
call xxxxxxxx <--- another bad call
jmp xxxxxxxx
do the same trick will fix the iat...
if u wan the exe i can send u...


好的,发给我吧
thank
2004-10-5 13:05
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
17
最初由 VolX 发布
00B99A5F 3E:8B5424 C0 mov edx,dword ptr ds:[esp-40]
//用 VolX 兄的方法,呵呵
00B99A64 3E:035424 C4 add edx,dword ptr ds:[esp-3C]
//[esp-40]和[esp-3C]要看你本机的代码来确定 ★
00B99A69 81C2 00004000 add edx,400000

不妨改成

mov edx, dword ptr [esp-0C]
add edx, ebp
add edx, 400000


感谢V兄 ;)
下次一定试试
2004-10-5 13:13
0
雪    币: 229
活跃值: (50)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
18
这东东的 stolen code 不多 , 只需 修 复运转表和标准 函 数就 OK 了 。
2004-10-5 13:25
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学不过来了!
2004-10-5 14:33
0
雪    币: 690
活跃值: (1826)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
20
修复IAT都有些看不懂,好复杂.
2004-10-5 15:13
0
雪    币: 221
活跃值: (55)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
21
运行ImportREC,填入RVA=0016A000、Size=00000850

这个是怎么知道的呢?RVA和Size
2004-10-5 15:54
0
雪    币: 383
活跃值: (786)
能力值: ( LV12,RANK:730 )
在线值:
发帖
回帖
粉丝
22
fly自安排的,sen你怎么不看1.的部分处理,看教程要仔细点呀...字字心机!;)

支持fly发教程!:D :D :D
2004-10-5 16:26
0
雪    币: 266
活跃值: (269)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
23
最初由 askformore 发布
...字字心机!;)

支持fly发教程!:D :D :D


字字珠玑吧?:D :D :D
2004-10-5 16:32
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
24
0016A000的地址是自己找的空地放的输入表
size可以在转存里看到结束的地方
2004-10-5 17:08
0
雪    币: 229
活跃值: (50)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
25
看了我的笔记,你所遇到的异常还是由 pre-dip 造成的。

00B3099E   8B07             MOV EAX,DWORD PTR DS:[EDI]
00B309A0   85C0             TEST EAX,EAX
00B309A2   74 20            JE SHORT 00B309C4
00B309A4   E8 B7FCFFFF      CALL 00B30660
00B309A9   8B1F             MOV EBX,DWORD PTR DS:[EDI]
00B309AB   FFD3             CALL EBX  <- pre-dip
00B309AD   8D55 CC          LEA EDX,DWORD PTR SS:[EBP-34]
00B309B0   E8 4760FEFF      CALL 00B169FC

这个pre-dip我把它叫 criticalsection pre-dip, 进入后会呼叫 InitializeCriticalSection , VitualAlloc (还是 GlobalAlloc ? 我忘了), 然后一路做记号,脱壳的程序就少了这个 criticalsection, 所以会异常。
2004-10-5 20:16
0
游客
登录 | 注册 方可回帖
返回
//