[资格赛题] 2018腾讯游戏安全竞赛第一轮PC进阶版分析
本文转载自:
https://www.52pojie.cn/thread-731852-1-1.html
0x00 概述
程序接受了用户输入的用户名和***,要求用户名长度为39,格式为xxxx#xxxx#xxxx#xxxx#xxxx#xxxx#xxxx#xxxx,***则为变形AES加密后再用变形base64编码后的数据,要求解密后长度为32,最后一个DWORD为0,倒数第二个DWORD为0x32303138。0x01 校验
将格式化的用户名按照计算规则生成5个64位数据,计算过程用python表示如下:
用户名计算 | ||
[Python] 纯文本查看 复制代码
|
将上式求解得到如下公式:
求解公式 | ||
[Python] 纯文本查看 复制代码
|
首先AES的**扩展方式变了,不过无妨,可以从运行中的程序中直接提取,得到
但在AES运行到2-9次**加时还会对2-9轮的轮**进行逆列混淆运算,同样,可提前计算出结果备用。计算函数如下(由于其轮**使用顺序以及列混淆的缘故,此处所有标为inv的函数或数据均为加密时使用,未标注的为解密时使用)
轮**变换 | |||
|
**加在执行过程中也发生了改变,原本应对位相加的方式在第3第4字节出发生了交换。变换后的**加函数如下:
**加 | |||
|
可运算得到逆代换表如下
在进行行变换时由原本的行变换变成了列变换。代码如下:
行变换 | |||
|
0x03 结果
任给一组用户名:0000#A222#2222#2222#44F4#55D5#C666#7AB7
求得***:Ou979Wh4Udz8ky9Y9ga#QSAssV&[email protected]+=
结果: