Day2 BUUCTF——[WUSTCTF2020]level4

0x1.首先下载附件,是个64位ELF文件。
在这里插入图片描述

0x2.在linux下执行该文件,输出6行字符串后程序退出。
.在这里插入图片描述
0x3.使用IDA pro 64位版本加载该文件,F5反编译main函数。
在这里插入图片描述
需要关注的函数有3个:init()、type1()、type2()。

0x4.进入init()函数
在这里插入图片描述
发现一个字符串I{_}Af2700ih_secTS2Et_wr和若干地址赋值操作。

0x5.进入type1()函数
在这里插入图片描述
type1的参数为&unk_601290,分别对参数(8字节整数地址)的后两个值递归调用type1函数。同时在调用两个函数中间输出函数参数地址存储的字符。

0x6.进入type2()函数
在这里插入图片描述
行为和type1相近但是是在最后输出字符。

尝试动态调试分析,因过程略复杂,未完成。查看Writeup后解出。

P.S.:本题考查二叉树遍历算法。未能解出的原因是没有想到出题考点,对常用算法生疏。
解题方法为根据中序遍历(type1输出)和后序遍历(type2输出)结果,推导先序遍历结果。

附上 由中序遍历和后序遍历求先序遍历的递归算法:
def pre(post,mid):
length = len(post)
if length == 0:
return 0
root = post[length-1]  
for i in range(length):
if root == mid[i]:
break
print(root,end=“”)
pre(post[0:i],mid[0:i])
pre(post[i:length-1],mid[i+1:length])
这里边有两个需要留意的地方:
一是后序遍历的最后一个元素是根节点;
二是先序、中序、后序遍历的原理。中序遍历的序列中根节点前面n元素同样是后序遍历序列中根节点前面n个元素;中序遍历中根节点后面的元素为后序遍历中除最后一个元素(根节点)外的元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值