浏览器存储的加密凭据获取指南

在数字时代,浏览器成为了日常生活中不可或缺的工具之一。它们不仅帮助浏览网页,还存储了大量的个人信息,包括登录凭据。本文将介绍如何从浏览器中获取这些存储的加密凭据,特别是针对Google Chrome浏览器。

Chrome浏览器的配置文件夹

Chrome浏览器将用户的登录凭据存储在一个特殊的文件夹中,称为“配置文件夹”。要找到这个文件夹,首先需要了解如何定位它。Chrome内置了一个机制,可以显示关于其版本和安装位置的重要信息。要查看这些信息,只需在地址栏中输入:

chrome://version/

在显示的众多信息中,请参考“配置路径”(Profile Path),这是敏感数据的存储位置。

获取配置路径

为了以编程方式获取这个路径,需要执行以下步骤:

#define FORENSICS_CHROMECREDENTIALS_PATH _T("\\Google\\Chrome\\User Data\\Default\\") bool result = false; TCHAR szProfileFolderPath[MAX_PATH]; result = SHGetSpecialFolderPath(0, szProfileFolderPath, CSIDL_LOCAL_APPDATA, 0); StrCat(szProfileFolderPath, FORENSICS_CHROMECREDENTIALS_PATH);

首先,获取了用户Windows用户账户的特定路径。这可能是:

c:\users\john\

或者

c:\users\myself\

由于不知道具体路径,不在运行时使用任何硬编码值,而是在运行时获取它。第二部分是Google数据的相对路径,这是固定的,所以保留这部分硬编码。将两部分组合起来,就得到了路径。

SQLite3数据库文件

现在已经得到了路径,需要关注一个特定的文件,实际上这是一个SQLite3数据库

Login Data

要获取这个文件,在路径后添加

"\"

(_T("\\"))然后是字符串

_T("Login Data")

当这样做时,szProfileFolderPath将包含需要打开的数据库的完整路径。

SQLite3数据库的注意事项

在Secured Globe, Inc.的日常开发工作中,经常使用SQLite3。大多数取证信息都与SQLite3有某种关联。Sqlite3可以在源代码级别使用(将sqlite3.c和sqlite3.h添加到程序中,或者作为静态/动态库使用)。

使用它时,有两个额外的增强:

  • CppSqlite3 - 一个包装器,可以更好地处理UNICODE文本(没有它,sqlite3很难处理数据库中的国际字符)。
  • SEE - 一个付费库(每个许可证2000美元),由Sqlite3出售,允许应用程序读取和写入加密的数据库文件。支持四种不同的加密算法:RC4、AES-128 OFB模式、AES-128 CCM模式、AES-256 OFB模式。

从SQLite3数据库中获取凭据

接下来,打开数据库并对存储凭据的特定表运行查询。这个表被称为“logins”。预定义了要在这张表上执行的查询:

#define CHROME_CRED_SQL_QUERY "SELECT signon_realm,username_value, password_value,date_created FROM logins"

然后,可以打开数据库并运行这个查询:

CppSQLite3DB CredentialsDB; // 定义了一个CppSQLite3DB对象 try { CredentialsDB.open(TEMP_CHROME_DB); } catch(CppSQLite3Exception &e) { // 在这里处理异常 return false; }

SGBrowserCredentials数据结构用于任何获取浏览器凭据的过程,并且能够保存所有浏览器通用的相关字段。

读取数据

运行SQL查询后,应该预期会得到一些记录。每条记录都是一个单独的条目,例如存储的凭据。使用以下局部变量:

WCHAR *Site, *User, *CreationDate; DATA_BLOB DataIn, DataOut;

来存储单个记录。还读取加密数据,稍后将对其进行解密。

解密加密数据

要解密数据,使用CryptUnprotectData,它解密密码(在DATA_BLOB结构中)。

bool bDecrypted = CryptUnprotectData(&DataIn, 0, 0, 0, 0, 8, &DataOut);

如果成功,将在DataOut中拥有解密后的密码。

处理Chrome的日期/时间格式

在创建单个记录并将其添加到动态数组之前,需要解释Chrome存储每个条目的日期/时间的方式。最简单的方法是将日期/时间(从数据库中以字符串形式获取)转换为FILETIME对象。FILETIME结构包含一个64位值,表示自1601年1月1日(UTC)以来的100纳秒间隔数。首先,需要获取Chrome使用的长数字的前10位数字,并将其存储在ULONGLONG变量中(使用_wcstoui64)。然后将其乘以10,并将“LowPart”和“HighPart”分配给FILETIME对象。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485