[BUUCTF-Reverse] xor

893 阅读1分钟

题目地址:buuoj.cn/challenges#…

用 file 命令查看文件基本信息:

拿到 IDA 中打开:

找寻 global 字符串:

man 函数中对 flag 做了处理:flag[i] ^= flag[i-1]

flag 获取

要想获得本来的 flag 只需要对 global 字符串再同样做一次处理即可;

原因:a ^ b = c, then c ^ b = a

s = [
    "f",
    0x0A,
    "k",
    0x0C,
    "w",
    "&",
    "O",
    ".",
    "@",
    0x11,
    "x",
    0x0D,
    "Z",
    ";",
    "U",
    0x11,
    "p",
    0x19,
    "F",
    0x1F,
    "v",
    '"',
    "M",
    "#",
    "D",
    0x0E,
    "g",
    6,
    "h",
    0x0F,
    "G",
    "2",
    "O",
]
flag = ["f"]
for i in range(1, len(s)):
    if isinstance(s[i], str):
        num1 = ord(s[i])
    else:
        num1 = s[i]
    if isinstance(s[i - 1], str):
        num2 = ord(s[i - 1])
    else:
        num2 = s[i - 1]
    num1 ^= num2
    flag.append(chr(num1))
print("".join(flag))

END ( ̄▽ ̄)~*