Web桌面开发,好写又漂亮,同时,也好破解。

最近在看Houdini官方的教学视频,这些视频全都是英文的不说,还没个字幕,所以我需要一个实时字幕软件,找到一个实时转录+翻译的软件,很好用,但可惜最多连续运行15分钟(这并不是什么问题,但我有强迫症)

这好像是我第一次恶意破解软件,改别人的代码呢~

(破解校园跑那个不算啦,毕竟没改代码~)

确定这个软件是Electron写的

破解之前,先确定是不是Electron写的。

这点很简单,Electron的软件目录结构都长这个样子,resources里面放了个app.asar。

准备工具

我们的目标是那个app.asar,这个文件本质是个压缩包,甚至可以直接用压缩软件解压(不知道是不是压缩软件的问题,实测用压缩软件解压再打包回去的时候会出问题)

首先需要安装处理asar文件的工具:

npm install -g asar

这样全局安装了asar就可以用asar命令了。

解包和打包

在resources目录里面执行 asar extract app.asar app ,将app.asar里面的东西解压到app目录里面。

不同的框架解压出来的东西也不同,但里面的代码可以大体分成三部分:

  • node_modules: 第三方库,我们不关心。

  • main: Electron的node运行时代码,一般负责打开窗口、比较底层的东西。

  • render: 窗口里面的东西,软件的主要逻辑。

据测试,不打包的话不能运行程序。

在处理好之后,先删除原本的app.asar,执行asar pack app app.asar ,将app文件夹打包成app.asar。

定位目标代码

解的包里面包含了软件的所有代码,但它们是编译过的JS代码,并不好理清楚逻辑。

这里我们用开发人员工具定位代码。

打开开发人员工具

先尝试 Ctrl + Shift + I 是否能把开发人员工具按出来,如果可以就可以,不可以就尝试下面的步骤:

先找到main部分的代码,不确定的话可以挨个尝试下面的步骤。

然后在代码中查找BrowserWindow ,挨个着重看有没有new BrowserWindow ,很可能编译后的代码不是直接new BrowserWindow ,可能写成new P.BrowserWindow 之类的。

找到的代码是用来创建窗口的,如果应用程序有多个窗口,这里很可能不止一处。

创建窗口后面的参数会是一个object,寻找后面的object里面有没有设置webPreferences 有的话,寻找webPreferences 里面有没有设置devTools ,如果有的话,把devTools 这一项删掉,这一项很可能是在设置关闭开发人员工具。

改了代码,保存,打包,运行,再尝试快捷键能否能按出来开发人员工具。

如果不行,尝试在代码里面添加 XXX.webContents.openDevTools()

例如,有Y=new P.BrowserWindow(...),就在后面加分号,写Y.webContents.openDevTools()

打断点

在Web里,代码可以打断点,Dom元素也可以打断点。

在此处,我想破解一个十五分钟的倒计时,我给这个显示时间的节点打了断点。

在断点触发时,调试工具会定位到修改时间的位置。

到这里,顺着调用堆栈挨个找,总能找到。

实施破解

此处不用多说。

比如,此次实践中,我把所有的r-1换成了r,做到倒计时不计时。

注意到,这种有内购功能的软件,往往render需要向main查询是否已经购买,如果内购功能很多、比较复杂、不是很好定位,从render和main通信上做手脚可能是更方便的。

最后不要忘记打包打回去哦。(●'◡'●)

哦哦哦,对对对,免责声明,仅作学习交流,不要用于非法用途哦。


我真的越来越邢啦

我能想到的,最大的成功就是无愧于自己的心。