
用ida打开,头都大了,这么多代码

耐心看了之后,发现想要得到flag,就要知道v23的值

v23的值其实就几个算法,func1 func2 func3都是混淆用的,没实际意义

主要看 HighTemplar ,calculate ,getSerial 这三个函数
HighTemplar初始化了 a1+80位置的变量值为327a6c4304ad5938eaf0efb6cc3e53dc

calculate 对a1+16地址的值做一些异或计算,a1+16就是我们输入的值

getSerial对我们输入的值和a1+80的值作比较

只需要逆着推回去就可以得到flag
str = '327a6c4304ad5938eaf0efb6cc3e53dc'
arr = []
for i in str:
arr.append((ord(i) - 11) ^ 0x13)
arr2 = []
flag = ''
for i in arr:
arr2.append((i - 23) ^ 0x50)
flag += chr((i - 23) ^ 0x50)
print arr2
print flag
#flag{tMx~qdstOs~crvtwb~aOba}qddtbrtcd}