HGAME 2023 week1]a_cup_of_tea
[HGAME 2023 week1]a_cup_of_tea
软件正常流程,我们就直接ida打开吧
以上是我已经分析好的内容 这个题有很多坑点,但是在别人写的writeup里面看,他们都是直接给的脚步
正常我们打开tea加密,
我们根据这个,还有动态调试之后我们知道,
这部分数据是相连的,相对于什么呢?我给你们看一下我写的解题部分代码就知道了!
我们看到这应该就很清楚了,就是enc分成了dword四部分,相对于128位一组。这个需要大家对这个题的类型转换了解很充足,我直接就给大家呈现代码了
#include <stdint.h> #include <windows.h> #include<stdio.h> #define DELTA 0x543210DD #define ROUNDS 32 void tea_encrypt(uint64_t v[2], const uint32_t k[4]) {uint32_t v0 =(DWORD) v[0], v1 = (DWORD)v[1], sum = 0;for (int i = 0; i < ROUNDS; i++) {sum += DELTA;v0 += ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);v1 += ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);}v[0] = v0;v[1] = v1; } void tea_decrypt(uint32_t v[2], const uint32_t k[4]) {uint32_t v0 = v[0], v1 = v[1] ;int sum=0;for(int i=0;i<32;i++){sum=sum-DELTA;}for (int i = 0; i < ROUNDS; i++) {v1 -= ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);v0 -= ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);sum += DELTA;}v[0] = v0;v[1] = v1; } int main (){unsigned int enc[8]={0x2E63829D,0xC14E400F,0x9B39BFB9,0x5A1F8B14,0x61886DDE,0x6565C6CF,0x9F064F64,0x236A43F6};unsigned int key[4]={0x12345678,0x23456789,0x34567890,0x45678901};tea_decrypt(enc,key);tea_decrypt(enc+2,key);tea_decrypt(enc+4,key);tea_decrypt(enc+6,key);for(int i=0;i<32;i++){printf("%c",*((char*)enc+i));}//0x7D6Bprintf("%c",0x6b);printf("%c",0x7d);return 0; }