能力值:
(RANK:1130 )
|
-
-
26 楼
是不是2点放第二个啊?
|
能力值:
( LV2,RANK:10 )
|
-
-
27 楼
我来晚了,试验了一下,没挑战。几点换下一个?
|
能力值:
( LV2,RANK:10 )
|
-
-
28 楼
[QUOTE=riijj;321022][挑战] [PEDIY Crackme 竞赛 2007] [第一回] 第16 队 – topmint...[/QUOTE]
都是偶像!!
|
能力值:
(RANK:300 )
|
-
-
29 楼
不会的
大家休息一下,明天再来
如果大家对参赛的 crackme 破解有心得,欢迎发表破文,所有文章会和 crackme 一起放到 Crackme 竞赛 07 的 chm 精华里
|
能力值:
( LV3,RANK:30 )
|
-
-
30 楼
快放第二个啊,我2点要上班了,快
|
能力值:
( LV6,RANK:90 )
|
-
-
31 楼
才出去一趟就被秒了
回来晚了
|
能力值:
( LV9,RANK:250 )
|
-
-
32 楼
用户名: golds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds70Q
注册码: GGGG-OOOO-LLLL-DDDD-SSSS-UUUU-NNNN-!!!!
|
能力值:
( LV9,RANK:330 )
|
-
-
33 楼
要是把注册名长度限制一下就不会这样了
|
能力值:
( LV9,RANK:330 )
|
-
-
34 楼
根据注册码反算注册名
|
能力值:
(RANK:300 )
|
-
-
35 楼
明天出战的是
第 6 队- Nooby
|
能力值:
( LV9,RANK:330 )
|
-
-
36 楼
晕,放学回来就已经有人搞定了啊~
不过感觉有点不对劲,这个crackme不会只是这样吧,只要用户名的ascii和等于1B7F就能通过了
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxO
另有蹊径?
|
能力值:
(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分钟就可以看到注册码。
|
能力值:
( LV9,RANK:250 )
|
-
-
38 楼
恩。CCDebuger所言既是。
|
能力值:
(RANK:300 )
|
-
-
39 楼
提一下
如果 crackme 有特别的设计,例如伪成功信息,是需要事前声明,通知评审的
(现在已有 1 队通知了我们)
|
能力值:
( LV3,RANK:30 )
|
-
-
40 楼
完全就是这样,刚才破解的时候在比较点,下了个断点超快就破解了
|
能力值:
( LV9,RANK:250 )
|
-
-
41 楼
照这样说,此CM还是爆漏了明文,要考虑的因素还是挺多.
|
能力值:
( LV9,RANK:330 )
|
-
-
42 楼
这才是我想看到的
|
能力值:
( LV9,RANK:330 )
|
-
-
43 楼
要等到明天了,好痛苦
|
能力值:
( LV9,RANK:970 )
|
-
-
44 楼
支持一个,来晚了,没想到这么快。。。
|
能力值:
( LV9,RANK:250 )
|
-
-
45 楼
发现一个好玩的
用户名: golds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds7ngolds70Q 注册码: GGGG-OOOO-LLLL-DDDD-SSSS-UUUU-NNNN-!!!!
用诸如此类的注册号(砸凑用户名),是可以重复注册的。
用其它的,倒只可以注册一次。
|
能力值:
( LV9,RANK:250 )
|
-
-
46 楼
还是0x1B80导致的问题所在。
|
能力值:
(RANK:300 )
|
-
-
47 楼
我相信很多参赛 crackme 是 1 天不能破的
大家拭目以待
|
能力值:
( 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.算法太固定,考虑一下能否把算法改成根据用户名动态生成,将会大大增加爆破的难度!
|
能力值:
( LV9,RANK:1250 )
|
-
-
49 楼
思路新颖,学习了。
|
能力值:
( LV9,RANK:850 )
|
-
-
50 楼
饿也找到很多个!!
只要用peid看一下md5地址``呵呵@!!
就到关键点了!
不过很纳闷!只能成功一次~汗~~~~~~~~~~~~~~
|
|
|