NSSCTF_crypto_[SDCTF 2022]Case64AR

1. 题目背景

给定一个特殊编码的字符串 OoDVP4LtFm7lKnHk+JDrJo2jNZDROl/1HH77H5Xv,要求通过分析解密出隐藏的Flag。已知该加密方式采用了Base64编码的变种,并包含字符位置偏移操作。

2. 加密分析

2.1 加密逻辑推断

通过逆向分析代码可知加密过程包含两个阶段:

  1. ROT-n偏移:对标准Base64字符进行循环位移操作

    • 例如:当n=14时,字符'A'→'O'(ASCII位置0→14)

  2. Base64编码:使用标准Base64编码(但存在实现缺陷)

2.2 关键特征识别

  • 编码表异常:题目使用的编码表包含65个字符(含"="),但实际运算时取模64

  • 填充问题:可能省略标准Base64的"="填充符

  • 位移方向:实际加密为逆向位移,但题目代码使用正向位移尝试破解

3. 解密思路

3.1 核心原理

由于不知道具体的偏移量n,采用暴力破解法遍历所有可能的偏移量(0-63),通过以下步骤实现:

  1. 对每个字符进行反向位移操作

  2. 补全Base64填充符"="

  3. 尝试标准Base64解码

3.2 数学验证

假设原字符在表中的索引为 i,加密后索引为:

encrypted_index = (i - n) % 64

解密时需计算:

original_index = (encrypted_index + n) % 64

4. 解密过程

4.1 代码实现(带注释)

import base64

# 注意:原始编码表错误地包含等号"="
base64_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="

encrypted_str = 'OoDVP4LtFm7lKnHk+JDrJo2jNZDROl/1HH77H5Xv'

for offset in range(64):  # 遍历所有可能的偏移量
    decoded_str = ""
    
    # 对每个字符进行位移操作
    for c in encrypted_str:
        original_pos = base64_table.index(c)
        # 关键步骤:反向计算原始位置
        new_pos = (original_pos + offset) % 64
        decoded_str += base64_table[new_pos]
    
    # 补全Base64填充
    if len(decoded_str) % 4 != 0:
        decoded_str += '=' * (4 - len(decoded_str) % 4)
    
    # 尝试解码
    try:
        result = base64.b64decode(decoded_str).decode('utf-8')
        print(f"Offset {offset:2d}: {result}")
    except:
        continue

4.2 关键参数说明

参数说明
base64_table异常编码表(含65字符)
offset范围0-63(因模64运算)
填充处理自动补"="使长度为4的倍数
异常处理跳过解码失败的offset

5. 结果验证

5.1 成功输出

sdctf{OBscUr1ty_a1nt_s3CURITy}

修改一下

NSSCTF{OBscUr1ty_a1nt_s3CURITy}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值