首页
社区
课程
招聘
[原创]KeygenMe_1_by_boonz的破解
发表于: 2006-8-4 19:59 5694

[原创]KeygenMe_1_by_boonz的破解

jdxyw 活跃值
19
2006-8-4 19:59
5694

【文章标题】: KeygenMe_1_by_boonz的破解
【文章作者】: jdxyw
【作者邮箱】: jdxyw2004@163.com
【软件名称】: KeygenMe_1_by_boonz
【软件大小】: 288KB
【下载地址】: http://www.crackmes.de/users/boonz/keygenme_1_by_boonz/
【编写语言】: MASM32
【使用工具】: Peid OD
【操作平台】: WinXP
【软件介绍】: 这个crack很简单。
【作者声明】: 我不知道这个以前有没有人破过,如有重复请原谅,也请大家多提宝贵意见
--------------------------------------------------------------------------------
【详细过程】
  首先,用Peid查看,发现这是一个无壳的crack
  
  接着,运行这个crack。输入用户和序列号,注册时,在原先的输入序列号的地方出现了“Hello, Mr. Badboy!”的字符串。
  看来我们可以考虑从字符串下手。(我在破解中输入的用户名是 “yutou” 序列号是“123456”
  
  运行OD,将其载入,先查看其字符串参考,接着往上看,发现以下代码
  
  我在 004010E9设置断点 ,按F9 运行后输入用户名和序列号后来到这里
  004010E9  |. 6A 28          PUSH 28                                  ; /Count = 28 (40.)        取用户名
  004010EB  |. 68 F8DC4000    PUSH keygenme.0040DCF8                   ; |Buffer = keygenme.0040DCF8
  004010F0  |. 68 EE030000    PUSH 3EE                                 ; |ControlID = 3EE (1006.)
  004010F5  |. FF75 08        PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
  004010F8  |. E8 B3020000    CALL <JMP.&user32.GetDlgItemTextA>       ; \GetDlgItemTextA
  004010FD  |. 6A 28          PUSH 28                                  ; /Count = 28 (40.)       取序列号
  004010FF  |. 68 F8DE4000    PUSH keygenme.0040DEF8                   ; |Buffer = keygenme.0040DEF8
  00401104  |. 68 EF030000    PUSH 3EF                                 ; |ControlID = 3EF (1007.)
  00401109  |. FF75 08        PUSH DWORD PTR SS:[EBP+8]                ; |hWnd
  0040110C  |. E8 9F020000    CALL <JMP.&user32.GetDlgItemTextA>       ; \GetDlgItemTextA
  00401111  |. E8 F2000000    CALL keygenme.00401208                              这是个关键,是序列号的生成代码,要跟进
  
  
  以下是序列号的生成代码
  00401208  /$ 68 F8DC4000    PUSH keygenme.0040DCF8                   ; /String = "yutou"
  0040120D  |. E8 80010000    CALL <JMP.&kernel32.lstrlenA>            ; \lstrlenA
  00401212  |. A3 86DC4000    MOV DWORD PTR DS:[40DC86],EAX                           将用户名的长度送入DS:[40DC86]
  00401217  |. 833D 86DC4000 >CMP DWORD PTR DS:[40DC86],4                             比较,用户名的长度小于4则完蛋
  0040121E  |. 0F8C 29010000  JL keygenme.0040134D
  00401224  |. 833D 86DC4000 >CMP DWORD PTR DS:[40DC86],32                            比较,用户名的长度大于50则完蛋
  0040122B  |. 0F8F 1C010000  JG keygenme.0040134D
  00401231  |. 33C0           XOR EAX,EAX
  00401233  |. 33DB           XOR EBX,EBX
  00401235  |. 33C9           XOR ECX,ECX
  00401237  |. BF F8DC4000    MOV EDI,keygenme.0040DCF8                ;   ASCII "yutou"
  0040123C  |. 8B15 86DC4000  MOV EDX,DWORD PTR DS:[40DC86]                               将用户名的长度送入EDX
  00401242  |> 0FB60439       /MOVZX EAX,BYTE PTR DS:[ECX+EDI]                               取用户名的第一个字符送入EAX
  00401246  |. 83E8 19        |SUB EAX,19                                  将第一个字符减去19
  00401249  |. 2BD8           |SUB EBX,EAX                                 EBX-EAX
  0040124B  |. 41             |INC ECX                                     ECX自增,做为循环计数
  0040124C  |. 3BCA           |CMP ECX,EDX                                 看循环是否结束了                 
  0040124E  |.^75 F2          \JNZ SHORT keygenme.00401242
  00401250  |. 53             PUSH EBX                                 ; /<%lX> 这个函数是用作字符串格式化,
                                                             是将EBX中的内容格式化存入keygenme.0040E0F8,下面有用
  00401251  |. 68 F8DB4000    PUSH keygenme.0040DBF8                   ; |Format = "%lX"
  00401256  |. 68 F8E04000    PUSH keygenme.0040E0F8                   ; |s = keygenme.0040E0F8
  0040125B  |. E8 38010000    CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
  00401260  |. 83C4 0C        ADD ESP,0C
  00401263  |. 33C0           XOR EAX,EAX
  00401265  |. 33D2           XOR EDX,EDX
  00401267  |. 33C9           XOR ECX,ECX
  00401269  |. 03C3           ADD EAX,EBX
  0040126B  |. 0FAFC3         IMUL EAX,EBX
  0040126E  |. 03C8           ADD ECX,EAX
  00401270  |. 2BD3           SUB EDX,EBX
  00401272  |. 33D0           XOR EDX,EAX
  00401274  |. 0FAFD8         IMUL EBX,EAX                                 以上几步同样是对原先几个寄存起中的数据进行计算,将计算的结果
                                                                       存入EBX,并用格式化函数格式化存入keygenme.0040E1F8,下面
                                                                       也将会用到
  00401277  |. 53             PUSH EBX                                 ; /<%lX>
  00401278  |. 68 F8DB4000    PUSH keygenme.0040DBF8                   ; |Format = "%lX"
  0040127D  |. 68 F8E14000    PUSH keygenme.0040E1F8                   ; |s = keygenme.0040E1F8
  00401282  |. E8 11010000    CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
  00401287  |. 83C4 0C        ADD ESP,0C
  0040128A  |. 33C0           XOR EAX,EAX
  0040128C  |. 33DB           XOR EBX,EBX
  0040128E  |. 33D2           XOR EDX,EDX
  00401290  |. 33C9           XOR ECX,ECX                              此处的ASCII "FFFFFE37",就是第一个格式化函数保存的数据
  00401292  |. B8 F8E04000    MOV EAX,keygenme.0040E0F8                ;  ASCII "FFFFFE37"
  00401297  |. 03D8           ADD EBX,EAX                               EBX+EAX
  00401299  |. 33CB           XOR ECX,EBX                               ECX与EBX异或
  0040129B  |. 0FAFCB         IMUL ECX,EBX                              ECX=ECX *EAX
  0040129E  |. 2BC8           SUB ECX,EAX                               ECX=ECX-EAX
  004012A0  |. 51             PUSH ECX                                 ; /<%lX>同样将生成的数据格式化保存到keygenme.0040E2F8
  004012A1  |. 68 F8DB4000    PUSH keygenme.0040DBF8                   ; |Format = "%lX"
  004012A6  |. 68 F8E24000    PUSH keygenme.0040E2F8                   ; |s = keygenme.0040E2F8
  004012AB  |. E8 E8000000    CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
  004012B0  |. 83C4 0C        ADD ESP,0C
  004012B3  |. 68 FCDB4000    PUSH keygenme.0040DBFC                   ; /Format = "Bon-"格式化一个字符串"Bon-"保存到keygenme.0040DDF8
  004012B8  |. 68 F8DD4000    PUSH keygenme.0040DDF8                   ; |s = keygenme.0040DDF8
  004012BD  |. E8 D6000000    CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
  004012C2  |. 83C4 08        ADD ESP,8                                 字符串连接,将"FFFFFE37"连接到"Bon-"后面
  004012C5  |. 68 F8E04000    PUSH keygenme.0040E0F8                   ; /StringToAdd = "FFFFFE37"  
  004012CA  |. 68 F8DD4000    PUSH keygenme.0040DDF8                   ; |ConcatString = "Bon-
  004012CF  |. E8 B2000000    CALL <JMP.&kernel32.lstrcatA>            ; \lstrcatA
  004012D4  |. 68 01DC4000    PUSH keygenme.0040DC01                   ; /StringToAdd = "-"    将"-"连接到"Bon-FFFFFE37"后面
  004012D9  |. 68 F8DD4000    PUSH keygenme.0040DDF8                   ; |ConcatString = "Bon-FFFFFE37"
  004012DE  |. E8 A3000000    CALL <JMP.&kernel32.lstrcatA>            ; \lstrcatA
  004012E3  |. 68 F8E14000    PUSH keygenme.0040E1F8                   ; /StringToAdd = "FA4FA3E7"   将"FA4FA3E7"连接到"Bon-FFFFFE37-"后面
  004012E8  |. 68 F8DD4000    PUSH keygenme.0040DDF8                   ; |ConcatString = "Bon-FFFFFE37-"
  004012ED  |. E8 94000000    CALL <JMP.&kernel32.lstrcatA>            ; \lstrcatA
  004012F2  |. 68 01DC4000    PUSH keygenme.0040DC01                   ; /StringToAdd = "-"          将"-"连接到"Bon-FFFFFE37-FA4FA3E"后面
  004012F7  |. 68 F8DD4000    PUSH keygenme.0040DDF8                   ; |ConcatString = "Bon-FFFFFE37-FA4FA3E7"
  004012FC  |. E8 85000000    CALL <JMP.&kernel32.lstrcatA>            ; \lstrcatA
  00401301  |. 68 F8E24000    PUSH keygenme.0040E2F8                   ; /StringToAdd = "41720F48"   将"41720F48"连接到"Bon-FFFFFE37-FA4FA3E7-"后面
  00401306  |. 68 F8DD4000    PUSH keygenme.0040DDF8                   ; |ConcatString = "Bon-FFFFFE37-FA4FA3E7-"
  0040130B  |. E8 76000000    CALL <JMP.&kernel32.lstrcatA>            ; \lstrcatA
  00401310  |. B8 F8DD4000    MOV EAX,keygenme.0040DDF8                ;  ASCII "Bon-FFFFFE37-FA4FA3E7-41720F48"
  00401315  |. BB F8DE4000    MOV EBX,keygenme.0040DEF8                ;  ASCII "123456"
  0040131A  |. 53             PUSH EBX                                 ; /String2 => "123456"                           假序列号
  0040131B  |. 50             PUSH EAX                                 ; |String1 => "Bon-FFFFFE37-FA4FA3E7-41720F48"   真序列号
  0040131C  |. E8 6B000000    CALL <JMP.&kernel32.lstrcmpA>            ; \lstrcmpA
  00401321  |. 74 15          JE SHORT keygenme.00401338
  00401323  |. 68 17DC4000    PUSH keygenme.0040DC17                   ; /Format = "Hello, Mr. Badboy!"
  00401328  |. 68 F8DF4000    PUSH keygenme.0040DFF8                   ; |s = keygenme.0040DFF8
  0040132D  |. E8 66000000    CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
  00401332  |. 83C4 08        ADD ESP,8
  00401335  |. 33C0           XOR EAX,EAX
  00401337  |. C3             RETN
  00401338  |> 68 03DC4000    PUSH keygenme.0040DC03                   ; /Format = "Hello, Mr. Goodboy!"
  0040133D  |. 68 F8DF4000    PUSH keygenme.0040DFF8                   ; |s = keygenme.0040DFF8
  00401342  |. E8 51000000    CALL <JMP.&user32.wsprintfA>             ; \wsprintfA
  
  
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年08月04日 19:53:52


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
2
不错,虽然简单但思路很清晰。
2006-8-4 20:23
0
雪    币: 182
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我不能用OD运行.一运行就说遇到异常..不知道怎么回事!
2006-8-5 07:42
0
雪    币: 333
活跃值: (11)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
4
最初由 dennislwy 发布
我不能用OD运行.一运行就说遇到异常..不知道怎么回事!

不知道啊!我可以正常运行的啊!
2006-8-5 08:45
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
LZ,你怎么知道应该在 004010E9 下断点? 我刚学不久,下面的分析都看得懂,能不能指点一下,谢谢.
2006-8-5 09:22
0
雪    币: 333
活跃值: (11)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
6
最初由 Rucit 发布
LZ,你怎么知道应该在 004010E9 下断点? 我刚学不久,下面的分析都看得懂,能不能指点一下,谢谢.

一般是先从读入注册名和序列号处下断点。我也是刚学不久,不知道说的对不对
2006-8-5 09:36
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
哦,谢谢.
但是,有时候会出现这种情况,程序一运行,输入完用户名密码,点确定,一旦不正确就程序就跑到最后,这时候OD好象拦截不住.怎么办?
2006-8-5 09:47
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢LZ的文章,我自己也破解出来了.这应该多些这样的文章,让我们这些新手比如容易地上手.
2006-8-5 11:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
越来越多精华,不错,支持!!!
2006-8-6 10:05
0
游客
登录 | 注册 方可回帖
返回
//