文件
i64
exp
程序为 ollvm 保护的 c++ 逆向
程序开启了 动态调试保护
根据time 队输入 进行异或会对 输入 进行异 @或 可以猜到 这里的time1 应该是等于0的
主要加密
可以推出等式 input[idx] = (input[idx-1]^18 * 3 +2)^enc[idx-1]-input[idx-1]%7,现在我们要做的 就是利用这个 等式去爆破flag, 让爆破出来的input 里面包含 "flag" 字符串就能得到 应该有的flag
# v15 = (input[idx-1]^18 * 3 +2)^(input[idx] + input[idx-1]%7)
# v15 == enc[idx-1]
# (input[idx-1]^18 * 3 +2)^enc[idx-1]-input[idx-1]%7 = input[idx]
# input[idx] = (input[idx-1]^18 * 3 +2)^enc[idx-1]-input[idx-1]%7
#
enc = [ 0xF3, 0x2E, 0x18, 0x36, 0xE1, 0x4C, 0x22, 0xD1, 0xF9, 0x8C,
0x40, 0x76, 0xF4, 0x0E, 0x00, 0x05, 0xA3, 0x90, 0x0E, 0xA5]
flag = ""
for j in range(256):
a = [j]
for i in range(0,20):
a.append(((enc[i] ^ ((a[i]^18)*3+2))-(a[i]%7))&0xff)
flag = "".join(map(chr,a))
if "flag" in flag:
print(flag)