12 KiB
APKデコンパイラ
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
JD-Gui
最初の有名なGUI Javaデコンパイラで、APKから取得したJavaコードを調査するために使用できます。
Jadx
ビルドインJava(マルチプラットフォーム)で、現時点ではおそらく推奨されているものです。
単に最新バージョンをダウンロードして、_bin_フォルダから実行します。
jadx-gui
GUIを使用すると、テキスト検索を実行したり、関数の定義(関数をクリックしてCTRL +左クリック)やクロスリファレンス(右クリック→使用箇所を検索)に移動したりできます。
GUIを使用せずにJavaコードのみを取得したい場合、jadxのCLIツールを使用するのが非常に簡単です。
jadx app.apk
次に、jadxの興味深いオプション(GUIおよびCLIバージョン)があります。
-d <path to output dir>
--no-res #No resources
--no-src #No source code
--no-imports #Always write entire package name (very useful to know where is the function that you might want to hook)
GDA-android-reversing-Tool
GDAは強力で高速な逆解析プラットフォームです。基本的な逆コンパイル操作だけでなく、悪意のある動作の検出、プライバシーの漏洩検出、脆弱性の検出、パスの解決、パッカーの識別、変数のトラッキング分析、難読化、Python&Javaスクリプト、デバイスメモリの抽出、データの復号化と暗号化など、多くの優れた機能をサポートしています。
Windowsのみ対応。
Bytecode-Viewer
もう1つの興味深い静的解析ツールは、bytecode-viewerです。これにより、複数の逆コンパイラを同時に使用してAPKを逆コンパイルすることができます。例えば、2つの異なるJava逆コンパイラと1つのSmali逆コンパイラを使用できます。また、コードを変更することもできます。
コードを変更した場合、それをエクスポートすることができます。
bytecode-viewerの欠点は、参照や相互参照がないことです。
Enjarify
Enjarifyは、Dalvikバイトコードを等価のJavaバイトコードに変換するツールです。これにより、Javaの解析ツールでAndroidアプリケーションを分析することができます。
Dex2jarは、DalvikからJavaバイトコードに変換しようとする古いツールです。ほとんどの場合、うまく動作しますが、一部のマイナーな機能や特殊なケースでは失敗したり、間違った結果を生成したりすることがあります。それに対して、Enjarifyはできるだけ多くのケースで動作するように設計されており、Dex2jarでは失敗するコードでも正しく処理します。Enjarifyは、ユニコードのクラス名、複数の型として使用される定数、暗黙のキャスト、例外ハンドラが通常の制御フローにジャンプすること、定数を参照しすぎるクラス、非常に長いメソッド、キャッチオールハンドラの後の例外ハンドラ、間違った型の静的初期値など、さまざまなケースを正しく処理します。
CFR
CFRは、モダンなJavaの機能を逆コンパイルします - Java 9、12、14を含む - ただし、Java 6で完全に書かれているため、どこでも動作します! (FAQ) - 他のJVM言語のクラスファイルをJavaに戻すのにもうまく対応します!
そのJARファイルは次のように使用できます:
java -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
大きなJARファイルでは、メモリが不足することがあります。もし同じ問題が発生した場合は、JVMのメモリ割り当てプールのサイズを調整することができます。
java -Xmx4G -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
この例では、最大4GBが割り当てられます。
出力ディレクトリには、デコンパイルされた.java
ファイルと、デコンパイルの概要が含まれています。
Fernflower
次はFernflowerです。これはIntelliJ IDEAの一部です。みんなが言うように、これは「解析的な」デコンパイラです(彼らのプロジェクトの説明に記載されています)、しかし、実際にはこれがどういう意味なのかは誰も指摘していません。私はただこのStackoverflowの質問を見つけましたが、残念ながら今日まで回答はありません。
とにかく、自己完結型のリリースがないため、自分でビルドする必要があります。Gradleベースのプロジェクトとして、クローンして、Gradleがマシンにインストールされている場合は次のコマンドを実行します。
cd ./plugins/java-decompiler/engine && gradle jar
以下では、まず作業ディレクトリをFernflowerのルートディレクトリに切り替えます。次に、Gradleに./build/libs/fernflower.jar
ファイルをビルドするよう指示します。
Fernflowerの呼び出しはCFRと似ています。
java -jar ./fernflower.jar "$JARFILE" "$OUTDIR"
以下のデコンパイラの中で、これは生成された.java
ファイルをJARファイルで出力する唯一のものです。unzip
を使用して簡単にソースファイルを抽出できます。
Krakatau
前述のEnjarifyを覚えていますか?同じ作者が開発したデコンパイラのKrakatauです。
他のプロジェクトとは異なり、これはPythonで書かれています。そして、これが他と少し異なる理由だと思います。
プロジェクトのREADMEから引用します。
次に、デコンパイルしようとしているJARが参照する外部クラス(つまりライブラリ)の定義を含むJARがあることを確認してください。これには標準ライブラリクラス(つまりJRT)も含まれます。
そして、説明によると、これらの標準ライブラリクラスはJavaのバージョン8までrt.jar
というファイルの形式で提供されています。後のバージョンでは、作者はjrt-extractorを提供しており、これを使用してこのファイルを生成できます。
そのため、このツールをダウンロードし、以下のコマンドを実行します。
cd ./jrt-extractor
javac JRTExtractor.java
java -ea JRTExtractor
このディレクトリ内には、rt.jar
というファイルが書き込まれているはずです。
このファイルがあれば、Krakatauを以下のように実行できます。
./Krakatau/decompile.py -out "$OUTDIR" -skip -nauto -path ./jrt-extractor/rt.jar "$JARFILE"
プロジェクトのGitHubを参照して、パラメータの説明を確認してください。ただし、JARファイルで使用されるライブラリについては、Krakatauは-path
フラグにJARファイルとして追加する必要があります。
procyon
インストール後、使用方法は簡単です。
procyon -jar "$JARFILE" -o "$OUTDIR"
参考文献
{% embed url="https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。