ctf——逆向新手题目10 (getit) WP

首先我们先下载提供的附件,用Exeinfo PE打开查看信息
在这里插入图片描述
是一个64位的ELF文件,无壳,接下来就用ida64去打开
然后进入主函数查看伪代码
在这里插入图片描述
这是我们去分析伪代码
在这里插入图片描述
首先给 v5 赋了 0 为初值,然后在 while 循环里与 s 的长度进行比较,我们就追踪 s 查看其内容在这里插入图片描述

s 为一串字符,暂不知含义,继续看,
进行了一个(v5 & 1)的运算,实际上就是判断v5的二进制最后一位是否为1若是返回值为 1,否则为 0,实际就是判断奇偶数,最后一位为1,为奇数 v3=1,否则为偶数 v3 = -1;
在这里插入图片描述
这里将 s[v5] 加上 v3 填充到 t 的首地址加 10 加 v5 处,这时我们跟踪 t 查看 t 的内容
在这里插入图片描述
我们看到一串字符,貌似就是我们所要 求的 flag 但大括号内部为问号,这时我们想到上面所做的运算,填充的内容正好就是从第一个问号开始的,这时先不急着去写代码,继续往下看
在这里插入图片描述
打开一个名为"flag.txt"的文件,然后 fprintf() 函数将 u 和 v5 写入文件
我们去看u的值
在这里插入图片描述
我们发现u 的长度和上面计算得到的字符长度一样,这时我们就确信上面计算的字符就是本题flag
我们现在就去编写脚本

s = "c61b68366edeb7bdce3c6820314b7498"
t = '????????????????????????????????'
print(len(t) == len(s))
v5 = 0
flag = ' '
while v5 < len(s):
    if v5 & 1:
        v3 = 1
    else:
        v3 = -1
    flag += (chr(ord(s[v5])+v3))
    v5 += 1
print(flag)

在这里插入图片描述

最后计算出大括号内的内容
b70c59275fcfa8aebf2d5911223c6589
然后就得到本题flag
SharifCTF{b70c59275fcfa8aebf2d5911223c6589}
这样本题就结束了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值