首页
社区
课程
招聘
[原创]2017腾讯游戏安全技术竞赛 Round 2 第一题详细题解
发表于: 2017-7-19 09:31 8612

[原创]2017腾讯游戏安全技术竞赛 Round 2 第一题详细题解

2017-7-19 09:31
8612

从第一题题目来看,感觉这次的题目都出得很灵活,主要考的是密码学这一块的东西。这道题目也不例外,由于不是科班出身,根本没有接触过密码学,那只能现学现卖,其中踩了不少坑,但是不要怕,我们可以慢慢爬出来再继续踩。初一看这道题后面的“双重保镖”很是霸气,很容易被吓跑,但是仔细认真做了之后会发现,Oh,hash碰撞也不是那么难的。好了,废话扯多了估计要被拉黑,我选择的依旧是安卓的题目,下面进入正题,我将此题分成两大部分,主要阐述这两大部分。

官方具体表演如下:

实际上第一步要找出这段算法的逆运算。程序中有一个buffer,简算过后如下:

程序将输入的16bytes(也就是128bit),记为input,buffer的大小是2048bytes,分成了128个128bit,记为x[0]到x[127],根据之前的运算,input将和x数组进行128次运算,每一次运算生成1bit,一共生成128个bit,即16字节,这16字节就是最后算出来的结果,也是需要比较的结果。

其实是一个128元1次的异或方程组,采用高数中的高斯消元法来求解,这个就算没有学过密码学也会,因为这就是高数中的内容啊,看到这个名字是不是很熟悉?对,就是矩阵化简!对于高数课逃课的同学,关于高斯消元法,给个链接:
https://en.wikipedia.org/wiki/Gaussian_elimination
这里已经非常详细

然后根据本题目的特征google一下就能搜到不少解该类方程组的模板,选取一个,代码如下:

再根据IDA中看到的信息,确认正确答案的前面7字节是"GSLab17",最后四字节是pid,编写代码如下:

再调试看看结果,自己挖了什么坑自己填填坑,即可过第一关,进入下一关。

接下来来到孪生兄弟把守的最后大关,只要越过这道防线,就可以飞向光明顶。

之所以说它是孪生兄弟,是因为它对程序进行了hash值的校验,而且是两种校验,两个校验值都必须值为0x614C5347,其实就是“GSLa”。

Hash函数H将可变长度的数据M作为输入,产生固定长度的Hash值h。 
Hash函数,哈希函数,散列函数,杂凑函数它们说的都是同一个含义,后续我们都称之为Hash函数。

Hash函数H将可变长度的数据M作为输入,产生固定长度的Hash值h。
Hash函数,哈希函数,散列函数,杂凑函数它们说的都是同一个含义,后续我们都称之为Hash函数。
h=H(M)

给定输入M,通过函数H可以很容易计算出输出h;但如果给定h,则找到M在计算上不可行。

输入数据M中任何1个bit发生变化,都将导致输出M发生很大的变化。

在Hash函数中,M称之为h原像,,因为H函数是一个多对一的映射,,对于任意给定的Hash数值h,,可能会有多个原像,,如果满足如下条件, 则称之为发生了哈希碰撞,也就是哈希冲突。
x!=yandH(x)==H(y)
一个优良的Hash函数必须满足如下几个性质:

任意y,找x,使得H(x) = y,非常困难
给定x1, 找x2, 使得H(x1) == H(x2), 非常困难
找任意的x1, x2, 使得H(x1) == H(x2), 非常困难

这里感觉本题是第一条或者第二条,如果是第三条的话(可惜本题并不是),可以参考生日定理来解题,这里放个链接:
https://en.wikipedia.org/wiki/Birthday_problem

介绍完基本概念,言归正传,本题用的两个校验是crc32校验和fnvhash函数校验,这里再给两个链接:
crc32:http://blog.csdn.net/zhaodm/article/details/3711034
fnvhash:http://blog.csdn.net/taochenchang/article/details/7319739
通过分析代码可以得到:

1.crc32 校验
标准算法没改动过:

单独改crc32是没问题的.

2.fnv_hash
标准算法没改动过


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 2
支持
分享
打赏 + 5.00雪花
打赏次数 1 雪花 + 5.00
 
赞赏  CCkicker   +5.00 2017/07/20
最新回复 (22)
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2

6666666

2017-7-19 09:42
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
3
yezhulove 6666666
为什么不需要碰撞,请大佬解惑
2017-7-19 09:52
0
雪    币: 2277
活跃值: (6653)
能力值: ( LV7,RANK:102 )
在线值:
发帖
回帖
粉丝
4
然而我每次都是选择做PC
2017-7-19 09:57
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
Ericky 为什么不需要碰撞,请大佬解惑
看错,CRC不用碰,fnvhash操作那么简单,肯定能直接算,也不用碰。

https://www.nayuki.io/page/forcing-a-files-crc-to-any-value  这个是CRC的
2017-7-19 10:04
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
6
yezhulove 看错,CRC不用碰,fnvhash操作那么简单,肯定能直接算,也不用碰。 https://www.nayuki.io/page/forcing-a-files-crc-to-any-value ...
fnvhash无代码  无真相
2017-7-19 10:06
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
7
yezhulove 看错,CRC不用碰,fnvhash操作那么简单,肯定能直接算,也不用碰。 https://www.nayuki.io/page/forcing-a-files-crc-to-any-value ...
要不大佬发个任意fnvhash  计算  给小弟学习
2017-7-19 10:07
0
雪    币: 1005
活跃值: (199)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
我也是碰撞出来的
2017-7-19 10:07
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
9
joyoxy 我也是碰撞出来的
是啊。。算法不会逆写。。
2017-7-19 10:09
0
雪    币: 609
活跃值: (202)
能力值: ( LV13,RANK:480 )
在线值:
发帖
回帖
粉丝
10
瞎了  我以为碰撞出来的概率太小  都不愿意去用碰撞  真没想到8字节就搞定了  打脸了  已哭死
2017-7-20 07:21
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
11
维一零 瞎了 我以为碰撞出来的概率太小 都不愿意去用碰撞 真没想到8字节就搞定了 打脸了 已哭死[em_17]
概率都是一样的,看解的个数,按照平均数来说,五字节256个,八字节4.2e个,所以我就选了八字节。其实五字节以上都是一定有解,这个不影响。
2017-7-20 10:26
0
雪    币: 8
活跃值: (38)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
唉,我也是看了看fnv的算法感觉没得逆就没动了,没想着要暴力。第二题也玩不动了,GG
2017-7-20 17:25
0
雪    币: 3502
活跃值: (1493)
能力值: ( LV15,RANK:1057 )
在线值:
发帖
回帖
粉丝
13
囧,我也搜到了这个模板。。然后把他的模板站关注了
2017-7-20 18:04
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
14
echohello 唉,我也是看了看fnv的算法感觉没得逆就没动了,没想着要暴力。第二题也玩不动了,GG
继续努力
2017-7-20 23:50
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
15
kkHAIKE 囧,我也搜到了这个模板。。然后把他的模板站关注了
猛男居然光顾。。。免费送瓜子  西瓜
2017-7-20 23:52
0
雪    币: 1787
活跃值: (340)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
16
Ericky 要不大佬发个任意fnvhash 计算 给小弟学习
我又去看了看,他需要同一份数据,同时满足两个HASH,暂时想不到计算方案,只能碰撞了。
2017-7-24 17:14
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
17
yezhulove 我又去看了看,他需要同一份数据,同时满足两个HASH,暂时想不到计算方案,只能碰撞了。
嗯嗯~
2017-7-24 20:09
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
真的详细,学习了,感谢分享。
2017-7-25 09:29
0
雪    币: 163
活跃值: (509)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
真的666666啊  小菜膜拜
2017-7-25 19:00
0
雪    币: 2548
活跃值: (965)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
20
666
2017-7-26 12:28
0
雪    币: 29
活跃值: (97)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
真的666666啊    小菜膜拜 
2017-7-27 11:33
0
雪    币: 2548
活跃值: (965)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
22
我也把我的题解发出来吧,思路不一样
2017-7-27 16:52
0
雪    币: 1185
活跃值: (458)
能力值: ( LV13,RANK:360 )
在线值:
发帖
回帖
粉丝
23
loudy 我也把我的题解发出来吧,思路不一样
发呀  学习学习~
2017-7-27 17:07
0
游客
登录 | 注册 方可回帖
返回
//