自学内容网 自学内容网

[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)!