日期: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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!