【文章标题】: D4ph1_-_Crackme#2的破解
【文章作者】: jdxyw
【软件名称】: D4ph1_-_Crackme#2
【下载地址】: 自己搜索下载
【加壳方式】: 无
【编写语言】: MASM
【使用工具】: OD peid
【操作平台】: WIN XP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
首先是用peid 查壳,无壳
点击D4ph1_-_Crackme#2 运行,输入用户名(yutou) 注册码 (123456) 点击check 有窗口跳出,有提示语言
运行OD 将起载入,下好断点后,F9,输入用户名(yutou) 注册码 (123456)check 后,来到断点处
0040118E |. 68 58314000 PUSH D4ph1-Cr.00403158 ; /lParam = 403158
00401193 |. 6A 40 PUSH 40 ; |wParam = 40
00401195 |. 6A 0D PUSH 0D ; |Message = WM_GETTEXT
00401197 |. 68 EA030000 PUSH 3EA ; |ControlID = 3EA (1002.)
0040119C |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
0040119F |. E8 4A020000 CALL <JMP.&user32.SendDlgItemMessageA> ; \SendDlgItemMessageA
004011A4 |. 50 PUSH EAX
004011A5 |. E8 88FEFFFF CALL D4ph1-Cr.00401032
004011AA |. 58 POP EAX
004011AB |. A3 18324000 MOV DWORD PTR DS:[403218],EAX
004011B0 |. 83F8 04 CMP EAX,4 用户名长度必须大于四
004011B3 |. 0F86 D6010000 JBE D4ph1-Cr.0040138F
004011B9 |. 83F8 21 CMP EAX,21 用户名长度必须小于21
004011BC |. 0F83 B8010000 JNB D4ph1-Cr.0040137A
004011CF |. A1 18324000 MOV EAX,DWORD PTR DS:[403218] 用户名长度送入EAX
004011D4 |. BB 02000000 MOV EBX,2
004011D9 |. F7E3 MUL EBX EAX=EAX*2
004011DB |. 8BD8 MOV EBX,EAX EBX=EAX
004011DD |> 53 /PUSH EBX
004011DE |. 0FBE87 583140>|MOVSX EAX,BYTE PTR DS:[EDI+403158] 取用户名的第一个字符
004011E5 |. 50 |PUSH EAX
004011E6 |. 66:BB 1000 |MOV BX,10 BX=10
004011EA |. 33D2 |XOR EDX,EDX
004011EC |. 66:F7F3 |DIV BX EAX/EBX 余数放入EDX 商放入EAX
004011EF |. 50 |PUSH EAX
004011F0 |. E8 B7FEFFFF |CALL D4ph1-Cr.004010AC 此处代码进入后,可以发现,这个是将商加
上30h,看是否为数字,如果是的话返回
不是的话加上7h
004011F5 |. 8881 98314000 |MOV BYTE PTR DS:[ECX+403198],AL 将上步求出的数字保存到403198开始的内存
004011FB |. 41 |INC ECX
004011FC |. 58 |POP EAX EAX=原先求出的商
004011FD |. 66:F7E3 |MUL BX EAX=EAX*10
00401200 |. 8BF0 |MOV ESI,EAX ESI=EAX
00401202 |. 58 |POP EAX EAX=原先的字符的十六进制
00401203 |. 2BC6 |SUB EAX,ESI
00401205 |. E8 A2FEFFFF |CALL D4ph1-Cr.004010AC
0040120A |. 8881 98314000 |MOV BYTE PTR DS:[ECX+403198],AL
00401210 |. 41 |INC ECX
00401211 |. 47 |INC EDI
00401212 |. 5B |POP EBX
00401213 |. 3BCB |CMP ECX,EBX
00401215 |.^ 72 C6 \JB SHORT D4ph1-Cr.004011DD
00401227 |. C605 A2344000>MOV BYTE PTR DS:[4034A2],0
0040122E |> 8A840D 983140>/MOV AL,BYTE PTR SS:[EBP+ECX+403198] 将上步求出的一段的数字的一个送入AL
00401235 |. 8A9C0D 993140>|MOV BL,BYTE PTR SS:[EBP+ECX+403199] 将上步用到的数字的下一个送入BL
0040123C |. 3BC3 |CMP EAX,EBX
0040123E |. 75 03 |JNZ SHORT D4ph1-Cr.00401243
00401240 |. 46 |INC ESI
00401241 |. EB 17 |JMP SHORT D4ph1-Cr.0040125A
00401243 |> 803D A2344000>|CMP BYTE PTR DS:[4034A2],1
0040124A |. 76 02 |JBE SHORT D4ph1-Cr.0040124E
0040124C |. 4F |DEC EDI
0040124D |. 4F |DEC EDI
0040124E |> C605 A2344000>|MOV BYTE PTR DS:[4034A2],0
00401255 |. 33F6 |XOR ESI,ESI
00401257 |. 46 |INC ESI
00401258 |. EB 14 |JMP SHORT D4ph1-Cr.0040126E
0040125A |> 8005 A2344000>|ADD BYTE PTR DS:[4034A2],1
00401261 |. 45 |INC EBP
00401262 |. 803D A2344000>|CMP BYTE PTR DS:[4034A2],1
00401269 |. 74 03 |JE SHORT D4ph1-Cr.0040126E
0040126B |. 4F |DEC EDI
0040126C |. 4F |DEC EDI
0040126D |. 46 |INC ESI
0040126E |> 50 |PUSH EAX
0040126F |. C1E0 08 |SHL EAX,8
00401272 |. 8BD6 |MOV EDX,ESI
00401274 |. 52 |PUSH EDX
00401275 |. 03D0 |ADD EDX,EAX
00401277 |. 66:8997 1C324>|MOV WORD PTR DS:[EDI+40321C],DX
0040127E |. 5A |POP EDX
0040127F |. 58 |POP EAX
00401280 |. 47 |INC EDI
00401281 |. 47 |INC EDI
00401282 |. 41 |INC ECX
00401283 |. 8A840D 983140>|MOV AL,BYTE PTR SS:[EBP+ECX+403198]
0040128A |. 84C0 |TEST AL,AL
0040128C |.^ 75 A0 \JNZ SHORT D4ph1-Cr.0040122E
上段代码的基本算法是,将每个数字十六进制左移动8h后加上1,扩展成成两个字节。且另外个扩展字节都相同,均为01h
004012B8 |> 66:8B9E 1B324>/MOV BX,WORD PTR DS:[ESI+40321B] 取上面代码算出的字符的一个字
004012BF |. 0FBE81 573140>|MOVSX EAX,BYTE PTR DS:[ECX+403157] 取用户名的一个字符
004012C6 |. 33D2 |XOR EDX,EDX
004012C8 |. 03C3 |ADD EAX,EBX EAX=EAX+EBX
004012CA |. 2BC1 |SUB EAX,ECX EAX=EAX-ECX
004012CC |. F7F1 |DIV ECX
004012CE |. 2B05 1C334000 |SUB EAX,DWORD PTR DS:[40331C] DS:[40331C]里面是上步代码的字节数
004012D4 |. 03D9 |ADD EBX,ECX
004012D6 |. 03C2 |ADD EAX,EDX
004012D8 |. 33C3 |XOR EAX,EBX
004012DA |. 8881 9F334000 |MOV BYTE PTR DS:[ECX+40339F],AL 将计算出来的AL送入DS:[ECX+40339F]
004012E0 |. 46 |INC ESI
004012E1 |. 3B35 1C334000 |CMP ESI,DWORD PTR DS:[40331C]
004012E7 |. 7C 03 |JL SHORT D4ph1-Cr.004012EC
004012E9 |. 33F6 |XOR ESI,ESI
004012EB |. 46 |INC ESI
004012EC |> 41 |INC ECX
004012ED |. 3B0D 18324000 |CMP ECX,DWORD PTR DS:[403218]
004012F3 |.^ 76 C3 \JBE SHORT D4ph1-Cr.004012B8
通过上步代码,又计算出来一串字符串
00401305 |> 0FBE99 A03340>/MOVSX EBX,BYTE PTR DS:[ECX+4033A0] 将上步代码算出来的字符串的一个字节送入EBX
0040130C |. 53 |PUSH EBX
0040130D |. C1EB 04 |SHR EBX,4 右移动4位
00401310 |. 8AC3 |MOV AL,BL
00401312 |. 24 0F |AND AL,0F 将AL的高四位置零
00401314 |. 04 30 |ADD AL,30
00401316 |. 3C 39 |CMP AL,39
00401318 |. 7E 02 |JLE SHORT D4ph1-Cr.0040131C
0040131A |. 04 07 |ADD AL,7
0040131C |> 8886 20344000 |MOV BYTE PTR DS:[ESI+403420],AL 将计算出来的送入DS:[ESI+403420]
00401322 |. 46 |INC ESI
00401323 |. 5B |POP EBX 将刚才同一个字节送入EBX
00401324 |. 8AC3 |MOV AL,BL
00401326 |. 24 0F |AND AL,0F 将AL的高四位置零
00401328 |. 04 30 |ADD AL,30
0040132A |. 3C 39 |CMP AL,39
0040132C |. 7E 02 |JLE SHORT D4ph1-Cr.00401330
0040132E |. 04 07 |ADD AL,7
00401330 |> 41 |INC ECX
00401331 |. 8886 20344000 |MOV BYTE PTR DS:[ESI+403420],AL 同样,将计算出来的送入DS:[ESI+403420]
00401337 |. 46 |INC ESI
00401338 |. 3BF2 |CMP ESI,EDX
0040133A |.^ 75 C9 \JNZ SHORT D4ph1-Cr.00401305
0040133C |. 33C9 XOR ECX,ECX
0040133E |. 33C0 XOR EAX,EAX
00401340 |. 33D2 XOR EDX,EDX
00401342 |. E8 70FDFFFF CALL D4ph1-Cr.004010B7 这个是判断注册码的代码,跟进
00401347 |. 3C 00 CMP AL,0
00401349 |. 74 15 JE SHORT D4ph1-Cr.00401360
004010B7 /$ 8A81 20334000 /MOV AL,BYTE PTR DS:[ECX+403320] 用户输入的注册码字节送入
004010BD |. 8A91 20344000 |MOV DL,BYTE PTR DS:[ECX+403420] 真注册码字节送入
004010C3 |. 2AC2 |SUB AL,DL
004010C5 |. 75 0D |JNZ SHORT D4ph1-Cr.004010D4
004010C7 |. 41 |INC ECX
004010C8 |. 8A81 20344000 |MOV AL,BYTE PTR DS:[ECX+403420]
004010CE |. 84C0 |TEST AL,AL
004010D0 |. 74 08 |JE SHORT D4ph1-Cr.004010DA
004010D2 |.^ EB E3 \JMP SHORT D4ph1-Cr.004010B7
我算出来的注册码是67F8166803
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年08月09日 10:12:46
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!