首页
社区
课程
招聘
[原创]挑战netwind的第一轮第二题的"规则"
发表于: 2008-10-8 09:39 5728

[原创]挑战netwind的第一轮第二题的"规则"

2008-10-8 09:39
5728
今天早上看到fengyue的贴子里netwind关于kg的定义, 原文如下

你的keygen 生成的注册码 不包括我列出来的注册码
注册机必须能够罗列所有的用户名和注册码


我被雷到了啊
本人不才, 在这里贴一组能注册成功的用户名和注册码
请netwind作者看看你自己的标准答案的kg里,能不能算出我贴出来的key
第二题的答题者也可以顺便检查一下自己的答案,是否符合netwind的"标准"

abcdefghijkl
30120212022111212313121222323002001020102010200200102*****


请赐教

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (36)
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
2
沙发自己坐.
2008-10-8 09:41
0
雪    币: 7325
活跃值: (3803)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
3

abcdefghijkl
30120212022111212313121222323002001020102010200200102*****


太强大了,我也被雷到了
2008-10-8 09:41
0
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
囧rz...拜楼主
2008-10-8 10:06
0
雪    币: 11370
活跃值: (3386)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
5
注册码前53位才是有效位
如果前53位是一个固定串
认为注册机没通过
如果象这样
printf("30120212022111212313121222323002001020102010200200102");
的注册机 我们能否给他通过呢?
那样题目似乎就没意义了.
评分是根据他提供的文字说明,提供的算法代码,和提供的注册程序来定的,
对于能够吧算法分析得 比较全面的,应该给予较好的成绩.
由于本人水平确实有限,问题考虑的不全面,接受大家批评.
能解释的也就解释这么多了.感谢大家的提出的意见!
2008-10-8 10:19
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
6
你的说法无法让人信服
如果有53位有效位这个规则,应该在赛前说明
不能因为你是出题者, 等过了比赛了
你说53位就53位
你说57位就57位

应该从题目中实际的信息来判断

从这个题目中
关于用户名长度判断如下
00403335       83F8 0C           cmp eax,0C
00403338       74 14             je short cm.0040334E

说明用户名长度是12就是合法的

再来看注册码
00403598       83F8 35           cmp eax,35
0040359B       73 14             jnb short cm.004035B1

说明注册码长度不小于53就是合法的

这是实际题目中的信息, netwind你事后才说注册码只有前53有效位是不合理的
2008-10-8 10:29
0
雪    币: 11370
活跃值: (3386)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
7
53位有效位
2008-10-8 10:34
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
8
我想这次应该不是代码除虫活动,也许是我比较孤陋寡闻,只是在我知道的竞赛中除非是专门找bug或漏洞的比赛,否则都不允许利用漏洞,否则就偏离了初衷。或许下次看雪再组织活动的时候可以考虑来一题找漏洞的题目
netwind在短时间里给大家出一道题也很不容易,虽然在长度判断和出错信息上有一些不够严谨,但构题的思路来看还是很清晰的。想提的意见反馈给netwind就好了,下次再出题目的时候一定会考虑的更全面,至于挑战什么的就算了吧
2008-10-8 10:35
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
9
我很赞同乌龟大师的说法
但我并不认为现在是在讨论bug问题
我在顶楼贴的key并没有利用什么bug, 完全是符合规则的, 能够成功注册的key吧
2008-10-8 10:38
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
10
凡事要摆事实,讲道理
我第一次问你
00402D03      /7D 12             jge short cm.00402D17

402D03是不是应该是jnz, 你很确定的告诉我,这里就是jge, 你的源代码就是这么写的

好,既然如此,那么
00403598       83F8 35           cmp eax,35
0040359B       73 14             jnb short cm.004035B1

我完全相信你在40359B的jnb也就是这么写的,即:注册码不小于53是有效的,合法的

你现在反水说只有53位是有效位,那你的代码为应该是je, 而不是现在大家看到的jnb
这显然是矛盾的
2008-10-8 10:43
0
雪    币: 11370
活跃值: (3386)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
11
只有注册码前53位参与了运算
因此我说他有53位有效位
2008-10-8 10:46
0
雪    币: 186
活跃值: (15)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
12
我现在明白netwind的意思了,他是让我们必须地真正地弄懂算法,否则是不能给出所有name和key的。感谢netwind不厌其烦的解释,也很佩服shoooo大侠!!!
如果事先没有见过这个算法,我想是很难推导出这个算法的思想模型的,我本人有这个感受,我在分析时也只知道用1组替换0组,2组替换1组的数据,本着规律填完53个字符,
完全抽象不出数学模型。
2008-10-8 10:49
0
雪    币: 503
活跃值: (80)
能力值: (RANK:280 )
在线值:
发帖
回帖
粉丝
13
我是从构题的思路来估测的,也许有所偏差,算法部分对前53位有过操作,因此长度判断的jnb和可以理解为不够严谨,当然也可以理解为作者故意预留的

虽然在出题的时候没有足够明确的说明,但个人看法是这道题基本上是两个strgen,有一定的联系但又不互相依赖,但对于key的变化从题目本身来说应该还是着重于前53个字节的实现,因此我更倾向于把这个jnb和出错信息一起理解为不够严谨
2008-10-8 10:51
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
14
那!冲着你这句, 如果我贴个注册码53位以后也参与到运算的key
你还认为只有53位是有效么?请回答
2008-10-8 10:53
0
雪    币: 11370
活跃值: (3386)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
15
我写代码的时候从1开始只取到注册码的第53位的
算法部分有如下:
if(xbox[key[49]][key[50]].m==xbox[key[51]][key[52]].m)
                                        {
                                                s[c1++]='d';  
                                        }
后面的没有进行取值了
如果确实有53位后面的部分参与了算法部分的运算,那么程序就设计得不够严谨.
2008-10-8 10:57
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
16
[QUOTE=netwind;518506]我写代码的时候从1开始只取到注册码的第53位的
算法部分有如下:
if(xbox[key[49]][key[50]].m==xbox[key[51]][key[52]].m)
                                        {
                                                s[c1++]='d';  
                                        }
后面的没有进行取值了
如果确实有53位后...[/QUOTE]

我们纯技术讨论
我只要你一个回答
如果我贴出一组用户名和注册码
并且注册码的53位以后也参与了运算
那你还认不认为注册码只有53位是有效的?
2008-10-8 10:58
0
雪    币: 11370
活跃值: (3386)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
17
很期待你贴出来
题目设计的本意是注册码前53位参与运算
如果有53位后面的参与 运算了,的确是代码部分设计不够严谨
写这个cm的确也是个学习的过程,欢迎你的指点,谢谢!
2008-10-8 11:02
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
18
好,那我现丑贴一个
abcdefghijkl
30120212022111212313121222323002001020102010200200102*********************************************************************************************************10


这是一组可以成功注册的用户名和注册码
请大家注意注册码最后一位0
这个0远远的大于了53位了
如果把这个0去掉或是换成1或2或是别的,将会注册失败
所以我断定这个0参与了运算
即, 这组key的有效位远大于53位

结论: key的有效位不只是53位,可以大于53位,因此我顶楼贴的key也是合法的
2008-10-8 11:05
0
雪    币: 8209
活跃值: (4528)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
19
关于53位以后的问题和开始遇到的两个<的问题我觉得应该同等对待
如果那两个<是作者有意设计的
那么53位以后的利用也可以认为是作者有意设计的
2008-10-8 11:09
0
雪    币: 107
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
太有才了,佩服
2008-10-8 11:11
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
21
不管设计上严不严谨,既然规则已经公布了,就应该按照规则,即使结果背离题目本意,只要符合规则的都是正确答案.
2008-10-8 11:18
0
雪    币: 8209
活跃值: (4528)
能力值: ( LV15,RANK:2473 )
在线值:
发帖
回帖
粉丝
22
为什么只提交两组注册码,而不提交keygen?
重要的一个原因就是很多有疑义的地方,作者都可以声称是他事先设计
而且当了解到两个<的问题后,更加觉得程序里很可能会隐藏其他暗桩
2008-10-8 11:20
0
雪    币: 101
活跃值: (12)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
23
我觉得前53位都不重要了, 写个shellcode让他OK, 想OK几次就OK几次, 还可以开个记事本玩玩
2008-10-8 11:23
0
雪    币: 11370
活跃值: (3386)
能力值: (RANK:520 )
在线值:
发帖
回帖
粉丝
24
参与12个刚球的算法只取了53位
程序中没有对注册码框里的字符的长度做限制

对于前53位只给出一个固定字符串的注册机
只能区别对待
2008-10-8 11:35
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
25
这次活动真失败啊...
2008-10-8 11:36
0
游客
登录 | 注册 方可回帖
返回
//