【BUUCTF逆向题】[MRCTF2020]Transform

一.[MRCTF2020]Transform

64位无壳,IDA打开发现main函数进入反编译

阅读程序

先输入33位code再加密处理然后验证是否相等的题型

逆向看,验证数组byte_40F0E0已知

再往上看加密处理方式

就是将Str(我们输入的flag)的每一个索引处的值与其索引进行异或运算,但是这个索引是打乱的不是按照顺序来的

我们已知异或是可逆的,所以将用来验证的数组(即处理后的数组(也是根据乱序索引数组打乱的))与乱序索引数组异或就得到了乱序的原flag
补充LOBYTE 取低8位即低字节的意思,这里乱序索引数组是int整形4个字节,但是索引都是0-255(一字节8位,2的8次方-1)所以有效数据都存在于低字节,就不需要管了

补充异或 是建立在二进制上的,同0不同1
补充:**8 dup(0)**是8个存储单元都置0(刚开始这里索引只有32个数据没有0优点懵,现在明白了最后一个是0)

写脚本:

python 复制代码
flag = [0]*33
print(flag)
b = [103, 121, 123, 127, 117, 43, 60, 82, 83, 121, 87, 94,93, 66, 123, 45, 42, 102, 66, 126, 76, 87, 121, 65,107, 126, 101, 60, 92, 69, 111, 98, 77]
print(len(b))
a = [9, 10, 15, 23, 7, 24, 12, 6, 1, 16, 3, 17, 32, 29, 11,30, 27, 22, 4, 13, 19, 20, 21, 2, 25, 5, 31, 8, 18,26, 28, 14,0]
print(len(a))
for i in range(33):
    flag[a[i]] = chr(a[i]^b[i])
print(''.join(flag))

补充 :这里直接复制已知数据不方便,可以Shift+E键提取数据

补充 :列表按照索引存储要先占位(申请存储空间),所以这里[0]*33就可以实现

得到MRCTF{Tr4nsp0sltiON_Clph3r_1s_3z}

相关推荐
何双新16 分钟前
第21讲、Odoo 18 配置机制详解
linux·python·开源
Wish3D19 分钟前
阿里云OSS 上传文件 Python版本
开发语言·python·阿里云
阿福不是狗2 小时前
Python使用总结之Mac安装docker并配置wechaty
python·macos·docker
gen_3 小时前
mac环境下的python、pycharm和pip安装使用
python·macos·pycharm
AI视觉网奇3 小时前
pycharm 左右箭头 最近编辑
ide·python·pycharm
思绪无限3 小时前
Pycharm的终端无法使用Anaconda命令行问题详细解决教程
ide·python·pycharm·终端·命令行·anaconda·问题教程
漫步云端-r3 小时前
Pycharm的使用技巧总结
ide·python·pycharm
木子.李3474 小时前
排序算法总结(C++)
c++·算法·排序算法
风逸hhh4 小时前
python打卡day46@浙大疏锦行
开发语言·python
火兮明兮5 小时前
Python训练第四十三天
开发语言·python