欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]获取Chrome浏览器cookie

[原创]获取Chrome浏览器cookie

闲来无事,对Chrome浏览器的cookie进行了分析,发现Chrome浏览器的cookie是存放在一个Cookies的sqlite数据库文件中。
跟firefox浏览器cookie不同的是,Chrome浏览器的cookie多了一个加密以后的cookie值,字段为encrypted_value,因此在解析的时候,需要分类处理:①没有加密的情况下;②加密的情况下。
步骤:
1.获取Chrome浏览器Profile文件的路径;
2.找到Cookies的完整路径;
3.对Cookies进行解析。
下面看看主要代码:
1.获取Chrome浏览器Profile文件的路径

//获取Chrome浏览器的随机路径
WCHAR *GetCHProfilePath()
{
  WCHAR appPath[MAX_PATH];
  static WCHAR FullPath[MAX_PATH];
  memset(appPath, 0, sizeof(appPath));
  if (!SHGetSpecialFolderPathW(NULL, appPath, CSIDL_LOCAL_APPDATA, TRUE))
    return NULL;
  
  _snwprintf_s(FullPath, MAX_PATH, L"%s\\Google\\Chrome\\User Data\\Default", appPath);
  return FullPath;
}

2.找到Cookies的完整路径
int static DumpSqliteCookies(WCHAR *profilePath, WCHAR *signonFile)
{
  sqlite3 *db;
  char *ascii_path;
  CHAR sqlPath[MAX_PATH];
  int rc;
  //转换编码
  if (!(ascii_path = GetDosAsciiName(profilePath)))
    return 0;
  sprintf_s(sqlPath, MAX_PATH, "%s\\%S", ascii_path, signonFile);
  SAFE_FREE(ascii_path);
  //打开Chrome浏览器cookie存放数据库
  rc = sqlite3_open(sqlPath, &db);
  if (rc) 
    return 0;
  //执行查询语句
  sqlite3_exec(db, "SELECT * FROM cookies;", parse_sqlite_cookies, NULL, NULL);
  //关闭数据库
  sqlite3_close(db);
  return 1;
}

3.对Cookies进行解析
//sqlite数据库解析 回调函数
int static parse_sqlite_cookies(void *NotUsed, int argc, char **argv, char **azColName)
{
  char *host = NULL;
  char *name = NULL;
  char *value = NULL;
  WCHAR enc_value[2048];
  char enc_value_a[2048];
  ZeroMemory(enc_value, sizeof(enc_value));
  ZeroMemory(enc_value_a, sizeof(enc_value_a));
  for(int i=0; i<argc; i++){
    if(!host && !_stricmp(azColName[i], "host_key"))
      host = _strdup(argv[i]);
    if(!name && !_stricmp(azColName[i], "name"))
      name = _strdup(argv[i]);
    if(!value && !_stricmp(azColName[i], "value"))
      value = _strdup(argv[i]);
    if(!_stricmp(azColName[i], "encrypted_value") && argv[i] && argv[i][0]) {
      DecryptPass(argv[i], enc_value, 2048);
      _snprintf_s(enc_value_a, sizeof(enc_value_a), _TRUNCATE, "%S", enc_value);    
    }
  }  
   //字符串分割
  NormalizeDomainA(host);
  //对感兴趣的cookie过滤
  if (host && name && value && IsInterestingDomainA(host)) {
    if (value[0]==NULL && enc_value_a[0]!=NULL) //cookie有加密的情况
      //AddCookieA(host, name, enc_value_a);
      printf("host=%s,\tname=%s,\tenc_value_a=%s\n",host,name,enc_value_a);
    else  //cookie没有加密的情况
      printf("host=%s,\tname=%s,\tvalue=%s\n",host,name,value);
      //AddCookieA(host, name, value);
  }
  SAFE_FREE(host);
  SAFE_FREE(name);
  SAFE_FREE(value);
  return 0;
}

主要用到C++、sqlite,编译器是VS2010。
完整代码见附件---解压密码是pediy.com

上传的附件 CHCookie-src.7z

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功