DEV

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 --version
Electron Packager 12.2.0
Node v10.11.0
Host Operating system: linux (x64)

パッケージ化

パッケージ化するサンプルは下記です。

https://github.com/edo1z/electron_studygithub.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
$ ./hoge

resources/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つ試してみます。

  1. hoge-linux-x64/hogeを、hogeだけ取り出して別場所で実行してみる。
  2. 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 directory

hoge-linux-x64/resources/app.asarにして実行してみる

これは、resources/electron.asarを、resources/app.asarに改名し、resources/appディレクトリ自体は削除します。 そして、hogeを実行してみます。

$ mv ~/hoge hoge-linux-x64
$ cd hoge-linux-x64
$ ./hoge
module.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