BUUCTF——Reverse——xor

1、题目

2、工具

  • Exeinfo PE:查壳工具。
  • IDA:是一款功能强大的反汇编工具,用于分析和逆向工程二进制文件。
  • python:编写自动化脚本。

3、方法

  • 下载压缩包并解压,得到一个没有后缀的文件。
  • 用Exeinfo PE查询该文件是否加了壳。
    • 发现这是一个64位的Mac系统的文件,并且没有壳。
  • 使用64位的IDA将其打开。找到main函数,双击,按F5进行反汇编。
  • 先将代码中的ASCII值转换为字符。选中后按r。
    •   
    • 转换后发现是 !,这与代码中的逻辑不相符。所以这里的33应该不是ASCII值,应该就是数字。把它改回去。
  • 代码审计:
    • 第8行,要求输入flag,v5就是我们输入的flag。
    • 第9行,如果v5的长度不等于33,则跳转到第16行,输出Failed。说明,v5的长度一定是33。
    • 第12、13行,进行了一个异或操作。从v5的第二位开始,每一位都与上一位进行异或,并将值改为异或后的结果。
      • 【注】异或xor:相同为0,不同为1,即1 ^ 1 = 0;0 ^ 0 = 0;1 ^ 0 = 1。
    • 第14行,如果v5和global相等,则输出Success,否则输出Failed。
    • 所以global是flag进行异或操作后的结果。
  • 双击查看global的值。
    • 双击aFKWOXZUPFVMDGH,得到一串有趣的字符。
    • 选中,按shift+E输出,将其转换为16进制。
    • 0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11, 
      0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F, 
      0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F, 
      0x47, 0x32, 0x4F, 0x00
  • 编写python代码,将这个字符串还原。
    • _global = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11,
                 0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F,
                 0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F,
                 0x47, 0x32, 0x4F, 0x00]
      flag = chr(_global[0])
      for i in range(1, len(_global)-1):
          flag += chr(_global[i] ^ _global[i - 1])  # 再次与上一个字符异或即可恢复原值
      print(flag)
    • 【注】chr():输入一个整数[0,255],返回其对应的ASCII字符。
  • 运行结果:
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恣睢s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值