You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

picoCTF GDB Test Drive:解密函数对应加密函数实现求助

正确实现「GDB Test Drive」的加密函数

直接给出符合逆向逻辑的加密函数,完全对应题目中解密函数的逆操作:

#include <stdio.h>
#include <ctype.h>

void encrypt(const char *flag, char *encrypted) {
    int idx = 0;
    while (flag[idx] != '\0') {
        unsigned char c = flag[idx];
        if (islower(c)) {
            // 解密时是小写转大写,加密逆操作:小写转大写
            encrypted[idx] = toupper(c);
        } else if (isupper(c)) {
            // 解密时是大写转小写,加密逆操作:大写转小写
            encrypted[idx] = tolower(c);
        } else if (isdigit(c)) {
            // 数字反转是自逆操作,加密和解密逻辑一致
            encrypted[idx] = '9' - (c - '0') + '0';
        } else {
            // 异或0x13是自逆操作,加密和解密逻辑一致
            encrypted[idx] = c ^ 0x13;
        }
        idx++;
    }
    encrypted[idx] = '\0';
}

int main() {
    // 替换为题目中的正确原flag
    const char original_flag[] = "picoCTF{gDb_iS_sUp3r_u53fuL_05cd05bd}";
    char encrypted_buf[128];
    encrypt(original_flag, encrypted_buf);
    printf("Expected: A:4@r%uL5b3F88bC05C`Gb0fffe5fdgN\n", 0);
    printf("Actual:   %s\n", encrypted_buf);
    return 0;
}

逻辑说明(对应objdump反汇编的解密函数逻辑)

这个加密函数严格对应解密流程的逆操作:

  • 小写字母:解密时执行c -= 0x20转大写,加密执行相同操作转大写
  • 大写字母:解密时执行c += 0x20转小写,加密执行相同操作转小写
  • 数字字符:解密时执行c = 0x69 - c实现数字反转,由于该操作自逆(反转两次回到原数字),加密逻辑完全一致
  • 其他字符:解密时执行c ^= 0x13,异或操作自逆,加密时用相同逻辑

问题排查

  • 字符缺失:大概率是循环终止条件错误(比如提前跳出而非判断'\0'),或是未给加密字符串添加终止符'\0'
  • 字符错乱:可能是大小写分支逻辑写反、数字反转公式错误,或是异或数值不是0x13

内容的提问来源于stack exchange,提问作者Nalan PandiKumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:47:21