fyc132 发表于 2018-5-16 16:46

资格赛进阶版解答

应官网邀请
程序全局逻辑如下:


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就可以得到注册码了




Hmily 发表于 2018-5-16 18:22

fyc132 发表于 2018-5-16 16:57
有办法直接把一个word转成帖子吗,一个一个贴图太麻烦了

不行的,还是得上传,我帮你编辑下格式。

fyc132 发表于 2018-5-16 16:57

有办法直接把一个word转成帖子吗,一个一个贴图太麻烦了

z568364797 发表于 2018-5-16 16:57

看不懂啊,大神{:1_908:}

CrazyNut 发表于 2018-5-16 16:59

大佬,帖子排版爆炸了= =

hackysh 发表于 2018-5-16 18:12

看看大牛的思路

gunxsword 发表于 2018-5-16 18:57

小白路过,大神威武!

luanshils 发表于 2018-5-17 00:12

前排吃瓜,虽然看不懂,但还是膜拜楼主这种超强的技术

zhtx304 发表于 2018-5-17 08:56

膜拜楼主这种超强的技术

永封丶 发表于 2018-5-17 12:17

膜拜大神
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 资格赛进阶版解答