虽然现在网上有很多开源的软件可以帮助你解密那些存储在GoogleChrome浏览器中的密码,但是这些软件几乎只支持在Windows操作系统下使用。那么对于我们这些Mac用户来说,当我们需要快速导出Chrome中存储的全部密码时,我们该怎么做呢?
直接进入正题
其中最常见的一种做法就是打开Chrome浏览器,选择“浏览器设置”,点击“管理密码”,然后你将会看到如下图所示的界面。接下来,你就可以在这里管理你的密码了。
点击了“显示密码”之后,系统此时便会要求你输入本地用户的密码。但是,像这种极其不方便的方法,谁还想去使用它呢?
为了解决这个问题,为了避免被要求输入用户密码,我们可以直接查询GoogleChrome浏览器的SQL数据库。在macOS平台下,这个数据库的存储路径为“~/Library/ApplicationSupport/Google/Chrome/Profile */Login Data”。
对于每一个存储在GoogleChrome浏览器中的密码来说,每一条密码数据都是以类似下图所示的这种数据格式存储在“LoginData”数据库中的:
我们可以从上图中看到,对于这个用户而言,其密码就是那段以“v10”开头的乱码,这段密码明显已经被加密了。你可能想问了,它采用的到底是哪一种加密算法呢?为了解答这个问题,我们可以参考GoogleChromium的源代码。在其源代码中,我们发现了下面这段话:
加密机制:AES-128-CBC(使用固定盐值和固定迭代次数)。解密密钥是一个PBKDF2密钥,该密钥通过下列数据生成:
- 盐值:盐值固定不变(saltysalt);
- 迭代次数:在对称密钥的生成过程中进行1003次迭代计算;
- 哈希函数:sha1;
- 密码:密码是整个环节中最重要的一个部分了。我们所要获取的,就是存储在“ChromeSafe Storage”中的凭证数据,而这部分数据又保存在用户的keychain之中。实际上,我们在访问这个安全存储密钥的时候并不需要获取到用户的keychain密码。因为我们可以在终端中使用命令“securityfind-generic-password -ga Chrome”来直接调用macOS的安全处理进程,此时系统将会显示如下图所示的对话框:
如上图所示,我们在没有输入用户密码的情况下获取到了Chrome的安全存储密钥。没错,就是这么简单!
加密与解密
之前我们也已经讨论过了,其中的AES解密密钥是通过PBKDF2密钥(‘sha1’,safeStorageKey, ‘saltysalt’, 1003)来生成的。既然我们已经获取到了这些数据,那么接下来我们怎么利用这些数据来自动化地从数据库中提取信息并解密所有的数据条目呢?没错,我们要使用的就是Python,毫无疑问,Python永远是最赞的!而且更棒的地方就在于,macOS已经帮我们安装好了Python的运行环境了,所以我们无需再去配置各种各样乱七八糟的东西了,我们可以直接在任何一台macOS设备上运行Python脚本。只需五秒钟,一切都可以搞定!
如果你想要使用Python来进行AES解密的话,我们通常都会使用这个功能强大的第三方加密库来完成【传送门】,但悲剧的地方就在于,它并不是一个原生代码库。所以我打算使用OpenSSL命令行工具来发送一个采用base64编码的加密密码副本和PBKDF2解密密钥的十六进制副本。在这个过程中我还使用到了一些其他的工具,这些工具可以在我的Github代码库中获取到【传送门】。输出信息如下图所示:
我们可以从上图中看到,Google并没有对这些keychain数据进行加密保护。实际上,当用户在除了Chrome浏览器以外的地方访问这些密码的时候,Google完全可以要求用户提供Keychain密码,但是很明显他们并没有这样做!
如果Google想要修复这个问题的话,那么他们在最初创建安全存储密钥的时候就得要求用户输入密码以验证登录信息。除此之外,苹果公司在向开发者提供这类功能的时候,也应该谨慎考虑安全性的问题。
总结
各位同学可以直接使用这个程序来解密macOS平台下的Chrome密码【工具下载】。这是目前唯一一个针对macOS/OS X平台的Chrome密码解密软件,用户无需配置任何的依赖环境即可直接使用这款软件。如果你动手能力很强的话,你也可以添加一些额外的功能代码,让这款工具帮助你自动提取密码,然后将其上传至远程FTP服务器中,并清除你在目标主机中的所有操作痕迹。这样一来,它就变成了一款黑客工具了,这就是开源的魅力。