Electron - ビルドするとき難読化とかどうなるのか?
ElectronアプリはJavascriptでつくります。Javascriptでアプリ作ってお金をいただこうとする場合に、ソースコードが完全にあけっぴろげだとよろしくないのかなあと思いつつも、どうせ完全なガードはできないわけですので、あんまり考えてもしかたがないなあという気もしなくもない。とりあえずwebpackで圧縮・難読化されるようにはしておこうと思いますので、ビルドしたときにどうなるのかと、圧縮/難読化をどうしたらいいのかを調べました。
環境
- ubuntu 18.0.4
- node
- electron 2.0.9
electron-packager
electron-packagerを使ってやってみます。
インストール
$ yarn global add electron-packager$ electron-packager --versionElectron Packager 12.2.0Node v10.11.0Host Operating system: linux (x64)パッケージ化
パッケージ化するサンプルは下記です。
https://github.com/edo1z/electron_study — github.com
$ electron-packager . hoge --platform=all --arch=x64なんか、hoge-linux-x64というディレクトリができましたが、windowsとかmacっぽいのはない。 ubuntuだとlinux用だけしかつくれないのかも。hoge-linux-x64の中身は下記のようになってます。
$ tree -L 2.├── LICENSE├── LICENSES.chromium.html├── blink_image_resources_200_percent.pak├── content_resources_200_percent.pak├── content_shell.pak├── hoge├── icudtl.dat├── libffmpeg.so├── libnode.so├── locales│ ├── am.pak│ ├── ...│ └── zh-TW.pak├── natives_blob.bin├── pdf_viewer_resources.pak├── resources│ ├── app│ └── electron.asar├── snapshot_blob.bin├── ui_resources_200_percent.pak├── version└── views_resources_200_percent.pak下記のようにhogeを実行するとアプリが起動しました。
$ cd hoge-linux-x64$ ./hogeresources/app内に、まるまるjsファイル等々が入ってます。
$ cd hoge-linux-x64/resources/app$ tree -L 1.├── calc.js├── client.html├── index.html├── main.js├── node_modules├── package.json├── server.js└── yarn.lockそして、main.jsを開くと、全く圧縮等はされていません。ところで、配布するときは何を配布したらいいのか?
参考: アプリケーションの配布
上記によると、hoge-linux-x64ディレクトリを配布するらしい。でも、resources/app内のフォルダがあからさますぎて嫌な場合は、asarファイルにすることができるらしい。asarファイルはただ連結しただけで、暗号化等がされているわけではないので、難読化に関してはされていないと思ったほうがいいらしい。electron-packagerは勝手にasarファイルをつくってくれるらしい。確かに、上記treeの結果にも、resourcesフォルダ配下に、すでにelectron.asarというのがあります。
では一応2つ試してみます。
- hoge-linux-x64/hogeを、hogeだけ取り出して別場所で実行してみる。
- hoge-linux-x64/resources/app.asarにして実行してみる。
hoge-linux-x64/hogeを、hogeだけ取り出して別場所で実行してみる
$ mv hoge-linux-x64/hoge ~$ cd$ ./hoge ./hoge: error while loading shared libraries: libnode.so: cannot open shared object file: No such file or directoryhoge-linux-x64/resources/app.asarにして実行してみる
これは、resources/electron.asarを、resources/app.asarに改名し、resources/appディレクトリ自体は削除します。 そして、hogeを実行してみます。
$ mv ~/hoge hoge-linux-x64$ cd hoge-linux-x64$ ./hogemodule.js:545 throw err; ^
Error: Cannot find module '/hoge/hoge-linux-x64/resources/electron.asar/browser/init.js' at Function.Module._resolveFilename (module.js:543:15) at Function.Module._load (module.js:473:25) at Function.Module.runMain (module.js:683:10) at startup (bootstrap_node.js:196:16) at bootstrap_node.js:622:3なんか違う笑
$ yarn global add asar$ asar pack hoge-linux-x64/resources/app app.asar$ electron app.asar$ mv app.asar hoge-linux-x64/resources$ ./hoge-linux-x64/hoge