Buuctf - level4二叉树+IDA动态调试
打开main
感觉是一个二叉树

关键函数
init

感觉是给结构体赋值,定义左右子树
type1

很明显,中序遍历
type2

很明显,后序遍历
不难猜出,要求的是先序遍历序列
法一画出先序序列

IDA远程动态调试,然后得到后序序列和中序序列的输出,即可开始画图
当然,也有大佬写了份代码,贴一下
#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
法二
有的大佬说可以通过绑定的数组查看二叉树的形态

但我不已经输出了二叉树的形态了吗,不懂,暂时不用此方法

浙公网安备 33010602011771号