首页
社区
课程
招聘
无狗解某狗
发表于: 2005-4-25 14:45 14818

无狗解某狗

2005-4-25 14:45
14818

     日期:2005年4月25日   解狗人:csjwaman[DFCG]

由于众所周知的原因不便说出某狗的名称。附件中有某狗加壳的CRACKME和破解文件,供参考。

OD设置忽略所有异常,载入程序后,bp CreateFileA 运行程序,断在:

77E19A48 >  55              PUSH EBP////断在这里。
77E19A49    8BEC            MOV EBP,ESP
77E19A4B    FF75 08         PUSH DWORD PTR SS:[EBP+8]
77E19A4E    E8 2092FFFF     CALL 77E12C73                            ; 77E12C73
77E19A53    85C0            TEST EAX,EAX
77E19A55    74 1E           JE SHORT 77E19A75                        ; 77E19A75
77E19A57    FF75 20         PUSH DWORD PTR SS:[EBP+20]
77E19A5A    FF75 1C         PUSH DWORD PTR SS:[EBP+1C]
77E19A5D    FF75 18         PUSH DWORD PTR SS:[EBP+18]
77E19A60    FF75 14         PUSH DWORD PTR SS:[EBP+14]
77E19A63    FF75 10         PUSH DWORD PTR SS:[EBP+10]
77E19A66    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
77E19A69    FF70 04         PUSH DWORD PTR DS:[EAX+4]
77E19A6C    E8 DEFBFFFF     CALL 77E1964F                            ; CreateFileW
77E19A71    5D              POP EBP
77E19A72    C2 1C00         RETN 1C

这时堆栈数据:

0012F364   00457FCF  /CALL 到 CreateFileA 来自 PROJECT2.00457FCD
0012F368   0012F3CC  |FileName = "\\.\LPTDI1"////狗的标志。
0012F36C   C0000000  |Access = GENERIC_READ|GENERIC_WRITE
0012F370   00000007  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE|4
0012F374   00000000  |pSecurity = NULL
0012F378   00000003  |Mode = OPEN_EXISTING
0012F37C   00000080  |Attributes = NORMAL
0012F380   00000000  \hTemplateFile = NULL

00457FCA    FF75 08         PUSH DWORD PTR SS:[EBP+8]
00457FCD    FFD0            CALL EAX
00457FCF    8BF0            MOV ESI,EAX////返回到这儿。
00457FD1    6A 14           PUSH 14
00457FD3    8D45 EC         LEA EAX,DWORD PTR SS:[EBP-14]
00457FD6    6A 00           PUSH 0
00457FD8    50              PUSH EAX
00457FD9    E8 3EDFFFFF     CALL 00455F1C                            ; 00455F1C
00457FDE    83C4 0C         ADD ESP,0C
00457FE1    8BC6            MOV EAX,ESI
00457FE3    5E              POP ESI
00457FE4    C9              LEAVE
00457FE5    C3              RETN////返回。

00457E87    6A 07           PUSH 7
00457E89    8D45 EC         LEA EAX,DWORD PTR SS:[EBP-14]
00457E8C    68 000000C0     PUSH C0000000
00457E91    50              PUSH EAX
00457E92    E8 C4000000     CALL 00457F5B
00457E97    8BF8            MOV EDI,EAX////返回到这儿。
00457E99    83C4 1C         ADD ESP,1C
00457E9C    83FF FF         CMP EDI,-1
00457E9F    74 52           JE SHORT 00457EF3 ////跳!
00457EA1    8D45 FC         LEA EAX,DWORD PTR SS:[EBP-4]
00457EA4    53              PUSH EBX
00457EA5    50              PUSH EAX

00457EF3    E8 05020000     CALL 004580FD                            ; 004580FD
00457EF8    FF35 904C4600   PUSH DWORD PTR DS:[464C90]
00457EFE    8BF8            MOV EDI,EAX
00457F00    E8 72020000     CALL 00458177                            ; 00458177
00457F05    83FF 02         CMP EDI,2
00457F08    59              POP ECX
00457F09    75 1F           JNZ SHORT 00457F2A                       ; 00457F2A
00457F0B    A0 944C4600     MOV AL,BYTE PTR DS:[464C94]
00457F10    FEC0            INC AL
00457F12    3C 04           CMP AL,4
00457F14    A2 944C4600     MOV BYTE PTR DS:[464C94],AL
00457F19  ^ 0F82 44FFFFFF   JB 00457E63                              ; 00457E63
00457F1F    3C 03           CMP AL,3
00457F21    76 07           JBE SHORT 00457F2A                       ; 00457F2A
00457F23    C605 944C4600 0>MOV BYTE PTR DS:[464C94],1
00457F2A    B8 1A4F0000     MOV EAX,4F1A
00457F2F    5F              POP EDI
00457F30    5E              POP ESI
00457F31    5B              POP EBX
00457F32    C9              LEAVE
00457F33    C3              RETN////返回。

00459133    50              PUSH EAX
00459134    E8 C9ECFFFF     CALL 00457E02                            ; 00457E02
00459139    83C4 0C         ADD ESP,0C////返回到这儿。
0045913C    85C0            TEST EAX,EAX
0045913E    74 34           JE SHORT 00459174                        ; 00459174
00459140    8D85 F0FEFFFF   LEA EAX,DWORD PTR SS:[EBP-110]
00459146    56              PUSH ESI
00459147    50              PUSH EAX
00459148    8D85 70FFFFFF   LEA EAX,DWORD PTR SS:[EBP-90]
0045914E    50              PUSH EAX
0045914F    E8 AEECFFFF     CALL 00457E02                            ; 00457E02
00459154    EB 14           JMP SHORT 0045916A                       ; 0045916A
00459156    8D85 F0FEFFFF   LEA EAX,DWORD PTR SS:[EBP-110]
0045915C    56              PUSH ESI
0045915D    50              PUSH EAX
0045915E    8D85 70FFFFFF   LEA EAX,DWORD PTR SS:[EBP-90]
00459164    50              PUSH EAX
00459165    E8 0D000000     CALL 00459177                            ; 00459177
0045916A    83C4 0C         ADD ESP,0C
0045916D    EB 05           JMP SHORT 00459174                       ; 00459174
0045916F    B8 31750000     MOV EAX,7531
00459174    5E              POP ESI
00459175    C9              LEAVE
00459176    C3              RETN////返回。

00458F72    66:89BD ECFEFFF>MOV WORD PTR SS:[EBP-114],DI
00458F79    E8 77010000     CALL 004590F5                            ; 004590F5
00458F7E    83C4 10         ADD ESP,10////返回到这儿。
00458F81    3BC3            CMP EAX,EBX
00458F83    0F85 60010000   JNZ 004590E9////跳!                             ; 004590E9
00458F89    897D 08         MOV DWORD PTR SS:[EBP+8],EDI
00458F8C    57              PUSH EDI
00458F8D    8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10]
00458F90    FFB5 EEFEFFFF   PUSH DWORD PTR SS:[EBP-112]

004590D3    C705 7C4C4600 0>MOV DWORD PTR DS:[464C7C],2
004590DD    33C0            XOR EAX,EAX
004590DF    5F              POP EDI
004590E0    5E              POP ESI
004590E1    5B              POP EBX
004590E2    C9              LEAVE
004590E3    C3              RETN////返回。
004590E4    B8 39750000     MOV EAX,7539
004590E9    C705 7C4C4600 0>MOV DWORD PTR DS:[464C7C],1
004590F3  ^ EB EA           JMP SHORT 004590DF                       ; 004590DF
004590F5    55              PUSH EBP
004590F6    8BEC            MOV EBP,ESP

00455DC8    56              PUSH ESI
00455DC9    E8 E7300000     CALL 00458EB5                            ; 00458EB5
00455DCE    85C0            TEST EAX,EAX////返回到这儿。
00455DD0    59              POP ECX
00455DD1    75 7A           JNZ SHORT 00455E4D////跳!                      ; 00455E4D
00455DD3    C705 7C4C4600 0>MOV DWORD PTR DS:[464C7C],2
00455DDD    E8 6E000000     CALL 00455E50                            ; 00455E50
00455DE2    83F8 04         CMP EAX,4
00455DE5    7C 61           JL SHORT 00455E48                        ; 00455E48

00455E3E    E8 2B2E0000     CALL 00458C6E                            ; 00458C6E
00455E43    83C4 0C         ADD ESP,0C
00455E46    EB 05           JMP SHORT 00455E4D                       ; 00455E4D
00455E48    B8 31750000     MOV EAX,7531
00455E4D    5E              POP ESI
00455E4E    C9              LEAVE
00455E4F    C3              RETN////返回。

00455D93    E8 1A000000     CALL 00455DB2                            ; 00455DB2
00455D98    83C4 10         ADD ESP,10////返回到这儿。
00455D9B    85C0            TEST EAX,EAX
00455D9D    75 0C           JNZ SHORT 00455DAB                       ; 00455DAB
00455D9F    C705 844C4600 0>MOV DWORD PTR DS:[464C84],1
00455DA9  ^ EB A0           JMP SHORT 00455D4B                       ; 00455D4B
00455DAB    8BC3            MOV EAX,EBX
00455DAD    5F              POP EDI
00455DAE    5E              POP ESI
00455DAF    5B              POP EBX
00455DB0    C9              LEAVE
00455DB1    C3              RETN////返回。
00455DB2    55              PUSH EBP////读狗CALL的入口。
00455DB3    8BEC            MOV EBP,ESP
00455DB5    81EC 10010000   SUB ESP,110
00455DBB    833D 7C4C4600 0>CMP DWORD PTR DS:[464C7C],1
00455DC2    56              PUSH ESI
00455DC3    8B75 08         MOV ESI,DWORD PTR SS:[EBP+8]
00455DC6    75 15           JNZ SHORT 00455DDD                       ; 00455DDD
00455DC8    56              PUSH ESI
00455DC9    E8 E7300000     CALL 00458EB5                            ; 00458EB5
00455DCE    85C0            TEST EAX,EAX
00455DD0    59              POP ECX
00455DD1    75 7A           JNZ SHORT 00455E4D                       ; 00455E4D
00455DD3    C705 7C4C4600 0>MOV DWORD PTR DS:[464C7C],2
00455DDD    E8 6E000000     CALL 00455E50                            ; 00455E50
00455DE2    83F8 04         CMP EAX,4
00455DE5    7C 61           JL SHORT 00455E48                        ; 00455E48
00455DE7    83F8 05         CMP EAX,5

返回到00455D98后,向上看00455D93处的CALL就是读狗的CALL了。此时EAX=00004F1A,这应该是无狗标志了。我们把EAX清零,然后把读狗CALL的入口代码修改成:

00455DB2    33C0            XOR EAX,EAX////清零。
00455DB4    C3              RETN////直接返回。
00455DB5    81EC 10010000   SUB ESP,110
00455DBB    833D 7C4C4600 0>CMP DWORD PTR DS:[464C7C],1

经这样修改后,每次读狗时都会返回0,表示有狗。现在按F9运行程序,异常在:

0044DCCE    5B              POP EBX
0044DCCF    FA              CLI
0044DCD0    A6              CMPS BYTE PTR DS:[ESI],BYTE PTR ES:[EDI]
0044DCD1    4A              DEC EDX
0044DCD2    5B              POP EBX
0044DCD3    FA              CLI
0044DCD4    3A90 1FFAEE4A   CMP DL,BYTE PTR DS:[EAX+4AEEFA1F]
0044DCDA    5B              POP EBX
0044DCDB    FA              CLI
0044DCDC    6F              OUTS DX,DWORD PTR ES:[EDI]////异常在这儿!
0044DCDD    1BF3            SBB ESI,EBX
0044DCDF  - 79 FE           JNS SHORT 0044DCDF                       ; 0044DCDF
0044DCE1    60              PUSHAD
0044DCE2    A7              CMPS DWORD PTR DS:[ESI],DWORD PTR ES:[ED>
0044DCE3    06              PUSH ES
0044DCE4  ^ E0 D4           LOOPDNE SHORT 0044DCBA                   ; 0044DCBA
0044DCE6    1F              POP DS                                   ; 修正的段位寄存器
0044DCE7    12E6            ADC AH,DH
0044DCE9    EE              OUT DX,AL                                ; I/O 命令
0044DCEA    E4 05           IN AL,5                                  ; I/O 命令
0044DCEC    9B              WAIT

在异常处上下看看,可以发现这些代码是红色的,表示刚修改过,说明是程序刚解密的。只要稍微看一看就可以发现这些代码有问题,应该是没有正确解密。但我们可以断定程序的真正入口就在0044DCDC附近,因为没有正确解密,程序到入口运行就异常了。我们一直向上看,来到401000处,代码都是红色的。看来是从401000处开始解码的。

好,现在我们重新加载程序,作上述修改后,在401000处的四个字节上下内存访问断点,然后F9运行程序。程序断在:

0044F48F    2B45 E4         SUB EAX,DWORD PTR SS:[EBP-1C]
0044F492    F7D8            NEG EAX
0044F494    8B4D E8         MOV ECX,DWORD PTR SS:[EBP-18]
0044F497    8B55 F0         MOV EDX,DWORD PTR SS:[EBP-10]
0044F49A    29040A          SUB DWORD PTR DS:[EDX+ECX],EAX////第一次断在这里。
0044F49D  ^ EB A5           JMP SHORT 0044F444                       ; 0044F444
0044F49F    8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
0044F4A2    8B40 04         MOV EAX,DWORD PTR DS:[EAX+4]
0044F4A5    0145 F4         ADD DWORD PTR SS:[EBP-C],EAX

继续F9运行程序,程序断在:

0044F4D6    0345 B8         ADD EAX,DWORD PTR SS:[EBP-48]
0044F4D9    83E8 03         SUB EAX,3
0044F4DC    3B45 D8         CMP EAX,DWORD PTR SS:[EBP-28]
0044F4DF    76 0A           JBE SHORT 0044F4EB                       ; 0044F4EB
0044F4E1    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
0044F4E4    8B4D D8         MOV ECX,DWORD PTR SS:[EBP-28]
0044F4E7    3101            XOR DWORD PTR DS:[ECX],EAX////第二次断在这里。
0044F4E9  ^ EB D7           JMP SHORT 0044F4C2                       ; 0044F4C2
0044F4EB    8B45 E8         MOV EAX,DWORD PTR SS:[EBP-18]
0044F4EE    0345 C8         ADD EAX,DWORD PTR SS:[EBP-38]

第二次断下时,EAX=13FA9889 这就是解压密钥了。但这个密钥是错误的,所以解压出来的代码是错误的。现在有两个问题非常重要:一是这个错误的密钥是在哪里赋值的?二是正确的密钥应该是多少?

我们先来解决第一个问题。重新加载程序,按上述过程来到来到:

00455D98    83C4 10         ADD ESP,10////返回到这儿。
00455D9B    85C0            TEST EAX,EAX
00455D9D    75 0C           JNZ SHORT 00455DAB                       ; 00455DAB
00455D9F    C705 844C4600 0>MOV DWORD PTR DS:[464C84],1
00455DA9  ^ EB A0           JMP SHORT 00455D4B                       ; 00455D4B
00455DAB    8BC3            MOV EAX,EBX
00455DAD    5F              POP EDI
00455DAE    5E              POP ESI
00455DAF    5B              POP EBX
00455DB0    C9              LEAVE
00455DB1    C3              RETN////返回。
00455DB2    55              PUSH EBP////读狗CALL的入口。
00455DB3    8BEC            MOV EBP,ESP
00455DB5    81EC 10010000   SUB ESP,110
00455DBB    833D 7C4C4600 0>CMP DWORD PTR DS:[464C7C],1

我们把读狗CALL的入口代码修改成:

00455DB2    33C0            XOR EAX,EAX////清零。
00455DB4    C3              RETN////直接返回。

但不清零EAX。因为清零后会让程序以为有狗,接着就会没完没了地进行各种检测。我们干脆让程序知道没狗,让程序直接跳过检测处。F7走到00455DB1处返回:

00455CBB    8BD8            MOV EBX,EAX////返回到这里。用F7走。
00455CBD    59              POP ECX
00455CBE    3BDF            CMP EBX,EDI
00455CC0    75 17           JNZ SHORT 00455CD9 ////跳。
00455CC2    66:833E 04      CMP WORD PTR DS:[ESI],4
00455CC6    75 11           JNZ SHORT 00455CD9                       ; 00455CD9
00455CC8    6A 08           PUSH 8
00455CCA    FF76 0A         PUSH DWORD PTR DS:[ESI+A]
00455CCD    83C6 16         ADD ESI,16
00455CD0    56              PUSH ESI
00455CD1    E8 09000000     CALL 00455CDF                            ; 00455CDF
00455CD6    83C4 0C         ADD ESP,0C
00455CD9    5F              POP EDI
00455CDA    8BC3            MOV EAX,EBX
00455CDC    5E              POP ESI
00455CDD    5B              POP EBX
00455CDE    C3              RETN////返回。

0045577C    59              POP ECX ////返回到这里。用F7走。
0045577D    8945 FC         MOV DWORD PTR SS:[EBP-4],EAX
00455780    7A 03           JPE SHORT 00455785                       ; 00455785
00455782    7B 01           JPO SHORT 00455785                       ; 00455785
00455784    06              PUSH ES
00455785    85C0            TEST EAX,EAX
00455787    0F85 8A030000   JNZ 00455B17 ////跳。
0045578D    70 03           JO SHORT 00455792                        ; 00455792
0045578F    71 01           JNO SHORT 00455792                       ; 00455792
00455791    93              XCHG EAX,EBX
00455792    EB 31           JMP SHORT 004557C5                       ; 004557C5
00455794    51              PUSH ECX

00455B17    5F              POP EDI////跳到这里。
00455B18    5E              POP ESI
00455B19    5B              POP EBX
00455B1A    C9              LEAVE
00455B1B    C3              RETN////返回。

来到0045577C后,可以发现不少花指令,看来是作者的刻意隐藏,估计关键的地方到了。

0045502E    83C4 0C         ADD ESP,0C
00455031    EB 01           JMP SHORT 00455034                       ; 00455034
00455033    24 59           AND AL,59
00455035    5A              POP EDX
00455036    5D              POP EBP
00455037    C3              RETN////返回。

0045508F    83C4 0C         ADD ESP,0C
00455092    59              POP ECX
00455093    5A              POP EDX
00455094    C3              RETN////返回。

004524A2    8945 A4         MOV DWORD PTR SS:[EBP-5C],EAX////返回到这里。
004524A5    837D A4 00      CMP DWORD PTR SS:[EBP-5C],0
004524A9    74 1D           JE SHORT 004524C8                        ; 004524C8
004524AB    833D 38404600 0>CMP DWORD PTR DS:[464038],0
004524B2    75 0A           JNZ SHORT 004524BE                       ; 004524BE
004524B4    C705 38404600 0>MOV DWORD PTR DS:[464038],1
004524BE    B8 C2EA0000     MOV EAX,0EAC2////注意这个数据!
004524C3    E9 7C060000     JMP 00452B44 ////跳。
004524C8    833D 263A4600 0>CMP DWORD PTR DS:[463A26],0
004524CF    0F84 E5010000   JE 004526BA                              ; 004526BA

00452B44    5F              POP EDI
00452B45    5E              POP ESI
00452B46    5B              POP EBX
00452B47    C9              LEAVE
00452B48    C3              RETN////返回。

00451D53    8985 80FEFFFF   MOV DWORD PTR SS:[EBP-180],EAX////返回到这里。
00451D59    EB 0B           JMP SHORT 00451D66                       ; 00451D66
00451D5B    E8 A9280000     CALL 00454609                            ; 00454609
00451D60    8985 80FEFFFF   MOV DWORD PTR SS:[EBP-180],EAX
00451D66    EB 0A           JMP SHORT 00451D72                       ; 00451D72
00451D68    C785 80FEFFFF 0>MOV DWORD PTR SS:[EBP-180],100000////注意这个数据!
00451D72    66:C785 7CFEFFF>MOV WORD PTR SS:[EBP-184],0
00451D7B    EB 07           JMP SHORT 00451D84                       ; 00451D84
00451D7D    66:FF85 7CFEFFF>INC WORD PTR SS:[EBP-184]
00451D84    8B85 7CFEFFFF   MOV EAX,DWORD PTR SS:[EBP-184]
00451D8A    25 FFFF0000     AND EAX,0FFFF
00451D8F    83F8 1E         CMP EAX,1E
00451D92    7D 18           JGE SHORT 00451DAC                       ; 00451DAC
00451D94    8B85 7CFEFFFF   MOV EAX,DWORD PTR SS:[EBP-184]
00451D9A    25 FFFF0000     AND EAX,0FFFF
00451D9F    C70485 A4304600>MOV DWORD PTR DS:[EAX*4+4630A4],-1
00451DAA  ^ EB D1           JMP SHORT 00451D7D                       ; 00451D7D
00451DAC  ^ E9 BBF5FFFF     JMP 0045136C                             ; 0045136C
00451DB1    90              NOP
00451DB2    76 03           JBE SHORT 00451DB7 ////F4到这儿。
00451DB4    77 01           JA SHORT 00451DB7                        ; 00451DB7
00451DB6    B2 81           MOV DL,81////花指令。
00451DB8    BD 80FEFFFF     MOV EBP,-180
00451DBD    0000            ADD BYTE PTR DS:[EAX],AL
00451DBF    1000            ADC BYTE PTR DS:[EAX],AL
00451DC1    0F84 84000000   JE 00451E4B                              ; 00451E4B
00451DB6    B2 81           MOV DL,81
00451DB8    BD 80FEFFFF     MOV EBP,-180

花指令清除后:

00451DB6    90              NOP
00451DB7    81BD 80FEFFFF 0>CMP DWORD PTR SS:[EBP-180],100000////比较!
00451DC1    0F84 84000000   JE 00451E4B ////必须跳!
00451DC7    A1 38404600     MOV EAX,DWORD PTR DS:[464038]
00451DCC    48              DEC EAX

00451E4B    A1 3E3A4600     MOV EAX,DWORD PTR DS:[463A3E]////跳到这里。用F8走。
00451E50    3305 8C304600   XOR EAX,DWORD PTR DS:[46308C]
00451E56    A3 4C504600     MOV DWORD PTR DS:[46504C],EAX
00451E5B    A1 4C504600     MOV EAX,DWORD PTR DS:[46504C]
00451E60    A3 C6324600     MOV DWORD PTR DS:[4632C6],EAX
00451E65    8D85 84FEFFFF   LEA EAX,DWORD PTR SS:[EBP-17C]
00451E6B    A3 58504600     MOV DWORD PTR DS:[465058],EAX
00451E70    C705 54504600 0>MOV DWORD PTR DS:[465054],0
00451E7A    C705 5C504600 0>MOV DWORD PTR DS:[46505C],8
00451E84    E8 0C320000     CALL 00455095                            ; 00455095
00451E89    8985 ECFEFFFF   MOV DWORD PTR SS:[EBP-114],EAX
00451E8F    83BD ECFEFFFF 0>CMP DWORD PTR SS:[EBP-114],0
00451E96    75 12           JNZ SHORT 00451EAA                       ; 00451EAA
00451E98    A1 363A4600     MOV EAX,DWORD PTR DS:[463A36]
00451E9D    3385 85FEFFFF   XOR EAX,DWORD PTR SS:[EBP-17B]
00451EA3    A3 3A3A4600     MOV DWORD PTR DS:[463A3A],EAX////到这里时,EAX=13FA9889。
00451EA8    EB 05           JMP SHORT 00451EAF                       ; 00451EAF
00451EAA    E9 47040000     JMP 004522F6                             ; 004522F6
00451EAF  ^ E9 B8F4FFFF     JMP 0045136C                             ; 0045136C
00451EB4    90              NOP
00451EB5    79 03           JNS SHORT 00451EBA                       ; 00451EBA
00451EB7    78 01           JS SHORT 00451EBA                        ; 00451EBA

来到00451EA3时,EAX中保存的就是解压密钥了!当然这个密钥是错误的。不过我们已经解决了第一个问题,找到了密钥赋值的地方。下面就是第二个问题--找正确的密钥了。

来到内存数据区47B016处看到数据为F9E508B3,这个数据再减去10000000就是正确的密钥了。不要问我这个密钥是怎么找到的,因为我自己也搞不清楚,是连蒙带猜的。

现在我们把EAX的值修改为E9E508B3,然后在0044F4E7处F2下断,F9运行程序,断下:

0044F4D6    0345 B8         ADD EAX,DWORD PTR SS:[EBP-48]
0044F4D9    83E8 03         SUB EAX,3
0044F4DC    3B45 D8         CMP EAX,DWORD PTR SS:[EBP-28]
0044F4DF    76 0A           JBE SHORT 0044F4EB////解码结束跳走。
0044F4E1    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
0044F4E4    8B4D D8         MOV ECX,DWORD PTR SS:[EBP-28]
0044F4E7    3101            XOR DWORD PTR DS:[ECX],EAX////断下,这里开始解码了。取消断点。
0044F4E9  ^ EB D7           JMP SHORT 0044F4C2////循环解码。
0044F4EB    8B45 E8         MOV EAX,DWORD PTR SS:[EBP-18]////F4到这里。
0044F4EE    0345 C8         ADD EAX,DWORD PTR SS:[EBP-38]
0044F4F1    8945 F4         MOV DWORD PTR SS:[EBP-C],EAX
0044F4F4    837D C8 00      CMP DWORD PTR SS:[EBP-38],0
0044F4F8    0F84 84000000   JE 0044F582                              ; 0044F582
0044F4FE    8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]
0044F501    8338 00         CMP DWORD PTR DS:[EAX],0
0044F504    74 7C           JE SHORT 0044F582                        ; 0044F582
0044F506    8B45 F4         MOV EAX,DWORD PTR SS:[EBP-C]

走到0044F4EB时解码结束。到44DCDC处看看:

0044DCDC    55              PUSH EBP////看来前面的判断是正确的,这就是程序的入口了!
0044DCDD    8BEC            MOV EBP,ESP
0044DCDF    83C4 F0         ADD ESP,-10
0044DCE2    B8 FCDA4400     MOV EAX,44DAFC
0044DCE7    E8 DC7EFBFF     CALL 00405BC8                            ; 00405BC8
0044DCEC    A1 C8CF4500     MOV EAX,DWORD PTR DS:[45CFC8]
0044DCF1    8B00            MOV EAX,DWORD PTR DS:[EAX]
0044DCF3    E8 74E6FFFF     CALL 0044C36C                            ; 0044C36C
0044DCF8    8B0D A4D04500   MOV ECX,DWORD PTR DS:[45D0A4]            ; PROJECT2.0045EBD0
0044DCFE    A1 C8CF4500     MOV EAX,DWORD PTR DS:[45CFC8]
0044DD03    8B00            MOV EAX,DWORD PTR DS:[EAX]
0044DD05    8B15 0CD94400   MOV EDX,DWORD PTR DS:[44D90C]            ; PROJECT2.0044D958
0044DD0B    E8 74E6FFFF     CALL 0044C384                            ; 0044C384
0044DD10    A1 C8CF4500     MOV EAX,DWORD PTR DS:[45CFC8]
0044DD15    8B00            MOV EAX,DWORD PTR DS:[EAX]
0044DD17    E8 E8E6FFFF     CALL 0044C404                            ; 0044C404
0044DD1C    E8 FF5FFBFF     CALL 00403D20                            ; 00403D20
0044DD21    8D40 00         LEA EAX,DWORD PTR DS:[EAX]

F9运行程序正常。至此狗被打掉。至于如何做补丁我就不再赘述了。

附件:PROJECT2.rar 附件:cracked.rar


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (28)
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
2
看不懂也要顶
2005-4-25 15:19
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
3
脱狗也这么强! 顶吧~  
2005-4-25 16:15
0
雪    币: 234
活跃值: (61)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
C兄的东西,顶!!!!!!!
2005-4-25 18:06
0
雪    币: 1141
活跃值: (955)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
这个版本是最早的。外层为UPX,运行完后到真正狗壳,用狗数据解码,后期版本会用一个特殊调用校验返回的eax值,若eax为0,OEP会被加上10000。这一点要注意。
2005-4-25 18:09
0
雪    币: 301
活跃值: (300)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
6
辛苦了,终于看到文章了
2005-4-25 18:19
0
雪    币: 1866
活跃值: (95)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
微狗3.x以后的外壳!有狗简单没有狗麻烦点!
2005-4-25 21:43
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
8
最初由 yaoyuan[CCG] 发布
这个版本是最早的。外层为UPX,运行完后到真正狗壳,用狗数据解码,后期版本会用一个特殊调用校验返回的eax值,若eax为0,OEP会被加上10000。这一点要注意。


是的。可以修改一下那个跳转。
2005-4-25 21:56
0
雪    币: 413
活跃值: (752)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
我只是疑惑兄弟推密钥的方法直接减去一个值。
这或是有些太巧了, 可以从算法上推出密钥的。

感谢兄弟的研究。
2005-4-26 06:55
0
雪    币: 82
活跃值: (730)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
同nig的看法一致,不过我认为楼主知道推导密码过程,不方便说而已,确实也没必要多说,省得彩虹狗公司不停地升级。
2005-4-26 08:03
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
11
最初由 nig 发布
我只是疑惑兄弟推密钥的方法直接减去一个值。
这或是有些太巧了, 可以从算法上推出密钥的。

感谢兄弟的研究。


我刚开始接触狗,还请 nig 兄弟指教。不知兄弟能否加我QQ:120207230
2005-4-26 08:35
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
12
为什么来到内存数据区47B016处看?
2005-4-26 09:09
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
13
连蒙带猜的。
2005-4-26 20:28
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看不懂也要顶
2005-4-26 20:28
0
雪    币: 225
活跃值: (146)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
15
顶~~~~~~~~~~~
2005-4-27 14:00
0
雪    币: 110
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sjm
16
假如PC全用正版得花多少钱
2005-4-27 17:20
0
雪    币: 229
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
最初由 sjm 发布
假如PC全用正版得花多少钱


倾家荡产!!
2005-4-28 11:00
0
雪    币: 172
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
看不懂也顶
2005-4-28 23:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
真是高手之中高手啊
2005-4-28 23:52
0
雪    币: 151
活跃值: (66)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
20
顶,不懂,
看到几个脸熟的人。
2005-4-29 10:11
0
雪    币: 440
活跃值: (822)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
21
支持!
学习!
2005-4-29 10:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
最近在破解狗,好难啊,楼主强
2005-4-29 11:29
0
雪    币: 235
活跃值: (191)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
23
蒙都蒙中狗的算法跟关键,太强了,学习中
2005-4-29 16:10
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
我的QQ是69883708 想和你讨论一下狗狗的事。
2005-5-20 21:23
0
雪    币: 300
活跃值: (39)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
不错!谢谢了
2005-11-16 17:04
0
游客
登录 | 注册 方可回帖
返回
//