当前位置: 首页 > news >正文

BUUCTF逆向wp [MRCTF2020]Xor

第一步  查壳,该题是32位,无壳。

第二步  跟进main,发现反汇编不了

通过下图我们可以发现一串类似字符串的东西

第三步  我们看一下汇编

我们可以得到这些信息:flag的长度为27(下面是对本条指令cmp  edx 27指令的应用介绍:这条指令通常用在条件分支处理中,比如决定程序的下一步执行路径。根据 cmp 指令后的条件跳转指令(如 je, jne, jl, jg 等),程序可以根据比较结果跳转到不同的代码段。

例如:

cmp edx, 27

je equal_label  ; 如果 EDX 等于 27,跳转到 equal_label

jg greater_label  ; 如果 EDX 大于 27,跳转到 greater_label

这样,cmp edx, 27 在程序中起到了决定程序流程的关键作用,根据 EDX 寄存器的值与 27 的比较结果来控制程序的执行路径。)

字符串的长度等于27则为right,不是则为wrong。

接下来我们看到异或操作(xor   cl,al)

结合汇编代码和以上信息我们得出这就是一个简单的异或,将我们之前的字符串进行异或。

第四步   编写脚本

分析脚本:

初始化变量

  1. 初始化字符串 code
  2. code='MSAWB~FXZ:J:`tQJ"N@ bpdd}8g'

这里定义了一个字符串 code,它包含了加密或编码后的数据。

  1. 初始化字符串 flag
  2. flag=''

这里初始化了一个空字符串 flag,用来存储解码后的结果。

解码过程

  1. 遍历字符串并解码
  2. for i in range(0,len(code)):
  3.     flag+=chr((i^ord(code[i])))
    • for i in range(0,len(code)): 这个循环遍历 code 字符串中的每个字符,i 是字符的索引。
    • ord(code[i]): 获取 code 中第 i 个字符的 ASCII 值。
    • i^ord(code[i]): 将字符的 ASCII 值与其索引进行异或操作。异或是一种基本的位操作,它对位值相同的对返回 0,对位值不同的对返回 1。
    • chr(...): 将异或操作的结果转换回对应的字符。
    • flag+=...: 将转换后的字符追加到字符串 flag 的末尾。

flag{@_R3@1ly_E2_R3verse!}

http://www.lryc.cn/news/404651.html

相关文章:

  • Windows版MySQL5.7解压直用(如何卸载更换位置重新安装)
  • 详解数据结构之二叉树(堆)
  • Linux----Mplayer音视频库的移植
  • STM32测测速---编码电机读取速度的计算
  • 【已解决】服务器无法联网与更换镜像源
  • android11 屏蔽usb通过otg转接口外接鼠标设备
  • HAL库源码移植与使用之RTC时钟
  • GIT命令学习 一
  • VS+QT 打包可执行文件.exe
  • Android笔试面试题AI答之Activity(2)
  • 来自Transformers的双向编码器表示(BERT) 通俗解释
  • 代码随想录第十六天|贪心算法(2)
  • 花几千上万学习Java,真没必要!(二十二)
  • 在RK3568上如何烧录MAC?
  • 1.30、基于卷积神经网络的手写数字旋转角度预测(matlab)
  • Windows如何使用Python的sphinx
  • C++ STL nth_element 用法
  • 【PostgreSQL教程】PostgreSQL 选择数据库
  • C# —— HashTable
  • LeetCode 第407场周赛个人题解
  • 使用Django框架实现音频上传功能
  • [路由器]IP-MAC的绑定与取消
  • Idea配置远程开发
  • lua 实现 函数 判断两个时间戳是否在同一天
  • 工作纪实53-log4j日志打印文件隔离
  • 7月21日,贪心练习
  • FPGA DNA 获取 DNA_PORT
  • 使用 hutool工具实现导入导出功能。
  • 大语言模型-Transformer-Attention Is All You Need
  • spring(二)