黑客防线,在攻与防的对立统一中寻求突破!2001年创刊的黑客技术专业刊物!

设为首页
收藏本站
联系我们
网站导航

黑客文章 - 加密解密 - 浏览 - Armadillo 2.52加壳原理分析和改进的脱壳方法

Armadillo 2.52加壳原理分析和改进的脱壳方法

黑客 发布日期:2008-4-23 1:49:35 共有 993 人次浏览
目标软件:The Armadillo Software Protection System Version2.52 build 1164
目标文件:Armadillo.exe
加壳方式:Armadillo 2.52
使用工具:WinDbg或trw2000, peditor, WinHex 10.2 SR-2,m$的win32 sdk文档,<winnt.h>

URL: http://www.sil
(一)捕获页面保护异常、找OEP  

    和以前版本一样,Armadillo 外壳产生另外一个进程(被加壳的程序)。所以下断点“bpx createprocessa”  

004C39E4                call    ds:CreateProcessA  
004C39EA                test    eax, eax  
004C39EC                jnz    4C39F5  
……  
……  

0187:004C3A0F 51              PUSH    ECX  
0187:004C3A10 68E6314C00      PUSH    DWORD 004C31E6  
0187:004C3A15 6A00            PUSH    BYTE +00  
0187:004C3A17 6A00            PUSH    BYTE +00  
0187:004C3A19 FF1554A04C00    CALL    `KERNEL32!CreateThread`  
0187:004C3A1F 6A00            PUSH    BYTE +00  
0187:004C3A21 FF1530A14C00    CALL    `KERNEL32!GetModuleHandleA`  
……  
……  
……  
0187:004C3A42 6A00            PUSH    BYTE +00  
0187:004C3A44 FF1530A14C00    CALL    `KERNEL32!GetModuleHandleA`  
……  
……  

0187:004C3A68 E80C0C0000      CALL    004C4679  
0187:004C3A6D 83C40C          ADD      ESP,BYTE +0C  
0187:004C3A70 8B8D68FEFFFF    MOV      ECX,[EBP+FFFFFE68]  
0187:004C3A76 51              PUSH    ECX  
0187:004C3A77 8B157CE54C00    MOV      EDX,[004CE57C]  
0187:004C3A7D 52              PUSH    EDX  
0187:004C3A7E E8BA0C0000      CALL    004C473D  

以上代码在被加壳的程序第一条指令处写入“eb fe”代码,即“jmp eip” 使被加壳程序“挂起”  


0187:004C3A83 83C408          ADD      ESP,BYTE +08  
0187:004C3A86 A17CE54C00      MOV      EAX,[004CE57C]  
0187:004C3A8B 8B4804          MOV      ECX,[EAX+04]  
0187:004C3A8E 51              PUSH    ECX  
0187:004C3A8F FF158CA04C00    CALL    `KERNEL32!ResumeThread`  
0187:004C3A95 8B157CE54C00    MOV      EDX,[004CE57C]  
0187:004C3A9B 8B4208          MOV      EAX,[EDX+08]  
0187:004C3A9E 50              PUSH    EAX  
0187:004C3A9F FF1588A04C00    CALL    `KERNEL32!DebugActiveProcess`  
0187:004C3AA5 8B0D7CE54C00    MOV      ECX,[004CE57C]  
0187:004C3AAB 8B5104          MOV      EDX,[ECX+04]  
0187:004C3AAE 52              PUSH    EDX  
0187:004C3AAF FF1584A04C00    CALL    `KERNEL32!SuspendThread`  

以上代码通过调用“DebugActiveProcess”开始调试被加壳的程序。  
……  
……  
……  

0187:004C3AFA 68E8030000      PUSH    DWORD 03E8  《===== dwMilliseconds  
0187:004C3AFF 8B9574FEFFFF    MOV      EDX,[EBP+FFFFFE74]  
0187:004C3B05 52              PUSH    EDX          〈====  lpDebugEvent  
0187:004C3B06 FF1580A04C00    CALL    `KERNEL32!WaitForDebugEvent`  
0187:004C3B0C 85C0            TEST    EAX,EAX  
0187:004C3B0E 0F8414060000    JZ      NEAR 004C4128  
0187:004C3B14 C78570FDFFFF68B4+MOV      DWORD [EBP+FFFFFD70],004CB468  
0187:004C3B1E 33C0            XOR      EAX,EAX  
0187:004C3B20 A06EE54C00      MOV      AL,[004CE56E]  
0187:004C3B25 85C0            TEST    EAX,EAX  
0187:004C3B27 7565            JNZ      004C3B8E  
0187:004C3B29 8B4DE4          MOV      ECX,[EBP-1C]  
0187:004C3B2C 81E1FF000000    AND      ECX,FF  
0187:004C3B32 85C9            TEST    ECX,ECX  
0187:004C3B34 7458            JZ      004C3B8E      〈==跳转  
0187:004C3B36 C645E400        MOV      BYTE [EBP-1C],00  
0187:004C3B3A C745FC00000000  MOV      DWORD [EBP-04],00  
0187:004C3B41 669C            PUSHFW            +  
0187:004C3B43 6658            POP      AX        |  
0187:004C3B45 66056200        ADD      AX,62    |设置单步调试标志  
0187:004C3B49 66059E00        ADD      AX,9E    |anti-debug???  
0187:004C3B4D 6650            PUSH    AX        |  
0187:004C3B4F 669D            POPFW              +  
0187:004C3B51 66050100        ADD      AX,01  
0187:004C3B55 C745FCFFFFFFFF  MOV      DWORD [EBP-04],FFFFFFFF  
0187:004C3B5C EB30            JMP      SHORT 004C3B8E  

以上进入调试循环,根据DebugEvent结构中的debugging event code 做相应处理。其中最重要的是EXCEPTION_DEBUG_EVENT(0x00000001)。请参考MSDN中WaitForDebugEvent的描述。

所属分类: 加密解密     网摘收藏: Google 雅虎 百度 POCO 365key 和讯 天极