安全中国首页 > 文章中心 > 脱壳技术
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

ACProtect_122b_pro主程序脱壳笔记

更新时间:2008-4-18 0:08:04
责任编辑:池天
热 点:
【前    言】:我现在找到一个更加方便的方法.而且也破解了一个限制.所以重新写下了这篇.由于这个壳有很多特别的地方,所以写笔记的时候主要是用自己的思想去写的.希望读者可以看明白和学会!

【软件名称】:ACProtect_122b_pro

【下载页面】:不记得了

【软件大小】:828,282 字节  ----->   3,567,616 字节

【应用平台】:WINXP

【软件简介】:一个加密器

【软件限制】:超级BT的OEP抽走代码.SDK保护.数据转移

【文章作者】:辉仔Yock

【作者声明】:本人读书少,比较笨,表达也不好,有什么地方写的不好,还请大侠多多指出,我好及时改正!

【破解工具】:Yock-OD    LordPE    ImportREC

————————————————————————————————— 
【过    程】:


//首先载入.忽略所有异常( 除内存异常之外 ) 还有就是隐藏OD了

006D5000 >  60              PUSHAD
//壳的OEP
//重要

006D5001    87EA            XCHG    EDX, EBP
006D5003    66:23EF         AND     BP, DI
006D5006    66:8BD3         MOV     DX, BX
006D5009    FC              CLD

*********************************************
//这个壳有一个很有意思的地方,就是边走边解码,让我联想起一首歌的名字------边走边爱
006D5BB3    81CA 4FF34B51   OR      EDX, 514BF34F
006D5BB9    81C3 4B8BAC86   ADD     EBX, 86AC8B4B
006D5BBF    BE 4F460000     MOV     ESI, 464F
006D5BC4    8B0F            MOV     ECX, [EDI]
006D5BC6    03CB            ADD     ECX, EBX
006D5BC8    C1C9 07         ROR     ECX, 7
006D5BCB    83EF FC         SUB     EDI, -4
006D5BCE    2B0F            SUB     ECX, [EDI]
006D5BD0    83C7 FC         ADD     EDI, -4
006D5BD3    890F            MOV     [EDI], ECX
006D5BD5    81F3 A4F8B360   XOR     EBX, 60B3F8A4
006D5BDB    81EF FCFFFFFF   SUB     EDI, -4
006D5BE1    83EE 01         SUB     ESI, 1
006D5BE4  ^ 0F85 DAFFFFFF   JNZ     006D5BC4
006D5BEA    E9 A9180100     JMP     006E7498
//来到这里就要开始了.注意了.
006D5BEF    0000            ADD     [EAX], AL
006D5BF1    0000            ADD     [EAX], AL
006D5BF3    0000            ADD     [EAX], AL
006D5BF5    0000            ADD     [EAX], AL
006D5BF7    0000            ADD     [EAX], AL
---------------------------------------------
//上面跳到这里:
//来到这里马上豁然开朗.
//这里有很多CALL,里面的用处都有不同的.我会在下面分别对重要的CALL进行简单分析.

006E7498    E8 4ABBFFFF     CALL    006E2FE7
//这个CALL主要是取得一个固定的值放进去EBP里面作为一个固定量.
006E749D    E8 00000000     CALL    006E74A2
006E74A2    5B              POP     EBX
006E74A3    2B9D F6234000   SUB     EBX, [EBP+4023F6]
006E74A9    81EB A2240100   SUB     EBX, 124A2
006E74AF    899D 31DE4000   MOV     [EBP+40DE31], EBX
//上面这四个指令是计算出400000这个值.保存起来
006E74B5    E8 CCFDFFFF     CALL    006E7286
//用OEP的值计算某某数值作为一个Key,用处没有多大留意了!
006E74BA    E8 28BBFFFF     CALL    006E2FE7
006E74BF    E8 C1B8FFFF     CALL    006E2D85
//根据之前的Key再次计算.
006E74C4    8985 8CED4000   MOV     [EBP+40ED8C], EAX
//最终的Key保存起来.其实是一个效验.对于密码学菜的我就没有花什么时间跟这里了.
006E74CA    E8 18BBFFFF     CALL    006E2FE7
006E74CF    C685 57DD4000 0>MOV     BYTE PTR [EBP+40DD57], 0
006E74D6    E8 46DDFFFF     CALL    006E5221
//这里是我问了一下jeff才知道是ACP这个系统的AIP来的.有意思...(jeff说和跨平台有很大关系.所以在这里提提)
006E74DB    E8 DEDAFFFF     CALL    006E4FBE
//这里是代码解码处.解码完毕之后会把006E4FBE这个地址改成一个C3(够心思,不过没有什么用)
006E74E0    E8 5BFDFFFF     CALL    006E7240
//这里就是转移数据到低位.(需要进去做做手脚,注意!!现在最新版1.22d版的对于这里有一下效验.这个版的没有)
//再往下走就是 反跟踪 反调试 IAT解码
006E74E5    E8 FDBAFFFF     CALL    006E2FE7
006E74EA    6A 00           PUSH    0
006E74EC    E8 0A000000     CALL    006E74FB
006E74F1    41              INC     ECX
006E74F2    43              INC     EBX
006E74F3    50              PUSH    EAX
006E74F4    72 6F           JB      SHORT 006E7565
006E74F6    74 65           JE      SHORT 006E755D
006E74F8    637400 E8       ARPL    [EAX+EAX-18], SI
006E74FC    25 00000050     AND     EAX, 50000000
006E7501    72 6F           JB      SHORT 006E7572
..............
..........省略N多的小花...
.............

//由于花指令太多.所以列出一些关键的CALL
//这里CALL都藏在小花里面的,跟踪时需要细心留神

006E7795    E8 9DC3FFFF     CALL    006E3B37
//里面是一段小花,然后到达小黑(黑名单)
//然后返回
..............
..........省略N多的小花...
.............

006E79C7    E8 53D1FFFF     CALL    006E4B1F 
//进入之后是一段小花后到达下面检查调试器
//kernel32.IsDebuggerPresent
//如果发现调试器的话,不是杀掉,而是把程序代码改一下,比如E9改成01.呵呵,后果可想而知(够阴险)
//然后返回

..............
..........省略N多的小花...
.............
006E7B91    E8 10C3FFFF     CALL    006E3EA6
//里面的东西由于自己水平低下而看不懂.就下面这三个AIP
//kernel32.GetCurrentThread
//kernel32.GetThreadContext
//kernel32.SetThreadContext
//返回

..............
..........省略N多的小花...
.............

006E7BAC    E8 6ECFFFFF     CALL    006E4B1F
//我靠,进去再次检查调试器!!!
//如果发现调试器的话,不是杀掉,而是把程序代码改一下,比如E9改成01.呵呵,后果可想而知(够阴险)

..............
..........省略N多的小花...
.............

006E7C57    E8 C3CEFFFF     CALL    006E4B1F                         ; ACProtec.006E4B1F
//我靠,再次检查调试器!!!发神经!
//如果发现调试器的话,不是杀掉,而是把程序代码改一下,比如E9改成01.呵呵,后果可想而知(够阴险)
//其实来到这里进入之后是一个C3

..............
..........省略N多的小花...
.............

//来到下面这个CALL的时候就需要注意了.经过了上面的抢林弹雨,是时候进入这个XX的私密之处咯.
006E7CA7    E8 40DDFFFF     CALL    006E59EC                         ; ACProtec.006E59EC
//进入之后来到下面关键一

********************************************
--->
//006E7CA7 处的CALL来到这里!

006E5B97    E8 4BD4FFFF     CALL    006E2FE7                         ; ACProtec.006E2FE7
006E5B9C    80BD 472D4100 C>CMP     BYTE PTR [EBP+412D47], 0C3
//这里是比较下面006E5BA9的CALL进入后的第一条指令是否C3.是的话就跳过(多余)
006E5BA3    74 09           JE      SHORT 006E5BAE                   ; ACProtec.006E5BAE
006E5BA5    90              NOP
006E5BA6    90              NOP
006E5BA7    90              NOP
006E5BA8    90              NOP
006E5BA9    E8 99110000     CALL    006E6D47                         ; ACProtec.006E6D47
//IAT解码处.这里留在最后.因为这个壳的IAT没有难度.因此不详细说了!

006E5BAE    66:C785 17DB400>MOV     WORD PTR [EBP+40DB17], 0
006E5BB7    83BD E8AC4100 0>CMP     DWORD PTR [EBP+41ACE8], 0
006E5BBE    0F84 BF000000   JE      006E5C83                         ; ACProtec.006E5C83
006E5BC4    8DB5 93D94000   LEA     ESI, [EBP+40D993]
006E5BCA    56              PUSH    ESI
006E5BCB    68 FF000000     PUSH    0FF
006E5BD0    FF95 46E34000   CALL    [EBP+40E346]
//取得系统临时目录的路径
006E5BD6    8DBD 93D94000   LEA     EDI, [EBP+40D993]
006E5BDC    33C0            XOR     EAX, EAX
006E5BDE    F2:AE           REPNE   SCAS BYTE PTR ES:[EDI]
006E5BE0    8DB5 A3DA4000   LEA     ESI, [EBP+40DAA3]
006E5BE6    4F              DEC     EDI
006E5BE7    B9 0B000000     MOV     ECX, 0B
006E5BEC    F3:A4           REP     MOVS BYTE PTR ES:[EDI], BYTE PTR>
006E5BEE    8DB5 93D94000   LEA     ESI, [EBP+40D993]
006E5BF4    6A 00           PUSH    0
006E5BF6    6A 20           PUSH    20
006E5BF8    6A 02           PUSH    2
006E5BFA    6A 00           PUSH    0
006E5BFC    6A 03           PUSH    3
006E5BFE    68 000000C0     PUSH    C0000000
006E5C03    56              PUSH    ESI
006E5C04    FF95 16E34000   CALL    [EBP+40E316]
//查找是否有perplex.dll
006E5C0A    0BC0            OR      EAX, EAX
006E5C0C    74 75           JE      SHORT 006E5C83                   ; ACProtec.006E5C83
//没有怎么办呢?自己分泌一个.我操
006E5C0E    90              NOP
006E5C0F    90              NOP
006E5C10    90              NOP
006E5C11    90              NOP
006E5C12    50              PUSH    EAX
006E5C13    6A 00           PUSH    0
006E5C15    8DB5 9FDA4000   LEA     ESI, [EBP+40DA9F]
006E5C1B    56              PUSH    ESI
006E5C1C    FFB5 ECAC4100   PUSH    DWORD PTR [EBP+41ACEC]
006E5C22    8B9D E8AC4100   MOV     EBX, [EBP+41ACE8]
006E5C28    039D 31DE4000   ADD     EBX, [EBP+40DE31]
006E5C2E    2B9D ECAC4100   SUB     EBX, [EBP+41ACEC]
006E5C34    53              PUSH    EBX
006E5C35    50              PUSH    EAX
006E5C36    FF95 3EE34000   CALL    [EBP+40E33E]
006E5C3C    FF95 12E34000   CALL    [EBP+40E312]
//分泌就是那么简单!呵呵
006E5C42    8DB5 93D94000   LEA     ESI, [EBP+40D993]
006E5C48    56              PUSH    ESI
006E5C49    FF95 88B04100   CALL    [EBP+41B088]                     ; kernel32.LoadLibraryA
//......
006E5C4F    0BC0            OR      EAX, EAX
006E5C51    74 30           JE      SHORT 006E5C83                   ; ACProtec.006E5C83
006E5C53    90              NOP
006E5C54    90              NOP
006E5C55    90              NOP
006E5C56    90              NOP
006E5C57    8985 29DE4000   MOV     [EBP+40DE29], EAX
006E5C5D    8DB5 AFDA4000   LEA     ESI, [EBP+40DAAF]
006E5C63    56              PUSH    ESI
006E5C64    FFB5 29DE4000   PUSH    DWORD PTR [EBP+40DE29]
006E5C6A    FF95 80B04100   CALL    [EBP+41B080]                     ; kernel32.GetProcAddress
006E5C70    8985 AFDA4000   MOV     [EBP+40DAAF], EAX
//EAX=10002DB0
006E5C76    0BC0            OR      EAX, EAX
006E5C78    74 09           JE      SHORT 006E5C83                   ; ACProtec.006E5C83
//是否找到这个DLL的口子.是的话就进入
006E5C7A    90              NOP
006E5C7B    90              NOP
006E5C7C    90              NOP
006E5C7D    90              NOP
006E5C7E    E8 20F8FFFF     CALL    006E54A3                         ; ACProtec.006E54A3
//跟进去瞧瞧是啥样子的娘们
006E5C83    60              PUSHAD
006E5C84    E8 00000000     CALL    006E5C89                         ; ACProtec.006E5C89
006E5C89    5E              POP     ESI                              ; ACProtec.006E7D5C
006E5C8A    83EE 06         SUB     ESI, 6
006E5C8D    B9 EC000000     MOV     ECX, 0EC
006E5C92    29CE            SUB     ESI, ECX                         ; ACProtec.006E7C00
006E5C94    BA 22F93191     MOV     EDX, 9131F922
006E5C99    C1E9 02         SHR     ECX, 2
006E5C9C    83E9 02         SUB     ECX, 2
006E5C9F    83F9 00         CMP     ECX, 0
006E5CA2    7C 1A           JL      SHORT 006E5CBE                   ; ACProtec.006E5CBE
006E5CA4    8B048E          MOV     EAX, [ESI+ECX*4]
006E5CA7    8B5C8E 04       MOV     EBX, [ESI+ECX*4+4]
006E5CAB    2BC3            SUB     EAX, EBX
006E5CAD    C1C8 0B         ROR     EAX, 0B
006E5CB0    33C2            XOR     EAX, EDX
006E5CB2    81EA B1E7B51F   SUB     EDX, 1FB5E7B1
006E5CB8    89048E          MOV     [ESI+ECX*4], EAX
006E5CBB    49              DEC     ECX                              ; ACProtec.006E7C00
006E5CBC  ^ EB E1           JMP     SHORT 006E5C9F                   ; ACProtec.006E5C9F
006E5CBE    61              POPAD



**************************************************************
--->
//006E5C7E处的CALL进入之后是小花,然后来到下面:
//下面这段我看不懂.比较晕...
//仔细跟了一下是一个把程序自己的路径转换成为Key.dat.
//应该是准备计算注册Key是否合格了!

006E5669    FFB5 FA234000   PUSH    DWORD PTR [EBP+4023FA]           ; kernel32.77E40000
006E566F    FF95 80B04100   CALL    [EBP+41B080]                     ; kernel32.GetProcAddress
006E5675    FFD0            CALL    EAX
//kernel32.GetCommandLineA
006E5677    8BF0            MOV     ESI, EAX
006E5679    8DBD 93D94000   LEA     EDI, [EBP+40D993]
006E567F    AC              LODS    BYTE PTR [ESI]
006E5680    0AC0            OR      AL, AL
006E5682    74 30           JE      SHORT 006E56B4                   ; ACProtec.006E56B4
006E5684    90              NOP
006E5685    90              NOP
006E5686    90              NOP
006E5687    90              NOP
006E5688    3C 5C           CMP     AL, 5C
006E568A    75 0B           JNZ     SHORT 006E5697                   ; ACProtec.006E5697
006E568C    90              NOP
006E568D    90              NOP
006E568E    90              NOP
006E568F    90              NOP
006E5690    C685 68164100 0>MOV     BYTE PTR [EBP+411668], 1
006E5697    817E FB 2E45584>CMP     DWORD PTR [ESI-5], 4558452E
006E569E    74 14           JE      SHORT 006E56B4                   ; ACProtec.006E56B4
006E56A0    90              NOP
006E56A1    90              NOP
006E56A2    90              NOP
006E56A3    90              NOP
006E56A4    817E FB 2E65786>CMP     DWORD PTR [ESI-5], 6578652E
006E56AB    74 07           JE      SHORT 006E56B4                   ; ACProtec.006E56B4
006E56AD    90              NOP
006E56AE    90              NOP
006E56AF    90              NOP
006E56B0    90              NOP
006E56B1    AA              STOS    BYTE PTR ES:[EDI]
006E56B2  ^ EB CB           JMP     SHORT 006E567F                   ; ACProtec.006E567F
006E56B4    4F              DEC     EDI
006E56B5    8A07            MOV     AL, [EDI]
006E56B7    0AC0            OR      AL, AL
006E56B9    74 08           JE      SHORT 006E56C3                   ; ACProtec.006E56C3
006E56BB    90              NOP
006E56BC    90              NOP
006E56BD    90              NOP
006E56BE    90              NOP
006E56BF    3C 5C           CMP     AL, 5C
006E56C1  ^ 75 F1           JNZ     SHORT 006E56B4                   ; ACProtec.006E56B4
006E56C3    47              INC     EDI
006E56C4    80BD 68164100 0>CMP     BYTE PTR [EBP+411668], 1
006E56CB    74 0A           JE      SHORT 006E56D7                   ; ACProtec.006E56D7
006E56CD    90              NOP
006E56CE    90              NOP
006E56CF    90              NOP
006E56D0    90              NOP
006E56D1    8DBD 93D94000   LEA     EDI, [EBP+40D993]
006E56D7    8DB5 93DA4000   LEA     ESI, [EBP+40DA93]
006E56DD    B9 0C000000     MOV     ECX, 0C
006E56E2    F3:A4           REP     MOVS BYTE PTR ES:[EDI], BYTE PTR>
006E56E4    80BD 68164100 0>CMP     BYTE PTR [EBP+411668], 1
006E56EB    74 0F           JE      SHORT 006E56FC                   ; ACProtec.006E56FC
006E56ED    90              NOP
006E56EE    90              NOP
006E56EF    90              NOP
006E56F0    90              NOP
006E56F1    8DBD 93DA4000   LEA     EDI, [EBP+40DA93]
006E56F7    EB 14           JMP     SHORT 006E570D                   ; ACProtec.006E570D
006E56F9    90              NOP
006E56FA    90              NOP
006E56FB    90              NOP
006E56FC    66:8B07         MOV     AX, [EDI]
006E56FF    66:3D 3A5C      CMP     AX, 5C3A
006E5703    74 07           JE      SHORT 006E570C                   ; ACProtec.006E570C
006E5705    90              NOP
006E5706    90              NOP
006E5707    90              NOP
006E5708    90              NOP
006E5709    4F              DEC     EDI
006E570A  ^ EB F0           JMP     SHORT 006E56FC                   ; ACProtec.006E56FC
006E570C    4F              DEC     EDI
006E570D    6A 00           PUSH    0
006E570F    68 80000000     PUSH    80
006E5714    6A 03           PUSH    3
006E5716    6A 00           PUSH    0
006E5718    6A 01           PUSH    1
006E571A    68 00000080     PUSH    80000000
006E571F    57              PUSH    EDI
006E5720    FF95 16E34000   CALL    [EBP+40E316]                     ; kernel32.CreateFileA
//打开key.dat
006E5726    0BC0            OR      EAX, EAX
006E5728    75 15           JNZ     SHORT 006E573F                   ; ACProtec.006E573F
006E572A    90              NOP
006E572B    90              NOP
006E572C    90              NOP
006E572D    90              NOP
006E572E    6A 00           PUSH    0
006E5730    57              PUSH    EDI
006E5731    57              PUSH    EDI
006E5732    6A 00           PUSH    0
006E5734    FF95 90B04100   CALL    [EBP+41B090]                     ; USER32.MessageBoxA
006E573A    E9 26020000     JMP     006E5965                         ; ACProtec.006E5965
006E573F    50              PUSH    EAX
006E5740    8DB5 9FDA4000   LEA     ESI, [EBP+40DA9F]
006E5746    8DBD 17DB4000   LEA     EDI, [EBP+40DB17]
006E574C    6A 00           PUSH    0
006E574E    56              PUSH    ESI
006E574F    68 00020000     PUSH    200
006E5754    57              PUSH    EDI
006E5755    50              PUSH    EAX
006E5756    FF95 3AE34000   CALL    [EBP+40E33A]                     ; kernel32.ReadFile
006E575C    FF95 12E34000   CALL    [EBP+40E312]                     ; kernel32.CloseHandle
006E5762    81BD 9FDA4000 0>CMP     DWORD PTR [EBP+40DA9F], 200
//比较这个Key.dat是否200字节
006E576C    0F85 F3010000   JNZ     006E5965                         ; ACProtec.006E5965
006E5772    8DB5 E6D64000   LEA     ESI, [EBP+40D6E6]
006E5778    8DBD E7DB4000   LEA     EDI, [EBP+40DBE7]
006E577E    B9 28000000     MOV     ECX, 28
006E5783    F3:A7           REPE    CMPS DWORD PTR ES:[EDI], DWORD P>
006E5785    83F9 00         CMP     ECX, 0
006E5788    74 31           JE      SHORT 006E57BB                   ; ACProtec.006E57BB
006E578A    90              NOP
006E578B    90              NOP
006E578C    90              NOP
006E578D    90              NOP
006E578E    8DB5 A5174100   LEA     ESI, [EBP+4117A5]
006E5794    6A 00           PUSH    0
006E5796    56              PUSH    ESI
006E5797    56              PUSH    ESI
006E5798    6A 00           PUSH    0
006E579A    FF95 90B04100   CALL    [EBP+41B090]                     ; USER32.MessageBoxA
006E57A0    E9 C0010000     JMP     006E5965                         ; ACProtec.006E5965
006E57A5    6C              INS     BYTE PTR ES:[EDI], DX            ; I/O command
006E57A6    6963 65 6E73652>IMUL    ESP, [EBX+65], 2065736E
006E57AD    76 65           JBE     SHORT 006E5814                   ; ACProtec.006E5814
006E57AF    72 73           JB      SHORT 006E5824                   ; ACProtec.006E5824
006E57B1    696F 6E 2065727>IMUL    EBP, [EDI+6E], 72726520
006E57B8    6F              OUTS    DX, DWORD PTR ES:[EDI]           ; I/O command
006E57B9    72 00           JB      SHORT 006E57BB                   ; ACProtec.006E57BB
006E57BB    8DB5 93D74000   LEA     ESI, [EBP+40D793]
006E57C1    8DBD 17DB4000   LEA     EDI, [EBP+40DB17]
006E57C7    833E 00         CMP     DWORD PTR [ESI], 0
006E57CA    74 54           JE      SHORT 006E5820                   ; ACProtec.006E5820
006E57CC    90              NOP
006E57CD    90              NOP
006E57CE  &n, bsp; 90              NOP
006E57CF    90              NOP
006E57D0    813E 20202020   CMP     DWORD PTR [ESI], 20202020
006E57D6    74 48           JE      SHORT 006E5820                   ; ACProtec.006E5820
006E57D8    90              NOP
006E57D9    90              NOP
006E57DA    90              NOP
006E57DB    90              NOP
006E57DC    B9 20000000     MOV     ECX, 20
006E57E1    F3:A6           REPE    CMPS BYTE PTR ES:[EDI], BYTE PTR>
006E57E3    0BC9            OR      ECX, ECX
006E57E5    74 13           JE      SHORT 006E57FA                   ; ACProtec.006E57FA
006E57E7    90              NOP
006E57E8    90              NOP
006E57E9    90              NOP
006E57EA    90              NOP
006E57EB    807E FF 00      CMP     BYTE PTR [ESI-1], 0
006E57EF    74 09           JE      SHORT 006E57FA                   ; ACProtec.006E57FA
006E57F1    90              NOP
006E57F2    90              NOP
006E57F3    90              NOP
006E57F4    90              NOP
006E57F5    83C6 20         ADD     ESI, 20
006E57F8  ^ EB CD           JMP     SHORT 006E57C7                   ; ACProtec.006E57C7

1 2 3 4 下一页

 
相关文章
一日一文章
 
一日一软件
一日一动画