Chrome下载页面链接的cookie

从chrome下载文件时, 复制链接到其他软件下载, 多数情况是无法下载, 原因是链接的cookie没有复制过去
可以从浏览器的链接地址, 点击左边, 可以查看网站使用的cookie, 复制过去可以下载
想办法用软件从外部获取chrome的cookie, 过程

  1. cookie储存在本地文件, 在chrome的 UserDataDir文件下 Default\Cookies 文件
  2. 该文件是用sqllite格式, 数据有加密
  3. 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;
	}
  1. 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;
}
posted @ 2024-02-15 21:23  Yofoo  阅读(52)  评论(0编辑  收藏  举报