用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}