首页
社区
课程
招聘
[原创]D4ph1_-_Crackme#2的破解(适合新手)
发表于: 2006-8-9 10:14 5307

[原创]D4ph1_-_Crackme#2的破解(适合新手)

jdxyw 活跃值
19
2006-8-9 10:14
5307

【文章标题】: 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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
谢谢!!确实适合我们学习!!
2006-8-9 21:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
准备研究破解了 HOHO
2006-8-10 09:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢了!适合我等菜鸟
2006-8-11 12:40
0
雪    币: 434
活跃值: (18)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢,学习了!
2006-8-12 16:29
0
游客
登录 | 注册 方可回帖
返回
//