-
-
[原创]CTF2018第二题writeup
-
发表于: 2018-6-19 16:32 2169
-
0x0:主要逻辑
题如其名,这个CM使用trietree作为验证载体,用户输入字符串(仅限大小写字母和数字)经解析后构成一颗trietree,作者全局定义一颗trietree,两颗树相等且满足一定输入顺序即验证成功.0x1:还原TrieTree结构
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
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- [原创]CTF2018第六题writeup 3672
- [原创]CTF2018第三题writeup 2914
- [原创]CTF2018第二题writeup 2170
- [原创]CTF2017秋季赛第二题解法 2846
- [原创]第一题 Helllo-CTF 1853
看原图
赞赏
雪币:
留言: