首页
社区
课程
招聘
[旧帖] [求助]Armadillo5.42双进程标准模式脱壳后,程序还有自校验,怎么去除啊??? 0.00雪花
发表于: 2008-8-10 22:59 3833

[旧帖] [求助]Armadillo5.42双进程标准模式脱壳后,程序还有自校验,怎么去除啊??? 0.00雪花

2008-8-10 22:59
3833
一个小程序,学习学习
!- 目标为Armadillo保护
!- 保护系统级别为 (专业版)      
!- <所用到的保护模式有>
屏蔽调试器   
使用输入表乱序模式            
使用策略代码拼接模式         
使用 Nanomites 处理模式   
!- <备份密钥设置>      
固定的备份密钥   
!- <目标程序压缩设置>   
较好 / 较慢 的压缩方式   
!- <其它保护设置>
47BB6D80 Version 5.42 20-02-2008
!- 共使用的时间 00h 00m 01s 688ms

OD载入,隐藏OD

00993000 >  60              pushad     <==打开程序直接停在这.
00993001    E8 00000000     call    00993006
00993006    5D              pop     ebp
00993007    50              push    eax
00993008    51              push    ecx
00993009    0FCA            bswap   edx
0099300B    F7D2            not     edx
0099300D    9C              pushfd
0099300E    F7D2            not     edx
00993010    0FCA            bswap   edx
00993012    EB 0F           jmp     short 00993023

下断点:bp OpenMutexA,F9运行,
7C80EA1B >  8BFF            mov     edi, edi  <==断在这里
7C80EA1D    55              push    ebp
7C80EA1E    8BEC            mov     ebp, esp
7C80EA20    51              push    ecx
7C80EA21    51              push    ecx
7C80EA22    837D 10 00      cmp     dword ptr [ebp+10], 0
7C80EA26    56              push    esi
7C80EA27    0F84 66530300   je      7C843D93

看下椎栈

0012F6F8   0096853A  /CALL 到 OpenMutexA 来自 FlyWoool.00968534
0012F6FC   001F0001  |Access = 1F0001
0012F700   00000000  |Inheritable = FALSE
0012F704   0012FD54  \MutexName = "9D0::DA28095786"   <==看到0012FD54,记住.
0012F708   7EDAC47D

Ctrl+G 到00401000处,汇编以下代码

00401000     60                  pushad
00401001     9C                  pushfd
00401002     68 7CFD1200         push 12FD54 == 堆栈里看到的值
00401007     33C0                xor eax,eax
00401009     50                  push eax
0040100A     50                  push eax
0040100B     E8 B4B2A577         call kernel32.CreateMutexA
00401010     9D                  popfd
00401011     61                  popad
00401012     E9 33F7A577         jmp kernel32.OpenMutexA

00401000新建EIP,F9执行.停在kernel32.OpenMutexA中断,
取消断点,取消00401000处修改.

避开IAT加密
下断点:he GetModuleHandleA, 55次F9后出现异常.按确定后shift+F9.看堆栈

00129440   01286655  /CALL 到 GetModuleHandleA 来自 0128664F
00129444   012B2BA8  \pModule = "kernel32.dll"
00129448   012B3B54  ASCII "VirtualAlloc"  <==注意这个
0012944C   4C73F890

00129440   01286673  /CALL 到 GetModuleHandleA 来自 0128666D
00129444   012B2BA8  \pModule = "kernel32.dll"
00129448   012B3B48  ASCII "VirtualFree"  <==注意这个
0012944C   4C73F890

0012918C   01268CD7  /CALL 到 GetModuleHandleA 来自 01268CD1
00129190   00129308  \pModule = "kernel32.dll"     <===可以取消断点,Alt+F9返回了
00129194   00000000

01268CD7    8B55 F4         mov     edx, dword ptr [ebp-C]  <==返回到这里
01268CDA    8B0D 84FF2B01   mov     ecx, dword ptr [12BFF84]
01268CE0    890491          mov     dword ptr [ecx+edx*4], eax
01268CE3    8B55 F4         mov     edx, dword ptr [ebp-C]
01268CE6    A1 84FF2B01     mov     eax, dword ptr [12BFF84]
01268CEB    833C90 00       cmp     dword ptr [eax+edx*4], 0
01268CEF    75 5F           jnz     short 01268D50
01268CF1    8B4D F8         mov     ecx, dword ptr [ebp-8]
01268CF4    8B51 08         mov     edx, dword ptr [ecx+8]
01268CF7    83E2 02         and     edx, 2
01268CFA    74 3B           je      short 01268D37
01268CFC    B8 1C000000     mov     eax, 1C
01268D01    C1E0 02         shl     eax, 2
01268D04    8B0D 04DB2B01   mov     ecx, dword ptr [12BDB04]         ; FlyWoool.009A3390
01268D0A    8B15 04DB2B01   mov     edx, dword ptr [12BDB04]         ; FlyWoool.009A3390
01268D10    8B35 04DB2B01   mov     esi, dword ptr [12BDB04]         ; FlyWoool.009A3390
01268D16    8B5E 24         mov     ebx, dword ptr [esi+24]
01268D19    339A 94000000   xor     ebx, dword ptr [edx+94]
01268D1F    331C01          xor     ebx, dword ptr [ecx+eax]
01268D22    83E3 10         and     ebx, 10
01268D25    F7DB            neg     ebx
01268D27    1BDB            **b     ebx, ebx
01268D29    F7DB            neg     ebx
01268D2B    0FB6C3          movzx   eax, bl
01268D2E    85C0            test    eax, eax
01268D30    75 05           jnz     short 01268D37
01268D32  ^ E9 15FFFFFF     jmp     01268C4C
01268D37    8D8D C8FEFFFF   lea     ecx, dword ptr [ebp-138]
01268D3D    51              push    ecx
01268D3E    FF15 88002B01   call    dword ptr [12B0088]              ; kernel32.LoadLibraryA

01268D22    83E3 10         and     ebx, 10
01268D25    F7DB            neg     ebx
01268D27    1BDB            **b     ebx, ebx
01268D29    F7DB            neg     ebx
01268D2B    0FB6C3          movzx   eax, bl
01268D2E    85C0            test    eax, eax
01268D30    75 05           jnz     short 01268D37
01268D32  ^ E9 15FFFFFF     jmp     01268C4C
01268D37    8D8D C8FEFFFF   lea     ecx, dword ptr [ebp-138]
01268D3D    51              push    ecx
01268D3E    FF15 88002B01   call    dword ptr [12B0088]              ; kernel32.LoadLibraryA
01268D44    8B55 F4         mov     edx, dword ptr [ebp-C]
01268D47    8B0D 84FF2B01   mov     ecx, dword ptr [12BFF84]
01268D4D    890491          mov     dword ptr [ecx+edx*4], eax
01268D50    8B55 F4         mov     edx, dword ptr [ebp-C]
01268D53    A1 84FF2B01     mov     eax, dword ptr [12BFF84]
01268D58    833C90 00       cmp     dword ptr [eax+edx*4], 0
01268D5C    75 05           jnz     short 01268D63         <===这里NOP掉
01268D5E  ^ E9 E9FEFFFF     jmp     01268C4C
01268D63    C785 BCFEFFFF 0>mov     dword ptr [ebp-144], 0
01268D6D    C785 C0FEFFFF 0>mov     dword ptr [ebp-140], 0
01268D77    8B4D F8         mov     ecx, dword ptr [ebp-8]
01268D7A    8B51 04         mov     edx, dword ptr [ecx+4]
01268D7D    8995 C4FEFFFF   mov     dword ptr [ebp-13C], edx
01268D83    EB 0F           jmp     short 01268D94
01268D85    8B85 C4FEFFFF   mov     eax, dword ptr [ebp-13C]
01268D8B    83C0 0C         add     eax, 0C

向下查找两个连续的Salc指令
01268FA7  ^\E9 80FEFFFF     jmp     01268E2C
01268FAC    8B0D 04DB2B01   mov     ecx, dword ptr [12BDB04]         ; FlyWoool.009A3390
01268FB2    8B15 04DB2B01   mov     edx, dword ptr [12BDB04]         ; FlyWoool.009A3390
01268FB8    A1 04DB2B01     mov     eax, dword ptr [12BDB04]
01268FBD    8B35 04DB2B01   mov     esi, dword ptr [12BDB04]         ; FlyWoool.009A3390
01268FC3    8B76 28         mov     esi, dword ptr [esi+28]
01268FC6    33B0 94000000   xor     esi, dword ptr [eax+94]
01268FCC    3372 6C         xor     esi, dword ptr [edx+6C]
01268FCF    3371 0C         xor     esi, dword ptr [ecx+C]
01268FD2    8B4D F4         mov     ecx, dword ptr [ebp-C]
01268FD5    8B15 84FF2B01   mov     edx, dword ptr [12BFF84]
01268FDB    33348A          xor     esi, dword ptr [edx+ecx*4]
01268FDE    8B45 F4         mov     eax, dword ptr [ebp-C]
01268FE1    8B0D 84FF2B01   mov     ecx, dword ptr [12BFF84]
01268FE7    893481          mov     dword ptr [ecx+eax*4], esi
01268FEA  ^ E9 5DFCFFFF     jmp     01268C4C
01268FEF    EB 03           jmp     short 01268FF4    <==这里F2下断,F9运行到这里
01268FF1    D6              salc
01268FF2    D6              salc
01268FF3    8F              ???                                      ; 未知命令
01268FF4    8B15 E4702C01   mov     edx, dword ptr [12C70E4]
01268FFA    8995 B4FDFFFF   mov     dword ptr [ebp-24C], edx
01269000    83BD B4FDFFFF 0>cmp     dword ptr [ebp-24C], 0
01269007    74 36           je      short 0126903F
01269009    8B85 B4FDFFFF   mov     eax, dword ptr [ebp-24C]
0126900F    8338 00         cmp     dword ptr [eax], 0
01269012    74 2B           je      short 0126903F

F9运行,断在01268FEF后将Magic JMP恢复到修改前的代码,IAT加密已被避开

去除时间校验,取消01268FEF处的断点,下硬件断点:he GetTickCount  F9运行

7C80929C >  BA 0000FE7F     mov     edx, 7FFE0000     <==停在这里Alt+F9返回
7C8092A1    8B02            mov     eax, dword ptr [edx]
7C8092A3    F762 04         mul     dword ptr [edx+4]

返回到这里:

01289AE7    8985 64D7FFFF   mov     dword ptr [ebp-289C], eax    <== 时间1到[ebp-289C]
01289AED    8B85 48D6FFFF   mov     eax, dword ptr [ebp-29B8]
01289AF3    8985 68D7FFFF   mov     dword ptr [ebp-2898], eax
01289AF9    8BB5 60D7FFFF   mov     esi, dword ptr [ebp-28A0]
01289AFF    6BF6 03         imul    esi, esi, 3
01289B02    E8 49750000     call    01291050
01289B07    F7D8            neg     eax
01289B09    1BC0            **b     eax, eax
01289B0B    83E0 02         and     eax, 2
01289B0E    83C0 01         add     eax, 1
01289B11    0FAFF0          imul    esi, eax
01289B14    8B8D 68D7FFFF   mov     ecx, dword ptr [ebp-2898]

第二次中断后Alt+F9返回在此:

01289CBF    2B85 64D7FFFF   sub     eax, dword ptr [ebp-289C] < == 时间2减[ebp-289C]的时间1,得到间隔
01289CC5    3D B80B0000     cmp     eax, 0BB8
01289CCA    76 12           jbe     short 01289CDE           <==== 改为jmp short 01289CDE  F7单步一次
01289CCC    8B95 98D7FFFF   mov     edx, dword ptr [ebp-2868]
01289CD2    81F2 C31C724B   xor     edx, 4B721CC3
01289CD8    8995 98D7FFFF   mov     dword ptr [ebp-2868], edx
01289CDE    8B85 48D6FFFF   mov     eax, dword ptr [ebp-29B8] <== 来到此处,取消断点及恢复01289CCA处修改
01289CE4    8985 ACABFFFF   mov     dword ptr [ebp+FFFFABAC], eax
01289CEA    8B8D ACABFFFF   mov     ecx, dword ptr [ebp+FFFFABAC]
01289CF0    51              push    ecx
01289CF1    E8 1EF80000     call    01299514

找OEP

下断点:bp CreateThread Shift+F9中断后发现返回的是程序空间,取消断点,Alt+F9返回

7C810637 >  8BFF            mov     edi, edi   <==返回到这里. 取消断点,Alt+F9返回
7C810639    55              push    ebp
7C81063A    8BEC            mov     ebp, esp
7C81063C    FF75 1C         push    dword ptr [ebp+1C]
7C81063F    FF75 18         push    dword ptr [ebp+18]
7C810642    FF75 14         push    dword ptr [ebp+14]
7C810645    FF75 10         push    dword ptr [ebp+10]
7C810648    FF75 0C         push    dword ptr [ebp+C]
7C81064B    FF75 08         push    dword ptr [ebp+8]
7C81064E    6A FF           push    -1
7C810650    E8 D7FDFFFF     call    CreateRemoteThread
7C810655    5D              pop     ebp
7C810656    C2 1800         retn    18
7C810659    33ED            xor     ebp, ebp
7C81065B    53              push    ebx
7C81065C    50              push    eax
7C81065D    6A 00           push    0

01274435    50              push    eax                <==Alt+F9返回
01274436    FF15 5C022B01   call    dword ptr [12B025C]              ; kernel32.CloseHandle
0127443C    5E              pop     esi
0127443D    5B              pop     ebx
0127443E    8BE5            mov     esp, ebp
01274440    5D              pop     ebp
01274441    C3              retn           <==返回到 01290564   F7跟进
01274442    CC              int3
01274443    CC              int3  

01290564    83C4 04         add     esp, 4     <==跟到这里
01290567    B9 B8D42B01     mov     ecx, 12BD4B8
0129056C    E8 2FBAFBFF     call    0124BFA0
01290571    0FB6C0          movzx   eax, al
01290574    85C0            test    eax, eax
01290576    74 0C           je      short 01290584
01290578    6A 01           push    1
0129057A    B9 B8D42B01     mov     ecx, 12BD4B8
0129057F    E8 DCA1FCFF     call    0125A760
01290584    C705 38972B01 8>mov     dword ptr [12B9738], 12B3C8C     ; ASCII "彖渧`8eュ闇v`8eュ隃v`8exitProcess"
0129058E    B9 04C62B01     mov     ecx, 12BC604
01290593    E8 B82EFBFF     call    01243450
01290598    C745 F0 0000000>mov     dword ptr [ebp-10], 0
0129059F    8D4D E8         lea     ecx, dword ptr [ebp-18]
012905A2    51              push    ecx
012905A3    68 90062901     push    1290690
012905A8    FF15 74D12B01   call    dword ptr [12BD174]
012905AE    83C4 08         add     esp, 8
012905B1    8B15 1CDB2B01   mov     edx, dword ptr [12BDB1C]         ; FlyWoool.00400000
012905B7    8955 E4         mov     dword ptr [ebp-1C], edx
012905BA    B8 22000000     mov     eax, 22
012905BF    C1E0 02         shl     eax, 2
012905C2    8B0D 04DB2B01   mov     ecx, dword ptr [12BDB04]         ; FlyWoool.009A3390
012905C8    8B15 04DB2B01   mov     edx, dword ptr [12BDB04]         ; FlyWoool.009A3390
012905CE    8B35 04DB2B01   mov     esi, dword ptr [12BDB04]         ; FlyWoool.009A3390

向下查找最近的一个Retn
01290668    6A 00           push    0
0129066A    8B45 08         mov     eax, dword ptr [ebp+8]
0129066D    8B48 0C         mov     ecx, dword ptr [eax+C]
01290670    51              push    ecx
01290671    8B55 F4         mov     edx, dword ptr [ebp-C]
01290674    2B55 DC         sub     edx, dword ptr [ebp-24]
01290677    FFD2            call    edx         <== 进OEP的Call,此处F2下断点,F9断下后F7跟进  
01290679    8945 FC         mov     dword ptr [ebp-4], eax
0129067C    8B45 FC         mov     eax, dword ptr [ebp-4]
0129067F    5E              pop     esi
01290680    8BE5            mov     esp, ebp
01290682    5D              pop     ebp
01290683    C3              retn         <== 这里,向上查看call edx
01290684    CC              int3
01290685    CC              int3
01290686    CC              int3
01290687    CC              int3
01290688    CC              int3

OEP: 一片大红

004E215C    6A 60           push    60      <====停在这里,一片大红......这里是OEP吗?
004E215E    68 40BC6500     push    0065BC40
004E2163    E8 2C120000     call    004E3394
004E2168    BF 94000000     mov     edi, 94
004E216D    8BC7            mov     eax, edi
004E216F    E8 6CD0FFFF     call    004DF1E0
004E2174    8965 E8         mov     dword ptr [ebp-18], esp
004E2177    8BF4            mov     esi, esp
004E2179    893E            mov     dword ptr [esi], edi
004E217B    56              push    esi
004E217C    FF15 F4414801   call    dword ptr [14841F4]              ; kernel32.GetVersionExA
004E2182    8B4E 10         mov     ecx, dword ptr [esi+10]
004E2185    890D 7CD79300   mov     dword ptr [93D77C], ecx
004E218B    8B46 04         mov     eax, dword ptr [esi+4]
004E218E    A3 88D79300     mov     dword ptr [93D788], eax
004E2193    8B56 08         mov     edx, dword ptr [esi+8]
004E2196    8915 8CD79300   mov     dword ptr [93D78C], edx
004E219C    8B76 0C         mov     esi, dword ptr [esi+C]
004E219F    81E6 FF7F0000   and     esi, 7FFF
004E21A5    8935 80D79300   mov     dword ptr [93D780], esi
004E21AB    83F9 02         cmp     ecx, 2
004E21AE    74 0C           je      short 004E21BC
004E21B0    81CE 00800000   or      esi, 8000
004E21B6    8935 80D79300   mov     dword ptr [93D780], esi
004E21BC    C1E0 08         shl     eax, 8
004E21BF    03C2            add     eax, edx
004E21C1    A3 84D79300     mov     dword ptr [93D784], eax
004E21C6    33F6            xor     esi, esi
004E21C8    56              push    esi
004E21C9    8B3D E8474801   mov     edi, dword ptr [14847E8]         ; kernel32.GetModuleHandleA

找到OEP后,

用ArmInlinev0.96f分别修复Strategic Code Splicing(策略代码拼接)和Import Table Elimination(输入表混淆)。全是自动的。然后用LodePE-DLX全部Dump出该进程(只有一个,因为被转成单进程了)。

抓取正确的输入表
打开ImportREC1.6f选择程序进程,我参照ArmInlinev0.96f重建的IAT基址 填入后,会自动变,无法保留我输入的RVA数值 和Size大小

按 ArmInlinev0.96f 自动给出的数值,转存后,运行程序,出现自校验.

接下来怎么去除自校验,小菜,不会了还请老师们给指点一下,

不知道这个OEP找的对不对.

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这个 Armadillo5.42双进程和  Armadillo5.20双进程  破解方法一样吗?上面是我按照Armadillo5.20双进程 教程破的,是不是找的OEP不对啊?
2008-8-11 09:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你把你脱壳后的程序发到我的邮箱,我给你看看

wangpin_2004real@163.com
2008-9-3 09:23
0
游客
登录 | 注册 方可回帖
返回