[GDOUCTF]tea
找到字符串窗口之后交叉引用再F5反编译
我们可以很容易看到更改的内容
此处就是对加密的整体实现所以我们可以写tea的解密脚本来将其解密出来
而这里就是加密的密文了
与常规的tea相比这里的do while里面的tea加密外面还有一层for循环来处理sum
所以我们也要对其进行处理 从最后往前进行处理
修改一下名字这样更好看一点
#include<bits/stdc++.h> using namespace std; int main() { int v5,v6,v3; int key[4]={2233,4455,6677,8899}; unsigned int v8[20];//必须采用无符号整型 因为原来都是正的而我们转化为十六进制可能会存在溢出而变为负数 v8[0] = 0x1A800BDA; v8[1] = 0xF7A6219B; v8[2] = 0x491811D8; v8[3] = 0xF2013328; v8[4] = 0x156C365B; v8[5] = 0x3C6EAAD8; v8[6] = 0x84D4BF28; v8[7] = 0xF11A7EE7; v8[8] = 0x3313B252; v8[9] = 0xDD9FE279; for(int i=8;i>=0;i--) { v5 = 33; //由原来的最后可以到33 所以我们也要从33开始逆 v6 = 0xF462900 * (i+v5);//从最后向前开始逆向 也就是最后的总和 v3 = i + 1; while ( v5-- ) { v6 -= 0xF462900; v8[i+1] -= (v6 + key[(v6 >> 11) & 3]) ^ (v8[i] + ((v8[i] >> 5) ^ (16 * v8[i]))); v8[i] -= v6 ^ (v8[i+1] + ((v8[i+1] >> 5) ^ (16 * v8[i+1]))) ^ (v6 + key[v6 & 3]); } } for(int i=0;i<=9;i++) { printf("%x",v8[i]);//最后以十六进制进行输出 } }
不能直接以字符输出所以我们需要把我们输出的十六进制以字符串的形式进行输出
HZCTF{hzCtf_94_re666fingcry5641qq}