技术 · 2024年7月22日

DASCTF 2024 7月赛

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;
}
苏ICP备2024067700号 | 苏公网安备32098202000238号