Electron製のアプリは非常に簡単に内部のソースコードが閲覧出来てしまいます。これを認識していないと簡単にコピーアプリを作られたり脆弱性を調べられます。
今回はどれくらい手軽に行えるか実際にやってみます。ハリーポッターで言う「闇の魔術に対する防衛術」のコーナーですね。悪い人がどのような手段でアプリを解析するか知り、防衛方法を模索するというわけです。くれぐれも悪用しないでくださいw
知らない方にとってはちょっとした恐怖体験ですねw
原理
Electron製のアプリはasarと呼ばれる方式で実行に必要なファイルを1つにまとめられています。tarのように圧縮や暗号化などは行わず複数のファイルを単純に結合するだけのシンプルなファイル形式です。逆に言えばasarのフォーマットがわかっていれば誰でも中身をのぞくことが可能です。
このasarファイルを操作するためのコマンドがElectronから公式に提供されています。これをインストールするだけで中身をのぞけちゃうわけです。
準備
asarコマンドのインストール
Node.jsがインストールされている環境でasarコマンドを入れます。
$ npm install -g asar
今回は3.0.3が入りました。
$ asar --version v3.0.3
Windowsの場合は先頭にnpxを付けて実行してください。
PS C:\Users\katsube> npx asar --version v3.0.3
アプリの中身をのぞく
macOSの場合
インストール済みののぞきたいアプリを選択後、右クリック(コンテキストメニューを表示)し「パッケージの内容を表示」を選択します。
するとアプリの中身がFinderでのぞける用になるので「Contents」→「Resources」→「app.asar」とたどり、app.asarをデスクトップなど適当な場所にコピーします。このファイルにソースコードなど一式が詰まってます。
Terminalから先ほどインストールしたasarコマンドでapp.asarを展開し中身を取り出します。
$ asar extract app.asar app/
展開後のファイルを実際に開いてみるとソースがそのままの状態で入っているのがわかりますね。
Windowsの場合
WindowsもmacOSと手順は同じです。インストールされたフォルダのresourcesを開いて、app.asarを取り出します。インストール先を変更していない場合、以下のフォルダにいます。
C:\Users\(ユーザー名)\AppData\Local\Programs\(アプリ名)\resources
PowerShellなどから先ほどインストールしたasarコマンドでapp.asarを展開し中身を取り出します。
PS C:\Users\katsube> npx asar extract app.asar app/
こちらも展開後のファイルを実際に開いてみるとソースがそのままの状態で入っているのが確認できますね。
防衛術
ソースを覗かれたくない場合、結論から言えばソースコードを難読化するか、重要な処理はサーバに置くのが一般的でしょうか。
ソースコードの難読化にはobfuscatorを用いる方法をよく見かけますね(webpack版) www.npmjs.com
まぁ…とは言えソフトウェアの宿命ではありますが、実際の動きを目コピされてコピーアプリを作られたり、メモリや通信を解析されることの難易度を上げることはできますが完全に防ぐことはできませんので、被害を受けた場合は法的な対応を取るしかないかもしれませんね。