1 [HGAME 2023 week2]before_main
首先我们通过以下形式进行下载并打开
找到以下界面
因为我们看到进行比较的字符串是一串乱码,因此我们可以判断进行了一定的加密算法(比如说base64加密tea加密算法等等等等)
因为我们找到如下的函数界面
我们就能看到这个进行加密的表格(经过魔改的表格)
我们将其放置到赛博厨子上进行解密
结果如下:
得到flag:hgame{s0meth1ng_run_befOre_m@in}
按照要求更改形式即可
2 [HNCTF 2022 WEEK2]TTTTTTTTTea
打开看见如下形式的代码块
让我们逐行代码进行分析
我们通过查找可以知道这个算法是XTEA加密算法
首先我们来回顾以下tea加密算法的概念:
- 分组加密:TEA是一种64位分组加密算法,这意味着每次加密处理的数据块大小为64位。
- 密钥长度:TEA使用128位的密钥。这意味着该算法需要一个128位的密钥来进行加密和解密操作。
- 轮数:TEA采用Feistel结构,每次加密操作使用64轮。
加密和解密流程
- 分组:将明文分成64位的分组。
- 轮迭代:对每个分组进行64轮加密。每轮都涉及到关键的数学操作,如加法、异或和移位。
- 密钥使用:在每轮加密过程中,128位的密钥被分成4个32位的部分,每个部分用于不同的轮迭代。
-
# TEA加密算法 def tea_encrypt(v, k): y, z = v[0], v[1] sum = 0 delta = 0x9E3779B9 # TEA的delta值 for _ in range(32): # 64轮 sum += delta y += ((z << 4) + k[0]) ^ (z + sum) ^ ((z >> 5) + k[1]) z += ((y << 4) + k[2]) ^ (y + sum) ^ ((y >> 5) + k[3]) return [y, z] # TEA解密算法 def tea_decrypt(v, k): y, z = v[0], v[1] sum = 0xC6EF3720 # TEA的初始sum值 delta = 0x9E3779B9 for _ in range(32): z -= ((y << 4) + k[2]) ^ (y + sum) ^ ((y >> 5) + k[3]) y -= ((z << 4) + k[0]) ^ (z + sum) ^ ((z >> 5) + k[1]) sum -= delta return [y, z]
//补充:
XTEA(eXtended Tiny Encryption Algorithm)是一种对称加密算法,通常用于轻量级的加密需求,比如物联网设备或嵌入式系统中。它采用32位的块大小和128位的密钥长度。这里是一个简单的 XTEA 加密算法的示例实现:
#include <stdint.h>
#define DELTA 0x9e3779b9
#define NUM_ROUNDS 32
void xtea_encrypt(uint32_t v[2], uint32_t const key[4]) {
uint32_t v0 = v[0], v1 = v[1], sum = 0, i;
uint32_t delta = DELTA;
for (i = 0; i < NUM_ROUNDS; i++) {
v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
sum += delta;
v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
}
v[0] = v0;
v[1] = v1;
}
void xtea_decrypt(uint32_t v[2], uint32_t const key[4]) {
uint32_t v0 = v[0], v1 = v[1], sum = DELTA * NUM_ROUNDS, i;
uint32_t delta = DELTA;
for (i = 0; i < NUM_ROUNDS; i++) {
v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
sum -= delta;
v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
}
v[0] = v0;
v[1] = v1;
}
参考文献:
这一个算法是在tea算法的基础上进行了升级的版本
我们也就能通过比较得到XTEA的加解密算法:
# XTEA加密算法
def xtea_encrypt(v, k):
delta = 0x9E3779B9
sum = 0
rounds = 64
y, z = v[0], v[1]
for _ in range(rounds):
y += (((z << 4) ^ (z >> 5)) + z) ^ (sum + k[sum & 3])
sum += delta
z += (((y << 4) ^ (y >> 5)) + y) ^ (sum + k[(sum >> 11) & 3])
return [y, z]
# XTEA解密算法
def xtea_decrypt(v, k):
delta = 0x9E3779B9
sum = delta * 64
rounds = 64
y, z = v[0], v[1]
for _ in range(rounds):
z -= (((y << 4) ^ (y >> 5)) + y) ^ (sum + k[(sum >> 11) & 3])
sum -= delta
y -= (((z << 4) ^ (z >> 5)) + z) ^ (sum + k[sum & 3])
return [y, z]