首页
社区
课程
招聘
看雪2018CTF第七题
发表于: 2018-6-30 10:29 4045

看雪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期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 259
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢楼主的分享,厉害,我是刚接触看雪,问一个问题,你是怎么从把data_array取出到文本中的,好长呀,复制要好长时间
2018-7-5 12:00
0
雪    币: 24274
活跃值: (5304)
能力值: ( LV12,RANK:529 )
在线值:
发帖
回帖
粉丝
3
用notepad++16进制显示程序,把其它的数据去掉,然后在复制就是了,最后把空格替换成0x
2018-7-5 14:37
0
雪    币: 925
活跃值: (221)
能力值: ( LV7,RANK:118 )
在线值:
发帖
回帖
粉丝
4
会飞的鱼油 用notepad++16进制显示程序,把其它的数据去掉,然后在复制就是了,最后把空格替换成0x
IDA自带的Export Data(Shift+E)
插件LazyIDA
2018-8-29 10:44
0
游客
登录 | 注册 方可回帖
返回
//