从chrome下载文件时, 复制链接到其他软件下载, 多数情况是无法下载, 原因是链接的cookie没有复制过去
可以从浏览器的链接地址, 点击左边, 可以查看网站使用的cookie, 复制过去可以下载
想办法用软件从外部获取chrome的cookie, 过程
- cookie储存在本地文件, 在chrome的 UserDataDir文件下 Default\Cookies 文件
- 该文件是用sqllite格式, 数据有加密
- 72版本的数据解密方法比较简单
static BOOL DecodeData(ByteMem &Data, string &sValue)
{
DATA_BLOB DataIn;
DATA_BLOB DataOut;
BOOL bRetVal;
BYTE bzData[4096];
sValue = "";
DataIn.pbData = Data.getptr();
DataIn.cbData = Data.size();
if(memcmp(DataIn.pbData, "v10", strlen("v10")) == 0)
{
return DecodeData_Aes(Data, sValue);
}
memset(&DataOut, 0, sizeof(DataOut));
bRetVal = CryptUnprotectData(&DataIn, NULL, NULL, NULL, NULL, 0, &DataOut);
if(bRetVal == FALSE)
{
ATLTRACE("ChromeCookie.DecodeData Fail!\r\n");
return FALSE;
}
if(DataOut.cbData >= sizeof(bzData))
{
assert(0);
LocalFree(DataOut.pbData);
return FALSE;
}
memcpy(bzData, DataOut.pbData, DataOut.cbData);
bzData[DataOut.cbData] = 0;
LocalFree(DataOut.pbData);
sValue = (CHAR *)bzData;
return TRUE;
}
- 93版本使用了另外一种解密方法, 用的是 Aes256Gcm, 具体的过程比较复杂
数据格式: 数据格式 {v10:3} + {iv:12} + {dat:n} + {tag:16}
密钥使用 crypto::HkdfSha256("peanuts", "salt", "info", kKeyLength)
chrome使用ssl组件时自己修改过的, 如果用openssl 需要修改一些
BOOL dllopenssl::Aes256Gcm_Decrypt(BYTE bzIn[], int nData, BYTE bzKey[], BYTE bzIv[], BYTE bzTag[], BYTE bzOut[], int *pOutSize)
{
EVP_CIPHER_CTX ctx;
int nOutSize, nEndSize;
EVP_CIPHER_CTX_init(&ctx);
EVP_DecryptInit_ex(&ctx, EVP_aes_256_gcm(), NULL, bzKey, bzIv);
EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_TAG, 16, bzTag);
if(!EVP_DecryptUpdate(&ctx, bzOut, &nOutSize, bzIn, nData))
return FALSE;
if(!EVP_DecryptFinal(&ctx, bzOut+nOutSize, &nEndSize))
return FALSE;
EVP_CIPHER_CTX_cleanup(&ctx);
*pOutSize = nOutSize;
return TRUE;
}
标签:return,Chrome,ctx,DataOut,cookie,EVP,BYTE,页面
From: https://www.cnblogs.com/zzz3265/p/18016625