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}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构