BUU[WUSTCTF2020]level4

分析

首先查壳,发现没有壳为64位,然后放入IDA分析

image-20220427205446998

然后看英文提示数据结构和遍历,然后分别点进去第8行和第10行的函数看在干嘛

image-20220427205605885

这里分许出来为左根右(中序)

image-20220427205728866

这里分析出来为左右跟为(后序)

然后去看看对应的序号的内容

image-20220427205911315

已知了中序和后序很容易知道这里要求的是前序,开始写脚本

脚本

#include<iostream>  
using namespace std;
char mid[] = "2f0t02T{hcsiI_SwA__r7Ee}";
char post[] = "20f0Th{2tsIS_icArE}e7__w";
void pre(int root, int start, int end)
{
if(start > end)
return ;
int i = start;
while(i < end && mid[i] != post[root]) i++; //定位根在中序的位置
cout<<mid[i]; //访问当前处理的树的根
pre(root-1-(end-i), start, i - 1); //递归处理左子树
pre(root-1, i + 1, end); //递归处理右子树
}

int main()
{
pre(23, 0, 23);
return 0;
}

得出flag

wctf2020{This_IS_A_7reE}

总结

这是第一次做的二叉树的题目,了解了一些二叉树的规律

前序:根左右

中序:左根右

后序:左右根

脚本用本题的脚本稍作修改即可