[HNCTF 2022 WEEK2]TTTTTTTTTea
下载附件,用ida打开。
反编译,查看源码。
v4感觉就是密文,进入tea_encrypt中查看加密方式:
就是一个数据转换。
在查看key,找到密钥。
这里是需要转换为四个八位的数,因为一个int是四个字节,一个字节是八位,所以就是要写成四个八位的数组。
然后要注意逻辑的转换,操作的是数组里面的数据
脚本:
#include <stdio.h>
#include <string.h>
#include <stdint.h>
int main(void)
{
unsigned int a1[]={0xC11EE75A,0xA4AD0973,0xF61C9018,0x32E37BCD,0x2DCC1F26,0x344380CC};
int a2[] = {0x10203,0x4050607,0x8090A0B,0x0C0D0E0F};
unsigned int v0,v1,i;
for (int k = 0; k < 6; k += 2)
{
v0 = a1[k];
v1 = a1[k + 1];
long delta = 0x61C88647;
long sum = 0 -(32 * delta);
for (i = 0; i <= 31; ++i)
{
v1 -= (((v0 >> 5) ^ (16 * v0)) + v0) ^ (a2[(sum >> 11) & 3] + sum);
sum += 0x61C88647;
v0 -= (((v1 >> 5) ^ (16 * v1)) + v1) ^ (a2[sum & 3] + sum);
}
a1[k] = v0;
a1[k+1] = v1;
}
for (i = 0; i < 6; i++)
{
for (int j = 0; j <= 3; j++)
{
printf("%c",(a1[i]>>(j*8))&0xff);
}
}
}
flag:NSSCTF{Tea_TEA_TeA_TEa+}
原文地址:https://blog.csdn.net/2301_81713863/article/details/144142088
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!