-
-
[原创]看雪.京东 2018CTF 第二题 数据结构 weiteup
-
2018-6-19 17:01 2256
-
1.字符串信息查找到
搜索之后发现是字典树。
2.程序总体流程
长度共22个字符。
关键函数 check_401C40
输入0123456789abcdefghijxx 后被分割成下边的8组进行插入:
//01 23 456 78 9abc def ghi jxx //0018FE99 00 00 00 6A 78 78 00 34 35 36 00 32 33 00 00 64 ...jxx.456.23..d //0018FEA9 65 66 00 67 68 69 00 00 52 40 00 40 56 52 00 30 ef.ghi..R@.@VR.0 //0018FEB9 31 00 00 37 38 00 00 39 61 62 63 00 00 00 00 A0 1..78..9abc....?
cmpnode_403730 树结构保存在4078f8
+0 vftable
+4 data.... 字符以0结尾,后边不知道是什么 整个结构 0x84
+0x88 left_node
+0x8C right_node
树结构
能表示的单词种类 kx c7Mk ct9 ctf
最后的验证函数
根据此特征,可以遍历所有的可能情况:
strTable="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" list_in_01=[] list_in_78=[] list_in_1415=[] list_in_1718=[] for i in strTable: for j in strTable: if ord(i) ^ ord(j) == 84: print "a[0] a[1] %c %c"%(i,j) list_in_01.append(i+j) if ord(i) ^ ord(j) == 19: print "a[7] a[8] %c %c"%(i,j) list_in_78.append((i+j)) if ord(i) ^ ord(j) == 18: print "a[14] a[15] %c %c"%(i,j) list_in_1415.append((i+j)) if ord(i) ^ ord(j) == 77: print "a[17] a[18] %c %c"%(i,j) list_in_1718.append((i+j)) print list_in_01 print list_in_78 print list_in_1415 print list_in_1718 print "over"
//结果:
['0d', '1e', '2f', '3g', '5a', '6b', '7c', '8l', '9m', 'a5', 'b6', 'c7', 'd0', 'e1', 'f2', 'g3', 'l8', 'm9'] ['ar', 'bq', 'cp', 'dw', 'ev', 'fu', 'gt', 'iz', 'jy', 'kx', 'pc', 'qb', 'ra', 'tg', 'uf', 've', 'wd', 'xk', 'yj', 'zi', 'AR', 'BQ', 'CP', 'DW', 'EV', 'FU', 'GT', 'IZ', 'JY', 'KX', 'PC', 'QB', 'RA', 'TG', 'UF', 'VE', 'WD', 'XK', 'YJ', 'ZI'] ['as', 'bp', 'cq', 'dv', 'ew', 'ft', 'gu', 'hz', 'jx', 'ky', 'pb', 'qc', 'sa', 'tf', 'ug', 'vd', 'we', 'xj', 'yk', 'zh', 'AS', 'BP', 'CQ', 'DV', 'EW', 'FT', 'GU', 'HZ', 'JX', 'KY', 'PB', 'QC', 'SA', 'TF', 'UG', 'VD', 'WE', 'XJ', 'YK', 'ZH'] ['4y', '5x', '7z', '8u', '9t', 't9', 'u8', 'x5', 'y4', 'z7']
由单词树可知满足情况的只有
0-1 c7
78 kx
1415 tf
1718 t9
同时结合单词长度和sub_4036D0处的遍历顺序可确定答案。
[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界
最后于 2018-6-19 17:45
被lacoucou编辑
,原因:
赞赏
他的文章
看原图