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

相关推荐
rayufo4 小时前
【工具】列出指定文件夹下所有的目录和文件
开发语言·前端·python
数研小生4 小时前
构建命令行单词记忆工具:JSON 词库与艾宾浩斯复习算法的完美结合
算法·json
芒克芒克4 小时前
LeetCode 题解:除自身以外数组的乘积
算法·leetcode
Python 老手5 小时前
Python while 循环 极简核心讲解
java·python·算法
@Aurora.5 小时前
优选算法【专题九:哈希表】
算法·哈希算法·散列表
爱看科技5 小时前
微美全息(NASDAQ:WIMI)研究拜占庭容错联邦学习算法,数据安全与隐私保护的双重保障
算法
qq_417129255 小时前
C++中的桥接模式变体
开发语言·c++·算法
开源技术6 小时前
如何将本地LLM模型与Ollama和Python集成
开发语言·python
weixin_437044646 小时前
Netbox批量添加设备——堆叠设备
linux·网络·python
我有医保我先冲6 小时前
AI 时代 “任务完成“ 与 “专业能力“ 的区分:理论基础、行业影响与个人发展策略
人工智能·python·机器学习