首页
社区
课程
招聘
[旧帖] [原创][邀请码已发]第一篇破文,适合新手看,只为邀请码... 0.00雪花
发表于: 2012-12-15 01:29 2312

[旧帖] [原创][邀请码已发]第一篇破文,适合新手看,只为邀请码... 0.00雪花

2012-12-15 01:29
2312
其实我一直在学的是Windows编程,学着学着困惑越来越多了,经高人指点,就开始学习加密与解密了,刚学完解密篇就学着写了篇破文,虽然不怎么样但也花了俺一个下午的睡觉时间的,只求能让我转正啊,话说kx真难挣,整天等看雪,就不见往上涨...没办法,经济危机,只好写点充数,好歹也弄个正式会员啊...

一:爆破

由于这是个比较简单的CM,所以可以利用ASCII码直接找到关键代码,下面就直接分析了…
如过你连这都不会找,可以去看看Ollydbg的入门教程,好的,下面上代码了….

0040155F     /74 08         JE SHORT CRECKME_.00401569 ;如果zf=1,则跳转,此句如果不跳,则程序执行到错误代码处,所以爆破时此处必须跳转,故应该为jmp
00401561   . |57            PUSH EDI
00401562   > |68 60264000   PUSH CRECKME_.00402660                   ;  name or serial is wrong,try again !  通过ASCII码查找,可锁定此代码,明显是提示错误的地方
00401567   . |EB 21         JMP SHORT CRECKME_.0040158A
00401569   > \68 58264000   PUSH CRECKME_.00402658                   ;  zeng
0040156E   .  8BCD          MOV ECX,EBP
00401570   .  FF15 B4214000 CALL DWORD PTR DS:[<&MFC71.#2272>]       ;  MFC71.7C188D0D
00401576   .  85C0          TEST EAX,EAX
00401578   .  57            PUSH EDI
00401579   .  57            PUSH EDI
0040157A    ^ 7E E6         JLE SHORT CRECKME_.00401562 ;小于或等于则会跳转到错误提示的地方 因此爆破时须将此处nop掉
0040157C   .  68 10264000   PUSH CRECKME_.00402610                   ;  congratulation !   correct serial number,good job,do next one?   :)
00401581   .  EB 07         JMP SHORT CRECKME_.0040158A
00401583   >  57            PUSH EDI
00401584   .  57            PUSH EDI
00401585   .  68 F4254000   PUSH CRECKME_.004025F4                   ;  name or serial is too short
0040158A   >  E8 07030000   CALL <JMP.&MFC71.#1123>

到此程序已爆破成功,复制修改到可执行文件,保存就好了...其实还可以通过爆破把注册码的长度限制去掉,在此限于贴码不易,大家可以自行用OD实验(找到00401583的跳转处就好了)...
爆破程序请见附件...

二:注册算法的分析

由上面的爆破分析,我们可发现程序进行注册码校验时,是通过调用一连串的程序进行比较,如果发现注册码不对,则跳转到,错误提示窗口...想进行注册算法分析,光了解程序的大概执行方向是远远不够的,我们必须进行调试分析,那么第一步就是要找到合适的断点...
通过查找本模块内的名称,发现全是调用的MFC类里面的函数,没有sdk程序那么简明,所以想通过系统函数GetDlgItemText下断的想法就不成了...
我这里想到的下断方法比较笨,就是查看指向错误提示模块的跳转一步一步的上述下断...下面贴出我通过上述方法分析过的代码...

00401417   .  FF15 C0214000 CALL DWORD PTR DS:[<&MFC71.#2902_?GetLength@?$CSimpleStringT@D$0>;  MFC71.7C146AB0
0040141D   .  83F8 06       CMP EAX,6
00401420   .  0F8C 5D010000 JL CRECKME_.00401583  ;通过上述法,可找到此处为比较注册码长度的地方,并可在此下断
00401426   .  53            PUSH EBX
00401427   .  8BCE          MOV ECX,ESI
00401429   .  897C24 14     MOV DWORD PTR SS:[ESP+14],EDI
0040142D   .  FF15 C0214000 CALL DWORD PTR DS:[<&MFC71.#2902_?GetLength@?$CSimpleStringT@D$0>;  MFC71.7C146AB0
00401433   .  85C0          TEST EAX,EAX
00401435   .  7E 4E         JLE SHORT CRECKME_.00401485

;下面是一个for循环,用来计算你输入的注册码的...

00401437   >  6A 01         PUSH 1
00401439   .  8D043F        LEA EAX,DWORD PTR DS:[EDI+EDI]
0040143C   .  50            PUSH EAX
0040143D   .  8D4C24 20     LEA ECX,DWORD PTR SS:[ESP+20]
00401441   .  51            PUSH ECX
00401442   .  8BCE          MOV ECX,ESI
00401444   .  FF15 BC214000 CALL DWORD PTR DS:[<&MFC71.#4109_?Mid@?$CStringT@DV?$StrTraitMFC>;  MFC71.7C188D88 ;此处跟入可知Mid是用来找字符的
0040144A   .  8BC8          MOV ECX,EAX
0040144C   .  FF15 B8214000 CALL DWORD PTR DS:[<&MFC71.#876_??B?$CSimpleStringT@D$00@ATL@@QB>;  MFC71.7C158BCD
00401452   .  50            PUSH EAX                                                         ; /s
00401453   .  FF15 B0224000 CALL DWORD PTR DS:[<&MSVCR71.atoi>]                              ; \atoi  这个函数用来把字符串转换成整型数
00401459   .  83C4 04       ADD ESP,4
0040145C   .  8D4C24 18     LEA ECX,DWORD PTR SS:[ESP+18]
00401460   .  8BE8          MOV EBP,EAX
00401462   .  FF15 68204000 CALL DWORD PTR DS:[<&MFC71.#578_??1?$CStringT@DV?$StrTraitMFC_DL>;  MFC71.7C1771B1
00401468   .  8B5C24 14     MOV EBX,DWORD PTR SS:[ESP+14]
0040146C   .  03DD          ADD EBX,EBP
0040146E   .  8BCE          MOV ECX,ESI
00401470   .  895C24 14     MOV DWORD PTR SS:[ESP+14],EBX
00401474   .  47            INC EDI
00401475   .  FF15 C0214000 CALL DWORD PTR DS:[<&MFC71.#2902_?GetLength@?$CSimpleStringT@D$0>;  MFC71.7C146AB0
0040147B   .  3BF8          CMP EDI,EAX
0040147D   .^ 7C B8         JL SHORT CRECKME_.00401437   ;如果edi<(输入注册码的长度)则继续循环

额….好吧…仔细跟了一段发现这个CM根本没什么算法,而是直接判断用户名是否合法,和注册码是否合法,如果两个都满足的话,就注册成功,我还想着分析出来算法,写注册机的,看来可以省了…

下面提供一组注册码:UserName:zzZENG  Serial:570531 

再说说规则,用户名必须包含ZENG 而且不能放在字符串的开头…
注册码第0位必须是5  第4 ,5两位 必须是3 和1,第二位=偶数位之和   第三位可以为任意数字….
至于具体的代码,大家可以根据我说的进行跟踪认证...

CM.rar

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写的很好。。。很适合在下练练手。。。
2012-12-15 14:33
0
雪    币: 63
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
共同学习 共同进步....
2012-12-16 10:19
0
雪    币: 63
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
版主大人...您就从了我吧....
2012-12-16 10:20
0
雪    币: 1015
活跃值: (235)
能力值: ( LV12,RANK:440 )
在线值:
发帖
回帖
粉丝
5
邀请码已发,请楼主查收,谢谢分享!
2012-12-16 10:26
0
雪    币: 63
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
多谢版主大人...新人继续学习中...
2012-12-16 11:12
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
随便在给我一个吧
2012-12-16 14:38
0
雪    币: 262
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
很好啊。LZ
2012-12-16 17:08
0
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个CM是什么东西啊?你破解的是什么软件
2012-12-16 21:39
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
厉害啊。不错啊
2012-12-17 14:48
0
雪    币: 204
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我也没转正
2012-12-17 15:00
0
雪    币: 122
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不行不行,我也的学者写一篇,既能促进学习,又能很快转正!
2012-12-17 15:47
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
我要努力,然后,转正。
2012-12-17 16:30
0
雪    币: 7
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
看来还得多看看windows编程啊!好吧,接着努力,我要转正,要向组织靠拢。争取早日成为一名合格的看雪人!!!
2012-12-17 16:45
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我要转正,要向组织靠拢。争取早日成为一名合格的看雪人!!!
2012-12-18 08:25
0
雪    币: 22
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不错,很有专业特色
2012-12-18 09:10
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
初来乍到,雾里看花。
2012-12-18 09:16
0
游客
登录 | 注册 方可回帖
返回
//