先了解一下xor的有关知识
Xor运算,全称Exclusive OR运算,是一种逻辑运算,用于比较两个二进制数的对应位。简单来说,Xor运算的结果是:如果两个比较的位相同,则结果为0;如果两个比较的位不同,则结果为1。
解压文件夹 把xor文件拖入IDA
函数很少 一下就能找到主函数 F5查看伪c代码
代码审计
memset 函数是一个C标准库中的函数,用于将一块内存区域的每个字节设置为指定的值。
这段表示_b长度不为33时为failed 故_b长度应该为33
第一个for循坏进行和前一位的异或的操作
这里我们寻找global值 双击global
这里发现一串可疑的字符串 转换为16进制 更方便计算
到这里也明白肯定要写一个反脚本了
b = [102, 10, 107, 12, 119, 38, 79, 46, 64, 17,
120, 13, 90, 59, 85, 17, 112, 25, 70, 31,
118, 34, 77, 35, 68, 14, 103, 6, 104, 15,
71, 50, 79, 0]
# 初始化一个空字符串来存储结果
result = ""
# 对列表中的元素进行异或操作,并将每个异或结果转换为字符后添加到结果字符串中
# 注意:我们从b[0]开始,但只从b[1]开始计算异或(因为我们没有b[-1]来与b[0]异或)
# 并且,我们将b[0]作为结果字符串的起始字符
result += chr(b[0])
for i in range(1, len(b)):
xor_result = b[i] ^ b[i-1]
result += chr(xor_result)
# 打印结果(可能包含不可打印字符)
print(result)
直接跑出flag
flag{QianQiuWanDai_YiTongJiangHu}