本文主要是介绍[GDOUCTF 2023]Tea,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先下载,拖进exe查看
发现为64位,拖进ida64,快捷键shift+f12到字符串然后ctrl+f搜索关键词flag
双击flag跟进 ,找到调用函数sub_140016230,点进去查看函数关键代码。
双击sub_140011339(v7)跟进,然后跟进sub_1400117D0(a1)函数,
可知v7为key,且被更改为{2233,4455,6677,8899},双击 sub_1400112B7(v8, v7),跟进sub_140011900(a1, a2)函数,
可知其为tea加密,然后再双击sub_140011352(v8),跟进sub_140011B60(a1)函数,
上述为加密后的数据,接下来就是写脚本
#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;
}
将结果借助在线工具转换成文本字符串就可以了
故结果为,NSSCTF{hzCtf_94_re666fingcry5641qq}。
这篇关于[GDOUCTF 2023]Tea的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!