如何找到 Electron 封装的客户端的实际访问地址
前言
最近遇到一个奇葩的项目,项目方故意把一个本来可以使用浏览器访问的网页服务用 electron 封装起来.而且明明 electron 是支持跨平台的,对方似乎只给移动端适配,还只提供打包好的 Windows 程序.此外,由于还需要登录 VPN,即使真的提供了 Linux 版本,其实也不是很好用.
不过既然知道他实际上是 electron 套壳,理论上找到了这个程序实际上访问的地址,然后直接通过浏览器访问岂不是更加方便吗?
准确的说,这个套壳的 electron 是部署了一个新的网站 A,用户通过这个客户端登录了这个网站 A,同时也会登录原本的目标网站 B.
其实目标网站 B 的访问地址我本来就知道,只是他们修改了源码,把登录框给去掉了,我就无法登录了.
我们的目标就是找到网站 A 的地址,以及他如何在跳转到网站 B 的时候还实现了登录状态.
具体的步骤
- 使用 asar 来解压打包好的 electron 客户端里的
app.asar
文件,找到package.json
文件,找到主程序入口,也就是main
的值. - 确定主程序入口的 js 文件之后,把文件内容丢给 LLM 分析,问他实际访问的 URL 是哪一个.当然,你也可以自己阅读,但是没有这个必要.
- 确认了这个地址之后,使用浏览器访问地址,即可进入网站 A.
- 随意点击一个会跳转到网站 B 的链接,F12 打开浏览器的开发者工具,并观察控制台和网络请求,你应该很容易能够找到相关的请求.
- 一般来说,electron 会选择打开一个新的窗口来访问网站 B,但是浏览器这里可能就没法打开,开发者工具的控制台就有会相关的错误.找到这些错误信息对应的 JS 代码,复制相关的信息丢给 LLM 分析.很容易就会得到他要访问的目标地址,以及他需要传递的一些 localStorage 的参数.
- 我们直接浏览器访问网站 B 对应的目标地址,并且手动把 localStorage 的值给写入.重新刷新页面,应该就已经进入登录状态了.
- 更进一步,我们可以写一个 tampermonkey 脚本,在访问网站 A 的时候,读取 localStorage 里需要用的值,保存到全局共享的位置去.然后再写一个 tampermonkey 脚本,再访问网站 B 的时候,从这个全局共享的位置里读取特定的数据,写入到 localStorage 去.
后记
本文只是提供一个小小的思路,具体的细节还需要根据实际情况来改进.大部分的细节都是我询问 LLM 得到的结果,包括如何从已经打包好的 electron 程序中找到实际访问的地址等等.
本文的关键在于我们首先知道了这个项目只是 electron 套壳,也知道有一个目标网址,只是我们不知道如何进入登录状态.经过与 LLM 的交流,总算还是解决了问题.