re | [WUSTCTF2020]level4

这是一道x64的elf逆向题。

主要涉及的知识是二叉树的三种遍历方式,这是我第一次在逆向题中遇到这种数据结构。

主函数的逻辑是比较清晰的,主要是初始化然后两种遍历方式。

网上对于二叉树遍历方式的解释花里胡哨,这里找到一篇对于二叉树遍历方式描述比较清晰的博客:https://blog.csdn.net/LX18792732127/article/details/76167482

简单的总结一下:三种遍历方式都是从根节点找左再找右,区别在于输出本身节点值的时机:

先序遍历:输出-左-右

中序:左-输出-右

后序:左-右-输出

*注:以上均是对于递归的方式而言。

来看一下程序的输出:

从IDA中可以肥肠清晰的看出,type1是中序,type2是后序:

那么可以直接通过中序和后序画出二叉树。【这个我和我的同学推了有一小会儿,还是挺费劲的】

第二种思路,就是通过以下的指针绑定去看二叉树的形状:

然后先序遍历就可以得到flag。

原文地址:https://www.cnblogs.com/Mz1-rc/p/13688086.html