-
-
[旧帖] [原创]获取Firefox浏览器cookie 0.00雪花
-
发表于: 2016-1-8 10:09 1368
-
大家好,这是我第一次发帖。
闲来无事,对firefox浏览器的cookie进行了分析,发现firefox浏览器的cookie是存放在一个cookies.sqlite的sqlite数据库文件中。
步骤:
1.获取firefox浏览器Profile文件的路径;
2.找到cookies.sqlite的完整路径;
3.对cookies.sqlite进行解析。
下面看看主要代码:
1.获取firefox浏览器Profile文件的路径
2.找到cookies.sqlite的完整路径
3.对cookies.sqlite进行解析
主要用到C++、sqlite。
闲来无事,对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。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
赞赏
他的文章
- [原创]获取Firefox浏览器cookie 12051
- [原创]获取IE浏览器cookie 11940
- [原创]获取Chrome浏览器cookie 14418
看原图
赞赏
雪币:
留言: