Last Regrets

关于Chrome密码管理器的实现逻辑逆向研究

· sdttttt

目前存在一个场景:需要填充网页上的账号密码模拟登陆,但是不能触发或者给chrome的密码管理器识别到真实的账号密码。

以前其实就比较好奇这个密码管理器是如何正确抓取网页上的密码的。


经过了一天的研究,大概可以得出几个结论了,我不保证这个逻辑是正确的,但是如果有其他人需要参考我想还是能提供一些帮助的,当然也可能存在其他我没观测到的情况:

  1. 在网页加载完成后密码管理器就会根据某种dom查找的算法逻辑找出网页中存在的账号密码input, 然后持续的跟踪这些dom元素的状态信息。
  2. 因为存在dom状态跟踪,所以修改input的value时,密码管理器的值也会产生变化。
  3. 弹出是否保存密码的时候一般是涉及网页跳转(URL变化)

我这里目前只想到了2种方案来达成目标:

  • 第一种:在触发登陆后,在网页跳转执行前,将账号密码修改为fake值,这样就能在跳转后骗过密码管理器。
  • 第二种:断开密码管理器对dom状态的跟踪,使用重新删除和创建dom的方式来完全规避密码管理器. 这个方法是最直接有效。但是目前大部分的前端应用会使用Vue/React等框架,他们的原理是虚拟dom渲染,这个方法会影响这些响应式运行时实现。