evilangel 发表于 2009-4-8 12:29

PECompact v2.986 Retail试炼壳简单分析

本帖最后由 evilangel 于 2009-4-8 12:42 编辑

不懂得如何给软件加试炼壳,只是简单加了下,加壳方式如下



OD载入,忽略所以异常
停在

01001000 >B8 C8AF0101   mov   eax, 0101AFC8                   //EP入口
01001005    50            push    eax
01001006    64:FF35 0000000>push    dword ptr fs:
0100100D    64:8925 0000000>mov   fs:, esp
01001014    33C0            xor   eax, eax
01001016    8908            mov   , ecx

///////////////////////////////////////////////////////////
跟以前的类似
下断点:BP VirtualFree
先运行一次 断在

7C809B04 >8BFF            mov   edi, edi
7C809B06    55            push    ebp
7C809B07    8BEC            mov   ebp, esp
7C809B09    FF75 10         push    dword ptr
7C809B0C    FF75 0C         push    dword ptr
7C809B0F    FF75 08         push    dword ptr
7C809B12    6A FF         push    -1
7C809B14    E8 09000000   call    VirtualFreeEx
7C809B19    5D            pop   ebp
7C809B1A    C2 0C00         retn    0C
////////////////////////////////////////////////////////////
不取消断点,alt+f9返回

002D1255    5F            pop   edi                              ; 0081408E
002D1256    5E            pop   esi
002D1257    8BC3            mov   eax, ebx
002D1259    5B            pop   ebx
002D125A    C9            leave
002D125B    C2 0C00         retn    0C

////////////////////////////////////////////////////////////
右键---查找---二进制字符串   输入   89 02

下面的地方
       


002D1C51    50            push    eax                              ; NOTEPAD-.01007AA0
002D1C52    FF75 FC         push    dword ptr                 ; //上面一行函数压栈
002D1C55    FF93 4D1F0010   call                       ; //MAGIC CALL,F2下断,F9运行断在这儿
002D1C5B    5A            pop   edx
002D1C5C    85C0            test    eax, eax
002D1C5E^ 0F84 6FFFFFFF   je      002D1BD3
002D1C64    8906            mov   , eax                     ; //函数给地址
002D1C66    8902            mov   , eax                     ; //如果加密给加密的地址
002D1C68    83C2 04         add   edx, 4
002D1C6B    83C6 04         add   esi, 4
002D1C6E^ EB AC         jmp   short 002D1C1C
002D1C70    33C0            xor   eax, eax
002D1C72    5E            pop   esi
002D1C73    5F            pop   edi
002D1C74    5B            pop   ebx
002D1C75    C9            leave
002D1C76    C2 1000         retn    10

//////////////////////////////////////////////////////////////////
断下后取消断点, 002D1C55 这一行 F7进入

002D091D    55            push    ebp
002D091E    8BEC            mov   ebp, esp
002D0920    83C4 FC         add   esp, -4
002D0923    53            push    ebx
002D0924    57            push    edi
002D0925    56            push    esi
002D0926    E8 00000000   call    002D092B
002D092B    5B            pop   ebx
002D092C    81EB FE103F00   sub   ebx, 3F10FE
002D0932    FF75 10         push    dword ptr
002D0935    FF75 0C         push    dword ptr
002D0938    FF75 08         push    dword ptr
002D093B    FF93 2F103F00   call                         ; //对于GetProAddress这个函数在这儿里面加密
002D0941    8945 FC         mov   , eax                     ; //搜索二进制75 06勾选整个块
002D0944    8B8B 61103F00   mov   ecx,
002D094A    3B4D 08         cmp   ecx,
002D094D    75 63         jnz   short 002D09B2                   ; //magic jump


///////////////////////////////////////////////
此时可以
右键------查找----二进制字符串   输入75 06   记得这个要勾选整个块

002D040A    FF93 29103F00   call   
002D0410    3B83 41103F00   cmp   eax,                 ; //GetProcAddress在下面加密
002D0416    75 06         jnz   short 002D041E                   ; //这里改成 jmp
002D0418    8D83 55113F00   lea   eax,
002D041E    5E            pop   esi
002D041F    5F            pop   edi
002D0420    5B            pop   ebx
002D0421    C9            leave
002D0422    C2 0C00         retn    0C


///////////////////////////////////////////////////////
改完后两处后,F9运行

停在

7C809B04 >8BFF            mov   edi, edi                         ; NOTEPAD-.01000000
7C809B06    55            push    ebp
7C809B07    8BEC            mov   ebp, esp
7C809B09    FF75 10         push    dword ptr
7C809B0C    FF75 0C         push    dword ptr
7C809B0F    FF75 08         push    dword ptr
7C809B12    6A FF         push    -1
7C809B14    E8 09000000   call    VirtualFreeEx
7C809B19    5D            pop   ebp
7C809B1A    C2 0C00         retn    0C


出现基址了,最佳返回时机了
/////////////////////////////////////////////////////////
取消断点,alt+f9返回

002D15C3    8B46 0C         mov   eax,                      ; //取消断点,alt+f9返回到这儿,F8单步
002D15C6    03C7            add   eax, edi
002D15C8    5D            pop   ebp
002D15C9    5E            pop   esi
002D15CA    5F            pop   edi
002D15CB    5B            pop   ebx
002D15CC    C3            retn

/////////////////////////////////////////////////////

0101B068    8985 3F130010   mov   , eax            ; NOTEPAD-.0100739D
0101B06E    8BF0            mov   esi, eax                         ; //上面出现OEP地址了
0101B070    8B4B 14         mov   ecx,
0101B073    5A            pop   edx
0101B074    EB 0C         jmp   short 0101B082
0101B076    03CA            add   ecx, edx
0101B078    68 00800000   push    8000
0101B07D    6A 00         push    0
0101B07F    57            push    edi
0101B080    FF11            call   
0101B082    8BC6            mov   eax, esi
0101B084    5A            pop   edx
0101B085    5E            pop   esi
0101B086    5F            pop   edi
0101B087    59            pop   ecx
0101B088    5B            pop   ebx
0101B089    5D            pop   ebp
0101B08A    FFE0            jmp   eax                              ; //跳向OEP

/////////////////////////////////////////////////////////
0100739D    6A 70         push    70                               ; //OEP
0100739F    68 98180001   push    01001898
010073A4    E8 BF010000   call    01007568
010073A9    33DB            xor   ebx, ebx
010073AB    53            push    ebx
010073AC    8B3D CC100001   mov   edi,                    ; kernel32.GetModuleHandleA
010073B2    FFD7            call    edi
010073B4    66:8138 4D5A    cmp   word ptr , 5A4D
010073B9    75 1F         jnz   short 010073DA
010073BB    8B48 3C         mov   ecx,
010073BE    03C8            add   ecx, eax
010073C0    8139 50450000   cmp   dword ptr , 4550
010073C6    75 12         jnz   short 010073DA

LORDPE脱壳,用ImpREC修复,修复是注意:选项 -----抓取文件 -----修复PE to OEP 这个地方勾选上


全部有效,如果 75 06那个magic不改的话,有无效的话就填GetProcAddress


PS:似乎可以直接用插件脱壳,不用修复!
OK成功!
再PS:push   8000找OEP的那个方法也能用,其他几种下断方法也行



文章首发吾爱破解论坛,www.52pojie.cn欢迎转载,非作者本人,转载请注明!

evilangel 发表于 2009-4-8 12:39

:)   
我这样的加壳应该没什么难度,希望高手指点下应该用这个程序给软件加壳,O(∩_∩)O谢谢

evilangel 发表于 2009-4-8 13:03

本帖最后由 evilangel 于 2009-4-8 13:04 编辑

:lol    还有一个只是加壳一点点改变的,没有发到论坛
到我空间看哈
http://hi.baidu.com/fei23niao/blog/item/1658fc8f9f83c9e6f11f3602.html

open5858 发表于 2009-4-9 01:54

本帖最后由 open5858 于 2009-4-9 01:58 编辑

方法不錯跟樓主學習了:)

331333 发表于 2009-4-10 22:04

我爱52破破从没走过

crackforchin 发表于 2009-4-17 08:00

看看手脱新版方法

shawnpeter 发表于 2010-3-7 10:51

thanks a lot
页: [1]
查看完整版本: PECompact v2.986 Retail试炼壳简单分析