-
-
看雪2018CTF第七题
-
发表于:
2018-6-30 10:29
4045
-
这个题的sn验证部分都在sub_401050这个函数
首先获取sn的每个字符在字符串abcdefghijklmnopqrstuvwxyz+-ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789中的位置作为第一层的密钥,然后就是计算上一层的密钥。
这里的v24是一个char v24[16][16]的数组,由前面部分的初始化代码和第二轮循环可以猜测出这个数组决定了上一层的密钥,v24在od中的内容如下:
比如第一行中的0,1,2号元素都是1,那么上一层的第一扇门的钥匙为byte_40FEF0[current_floor[0] ][
current_floor
[1]
][
current_floor
[2]
],
current_floor 为当前层的密钥,这个
byte_40FEF0是一个64*64*64的三维数组,每个元素都是在0到63之间,循环16次刚好得到上一层中16扇门的钥匙,组成一个密钥。在实际运行中,由od跟踪发现,这个决定规则如下:
0 1 2
3 4 0
5 6 0
5 7 1
4 6 1
8 2 3
9 2 4
7 10 3
8 12 5
11 13 6
12 13 7
11 14 9
14 8 10
15 9 10
15 11 12
15 13 14
最后,19次循环获得每一层的密钥保存到变量v21中,然后最后一层的密钥和
byte_40FEE0比较
byte_40FEE0={0x14,0x22,0x1E,0x10,0x38,0x30,0x18,0x10,0x04,0x1A,0x24,0x08,0x02,0x26,0x38,0x2A}
这个题我用的是c++穷举得到的sn,穷举代码我添加到附件
rPFf9bJl3tXj93ZJ
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)