资格赛进阶版解答
应官网邀请程序全局逻辑如下:
1.程序首先判断用户名的有效性:
首先判断用户名的长度是否为39位,然后用#分割字符串1111#2222#3333#4444#5555#6666#7777#8888,分割为8串,且必须是0-9,A-F的组合,并且换为大写。
2. 如果用户名通过了检测,则进入第二步,利用8串字符串算出5个magic code
具体的实现伪代码如下:
3.接着程序就开始解析序列号了,解析序列号的算法是一个变异的base64
需要修改的地方有2处,一处是base64置换字符串被修改为了ZO6Kq79L&CPWvNopzQfghDRSG@di*kAB8rsFewxlm+/u5a^2YtTJUVEn0$HI34y#=第二处是每次查表的时候都需要一个新的变换
把标准的base64修改后,即可正常编/解码了
3.解码后的序列号有判断,是0x20的字符,接着程序会解密这20个字符。解密的函数是aes的变异版本,通过众多0x2C可以观察出来,该部分比较复杂。程序首先传入被加密过的内存与一个密钥welcomegslab2018
进入该函数,首先进入眼睛的就是aes的初始化rk的过程了
在这里,我们可以拿到被修改过后的sbox表,
首先,程序在根据key初始化rk表的时候,有一些地方跟正常的aes不一样。rk表会跟自己再进行xor一遍,每个字节的顺序也发生了变化
我们可以通过跟踪程序的相关代码分析出来
初始化完rk表后,跟标准的aes并不一样,然后就开始第一轮AddRoundKey了
伪代码如下:
此时的状态矩阵为
接着程序就要开始逆S盒变换了,要注意这里的行列是互换的,还有逆S盒也是经过替换的,也需要去修改
所以我们要修改行列的位置
处理完的状态矩阵为
接着,程序开始进行逆行变换
这里是行列相反,相关伪代码如下
此时的状态矩阵为:
然后程序开始第一次InvMixColumns,
第一次非常多的case的就是对in的InvMixColumns,完成后的矩阵变成了
接着程序开始变换key
先把第四行跟第三行交换,然后对key进行InvMixColumns,然后对加密的数据进行xor对key进行InvMixColumns:
Key xor 数据
伪代码如下:
接着就是aes-128的10轮循环了,附加个数据矩阵变换图
当程序解密完成后,有4个int64的值u1,u2,u3,u4其中u4是写死的
然后程序根据上面获取的5个magic code与u1,u2,u3做逻辑运算
得出解:
根据算出的u1,u2,u3就可以得到注册码了
fyc132 发表于 2018-5-16 16:57
有办法直接把一个word转成帖子吗,一个一个贴图太麻烦了
不行的,还是得上传,我帮你编辑下格式。 有办法直接把一个word转成帖子吗,一个一个贴图太麻烦了 看不懂啊,大神{:1_908:} 大佬,帖子排版爆炸了= = 看看大牛的思路 小白路过,大神威武! 前排吃瓜,虽然看不懂,但还是膜拜楼主这种超强的技术 膜拜楼主这种超强的技术 膜拜大神