「ProGuard」の版間の差分
提供: Java入門
(ページの作成:「ProGuard とは、フリーの Javaクラスファイルシュリンカー、オプティマイザー、難読化、preverifier です。Androidアプリのリバー...」) |
|||
行20: | 行20: | ||
解決策は、proguard.cfg で addJavascriptInterface で追加するクラスを対象外にします。 | 解決策は、proguard.cfg で addJavascriptInterface で追加するクラスを対象外にします。 | ||
-keep class com.foo.bar { *; } | -keep class com.foo.bar { *; } | ||
− | == | + | == Android SDK == |
[[ProGuard]]は、Android SDKのビルドシステムに組み込まれています。 | [[ProGuard]]は、Android SDKのビルドシステムに組み込まれています。 | ||
+ | == インストール == | ||
+ | === FreeBSD === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ sudo pkg install proguard | ||
+ | </syntaxhighlight> | ||
+ | == proguardコマンド コマンドラインオプション == | ||
+ | == 使い方 == | ||
+ | === proguard.cfg === | ||
+ | -injars hello.jar | ||
+ | -outjars hello_obf.jar | ||
+ | |||
+ | -dontwarn java.lang.Object | ||
+ | -dontwarn java.lang.System | ||
+ | -dontwarn java.lang.String | ||
+ | -dontwarn java.io.PrintStream | ||
+ | -dontwarn java.lang.Class | ||
+ | -dontwarn java.lang.Object | ||
+ | -dontwarn java.lang.Class | ||
+ | -dontwarn java.lang.System | ||
+ | -dontwarn java.lang.Class | ||
+ | -dontwarn java.io.PrintStream | ||
+ | -dontwarn java.lang.Class | ||
+ | -dontwarn java.lang.String | ||
+ | |||
+ | -keep public class * { *; } | ||
+ | === 実行例 === | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ javac hello.java | ||
+ | $ jar cvfm hello.jar manifest.txt hello.class foo.class | ||
+ | $ proguard @proguard.cfg | ||
+ | </syntaxhighlight> | ||
== 関連項目 == | == 関連項目 == | ||
* [[メインページ]] | * [[メインページ]] | ||
<!-- vim: filetype=mediawiki | <!-- vim: filetype=mediawiki | ||
--> | --> |
2015年4月4日 (土) 21:54時点における版
ProGuard とは、フリーの Javaクラスファイルシュリンカー、オプティマイザー、難読化、preverifier です。Androidアプリのリバースエンジニアリングを防ぐために利用します。
読み方
- ProGuard
- ぷろ がーど
目次
概要
ProGuardは、以下の機能を提供します。
- 未使用のクラス、フィールド、メソッド、属性の検出と削除
- バイトコードの最適化
- 未使用の命令の削除
- 残ったクラス、フィールド、メソッドを「短く意味のない名前」にリネーム
Androidアプリをリバースエンジニアリングから守るために、Javaソースコード難読化ツールを利用します。
ProGuardの罠
WebView は、 Android でウェブページを表示するクラスです。 WebView は、addJavascriptInterface を用いて、JavaScript にインタフェースを追加できます。この機能を利用して、JavaScriptからJavaのメソッドが呼び出しできます。
ProGuardを利用することにより、メソッド名がリネームされます。その結果、JavaScriptから呼び出すメソッドが存在しなくなります。
解決策は、proguard.cfg で addJavascriptInterface で追加するクラスを対象外にします。
-keep class com.foo.bar { *; }
Android SDK
ProGuardは、Android SDKのビルドシステムに組み込まれています。
インストール
FreeBSD
$ sudo pkg install proguard
proguardコマンド コマンドラインオプション
使い方
proguard.cfg
-injars hello.jar -outjars hello_obf.jar -dontwarn java.lang.Object -dontwarn java.lang.System -dontwarn java.lang.String -dontwarn java.io.PrintStream -dontwarn java.lang.Class -dontwarn java.lang.Object -dontwarn java.lang.Class -dontwarn java.lang.System -dontwarn java.lang.Class -dontwarn java.io.PrintStream -dontwarn java.lang.Class -dontwarn java.lang.String -keep public class * { *; }
実行例
$ javac hello.java $ jar cvfm hello.jar manifest.txt hello.class foo.class $ proguard @proguard.cfg