python字符串与字符串抑或解析(natas11 python解法)

本文详细解析了Natas11加密问题的解决过程,通过逆向工程获取密钥,揭示了Python处理JSON字符串时的潜在陷阱,关键在于识别并修正由额外空格引起的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

我在做natas11的时候发现了一个问题,问题的需求可以简化为:

$tempdata = json_decode(xor_encrypt(base64_decode($_COOKIE["data"])), true);

其中xor_decode的实现为:

function xor_encrypt($in) {
    $key = '<censored>';
    $text = $in;
    $outText = '';

    // Iterate through each character
    for($i=0;$i<strlen($text);$i++) {
    $outText .= $text[$i] ^ $key[$i % strlen($key)];
    }

    return $outText;
}

我们知道a ^b =c; a ^c=b;所以我们知道处理完的数据为 {“showpassword”:“no”,“bgcolor”:"#ffffff"},读取的cookie值为"ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw%3D",所以只要进行按位抑或即可得到key。接下来用python做简单处理。

    rawin = {"showpassword":"no","bgcolor":"#ffffff"}
    cookie_data = "ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw%3D"
    result = unquote_plus(cookie_data)#将cookie按url解码
    a=base64.b64decode(result)
    b = json.dumps(rawin)
    a = a.decode('utf-8')
    xor=''
    if len(a) < len(b):
        i = 0
        for ch in b:
            xor = xor + chr((ord(ch) ^ ord(a[i % len(a)])))
            i += 1
    else:
        i = 0
        for ch in a:
            xor = xor + chr((ord(ch) ^ ord(b[i % len(b)])))
            i += 1
    print(xor)

理论上我们就能获得key值你会发现xor=qw8Jqw8Jqw8Jqw8Js;9yzp7Jo:pJh1|qw8jlw6你会发现qw8j是循环的但是之后就出现了乱码,简单的判断的话的确qw8j就是key,事实也是如此。但是之后为什么会发生这样的问题呢,这是因为json字符串在python中符合好看的Python代码格式,所以我们会发现在{“showpassword”:“no”,“bgcolor”:"#ffffff"}中的,和:的前后被加上了空格,正是因此而导致错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值