Electron是一套基于Web技术的开发框架,它通过浏览器内核跨平台来实现跨平台桌面软件的开发。有包括Atom、1Password等软件的都在使用该框架,由于入门简单,吸引了越来越多开发者和团队使用Electron来进行桌面软件的开发。除了一些开源作品,也有一些闭源的收费软件。本文从Electron软件的构建打包过程,以及StarUML破解为例探讨Electron框架的桌面软件破解。本文代码及示例仅用作技术探讨,请勿用于商业活动及违法行为,否则一切后果自负。如转载必须标明出处!
0. 环境
OS: macOS Monterey
npm: 7.11.2
electron: v16.0.1
asar: v3.0.3
1. 熟悉一下electron程序等构建过程
A. 安装依赖
npm i -g electron
B. 拉代码
https://github.com/electron/electron-quick-start
C.启动
cd electron-quick-startnpm start
以上只是运行起了这个官方demo,为了了解electron项目的逆向,我们还要看看打包后的过程,及其打包好的程序。
A. 安装打包工具
npm install electron-packager -g
B. 打包
electron-packager . hello --mac --out ../ --arch=x64 --app-version=0.0.1
可以看出,这个过程只是简单的制作了程序包,以上程序hello.app可以直接拖动到Applications目录进行安装。资源处理这块它把.git目录以外的文件都打到了Application当中,而且也没有做任何改动。对于这种方式打包的App,不需要进行特殊的逆向。如果要做破解,只要阅读Resources\app目录的源码即可,如果有JavaScript代码的混淆压缩什么的,那应该又是另外一个话题了。
C. Asar压缩打包
electron-packager . hello --mac --out ../ --arch=x64 --app-version=0.0.1 --asar
Asar是一种简单的压缩技术,以上命令打包之后,源码就被制作成了一个app.asar文件。它是一个可逆的压缩技术,可以通过安装asar工具来进行压缩以及解压缩:
npm install asar -g
使用文档参考https://www.npmjs.com/package/asar
3. “逆向”
说是逆向其实不严谨,因为通过以上操作我们知道,只是进行了资源压缩,进行解压即可。
我们来解压前边打包的app结果:
asar extract ../hello-darwin-x64-asar/hello.app/Contents/Resources/app.asar ../hello-unpack
可以看到,解压完,跟第一次没有--asar选项打包的结果一样。我们复制一个有asar的app,然后把解压修改后的资源覆盖进去试试能否正常启动
# 复制一份app
cp -r ../hello-darwin-x64-asar/hello.app ../hello2.app
# 修改源码
echo '<html><head><meta charset="utf-8"/></head><body>你好</body></html>' > ../hello-unpack/index.html
mv ../hello-unpack ../hello2.app/Contents/Resources/app
# 移除已经压缩的版本
rm -rf ../hello2.app/Contents/Resources/app.asar
可以看到,对于进行asar压缩的软件,解压之后修改,替换成app目录,删除app.asar,就能实现功能修改了。
4. StarUML的license
通过以上方法解压StarUML的4.1.6版本中的app.asar
通过阅读根目录的package.json文件可以大概猜测validation_url就是license的校验网址,我们在整个目录中搜索validation_url
最后一个关键文件中是license计算的核心代码
通过阅读代码可以知道大概的流程:
值得关注的是license文件存储在app目录或者用户目录,以macOS为例,用户目录是在~/Library/Application Support/StarUML,那么我们只需要自己造一个放在这个目录即可,这样我们无需对App进行任何的修改即可实现破解。
效果如下: