这是一道x64的elf逆向题。
主要涉及的知识是二叉树的三种遍历方式,这是我第一次在逆向题中遇到这种数据结构。
主函数的逻辑是比较清晰的,主要是初始化然后两种遍历方式。
网上对于二叉树遍历方式的解释花里胡哨,这里找到一篇对于二叉树遍历方式描述比较清晰的博客:https://blog.csdn.net/LX18792732127/article/details/76167482
简单的总结一下:三种遍历方式都是从根节点找左再找右,区别在于输出本身节点值的时机:
先序遍历:输出-左-右
中序:左-输出-右
后序:左-右-输出
*注:以上均是对于递归的方式而言。
来看一下程序的输出:
从IDA中可以肥肠清晰的看出,type1是中序,type2是后序:
那么可以直接通过中序和后序画出二叉树。【这个我和我的同学推了有一小会儿,还是挺费劲的】
第二种思路,就是通过以下的指针绑定去看二叉树的形状:
然后先序遍历就可以得到flag。