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

法二

有的大佬说可以通过绑定的数组查看二叉树的形态

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

posted @ 2025-04-30 20:44  Bri1  阅读(18)  评论(0)    收藏  举报