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!}

相关推荐
天荒地老笑话么3 小时前
静态 IP 规划:掩码/网关/DNS 的正确组合
网络·网络协议·tcp/ip·网络安全
大方子21 小时前
【PolarCTF】rce1
网络安全·polarctf
枷锁—sha1 天前
Burp Suite 抓包全流程与 Xray 联动自动挖洞指南
网络·安全·网络安全
聚铭网络1 天前
聚铭网络再度入选2026年度扬州市网络和数据安全服务资源池单位
网络安全
darkb1rd1 天前
八、PHP SAPI与运行环境差异
开发语言·网络安全·php·webshell
世界尽头与你1 天前
(修复方案)基础目录枚举漏洞
安全·网络安全·渗透测试
枷锁—sha2 天前
【SRC】SQL注入快速判定与应对策略(一)
网络·数据库·sql·安全·网络安全·系统安全
liann1192 天前
3.1_网络——基础
网络·安全·web安全·http·网络安全
ESBK20252 天前
第四届移动互联网、云计算与信息安全国际会议(MICCIS 2026)二轮征稿启动,诚邀全球学者共赴学术盛宴
大数据·网络·物联网·网络安全·云计算·密码学·信息与通信
旺仔Sec2 天前
一文带你看懂免费开源 WAF 天花板!雷池 (SafeLine) 部署与实战全解析
web安全·网络安全·开源·waf