0%

小白友好,有基础的人看这篇可能有点啰嗦030

2024-10-15 03:33By
Menelaos
TEAXTEAC大小端序REVERSE

Problem: [HGAME 2023 week1]a_cup_of_tea

[[toc]]

思路

分析代码
NSSIMAGE
加密函数第二个参数看不懂传了什么东西
NSSIMAGE
点进加密函数下个断点动调一下
NSSIMAGE
随便输入一下,运行到断点
NSSIMAGE
NSSIMAGE
上面那句就是我们下断点的赋值语句,点进这个rdx看一下
NSSIMAGE
shift+f2写个脚本,get_wide_dword把数据提出来
NSSIMAGE
NSSIMAGE

结束调试再打开加密函数,发现是魔改tea,根据代码反向解密就行
NSSIMAGE
解密出来,由于编译器原因后面显示乱码,只取前32位就行(因为buf1有4*8=32个字节)
NSSIMAGE
这时候总感觉flag不完整,再返回主函数看看,发现buf2赋值完之后后面还有一个2字节的变量
NSSIMAGE
点一下v8后面的值,按r转为字符
NSSIMAGE
把这两个字符加到刚刚解密出来的字符串后面,组成完整的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
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论