欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

破解Boonz’s CreakMe

程序员文章站 2022-03-29 14:25:23
【作者】:riusksk(泉哥)【主页】:http://riusksk.blogbus.com【软件】:http://www.ccgcn.com/bbs/attachment.php?aid=...

【作者】:riusksk(泉哥)
【主页】:http://riusksk.blogbus.com
【软件】:http://www.ccgcn.com/bbs/attachment.php?aid=431
【时间】:2009年8月27日星期四
【声明】:纯属技术学习,如有错误之处,烦请指出!


首先用OD载入,F9运行之,在用户名一框中(作者真懒,连用户名,密码之类的字样都懒得写上,只有两个文本框,上框用户名,下框密码)先填上1,看看是否是用户名长度限制,这只是个人习惯而已,至少总比在逆向分析的时候才知道好吧,呵呵……测试结果如下图1:
 破解Boonz’s CreakMe


                  图1
由此可见,用户名长度必须在4—50之间。接着我用”riusksk”作为用户名,密码为”78787878”来分析一下。输入之后,点击check按钮,提示 "Hello, Mr. Badboy!"。我们“查找“->“所有参考文件字串”后,发现这个CM居然是用明码比较的,如下图2所示:
 破解Boonz’s CreakMe
                                          图2
单纯找出注册码这不是我们的目的,我们关注的应该是算法。双击提示字符串"Hello, Mr. Badboy!"来到下列地址:
00401000 >/$  6A 00         PUSH 0                                   ; /pModule = NULL
00401002  |.  E8 6D030000   CALL <JMP.&kernel32.GetModuleHandleA>    ; GetModuleHandleA
00401007  |.  A3 F0DC4000   MOV DWORD PTR DS:[40DCF0],EAX
0040100C  |.  6A 00         PUSH 0                                   ; /lParam = NULL
0040100E  |.  68 2B104000   PUSH keygenme.0040102B                   ; |DlgProc = keygenme.0040102B
00401013  |.  6A 00         PUSH 0                                   ; |hOwner = NULL
00401015  |.  68 E9030000   PUSH 3E9                                 ; |pTemplate = 3E9
0040101A  |.  FF35 F0DC4000 PUSH DWORD PTR DS:[40DCF0]               ; |hInst = 00400000
00401020  |.  E8 79030000   CALL <JMP.&user32.DialogBoxParamA>       ; DialogBoxParamA
00401025  |.  50            PUSH EAX                                 ; /ExitCode
00401026  .  E8 43030000   CALL <JMP.&kernel32.ExitProcess>         ; ExitProcess
0040102B  /.  55            PUSH EBP
0040102C  |.  8BEC          MOV EBP,ESP
0040102E  |.  817D 0C 10010>CMP DWORD PTR SS:[EBP+C],110
00401035  |.  75 7F         JNZ SHORT keygenme.004010B6
00401037  |.  6A EC         PUSH -14                                 ; /Index = GWL_EXSTYLE
00401039  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
0040103C  |.  E8 75030000   CALL <JMP.&user32.GetWindowLongA>        ; GetWindowLongA
00401041  |.  0D 00000800   OR EAX,80000
00401046  |.  50            PUSH EAX                                 ; /NewValue
00401047  |.  6A EC         PUSH -14                                 ; |Index = GWL_EXSTYLE
00401049  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
0040104C  |.  E8 8F030000   CALL <JMP.&user32.SetWindowLongA>        ; SetWindowLongA
00401051  |.  6A 03         PUSH 3                                   ; /Flags = SWP_NOSIZE|SWP_NOMOVE
00401053  |.  6A 00         PUSH 0                                   ; |Height = 0
00401055  |.  6A 00         PUSH 0