main

进来后首先看main 函数。大致看一下。就差不多可以开始分析了。

image-20231019215506365

HighTemplar::HighTemplar

image-20231019215715150

这个是一个copy

将input的字符串。copy到 a1 + 16 和 a1 + 48 的位置,

然后再a1 + 80 的位置 copy : 327a6c4304ad5938eaf0efb6cc3e53dc

fun 1 2 3

这里我没先看。因为第一眼没看懂,然后我们就来看看判断的地方。

HighTemplar::getSerial

image-20231019215918231

首先是:v1 = *(_BYTE *)std::string::operator[]((char *)this + 80, (int)i);

v1 就是 327a6c4304ad5938eaf0efb6cc3e53dc

然后要让flag == 327a6c4304ad5938eaf0efb6cc3e53dc

因为之前有一个 + 16 , + 48 ,+ 80 所以这里可以猜到。

ok 我们来看看if 上面的那个函数【这个函数估计就是给flag进行加密的函数】

HighTemplar::calculate

image-20231019220203637

它首先是 (xor 80) + 23

然后是 (xor 19) +11

我们来写解密。

1
2
3
4
5
6
7
8
9
10
11
enc = b"327a6c4304ad5938eaf0efb6cc3e53dc"

flag = ""
for i in range(len(enc)):
temp = (enc[i] - 11) ^ 19
temp2 = (temp - 23) ^ 80
flag += chr(temp2)


print(flag)
#tMx~qdstOs~crvtwb~aOba}qddtbrtcd

flag{tMxqdstOscrvtwb~aOba}qddtbrtcd}