Bash字符串变量在使用时有不可预知的变化

2024-10-01 17:34:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我从chrome cookies文件中获取cookie“encrypted\u value”,并对其进行解码,但其中一个字符串变量在使用时出现了意外的变化

如果您直接输出:

echo "$SEID"

输出为:

aa312d7a2a15ab67a16f39495dbc22bf9930dafaf70b3eddbd955b0fb39bd7ef661af6ac15d0d98fbbc179c9d6e85901b56c2c4efd9a40df013060d7

当我这样做时:

echo "$SEID;"

但是输出改变了,你应该看到倒数第八个字符从零变成了分号

aa312d7a2a15ab67a16f39495dbc22bf9930dafaf70b3eddbd955b0fb39bd7ef661af6ac15d0d98fbbc179c9d6e85901b56c2c4efd9a40df;13060d7

我的价值来自这个脚本:

SEID=$(get_cookies_from_chrome "xxxx.com" "SEID")

get_cookies_from_chrome这是:

#!/usr/local/bin/python3
#coding=utf-8 

import os 
import sys
import sqlite3 
import keyring 
from Crypto.Cipher import AES 
from Crypto.Protocol.KDF import PBKDF2

my_pass = keyring.get_password('Chrome Safe Storage', 'Chrome') 
my_pass = my_pass.encode('utf8') 
iterations = 1003 
cookie_file = os.path.expanduser('~/Library/Application Support/Google/Chrome/Default/Cookies') 

salt = b'saltysalt' 
length = 16 
iv = b' ' * length 

class ChromeCookies:
    @staticmethod
    def aes_decrypt(token): 
        key = PBKDF2(my_pass, salt, length, iterations) 
        cipher = AES.new(key, AES.MODE_CBC, IV=iv) 
        dec_token = cipher.decrypt(token) 
        return dec_token 

    @staticmethod
    def query_cookies(host_key, name): 
        with sqlite3.connect(cookie_file) as conn: 
            sql = 'select encrypted_value from cookies where host_key="%s" and name = "%s"' % (host_key, name)
        result = conn.execute(sql).fetchall() 
        return result 

    @staticmethod
    def get_value(host_key, name):
        result = ChromeCookies.query_cookies(host_key, name)
        if len(result) != 0:
            return ChromeCookies.aes_decrypt(result[0][0][3:]).decode('utf-8')
        else:
            return None


if __name__ == '__main__': 
    print(ChromeCookies.get_value(sys.argv[1], sys.argv[2]))

Tags: keynamefromimporttokenhostgetreturn
2条回答

脚本必须生成带有CR字符的文本,请参见Why does my tool output overwrite itself and how do I fix it?。例如,如果您的脚本输出123456789\rabcde并将其保存在SEID中,那么echo "$SEID"将输出看起来像abcde6789的内容,然后echo "$SEID;"将输出看起来像abcde;789的内容

echo "$SEID;"将打印SEID变量的值,后跟分号和换行符。您看到的原因是Python脚本打印了一些不可打印的字符,这些字符在当前终端中具有特殊的意义-它们在打印分号之前将光标(决定屏幕上放置下一个字符的位置)移动到位置

要查看不可打印的字符,请尝试通过运行例如get_cookies_from_chrome "xxxx.com" "SEID" | xxd来转义字符

相关问题 更多 >

    热门问题