Problem: [HGAME 2023 week1]a_cup_of_tea
[[toc]]
思路
分析代码

加密函数第二个参数看不懂传了什么东西

点进加密函数下个断点动调一下

随便输入一下,运行到断点


上面那句就是我们下断点的赋值语句,点进这个rdx看一下

shift+f2写个脚本,get_wide_dword把数据提出来


结束调试再打开加密函数,发现是魔改tea,根据代码反向解密就行

解密出来,由于编译器原因后面显示乱码,只取前32位就行(因为buf1有4*8=32个字节)

这时候总感觉flag不完整,再返回主函数看看,发现buf2赋值完之后后面还有一个2字节的变量

点一下v8后面的值,按r转为字符

把这两个字符加到刚刚解密出来的字符串后面,组成完整的flag
hgame{Tea_15_4_v3ry_h3a1thy_drlnk}
EXP
- 具体攻击代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
unsigned int result[]={0x2E63829D,0xC14E400F,0x9B39BFB9,0x5A1F8B14,0x61886DDE,0x6565C6CF,0x9F064F64,0x236A43F6};
unsigned int key[]={0x12345678,0x23456789,0x34567890,0x45678901};
void Tea(unsigned int* x,unsigned int* y)
{
int i=0;
unsigned int delta=0x543210DD,v3=0-delta*32;
unsigned int v7,v9;
unsigned long long temp;
v9=*(x+1); v7=*x; for(i=0;i<32;i++) { temp=v3+v7; v9-=temp^(key[2]+16*v7)^(key[3]+(v7>>5)); v7-=(v3+v9)^(key[0]+16*v9)^(key[1]+(v9>>5)); v3+=delta; } x[1]=v9; x[0]=v7;
}
int main()
{
Tea(result,key);
Tea(result+2,key);
Tea(result+4,key);
Tea(result+6,key);
puts((char*)result);
char end[]="}k";
}
总结
- 对该题的考点总结
- 魔改tea
