snake
010看到DASCTF和下面的26个数据基本上就能猜到了,看一眼汇编直接秒。
# 定义原始数组和字符序列
ida_chars = [
0x3F, 0x09, 0x63, 0x34, 0x32,0x13, 0x2A, 0x2F, 0x2A, 0x37, 0x3C, 0x23, 0x00, 0x2E, 0x20,
0x10, 0x3A, 0x27, 0x2F, 0x24, 0x3A, 0x30, 0x75, 0x67, 0x65,
0x3C
]
key = "DASCTF"
xor_result = []
for i in range(len(ida_chars)):
xor_result.append(chr(ida_chars[i] ^ ord(key[i % len(key)])))
# 使用列表推导式将结果列表转换为字符串
flag = ''.join(xor_result)
print(flag)
Strongprograme
经典的hook
然后是一些简单的tea加密 不过有一些改动 exp如下
#include <stdio.h>
#include <stdint.h>
// 定义解密函数
void decrypt(uint32_t *v, uint32_t *k) {
uint32_t v0 = v[0], v1 = v[1];
uint32_t delta = 0x9e3779b9;
uint32_t sum = delta * 16; // 初始化sum
for (int i = 0; i < 16; i++) {
sum -= delta; // 更新sum
v1 -= ((v0 << 4) + k[2]) ^ (v0 + sum) ^ ((v0 >> 5) + k[3]);
v0 -= ((v1 << 4) + k[0]) ^ (v1 + sum) ^ ((v1 >> 5) + k[1]);
}
v[0] = v0; v[1] = v1; // 更新enc数组
}
// 定义加密密钥
uint32_t key[4] = {
0x12345678, 0x09101112, 0x13141516, 0x15161718
};
int main() {
uint32_t enc[10] = {
0xBC2B4DF9, 0x6213DD13, 0x89FFFCC9, 0x0FC94F7D,
0x526D1D63, 0xE341FD50, 0x97287633, 0x6BF93638,
0x83143990, 0x1F2CE22C
};
// 进行解密前的准备操作
for (int i = 9; i >= 2; i -= 2) {
enc[i] ^= enc[1];
enc[i - 1] ^= enc[0];//逆序解密
decrypt(enc, key);
}
// 进行解密
decrypt(enc, key);
// 打印解密后的结果
printf("%s", (char*)enc);
return 0;
}