C++解密Chrome80版本数据库的方法示例代码

2020-05-06 13:59:02王振洲

然后是aes-gcm

import os
import sys

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.ciphers import (
 Cipher, algorithms, modes
)

NONCE_BYTE_SIZE = 12

def encrypt(cipher, plaintext, nonce):
 cipher.mode = modes.GCM(nonce)
 encryptor = cipher.encryptor()
 ciphertext = encryptor.update(plaintext)
 return (cipher, ciphertext, nonce)

def decrypt(cipher, ciphertext, nonce):
 cipher.mode = modes.GCM(nonce)
 decryptor = cipher.decryptor()
 return decryptor.update(ciphertext)

def get_cipher(key):
 cipher = Cipher(
 algorithms.AES(key),
 None,
 backend=default_backend()
 )
 return cipher

如此即可解密。说下简单的流程吧。

大致流程从C:UsersopsAppDataLocalGoogleChromeUserDataLocalState这个Json中读取一个值os_crypt下的encrypted_key

然后取解密秘钥(encrypted_key)去除前5个字符再通过对其dpapi解密出这个值保存为key.并且截取15位去除前3位字符保存为Nonce.

然后使用asegcm进行解密key最终使用aesgcm解密。

大致就是如此。为了证明我的屁眼代码可以用。上一个图。稍等。。我去安装下chrome80。。。影子系统还原了。。。我安装好了

取下encrypted_key和被加密的value的HEX。在这之前 我们先看下加密的内容

 

包含V10和V11的是chrme80的加密。好了 我们来找找freebuf的值

把加密值HEX[v10mC1^ĻI~`ql>t^c+EO0bJKp1YRn˭F$O]一下得到7631306D43A786939231E0A4D6DC5E**BB497E5C60716CFEFDDB3E74A7ABE2E5F1BAF45EF5F163BC2BB**54F9D30624A4B708D310C168894FFEC189C8959526ECBAD46EF1D7FD224B6868FA64F83CD

然后我们用python解密一下

可看到了解密成功。下一篇用C++来实现自动化解密

几个注意点

Cookie位于User Data/Default下的Cookies文件 改名为Cookies.db即可用sqllite进行查询和查看

上一篇实现了python的简单解密。这一次我们来用C++实现自动化。在这之前 我们需要用到两个C++库

repaidjson
cryptopp

编译环境为VS2013.这两个库不多做介绍,rapidjson是腾讯的一个开源json解析库。发挥的作用不大,就是解析个json。另外就是cryptopp。嗯。。很牛逼。

解析下大致流程:

1:获取local state文件位置

2:获取加密的key(base64编码)

3:解析sqllite文件

4:DPAPI解密

5:ase-gcm解密

关于Aes-gcm 需要用到 KEY IV 以及被加密的字符串 梳理下这几个参数的流程:

KEY = local state = > os_crypt => Encrypted_key => Base64Decode(encrypted_key) => 去除首位5个字符 => DPAPI解密
IV = 被加密的字符串掐头去尾
chiper = 被加密的字符串去头