0%

[GDOUCTF 2023]Tea kcldah的WriteUp

2023-04-23 04:54By
kcldah
Tea

[GDOUCTF 2023]Tea

下载文件:解压是个exe文件,使用exeinfo打开,无壳,64位程序

NSSIMAGE

直接运行程序,发现关键字 flag

NSSIMAGE

在 ida 使用快捷键 shift+f12打开字符串窗口搜索关键字 flag

NSSIMAGE

双击进入,然后一直点击快捷键 x 找到调用处,分析关键代码

for ( j = 0; j < 10; ++j ) // 输入函数,scanf sub_1400111FE("%x", &v8[j]); // v7重新赋值 sub_140011339(v7); // v8备份到v9 sub_140011145(v8, v9); // v7为key,v8为输入的值,进行tea加密 sub_1400112B7(v8, v7); // 验证加密的结果是否符合预期 v6 = sub_140011352(v8); if ( v6 ) { // sub_140011195 为打印函数 printf("you are right\n"); for ( k = 0; k < 10; ++k ) { for ( m = 3; m >= 0; --m ) printf("%c", (v9[k] >> (8 * m))); } } else { printf("fault!\nYou can go online and learn the tea algorithm!"); }

进入 sub_1400117D0函数,可以看到, key的值修改为 [2233, 4455, 6677, 8899]

NSSIMAGE

进入 sub_140011900 函数,可以看到是Tea加密

NSSIMAGE

进入 sub_140011B60 函数,得到加密后的数据,开始写脚本

NSSIMAGE

解题脚本

#include <stdio.h> int main() { int key[] = {2233, 4455, 6677, 8899}; unsigned int value[10]; value[0] = 0x1A800BDA; value[1] = 0xF7A6219B; value[2] = 0x491811D8; value[3] = 0xF2013328; value[4] = 0x156C365B; value[5] = 0x3C6EAAD8; value[6] = 0x84D4BF28; value[7] = 0xF11A7EE7; value[8] = 0x3313B252; value[9] = 0xDD9FE279; int dalte = 0xF462900; int i = 0; int wheel; int sum = 0; // 逆算法 for(i=8; i>=0; i--){ // 轮数 wheel = 33; sum = dalte * (i+wheel); while(wheel--){ sum -= dalte; value[i+1] -= (sum + key[(sum >> 11) & 3]) ^ (value[i] + ((value[i] >> 5) ^ (16 * value[i]))); value[i] -= sum ^ (value[i+1] + ((value[i+1] >> 5) ^ (16 * value[i+1]))) ^ (sum + key[sum&3]); } } for(i=0;i<=9;i++){ printf("%x", value[i]); } return 0; }

使用16进制转字符串

NSSIMAGE

  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论