strcmp 和 level4 write up

作业题两题

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}
posted @   kayoki  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示