首页
社区
课程
招聘
*已破* [PEDIY Crackme 竞赛 2007] [第一回] 第16 队 – topmint
发表于: 2007-6-12 12:00 25361

*已破* [PEDIY Crackme 竞赛 2007] [第一回] 第16 队 – topmint

2007-6-12 12:00
25361
收藏
免费 0
支持
分享
最新回复 (82)
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
26
是不是2点放第二个啊?
2007-6-12 13:01
0
雪    币: 400
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
我来晚了,试验了一下,没挑战。几点换下一个?
2007-6-12 13:05
0
雪    币: 191
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
[QUOTE=riijj;321022][挑战] [PEDIY Crackme 竞赛 2007] [第一回] 第16 队 – topmint...[/QUOTE]
都是偶像!!
2007-6-12 13:06
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
29
不会的

大家休息一下,明天再来

如果大家对参赛的 crackme 破解有心得,欢迎发表破文,所有文章会和 crackme 一起放到 Crackme 竞赛 07 的 chm 精华里
2007-6-12 13:08
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
30
快放第二个啊,我2点要上班了,快
2007-6-12 13:08
0
雪    币: 202
活跃值: (77)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
31
才出去一趟就被秒了
回来晚了
2007-6-12 13:12
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
32
用户名: golds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds70Q
注册码: GGGG-OOOO-LLLL-DDDD-SSSS-UUUU-NNNN-!!!!
2007-6-12 13:14
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
33
要是把注册名长度限制一下就不会这样了
2007-6-12 13:15
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
34
根据注册码反算注册名
2007-6-12 13:16
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
35
明天出战的是

第 6 队- Nooby
2007-6-12 13:17
0
雪    币: 66
活跃值: (15)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
36
晕,放学回来就已经有人搞定了啊~
不过感觉有点不对劲,这个crackme不会只是这样吧,只要用户名的ascii和等于1B7F就能通过了
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxO

另有蹊径?
2007-6-12 13:22
0
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
37
看了一下,大致是这样:

先取用户名,把用户名的每位ASCII码逐位相加,得出一个值。比如我注册名用“CCDebuger”,则ASCII码值相加后是345h。注册码格式字串参考就可以知道。现在按格式随便输入,如我输入:7878-1234-9801-abcd-hijk-mnop-rstu-3256。现在开始算注册码。至于怎么算,我不关心,我只知道它会在下面这个地方把假码和它算的码进行比较:

0040112C  |.  68 04AA4000   PUSH crackme_.0040AA04                   ; /String2 = "7878-1234-9801-ABCD-HIJK-MNOP-RSTU-3256"
00401131  |.  68 F8AA4000   PUSH crackme_.0040AAF8                   ; |String1 = "AD8B-E7E6-6B90-271F-F91D-A4F7-3E95-0E4E"
00401136 >|.  FF15 00704000 CALL DWORD PTR DS:[<&KERNEL32.lstrcmpA>] ; \lstrcmpA

下面是计算注册码的关键部分:

004017ED   .  E8 4EFEFFFF   CALL crackme_.00401640                   ;  这里是计算注册码的
004017F2   .  A1 B0AA4000   MOV EAX,DWORD PTR DS:[40AAB0]            ;  注册名ASCII值之和保存在这里
004017F7   .  8B0D 5CAB4000 MOV ECX,DWORD PTR DS:[40AB5C]            ;  注册码计算后相等时的次数值保存在这里
004017FD   .  3BC1          CMP EAX,ECX                              ;  比较

破解这个crackme,只要先计算一下你注册名的ASCII码值之和(可以让程序直接帮你算,结果保存在地址40AAB0),然后用OD载入程序,转到地址00401136处,SHIFT+F2设条件断点:[0040AB5C]==345,断下来后就能看到正确的注册码了,如我第一部分的代码所示。

整理一下,我要注册的话就是这样:
用户名:CCDebuger
注册码:AD8B-E7E6-6B90-271F-F91D-A4F7-3E95-0E4E

设好断点,不超过1分钟就可以看到注册码。
2007-6-12 13:24
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
38
恩。CCDebuger所言既是。
2007-6-12 13:28
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
39
提一下

如果 crackme 有特别的设计,例如伪成功信息,是需要事前声明,通知评审的

(现在已有 1 队通知了我们)
2007-6-12 13:28
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
40
完全就是这样,刚才破解的时候在比较点,下了个断点超快就破解了
2007-6-12 13:28
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
41
照这样说,此CM还是爆漏了明文,要考虑的因素还是挺多.
2007-6-12 13:30
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
42
这才是我想看到的
2007-6-12 13:30
0
雪    币: 297
活跃值: (21)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
43
要等到明天了,好痛苦
2007-6-12 13:34
0
雪    币: 224
活跃值: (147)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
44
支持一个,来晚了,没想到这么快。。。
2007-6-12 13:50
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
45

发现一个好玩的

用户名: golds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds70Q
注册码: GGGG-OOOO-LLLL-DDDD-SSSS-UUUU-NNNN-!!!!

用诸如此类的注册号(砸凑用户名),是可以重复注册的。
用其它的,倒只可以注册一次。
2007-6-12 13:56
0
雪    币: 255
活跃值: (207)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
46
还是0x1B80导致的问题所在。
2007-6-12 13:57
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
47
我相信很多参赛 crackme 是 1 天不能破的

大家拭目以待
2007-6-12 14:06
0
雪    币: 6051
活跃值: (1441)
能力值: ( LV15,RANK:1473 )
在线值:
发帖
回帖
粉丝
48
总结下topmint的CM很快被爆的原因:
1.明码比较!这个是最大的问题!
2.注册码出现位置固定,很容易跟到出现注册码的地方
3.注册码固定,仅仅依据用户名ASC码累加结果决定注册算法循环次数,这样很容易根据注册码逆推出用户名!比如:在第31次循环时注册码为BBF5-8ED2-E7F6-F91D-49F0-30C9-ACC3-D939,就得到一组注册码:用户名0,注册码BBF5-8ED2-E7F6-F91D-49F0-30C9-ACC3-D939。再加一次循环,又得到另一组注册码……

值得学习的地方:
1.采用多线程,隐藏关键算法
2.利用循环次数判断注册码是否正确

个人改进意见:
1.去掉明码比较!不用if(a==b),改用用if(f(a)==f(b))甚至if(f(a)==g(b))的比较方式
2.次数与用户名ASC码累加的比较过程太明显,改成上面的函数比较。也可以用一个线程来处理一下ASC累加值,这样更隐蔽。
3.算法太固定,考虑一下能否把算法改成根据用户名动态生成,将会大大增加爆破的难度!
2007-6-12 14:09
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
49
思路新颖,学习了。
2007-6-12 14:12
0
雪    币: 424
活跃值: (10)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
50
饿也找到很多个!!
只要用peid看一下md5地址``呵呵@!!

就到关键点了!
不过很纳闷!只能成功一次~汗~~~~~~~~~~~~~~
2007-6-12 14:36
0
游客
登录 | 注册 方可回帖
返回
//