web-dev-qa-db-ja.com

APKファイルからソースコードを取得する方法はありますか?

私のラップトップのハードドライブがクラッシュしただけで、私は過去2ヶ月間取り組んできたアプリのすべてのソースコードを失いました。私が持っているのは私が友人にそれを送ったときから私のEメールに格納されているAPKファイルだけです。

このAPKファイルからソースコードを抽出する方法はありますか?

1154
Frank Bozzo

簡単な方法:オンラインツールを使用してください http://www.javadecompilers.com/apk 、apkをアップロードしてソースコードを入手してください。


.apkファイルをデコードする手順、ステップバイステップの方法:

ステップ1:

  1. 新しいフォルダを作成し、デコードしたい.apkファイルを上書きします。

  2. この.apkファイルの拡張子を.Zipに変更し(例:filename.apkからfilename.Zipに名前変更)、保存します。これで、classes.dexファイルなどにアクセスできます。この段階では、描画可能ファイルは表示されていますが、xmlファイルやJavaファイルは表示されていないので、続行します。

ステップ2:

  1. 同じフォルダ(または新しいフォルダ)にこの.Zipファイルを解凍します。

  2. dex2jarをダウンロードして 同じフォルダ(または新しいフォルダ)に展開します。

  3. Classes.dexファイルをdex2jarフォルダに移動します。

  4. 今すぐコマンドプロンプトを開き、そのフォルダ(または新しいフォルダ)にディレクトリを変更します。それからd2j-dex2jar classes.dexと書いて(mac terminalまたはubuntuの場合は./d2j-dex2jar.sh classes.dexと書いてください)、enterを押してください。これで、同じフォルダにclasses.dex.dex2jarファイルがあります。

  5. Javaデコンパイラのダウンロード 、jd-guiをダブルクリックし、開いているファイルをクリックして、そのフォルダからclasses.dex.dex2jarファイルを開きます。これでクラスファイルが得られます。

  6. これらのクラスファイルすべてを(jd-guiでは、[ファイル] - > [すべてのソースを保存]をクリックして)src名で保存します。この段階ではJavaソースを入手できますが、.xmlファイルはまだ読めないので続行します。

ステップ3:

今すぐ別の新しいフォルダを開きます

  1. デコードしたい.apkファイルを入れます。

  2. apktool _および_ apktoolインストールウィンドウ の最新バージョンをダウンロードして(両方とも同じリンクからダウンロードできます)、それらを同じフォルダーに配置します。

  3. コマンドウィンドウを開く

  4. apktool if framework-res.apkのようなコマンドを実行します(あなたがそれを持っていないなら ここでそれを入手してください )そしてnext

  5. apktool d myApp.apk(myApp.apkはデコードしたいファイル名を表します)

今すぐあなたはそのフォルダ内のファイルフォルダを取得し、簡単にapkのxmlファイルを読むことができます。

ステップ4:

両方のフォルダ(この場合は両方とも新しいフォルダ)の内容を単一のフォルダにコピーするだけのステップではありません。

そしてソースコードを楽しんでください...

1474
Prankul Garg

これは代替の説明です - 念のために、誰かが上記の説明に行き詰まった場合。手順に従ってください:

  1. http://ibotpeaches.github.io/Apktool/install/ から apktool.bat (またはLinuxの場合は apktool )および apktool_<version>.jar をダウンロードしてください。
  2. jarファイルの名前を上からapktool.jarに変更し、両方のファイルを同じフォルダーに入れます。
  3. dOSボックス(cmd.exe)を開き、そのフォルダに移動します。 Java環境がインストールされていることを確認します(Linuxの場合は、必要なライブラリーに関するメモも確認してください)。
  4. 開始:apktool decode [apk file]

    中間結果 :リソースファイル、AndroidManifest.xml

  5. あなたの選んだアンパッカでAPKファイルを解凍してください。

    中間結果 classes.dex

  6. http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.Zip&can=2&q= からdex2jar-0.0.9.15.Zipをダウンロードして抽出します。
  7. classes.dexdex2jar.batにドラッグアンドドロップします(またはDOSボックスに<path_to>\dex2jar.bat classes.dexと入力します。Linuxの場合はdex2jar.shを使用します)。

    中間結果 classes_dex2jar.jar

  8. classes_dex2jar.jarを解凍します(使用される逆コンパイラによってはオプションになる場合があります)。
  9. あなたのクラスファイルを逆コンパイルする(例: JD-GUI または DJ Decompiler

    結果 :ソースコード

注意:サードパーティのパッケージを逆コンパイルすることは許可されていません。このガイドは、APKファイルからのみ個人的なソースコードを復元することを目的としています。最後に、結果のコードはほとんどの場合難読化されます。

117
Trinimon

APKファイルを逆コンパイルすることはできますが、大きな問題が1つ発生する可能性があります。

あなたが書いたコードを返すことはありません。代わりに、コンパイラがインライン展開したものは何でも、変数にはランダムな名前を与え、関数にはランダムな名前を与えます。最初からやり直すよりも、逆コンパイルして元のコードに復元しようとすると、かなり時間がかかる可能性があります。

残念なことに、このようなことは多くのプロジェクトを殺しました。
将来的には、 _ cvs _ _ svn _ git などのバージョン管理システムを学ぶことを強くお勧めします。

そしてそれをバックアップする方法。

106
Ryan Gooler

Playストア にapk(システムアプリケーションも)を逆コンパイルしてあなたのスマートフォンでソースコードを見ることが可能な新しいアプリケーションもあります。あなたのSDカードにファイルを保存するので、あなたもあなたのコンピュータでそれを見ることができます。 rootやそれ以外のものは必要ありません。

ただインストールして楽しんでください。私はこれがアプリを逆コンパイルするための最も簡単な方法だと思います。

48
Cilenco

apktool はあなたが試すことができる最高のものです。私はそれを使っていくつかのxmlを保存しましたが、正直なところ私はそれが.Javaコードでどのように動作するかわかりません。

あなたが唯一のコーダーであっても、私はあなたにコードレポジトリを持つことを勧めます。私は自分のプロジェクトに Project Locker を使っています。それはあなたに無料のsvnとgitのレポを与えます。

25
Macarse

これら2つの記事では、apktooldex2jarを組み合わせてAPKファイルを作成し、それをビルドして実行できるEclipseプロジェクトを作成する方法について説明します。

http://blog.inyourbits.com/2012/11/extending-existing-Android-applications.html

http://blog.inyourbits.com/2012/12/extending-existing-Android-applications.html

基本的にあなた:

  1. Apkからリソースファイルを取り出すにはapktoolを使用してください。
  2. Eclipseが好むフォーマットのクラスを含むjarファイルを取得するにはdex2jarを使用してください。
  3. Eclipseプロジェクトを作成し、リソースファイルと新しいjarファイルを指定します。
  4. Zipユーティリティでjarファイルを開き、既存のリソースを削除します。
  5. ソースコードを表示するには、JDGuiを使用してjarファイルを開きます。
  6. 必要なソースコードをJDGuiから取り出し、それをEclipse内のクラスに固定して変更します。
  7. Jarファイルからそのクラスを削除します(したがって、同じクラスを複数回定義しないでください)。
  8. それを実行します。
21
Tom Hennen

apktoolは動きます。ソースコードを抽出するためにキーストアを知る必要さえありません(これは少し怖いです)。主な欠点は、ソースがJavaではなくSmali形式で表示されることです。 iconやmain.xmlのような他のファイルは完全にうまくいきます、そして少なくともそれらを回復するのはあなたの時間の価値があります。最終的には、ほとんどの場合、Javaコードを最初から書き直す必要があります。

Apktool ここ を見つけることができます。 apktoolと適切なヘルパー(Windows、Linux、またはMac OS用)をダウンロードするだけです。解凍するには7-Zipなどのツールを使用することをお勧めします。

19
Ryan Berger

これを行うにはいくつかの方法があります。

  1. Android Studio 3.0の「Profile or Debug APK」機能を使用してください。

    Android StudioでAPKを開いて探索することができます。クラスはsmalliに逆コンパイルされます。リソースは抽出されず、 "Go to Definition"、 "Find All References"、デバッグなどはソースコードなしでは機能しません(Android studio 3.0 canary 9)。 smalidea を使用すると、その他のSmalliの機能が機能する場合があります。

    Android-studio

    select-file

    code

  2. jadx を使用してください。

    Jadxは与えられたAPKのコードをJavaソースファイルに逆コンパイルします。

    jdax-img

  3. apktool を使用してください。

    Apktoolはリソースを抽出し、与えられたapkのためにsmalliにコードを逆コンパイルするコマンドラインツールです。 apktoolを使って再コンパイルすることもできます。これが実際の例です。

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...
    
12
0xcaff

簡単にソースを見ることができるでしょう:

Androidスタジオ2.3では、Build -> Analyze APK -> Select the apk that you want to decompile
そのソースコードが表示されます。

参考のためのリンク:
https://medium.com/google-developers/making-the-most-the-apk-analyzer-c066cb871ea2

7
SKK

.apk ファイルを逆コンパイルする他の方法を紹介します。

あなたは " prankul garg "から最初の2つのステップに従うことができます。だからあなたは別の機会があります:

ステップ3 ':

"JD-GUI" をダウンロードしてください。これは簡単に見つけることができます。 "jd-gui.exe"で .jar ファイルを開きます。 (ファイル>ファイルを開く> ' .jar fileを見つけました')。この手順の後、すべてのリソースを .Zip ファイルに保存できます。

そう、

1番目 - .apk ファイルの名前を .Zip に変更する必要があります。

2番目 - .dex fileをデコードする必要があります(必要な場合は .apk ファイルを dex2jar にデコードしてください、可能です)。

3番目 - .jar fileを JD-GUIでデコードする必要があります

6
Franklin Hirata

_ online _ toolの下に

http://www.javadecompilers.com/apk

1回のクリックですべてが実行されます。逆コンパイルされた .Javaファイル+リソース+ xml (1つの.zipファイルに含まれます)逆コンパイルできない」または一部のAndroidアセンブラ/マシンコード)

5

私は個人的にソースコードを入手するために Show Java Android App を推奨しています。 Playストアまたは here からダウンロードできます。

5
Codelover

このサイト https://www.apkdecompilers.com/ /自動的にしました。

私は最初に受け入れられた答えで言及されたサイトを試みました、しかしそれは私のために働きませんでした。

5
M. Usman Khan

Apktool リバースエンジニアリングのサードパーティ製、クローズド、バイナリのAndroidアプリ。

リソースをほぼオリジナルの形式にデコードし、変更を加えた後でそれらを再構築することができます。

それはステップごとにsmalliコードをデバッグすることを可能にします。また、プロジェクトのようなファイル構造とapkの構築などのいくつかの繰り返し作業の自動化により、アプリの操作が簡単になります.

http://ibotpeaches.github.io/Apktool/ /

4

あなたは DexPatcher を試すことができます。それはAndroid Studioとさえ統合します。内部で ApktoolDex2Jar を使用しています。
あなたはそれらのツールを独立して使うこともできます。 Apktool はapkを逆コンパイルし、.dexファイルを抽出します。これはDex2Jarを使用してさらにjarに変換できます。 Jarは JD-GUI を使用して逆コンパイルできます。あなたはそのツールの助けを借りてJavaコードを見ることができます。実際のコードと逆コンパイルされたコードの類似性は保証できませんが。市場で入手可能ないくつかの高度な コード難読化 ツールがあり、それらはコードをめちゃくちゃにして逆コンパイル/理解を困難にします。例えば。警備員

apktool は行き方です。オンラインapktoolサービスも存在します: http://www.javadecompilers.com/apktool

明らかに、「オンラインの性質」というサービスにはいくつかの制限があります。資産とマニフェストファイルを抽出して調査することはできますが、現時点ではアプリケーションを再コンパイルすることは不可能です。

それでも、これはAndroidアプリケーションを「開く」ための簡単な方法です。

3
Andrew Rukin

最も簡単な方法はApk OneClick Decompilerを使用することです。これはAPK(Androidパッケージ)を逆コンパイルおよび逆アセンブルするためのツールパッケージです。

_機能_

  • すべての機能はWindowsの右クリックメニューに統合されています。
  • APKクラスをJavaソースコードに逆コンパイルします。
  • APKをSmalliコードに分解し、そのリソースをデコードします。
  • 右クリックしてAPKを電話にインストールします。
  • Smalliコードやリソースを編集した後でAPKを再コンパイルしてください。再コンパイル中:
  • PNG画像を最適化する
  • Apksに署名する
  • Zipalign

_要件_

Java Runtime Environment(JRE)がインストールされている必要があります。

あなたはこのリンクからダウンロードすることができます Apk OneClick Decompiler

それを楽しんでください。

1
Masoud Mokhtari

Androidスタジオでは任意のapkファイルを分析することができます。

1 - ビルドメニューから、apkオプションを分析し、apkファイルを選択します。 2 - これにより、classes.dexファイルと他のファイルが作成されます。 3 - classes.dexをクリックすると、フォルダ、パッケージ、ライブラリ、ファイルのリストが表示されます。 4 - FromとAndroidのスタジオ設定は "Dex to Jar"と呼ばれるプラグインをインストールします。

これにより、Javaファイルの実際のコードが得られます。

乾杯。

1
Rohit Patil

そのためのアプリがあり、一般的に数回クリックするだけで、完了です。 https://github.com/Nuvolect/DeepDive-Android

  1. アプリを選択し、[インストール済みアプリ]の下でアプリを選択します。そうでない場合はAPKをロードできます。
  2. 「Extract APK」を選択してください
  3. 「APKを解凍する」を選択します
  4. 「Jadxでデコンパイル」を選択します。お使いのデバイスの速度に応じて、これには数秒または数分かかることがあります。

その後、ソースコードを閲覧したり、elFinderを使用して他のコンピュータにダウンロードしたり、Luceneを使用して検索したりできます。

Jadxに加えて、CFRとFernflowerの逆コンパイラもあります。

1
MobileMateo

私は最も簡単な方法として以下を見つけました:

  1. App.apkの名前をapp.Zipに変更します(拡張子をapkからZipに変更します)。
  2. Zipファイルをフォルダに抽出します。
  3. _ jadx _ toolを使用して、classes.dexファイルにあるソースコードを読みます。
0
Masood Anwar

あなたのAndroidにはapk:あなたの状態に基づいて、

条件1:硬化しない(Tencent Legu/Qihoo 360/...著)

選択1:オンラインサービスを利用する

といった:

www.javadecompilers.comを使って

後藤:

apkからJavaのソースコードに自動デコードする方法

ステップ:

upload apkファイル+クリックRun +しばらく待つ+ DownloadをクリックしてZip +解凍 - >

sources/com/{yourCompanyName}/{yourProjectName}

あなたの予想されるJavaソースコードです。

選択2:自分で逆コンパイル/クラックする

自分で逆コンパイル/クラックするために関連ツールを使用します。

jadx/jadx-guiを使用apkJava sourcecodeに変換

ダウンロード jadx-0.9.0.Zip それから解凍してbin/jadxを取得し、

  • コマンドラインモード:
    • ターミナル実行:jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
    • output_folderはデコードされたsourcesresourcesを表示します。
      • sources/com/{yourCompanyName}/{yourProjectName}はあなたの予想されるJava sourcecodeです
  • GUIモード
    • ダブルクリックしてjadx-0.9.0/bin/jadx-guiを実行します(Linuxのjadx-gui.sh/Windowsのjadx-gui.bat
    • apkファイルを開く
    • それは自動デコードします - >あなたの期待されるJavaソースコードを見ます
    • save allまたはsave as Gradle project

例えば:

条件2:強化する(Tencent Legu/Qihoo 360/...より)

3 stepsの主なメソッド:

  1. apk/app to dex
  2. dex to jar
  3. jar to Java src

詳細な説明:

ステップ1:apk/app to dex

実行中のアプリからツール(FDex2/DumpDex)ダンプ/フックアウト(1つまたは複数)dexファイルを使用

ステップ:

環境を整える

実行中のアプリからdexをダンプする

  • FDex2を実行して、後でdexをキャプチャ/フックアウトできるようにするためにあなたのapk名をクリックしてください

  • (電話/エミュレータで)あなたのアプリを実行します
  • /data/data/com/yourCompanyName/yourProjectName にあるすべてのapkリソースを見つけ出してダンプします。
    • そのルートフォルダに 通常 はいくつかのdexファイルを見つけるでしょう

ステップ2:dex to jar

dexファイルをjarファイルに変換する(特定の、アプリロジックを含む)tool(dex2jar)ファイルを使用する

ダウンロード dex2jar got dex-tools-2.1-SNAPSHOT.Zip 、unzipがdex-tools-2.1-SNAPSHOT/d2j-dex2jar.shを取得し、

sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex

例えば:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

ステップ3:jar to Java src

ツールの一つを使う:

jarJava srcに変換

jarからJavaへのsrc変換効果

Jadx> Procyon> CRF >> JD-GUI

Jadx/jadx-guiの使用をお勧めします

ステップ:

  • ダブルクリックしてjadx-guiを実行
  • dexファイルを開く
  • File - > save all

例えば:

エクスポートされたJavaソース:


より詳しい説明は私のオンライン電子ブック Chinese tutorialを見ることができます。

0
crifan