Re

Checker

主函数内可见比较函数check_flag

check_flag函数内可见加密函数和密文encrypted_flag

加密逻辑为异或0x23,密文如下

chef一下即可解除

rainbow

在主函数中不难找到hide_flag函数

在该函数中可见加密逻辑为使用xor_encrypt,该函数就是简单异或

使用给的密文即可解出

note

#include <iostream>
#include <vector>
std::vector<uint8_t> decryptflag(const std::vector<uint8_t>& ciphertext) {
    uint32_t key = 0x7CA13742;
    std::vector<uint8_t> decrypted(ciphertext.size());
​
    for (size_t i = 0; i < ciphertext.size(); ++i) {
        decrypted[i] = ((key >> (8 * (i % 4))) & 0xFF) ^ ciphertext[i];
        decrypted[i] ^= (i + 1);
    }
​
    return decrypted;
}
​
int main() {
    std::vector<uint8_t> ciphertext = {
        0x12, 0x7d, 0xe1, 0x2c, 0x01, 0x4a, 0xc4, 0x45, 0x78, 0x5e, 0xc9, 0x46, 0x78, 0x5d, 0x83, 0x0f,
        0x37, 0x12, 0xd0, 0x45, 0x63, 0x42, 0xd5, 0x57, 0x76, 0x14, 0xde, 0x06, 0x6e, 0x04, 0x8f, 0x3e,
        0x50, 0x21, 0xe1, 0x3b, 0x53, 0x72, 0xb7, 0x6c, 0x5d, 0x79, 0xf7
    };
​
    std::vector<uint8_t> decrypted = decryptflag(ciphertext);
    std::cout << "Decrypted result: ";
    for (uint8_t byte : decrypted) {
        std::cout << byte;
    }
    std::cout << std::endl;
​
    return 0;
}
​

Misc

请找出拍摄地所在位置

因为图里最明显的俩个商店都是连锁,所以从画面左侧的酒店入手

高德一下即可找到

win3

通过DIE可判断为pyinstaller打包的程序

使用pyinstxtractor解包,找到文件1,补全其魔术字

然后保存为pyc文件,使用pycdc进行反编译

逻辑如下:使用函数encrypt_message进行加密,首先使用ecb模式的aes进行加密,密钥为acf8bafa15f8cb03,进行base64编码后再进行xor加密,密钥为qihangcup,据此逻辑可以写出解密脚本