首页 > 其他分享 >strcmp 和 level4 write up

strcmp 和 level4 write up

时间:2023-02-26 10:22:44浏览次数:36  
标签:preorder sub val inorder write level4 root strcmp postorder

作业题两题

strcmp

ida打开 找到主函数

如果答案这么简单就好了 尝试在start函数找线索,发现其中的init函数非常可疑

该函数访问了地址off_200DF0到funcs_889 于是查看了off_200DF0到funcs_889

发现其中有sub_6E0,sub_795,sub_6A0三个函数,同时,因为

所以sub_6A0不会访问到,接着查看查看sub_6E0函数,无果,后查看sub_795函数

其中大概意思是将strcmp的地址改掉,并调用sub_6EA
于是得出,sub_6EA便是加密函数

逻辑还是比较简单的,i的值为flag的长度,(i>>3)+1为4,于是便得出结论, 循环四次,每次取8字节减上qword_201060[j]

解密程序:

#include<bits/stdc++.h>
using namespace std;
int main(){
	char flag[]="zer0pts{********CENSORED********}";
	unsigned long long key[4]={0, 0x410A4335494A0942,0x0B0EF2F50BE619F0,0x4F0A3A064A35282B};
	for(int i=0;i<4;i++){
		*(unsigned long long*)&(flag[i*8])+=key[i];
	}
	cout<<flag;
}
//zer0pts{l3ts_m4k3_4_DETOUR_t0d4y}

level4

首先ida打开

通过 puts("Practice my Data Structure code.....");puts("Typing....Struct.....char....*left....*right............emmmmm...OK!");和题目提示能够推断出这书一个二叉树的数据结果,查看type1直觉上感觉是中序遍历树
在查看type2直接说明就是后序遍历
那我就知道了,这题考察已知中序遍历和后序遍历,求前序遍历。 quite simple 直接用py尝试写(第一次用py写数据结构,没想到感觉还更方便)

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = None
        self.right = None

def build_tree(inorder, postorder):
    if not inorder:
        return None
    root_val = postorder[-1]
    root = TreeNode(root_val)
    i = inorder.index(root_val)
    root.left = build_tree(inorder[:i], postorder[:i])
    root.right = build_tree(inorder[i+1:], postorder[i:-1])
    return root

def preorder_traversal(root):
    if not root:
        return ''
    return root.val + preorder_traversal(root.left) + preorder_traversal(root.right)

inorder = "2f0t02T{hcsiI_SwA__r7Ee}"
postorder = "20f0Th{2tsIS_icArE}e7__w"

root = build_tree(inorder, postorder)
preorder_result = preorder_traversal(root)
print(preorder_result)
# wctf2020{This_IS_A_7reE}

标签:preorder,sub,val,inorder,write,level4,root,strcmp,postorder
From: https://www.cnblogs.com/fallrain/p/17156198.html

相关文章