(61)[HNCTF 2022 WEEK2]TTTTTTTTTea

我们可以看到,v4是关键数据。
然后再tea_这个加密函数里面,我们可以获得key
而flag是我们输入v4[8]后面的
而且tea加密一般是需要两个32位的数据来进行
所以接下来我们需要知道key,而下面的v4[0---]
等等,他们都是我们加密后的enc,所以我们可以写出来脚本根据一下函数内容

然后我们直接呈现脚本
其中v4,我们不知道,我写了一个c语言脚本来获得的值

#include <stdio.h>
#include <stdint.h>
int main() {
uint32_t key[4] = { 0x10203, 0x4050607, 0x8090A0B, 0x0C0D0E0F };
uint32_t enc[6] = { 0xC11EE75A, 0xA4AD0973, 0xF61C9018, 0x32E37BCD, 0x2DCC1F26, 0x344380CC,
};
unsigned int flag[6] = { 0 };
for (int i = 0; i < 6; i = i + 2) {
unsigned int v4 = 0xC6EF3720;
for (int k = 0;k <= 31;k++) {
enc[i + 1] -= (((enc[i] >> 5) ^ (16 * enc[i])) + enc[i]) ^ (key[((v4 >> 11) & 3)] + v4);
v4 += 0x61C88647;
enc[i] -= (((enc[i + 1] >> 5) ^ (16 * enc[i + 1])) + enc[i + 1]) ^ (key[(v4 & 3)] + v4);
}
flag[i] = enc[i];
flag[i + 1] = enc[i + 1];
}
char* p = (char*)enc;
for (int k = 0;k < 24;k++)
{
printf("%c", *p);
p++;
}
}
NSSCTF{Tea_TEA_TeA_TEa+}
491

被折叠的 条评论
为什么被折叠?



