首页
社区
课程
招聘
[原创]2018看雪&TSRC CTF第三题WP
发表于: 2018-12-7 06:23 4566

[原创]2018看雪&TSRC CTF第三题WP

2018-12-7 06:23
4566

程序用的是低版本的编译器,所以IDA7.0把一些库函数都帮我们标出来了。
程序结构也很简单,整个大小只有60KB.
下面是几段关键的代码:

main函数里调用了ctf_get_input来获取输入,顺便校验输入的长度以及字符是否合法(长度为18,合法字符为[0-9A-F]):

变换一:以输入的18个字符的二进制来控制加密流程,18x4=72位.这也是题名七十二冢的由来。共循环72次,每次从72x16的向量表中依次取出一个16字节向量,根据二进制位是否为1,与串s"Perfection is achieved not when you hav..。"异或,并且每次向后位移一个字节。

把72X16的异或密钥向量表用idapython dump下来:

变换二:以长度为138的加密后的串来控制16个字节的密文的加密。每轮变换i中,取16位密文首字节与s[i]异或的值作为从256x16的密钥向量表中去密钥的索引,16位密钥向左循环移位一个字节后与密钥向量异或,完成一轮变换。此题中共138轮变换(加密串的长度)

256*16的异或向量表:

最终的校验(设置初始向量,比对加密后的向量):

整理一下流程:

先提一个很重要的数学性质(被多次利用):

再回来看变换二的异或向量表,把位与位的异或关系以矩阵的形式来表达(矩阵实际上是加法),16列对应16个变换矩阵:(其中I为单位矩阵,O为全零矩阵)

接着再看循环移位的变换:

于是第一轮变换可以表示为:

如此变换138次后:

输出72冢的系数矩阵到文件(128x72):(中间还有一些中途测试用的代码,懒得改了)

利用高斯消元求解线性方程组:(大矩阵M来自上面代码的输出)

结果:


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

最后于 2018-12-7 11:46 被mratlatsn编辑 ,原因:
收藏
免费 6
支持
分享
最新回复 (3)
雪    币: 486
活跃值: (583)
能力值: ( LV12,RANK:238 )
在线值:
发帖
回帖
粉丝
2
没明白为啥输入全F的输出结果是可见的。
2018-12-7 12:38
0
雪    币: 1711
活跃值: (516)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
3
分析完算法我就知道自己要倒在数学上
2018-12-7 18:41
0
雪    币: 365
活跃值: (864)
能力值: ( LV9,RANK:186 )
在线值:
发帖
回帖
粉丝
4
没明白为啥输入全0的输出结果是可见的。
2018-12-7 21:31
0
游客
登录 | 注册 方可回帖
返回
//