首页
论坛
课程
招聘
[原创]CTF2018第二题writeup
2018-6-19 16:32 812

[原创]CTF2018第二题writeup

2018-6-19 16:32
812

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


看雪侠者千人榜,看看你上榜了吗?

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回