[BUUCTF] REVERSE —— [WUSTCTF2020] level4

[WUSTCTF2020] level4

приложение

шаг

  1. elf, попробуйте запустить виртуальную машину, чтобы увидеть общую ситуацию, Typing....Struct.....char....*left....*right............emmmmm...OK!угадайте, что существует двоичное дерево в соответствии с символами подсказки.
    Вставьте описание изображения сюда
    Я вижу, что строки в type1 и type2 немного похожи на флаги, но порядок нарушен
  2. 64 ida Загрузка
    Вставьте описание изображения сюда
    type1 (byte_601290), порядок обхода двоичного дерева: 2f0t02T} {hcsiI_SwA__r7Ee
    Вставьте описание изображения сюда
    20f0Th} {2tsIS_icArE e7__w: Type2 (byte_601290), последовательность обхода
    Вставьте описание изображения сюда
    двоичного дерева в двоичном дереве может быть представлена до, после понимания принципов дерева Определиться Заказано. Руководство в начале, в середине написания, я нашел слишком много и изменил сценарий

Источник Python3 exp
: https://blog.csdn.net/weixin_41287060/article/details/99400963

#使用中序后序求前序遍历
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None


class Solution:
    def reConstructBinaryTree(self, post, tin):
        if len(post) == 0:
            return None
        root = TreeNode(post[-1])
        TinIndex = tin.index(post[-1])
        root.left = self.reConstructBinaryTree(post[0:TinIndex], tin[0:TinIndex])
        root.right = self.reConstructBinaryTree(post[TinIndex:len(post) - 1], tin[TinIndex + 1:])
        return root

    def PreTraversal(self, root):
        if root != None:
            print(root.val,end="")
            self.PreTraversal(root.left)
            self.PreTraversal(root.right)

strm="2f0t02T{hcsiI_SwA__r7Ee}"
stre="20f0Th{2tsIS_icArE}e7__w"
post = list(stre)#后序
tin = list(strm)#中序

S = Solution()
root = S.reConstructBinaryTree(post, tin)
S.PreTraversal(root)

wctf2020 {This_IS_A_7reE}
флаг {This_IS_A_7reE}

рекомендация

отblog.csdn.net/mcmuyanga/article/details/114382440