-
-
[原创]看雪CTF2018 - 2018CMv4 Writeup
-
发表于:
2018-6-20 20:07
5010
-
[原创]看雪CTF2018 - 2018CMv4 Writeup
本题的关键在于对 TrieTree 四个数据结构的识别,分别是 TrieTree,TrieTreeNode,Children,String,如下图1所示:
图 1
主函数逆向如下图2:
main函数中判断输入的字符串长度不能超过22,然后进入输入字符串的验证函数 check_input_key,如下图3:
图 3
该函数主要功能是将输入的字符串分别取出7个子字符串,插入到一个 TireTree 中,并与一个全局 TrieTree 进行比较,如果两个 TrieTree 相同,则进入last_check函数进行最后约束条件的比较,如下图4:
图 4
图 5
首先,在当前节点的所有子节点中,查找与需要插入的字符串具有公共子字符串的子节点,如果没有找到具有公共子字符串的节点,将该字符串插入到当前节点的子节点中,即图8中 case 5。如果发现具有公共子字符串的子节点,其中又分四种情况,第一种情况,公共子字符串是两者的真子集,以下图6方式插入;
图 6
第二种情况,要插入的字符串 str 是找到 Node 的子字符串,如图7所示,将 Node 中剩余部分以一个节点形式插入到 Node 的子节点中;
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)