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)
结合汇编代码和以上信息我们得出这就是一个简单的异或,将我们之前的字符串进行异或。
第四步 编写脚本
分析脚本:
初始化变量
- 初始化字符串 code:
- code='MSAWB~FXZ:J:`tQJ"N@ bpdd}8g'
这里定义了一个字符串 code,它包含了加密或编码后的数据。
- 初始化字符串 flag:
- flag=''
这里初始化了一个空字符串 flag,用来存储解码后的结果。
解码过程
- 遍历字符串并解码:
- for i in range(0,len(code)):
- 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!}
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

![BUUCTF逆向wp [MRCTF2020]Xor](https://i-blog.csdnimg.cn/direct/ddce944b9bea4315909206a012738761.png)
![BUUCTF逆向wp [MRCTF2020]Xor](https://i-blog.csdnimg.cn/direct/a9d84047073f4c318bf772320e762b34.png)
![BUUCTF逆向wp [MRCTF2020]Xor](https://i-blog.csdnimg.cn/direct/f791e3a7a5644f37a2dc33accf646b04.png)
![BUUCTF逆向wp [MRCTF2020]Xor](https://i-blog.csdnimg.cn/direct/cab6bcf5444b483391954f6add19bb3f.png)
![BUUCTF逆向wp [MRCTF2020]Xor](https://i-blog.csdnimg.cn/direct/52b178bef78d4f898508c38d57c9e256.png)