关于解密字符串问题。xor解密不成功

查看 31|回复 2
作者:iswans   
** 最近发现自己的浏览器不能导入Chrome的Cookie数据,最后发现是加密方式做了改变。**
[i]
如图框框里面的,encrypted_value字段解密后是字符串,但是我解密不成功。
老版本的(如Chrome 127.0.6533.139以前版本)这段数据是以"v10"字符串开头的,网上有很多代码可以解。
但是新版本(Chrome 128.0.6613.120之后的)是以"v20"开头,我发现老新版本的,同样的字符串加密后的数据长度完全一样的,于是判断改动很小,尝试用xor等方法遍历每一个字节,都解密不了。有没有朋友讨论下?
只要能实现解密代码,希望能用Delphi或者VC代码,只需要能解密已经导出的数据(也就是encrypted_value字段的数据)就行,万事好商量。
提示:
1.利用网上的开源代码,再下载两个新老版本的Chrome,自己手动生成cookie,生成一样的,然后再对比数据。这样比较好分析,
2.生成Cookie方法使用插件就行:chromewebstore.google.com/detail/cookie-editor/iphcomljdfghbkdcfndaijbokpgddeno
有没有朋友讨论下?

微软, 字符串

liunianwen   

让AI讨论下:
解密Chrome浏览器的encrypted_value字段确实是一个复杂的任务,特别是新版本的Chrome。以下是一些可能的方法和思路,帮助你解密这些数据:
方法一:使用Python脚本
Python脚本可以用来解密Chrome的encrypted_value字段。以下是一个示例代码,使用pycryptodome库来解密数据:
Python
import os
import json
import base64
import sqlite3
from Crypto.Cipher import AES
import win32crypt
def get_encryption_key():
    local_state_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Google", "Chrome", "User Data", "Local State")
    with open(local_state_path, "r", encoding="utf-8") as f:
        local_state = json.loads(f.read())
    key = base64.b64decode(local_state["os_crypt"]["encrypted_key"])
    return win32crypt.CryptUnprotectData(key[5:], None, None, None, 0)[1]
def decrypt_data(data, key):
    try:
        iv = data[3:15]
        data = data[15:]
        cipher = AES.new(key, AES.MODE_GCM, iv)
        return cipher.decrypt(data)[:-16].decode()
    except Exception as e:
        print(f"Error: {e}")
        return None
def main():
    key = get_encryption_key()
    db_path = os.path.join(os.environ["USERPROFILE"], "AppData", "Local", "Google", "Chrome", "User Data", "Default", "Network", "Cookies")
    conn = sqlite3.connect(db_path)
    cursor = conn.cursor()
    cursor.execute("SELECT host_key, name, encrypted_value FROM cookies")
    for host_key, name, encrypted_value in cursor.fetchall():
        decrypted_value = decrypt_data(encrypted_value, key)
        print(f"Host: {host_key}, Name: {name}, Decrypted Value: {decrypted_value}")
if __name__ == "__main__":
    main()
AI 生成的代码。仔细查看和使用。 有关常见问题解答的详细信息.
方法二:使用Delphi代码
如果你更熟悉Delphi,可以使用以下代码来解密encrypted_value字段:
uses
  SysUtils, Classes, Windows, EncdDecd, DCPcrypt2, DCPblockciphers, DCPaes;
function DecryptChromeCookie(const EncryptedValue: TBytes; const Key: TBytes): string;
var
  Cipher: TDCP_AES;
  IV, Data: TBytes;
begin
  SetLength(IV, 12);
  Move(EncryptedValue[3], IV[0], 12);
  SetLength(Data, Length(EncryptedValue) - 15);
  Move(EncryptedValue[15], Data[0], Length(Data));
  
  Cipher := TDCP_AES.Create(nil);
  try
    Cipher.Init(Key[0], 256, @IV[0]);
    Result := Cipher.DecryptString(Data);
  finally
    Cipher.Burn;
    Cipher.Free;
  end;
end;
procedure Main;
var
  Key, EncryptedValue: TBytes;
  DecryptedValue: string;
begin
  // 获取加密密钥和加密值
  Key := GetEncryptionKey();
  EncryptedValue := GetEncryptedValueFromDatabase();
  
  // 解密
  DecryptedValue := DecryptChromeCookie(EncryptedValue, Key);
  Writeln('Decrypted Value: ', DecryptedValue);
end;
begin
  Main;
end.
方法三:使用VC代码
如果你更熟悉VC,可以使用以下代码来解密encrypted_value字段:
#include
#include
#include
#include
#include
#include
#include
std::vector[B] GetEncryptionKey() {
    // 获取加密密钥
    // ...
}
std::string DecryptChromeCookie(const std::vector[B]& encrypted_value, const std::vector[B]& key) {
    AES_KEY aes_key;
    AES_set_decrypt_key(key.data(), 256, &aes_key);
    std::vector[B] iv(encrypted_value.begin() + 3, encrypted_value.begin() + 15);
    std::vector[B] data(encrypted_value.begin() + 15, encrypted_value.end());
    std::vector[B] decrypted(data.size());
    AES_cbc_encrypt(data.data(), decrypted.data(), data.size(), &aes_key, iv.data(), AES_DECRYPT);
    return std::string(decrypted.begin(), decrypted.end() - 16);
}
int main() {
    std::vector[B] key = GetEncryptionKey();
    std::vector[B] encrypted_value = GetEncryptedValueFromDatabase();
    std::string decrypted_value = DecryptChromeCookie(encrypted_value, key);
    std::cout
liunianwen 发表于 2024-9-9 11:00
让AI讨论下:
解密Chrome浏览器的encrypted_value字段确实是一个复杂的任务,特别是新版本的Chrome。以下 ...

您好兄弟,这个方法确实没错,但是是上周之前的版本可以用,这个方法可以解密"v10"开头的数据。新版本是"v20"开头的,但是加密长度和"v10"一样,请问可以帮忙解决吗,不会让您白辛苦的~
iswans
OP
  


iswans 发表于 2024-9-9 11:18
您好兄弟,这个方法确实没错,但是是上周之前的版本可以用,这个方法可以解密"v10"开头的数据。新版本是" ...

半桶水,没怎么解过"v20"开头的,v10的倒是常解,只有等下一位了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部