文件

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)