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

相关推荐
董董灿是个攻城狮2 分钟前
利用 Resnet50 重新训练,完成宠物数据集的识别,附源代码。。
算法
YancyYue17 分钟前
Anaconda 以及 Jupyter Notebook的详细安装教程
ide·python·jupyter
张高兴23 分钟前
张高兴的大模型开发实战:(二)使用 LangChain 构建本地知识库应用
python·langchain·大模型
阳光明媚大男孩34 分钟前
正则化机制提升部分标签学习中的消歧策略
人工智能·python·学习·算法·数学建模·pll部分标签学习
databook38 分钟前
『Plotly实战指南』--折线图绘制进阶篇
python·数据分析·数据可视化
java1234_小锋1 小时前
一周学会Flask3 Python Web开发-SQLAlchemy更新数据操作-班级模块
前端·数据库·python·flask·flask3
帅比九日1 小时前
【canvas】一键自动布局:如何让流程图节点自动找到最佳位置
前端·javascript·算法
爱吃不加酱的汉堡1 小时前
365天之第P10周:Pytorch实现车牌识别
人工智能·pytorch·python
蔗理苦1 小时前
2025-03-15 Python&深度学习2——Numpy库
pytorch·python·深度学习·numpy
算AI1 小时前
正向生成、反向生成、正反向生成:LLM生成标注数据的几种方式
人工智能·算法