当前位置: 首页 > 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!}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Web开发:一个可拖拽的模态框(HTML、CSS、JavaScript)
  • 代码随想录算法训练营第47天
  • wkhtmltopdf 工具安装与使用
  • excel系列(三) - 利用 easyexcel 快速实现 excel 文件导入导出
  • https和http有哪些区别?
  • 邮件安全篇:如何防止邮件泄密?
  • SystemUI默认去掉底部导航栏
  • 第八讲:Sysmac Studio控制器设置
  • 初识Maven
  • 深入浅出WebRTC—DelayBasedBwe
  • Python学习总结
  • 无人机侦察:一维相扫雷达技术详解
  • 某4G区域终端有时驻留弱信号小区分析
  • Nginx 怎样处理请求的重试机制?
  • Ubuntu22.04系统安装nodejs 14 保姆级教程
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Android 架构优化~MVP 架构改造
  • js学习笔记
  • MySQL QA
  • mysql常用命令汇总
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • Python 反序列化安全问题(二)
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 力扣(LeetCode)21
  • 如何在GitHub上创建个人博客
  • 算法-插入排序
  • 微信小程序:实现悬浮返回和分享按钮
  • 想写好前端,先练好内功
  • 项目实战-Api的解决方案
  • 怎么将电脑中的声音录制成WAV格式
  • 【干货分享】dos命令大全
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ![CDATA[ ]] 是什么东东
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # windows 安装 mysql 显示 no packages found 解决方法
  • # 职场生活之道:善于团结
  • ### RabbitMQ五种工作模式:
  • #### go map 底层结构 ####
  • #### golang中【堆】的使用及底层 ####
  • #mysql 8.0 踩坑日记
  • #NOIP 2014# day.1 T2 联合权值
  • #window11设置系统变量#
  • (12)Linux 常见的三种进程状态
  • (13)DroneCAN 适配器节点(一)
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Qt) 默认QtWidget应用包含什么?
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (排序详解之 堆排序)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (四)软件性能测试