|
发表于 2024-10-29 20:31:36
|
显示全部楼层
湖南省长沙市
.版本 2
.支持库 spec
系统目录 = 读环境变量 (“USERPROFILE”)
path = 系统目录 + “\AppData\Local\Google\Chrome\User Data\Default\Network\Cookies” ' 路径不对 自己寻找chrome的路径
Local_State目录 = 系统目录 + “\AppData\Local\Google\Chrome\User Data\Local State” ' 路径不对 自己寻找chrome的路径
编辑框1.内容 = Local_State目录
编辑框2.内容 = path
Local_State = 到文本 (读入文件 (Local_State目录))
.如果真 (json.解析 (Local_State) = 假)
信息框 (“Local State目录错误,请改写目录位置!”, #警告图标, , )
返回 ()
.如果真结束
old_key = 编码_BASE64解码 (json.取通用属性 (“['os_crypt']['encrypted_key']”, ), ) ' key base64解码
old_key = 字节集_寻找取右 (old_key, 到字节集 (“DPAPI”), ) ' 解码后去掉前5位
old_key = 到字节集 (DecryptPass (old_key)) ' 正式解密KEY
new_key = 编码_BASE64解码 (json.取通用属性 (“['os_crypt']['app_bound_encrypted_key']”, ), )
new_key = 字节集_寻找取右 (new_key, 到字节集 (“APPB”), ) ' 解码后去掉前4位
写配置项 (取运行目录 () + “\chrome.ini”, “chrome”, “app_bound_encrypted_key”, 编码_BASE64编码 (到字节集 (new_key))) ' 和SYSTEM解密程序进行互换密钥 作为V20解密用
.计次循环首 (15, )
new_data = 读配置项 (取运行目录 () + “\chrome.ini”, “chrome”, “new_data”, ) ' 得到SYSTEM解密密钥 作为V20解密用
.如果真 (new_data ≠ “”)
跳出循环 ()
.如果真结束
程序_延时 (1000, )
.计次循环尾 ()
.如果真 (new_data = “”)
信息框 (“获取信息错误”, 0, , )
.如果真结束
.如果真 (new_data ≠ “”)
new_key = 编码_BASE64解码 (new_data, )
new_key = DecryptPass (new_key)
new_key = 取字节集右边 (new_key, 60)
iv = 取字节集中间 (new_key, 1, 12)
ciphertext = 取字节集中间 (new_key, 13, 32)
tag = 取字节集右边 (new_key, 取字节集长度 (new_key) - 44)
new_key = aes_decrypt (编码_BASE64解码 (“sxxuJBrIRnKNqcH6xJNmUc/7lE0UOrgWJ2vMbaAoR4c=”, ), iv, ciphertext, tag)
.如果真结束
调试输出 (“解密new_key:”, new_key, “解密old_key:”, old_key)
.如果真 (Sql.打开 (path, , 真, 取运行目录 () + “\sqlite3.dll”) = 假)
调试输出 (“打开sql错误”)
Sql.关闭 ()
返回 ()
.如果真结束
ret = Sql.置SQL语句 (“select host_key,name,value,encrypted_value from cookies”)
调试输出 (ret)
.判断循环首 (Sql.到下一行 (ret))
' 本解密为 Chrome 浏览器 80以上版本 V10解密 未解密cookie到文本 前面三位 v10 才能用本算法解密
' v20以后采用双重DPAPI解密 先用 SYSTEM DPAPI 解密 app_bound_encrypted_key 然后再用 用户 DPAPI 解密后 取后60位字节集 前12位为IV 中间32位为密钥 后16位为TAG
' v20得到密钥以后需要用elevation_service.exe的密钥 和上一步的IV TAG 解密上一步密钥 得到的密钥 再用来解密cookie 后续流程和v10基本相同
' 首先在这里说明一下 cookie未解密数据 前15位要取出来保存为IV值
' IV值已保存15位 再次去掉前3位 剩下的12位为正确IV值
' cookie 未解密数据处理 掐头去尾 头部去掉15位 尾部去掉16位 然后才是正确密文
encrypted_value = Sql.读字段字节集 (ret, 3)
ver = 到文本 (取字节集左边 (encrypted_value, 3))
.判断开始 (到文本 (取字节集左边 (encrypted_value, 3)) = “v10” 或 到文本 (取字节集左边 (encrypted_value, 3)) = “v11” 或 到文本 (取字节集左边 (encrypted_value, 3)) = “v12”)
iv = 取字节集左边 (encrypted_value, 15) ' 取出IV值
iv = 取字节集中间 (iv, 4, 15) ' 重置IV值
tag = 取字节集右边 (encrypted_value, 16)
encrypted_value = 取字节集右边 (encrypted_value, 取字节集长度 (encrypted_value) - 15) ' 去头部
encrypted_value = 取字节集左边 (encrypted_value, 取字节集长度 (encrypted_value) - 16) ' 去尾部
明文 = 到文本 (aes_decrypt (old_key, iv, encrypted_value, tag)) ' 正式解密cookie
.判断 (到文本 (取字节集左边 (encrypted_value, 3)) = “v20”)
iv = 取字节集左边 (encrypted_value, 15) ' 取出IV值
iv = 取字节集中间 (iv, 4, 15) ' 重置IV值
tag = 取字节集右边 (encrypted_value, 16)
encrypted_value = 取字节集右边 (encrypted_value, 取字节集长度 (encrypted_value) - 15) ' 去头部
encrypted_value = 取字节集左边 (encrypted_value, 取字节集长度 (encrypted_value) - 16) ' 去尾部
明文 = 到文本 (aes_decrypt (new_key, iv, encrypted_value, tag)) ' 正式解密cookie
.默认
明文 = 到文本 (DecryptPass (encrypted_value))
有点秀 兄弟 |
|