-
-
[原创]CTF2018第二题writeup
-
发表于: 2018-6-19 16:32 2286
-
0x0:主要逻辑
题如其名,这个CM使用trietree作为验证载体,用户输入字符串(仅限大小写字母和数字)经解析后构成一颗trietree,作者全局定义一颗trietree,两颗树相等且满足一定输入顺序即验证成功.0x1:还原TrieTree结构
1 2 3 4 5 6 7 8 9 10 11 12 | typedef struct _TrieTreeNode { char buffer[0x84]; struct _TrieTreeNode* ChildNode[0x20]; PVOID ChildNodeSize; PVOID RepeatSize; }TrieTreeNode; typedef struct _TrieTree { TrieTreeNode* Root; }TrieTree; |
以上为还原后的类结构,TrieTree的Root结点不包含数据,数据保存在ChildNode中,buffer保存着字符串的前缀,ChildNodeSize为以buffer为前缀子串的数目,RepeatSize为前缀重复的次数.
0x2:全局TrieTree
按上述结构对全局TrieTree进行解析:

其中括号里的表示前缀重复次数,需要两个c7M.
0x3:用户TrieTree
用户输入的字符串长度为22,并分为8组作为子串对树进行构造,以abcdefghijklmnopqrstuv为测试字符串.分组及插入顺序为:
nop ab jklm efg cd hi qrs tuv
按0x2的全局树对字符串还原:
c7ctc7Mkxc7Mkctfct9c7M
还原后的字符串还应该满足分组的顺序,分组的顺序以xor进行限定.
所以最终的flag是c7ctc7Mkxc7Mkctfct9c7M
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [原创]CTF2018第六题writeup 3824
- [原创]CTF2018第三题writeup 3050
- [原创]CTF2018第二题writeup 2287
- [原创]CTF2017秋季赛第二题解法 2998
- [原创]第一题 Helllo-CTF 1946
赞赏
雪币:
留言: