ラップトップのハードドライブがクラッシュし、過去2か月間取り組んでいたアプリのすべてのソースコードが失われました。私が持っているのは、友人に送信したときから私のメールに保存されているAPKファイルだけです。
このAPKファイルからソースコードを抽出する方法はありますか?
javac -decompile
である可能性があり、SOガイドラインに適合します。回答はトピックではなく、質問ではないように見えます。
ラップトップのハードドライブがクラッシュし、過去2か月間取り組んでいたアプリのすべてのソースコードが失われました。私が持っているのは、友人に送信したときから私のメールに保存されているAPKファイルだけです。
このAPKファイルからソースコードを抽出する方法はありますか?
javac -decompile
である可能性があり、SOガイドラインに適合します。回答はトピックではなく、質問ではないように見えます。
回答:
簡単な方法:オンラインツールhttp://www.javadecompilers.com/apkを使用し、apkをアップロードしてソースコードを取得します。
.apkファイルをデコードする手順、段階的な方法:
新しいフォルダを作成し、デコードする.apkファイルをコピーします。
次に、この.apkファイルの拡張子の名前を.zipに変更し(たとえば、filename.apkからfilename.zipに名前を変更)、それを保存します。これで、classes.dexファイルなどにアクセスできるようになります。この段階では、ドローアブルは表示されますが、xmlおよびjavaファイルは表示されません。続行してください。
次に、この.zipファイルを同じフォルダ(またはNEW FOLDER)に抽出します。
dex2jarをダウンロードをして、同じフォルダー(またはNEW FOLDER)に抽出します。
classes.dexファイルをdex2jarフォルダーに移動します。
次に、コマンドプロンプトを開き、ディレクトリをそのフォルダー(またはNEW FOLDER)に変更します。次に書き込みますd2j-dex2jar classes.dex
(Mac端末またはUbuntu書き込みの場合./d2j-dex2jar.sh classes.dex
)、Enterを押します。これで、同じフォルダーにclasses.dex.dex2jarファイルが作成されました。
Java逆コンパイラをダウンロード、jd-guiをダブルクリックし、開いているファイルをクリックして、そのフォルダーからclasses.dex.dex2jarファイルを開きます。これでクラスファイルが取得されます。
これらのクラスファイルをすべてsrc名で保存します(jd-guiでは、[ファイル]-> [すべてのソースを保存]をクリックします)。この段階でJavaソースを取得しますが、.xmlファイルはまだ読み取れません。続行してください。
別の新しいフォルダを開きます
デコードしたい.apkファイルを入れてください
apktool および apktoolインストールウィンドウの最新バージョンをダウンロード(どちらも同じリンクからダウンロードできます)、同じフォルダーに配置します。
コマンドウィンドウを開く
次のようなコマンドを実行しapktool if framework-res.apk
ます(それがない場合は、ここで取得します)。
apktool d myApp.apk
(myApp.apkは、デコードするファイル名を示します)
これで、そのフォルダーにファイルフォルダーが作成され、apkのxmlファイルを簡単に読み取ることができます。
手順はありません。両方のフォルダ(この場合は両方の新しいフォルダ)の内容を1つのフォルダにコピーするだけです
そして、ソースコードをお楽しみください...
framework-res.apk
。ここ
これは代替の説明です-誰かが上記の説明に行き詰まった場合に備えて。手順に従ってください:
apktool.bat
(またはapktool
Linuxの場合)およびhttp://ibotpeaches.github.io/Apktool/install/apktool_<version>.jar
から apktool.jar
両方のファイルを同じフォルダーに配置しますcmd.exe
)をそのフォルダーに移動します。Java環境がインストールされていることを確認します(Linuxの場合は、必要なライブラリーに関する注記も確認してください)apktool decode [apk file]
中間結果:リソースファイル、AndroidManifest.xml
中間結果:classes.dex
dex2jar-0.0.9.15.zip
からダウンロードして抽出http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=ますclasses.dex
の上にdex2jar.bat
(またはEnter <path_to>\dex2jar.bat classes.dex
DOSボックスで、Linuxの使用のためにdex2jar.sh
)
中間結果:classes_dex2jar.jar
classes_dex2jar.jar
(使用する逆コンパイラによってはオプションの場合があります)結果:ソースコード
注:サードパーティのパッケージを逆コンパイルすることはできません。このガイドは、APKファイルからのみ個人のソースコードを復元することを目的としています。最後に、結果のコードはおそらく難読化されます
apktool
返すのsmali
ですか?java
ファイルを取得するには?
あなたはあなたを逆コンパイルすることができるかもしれませんが APK
ファイル、1つの大きな問題が発生する可能性があります。
記述したコードは返されません。代わりに、ランダムな名前が付けられた変数とランダムな名前が付けられた関数を使用して、コンパイラーがインライン化したものを返します。逆コンパイルして元のコードに復元しようとすると、最初からやり直すよりもかなり時間がかかる可能性があります。
悲しいことに、このようなことが多くのプロジェクトを殺しました。
今後は、CVS、SVN、gitなどのバージョン管理システムについて学ぶことを強くお勧めします。
それをバックアップする方法。
Playストアには、apkを逆コンパイルして(システムアプリケーションも)、スマートフォンでソースコードを表示できる新しいアプリケーションもあります。ファイルをSDカードに保存するので、コンピューターで表示することもできます。ルートなどは必要ありません。
インストールして楽しんでください。これがアプリを逆コンパイルする最も簡単な方法だと思います。
apktoolは、試すことができる最高のものです。いくつかのxmlを保存しましたが、正直なところ、それが.javaコードでどのように機能するかわかりません。
あなたが唯一のコーダーであっても、コードリポジトリを用意することをお勧めします。私は自分のプロジェクトでProject Lockerを使用しています。無料のsvnとgitリポジトリを提供します。
これら二つの記事は、の使用を結合する方法を説明apktool
してdex2jar
取るようにAPK
ファイルをし、それを構築し、実行することができますEclipseプロジェクトを作成します。
http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html
http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html
基本的にあなた:
apktool
APKからリソースファイルを取得するためにしますdex2jar
Eclipseが好む形式のクラスを含むjarファイルを取得するために使用します。JDGui
ソースコードを表示するには、jarファイルを開きますJDGui
、Eclipse内のクラスに貼り付けて変更します。apktoolは動作します。ソースコードを抽出するためにキーストアを知る必要さえありません(これは少し怖いです)。主な欠点は、ソースがJavaではなくSmali形式で表示されることです。ただし、アイコンやmain.xmlなどの他のファイルは問題なく通過するため、少なくともそれらを復元する価値はあります。最終的には、ほとんどの場合、Javaコードを最初から書き直す必要があります。
ここで apktoolを見つけることができます。apktoolと適切なヘルパー(Windows、Linux、またはMac OS用)をダウンロードするだけです。7-zipなどのツールを使用して解凍することをお勧めします。
これにはいくつかの方法があります。
Android Studio 3.0の「プロファイルまたはデバッグAPK」機能を使用します。
Android StudioでAPKを開いて探索できます。クラスはsmaliに逆コンパイルされます。リソースは抽出されず、「Go to Definition」、「Find All References」、およびデバッグなどは、ソースコードなしでは機能しません(android studio 3.0 canary 9)。一部のsmali機能は、smalideaで機能する場合があります。
Jadxは、指定されたAPKのコードをJavaソースファイルに逆コンパイルします。
Apktoolは、リソースを抽出し、指定されたapkのコードをsmaliに逆コンパイルするコマンドラインツールです。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...
ソースを見るのは簡単かもしれません:
2.3 Androidのスタジオで、Build -> Analyze APK -> Select the apk that you want to decompile
。
ソースコードが表示されます。
参照用リンク:https :
//medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2
.apkを逆コンパイルする別の方法を紹介しますファイルます。
「prankul garg」の最初の2つのステップを実行できます。したがって、別の機会があります。
ステップ3 ':
これを見つけるのは簡単な「JD-GUI」をダウンロードしてください。「jd-gui.exe」で.jarファイルを開きます。([ファイル]> [ファイルを開く]> [ .jarファイルが見つかりました])。この手順の後、すべてのリソースを.zipファイルに保存できます。
そう、
1- .apkファイルの名前を変更する必要があります .zip
2 番目-.dexファイルをデコードする必要があります(必要に応じて、.apkファイルをdex2jarにデコードします)は可能です)
3番目-JD-GUIで.jarファイルをデコードする必要があります
ONLINEツールの下:
http://www.javadecompilers.com/apk
ワンクリックですべてを実行:非常に優れた逆コンパイラ(jadxは、「逆コンパイルできない」などの関数内のコメントを返す場所/関数にjavaコードを返す)で、逆コンパイルされた.javaファイル+リソース+ xml(1つの.zipファイル) androidアセンブラー/マシンコード)
このサイトhttps://www.apkdecompilers.com/が自動的に行いました。
受け入れられた回答に記載されているサイトを最初に試しましたが、それは私にとってはうまくいきませんでした。
サードパーティのクローズドバイナリAndroidアプリをリバースエンジニアリングするためのApktool。
リソースをほぼ元の形式にデコードし、いくつかの変更を加えた後、それらを再構築できます。
smaliコードを段階的にデバッグすることができます。また、プロジェクトのようなファイル構造と、apkのビルドなどの反復的なタスクの自動化により、アプリの操作が簡単になります。
apktoolは行くべき道です。オンラインapktoolサービスも存在します:http ://www.javadecompilers.com/apktool
明らかに、サービス「オンラインの性質」に起因していくつかの制限が存在します。アセットとマニフェストファイルを抽出して調査することはできますが、現時点ではアプリケーションを再コンパイルすることは不可能です。
それでも、これはAndroidアプリケーションを「開く」ための簡単な方法です。
DexPatcherを試すことができます。Android Studioとも統合できます。ApktoolとDex2Jarを内部で使用します。
これらのツールを個別に使用することもできます。
Apktoolは apkを逆コンパイルし、Dex2Jarを使用してjarにさらに変換できる.dexファイルを抽出します。jarはJD-GUIを使用して逆コンパイルできます。あなたはそのツールの助けを借りてJavaコードを見ることができます。逆コンパイルされたコードと実際のコードの類似性は保証できませんが。市場には、高度なコード難読化ツールがいくつかあり、コードをめちゃくちゃにして、逆コンパイル/理解を困難にします。例えば。プロガード
あなたのAndroid APKの場合、あなたの状態に基づいて:
といった:
goto:
apkからjavaソースコードに自動デコードする
手順:
upload
apkファイル+クリックRun
+しばらく待つ+クリックDownload
してzipを取得+解凍->
sources/com/{yourCompanyName}/{yourProjectName}
予想されるJavaソースコード
関連ツールを使用して、自分で逆コンパイル/分解します。
jadx
/ jadx-gui
変換apk
しますjava sourcecode
jadx-0.9.0.zipをダウンロードし、次に展開してgot bin/jadx
、次に:
jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
sources
と、resources
sources/com/{yourCompanyName}/{yourProjectName}
あなたの期待です java sourcecode
jadx-0.9.0/bin/jadx-gui
(Linux jadx-gui.sh
/ Windows jadx-gui.bat
)apk
ファイルを開くsave all
または save as Gradle project
例えば:
主な方法3 steps
:
apk/app to dex
dex to jar
jar to java src
詳細な説明:
apk/app to dex
実行中のアプリからツール(FDex2
/ DumpDex)ダンプ/フックアウト(1つまたは複数)dex
ファイルを使用する
手順:
root
エドアンドロイド
FDex2
/ DumpDexをインストールして有効にします
dex
実行中のアプリからダンプする実行しFDex2
、apk名をクリックして、後でdexをキャプチャ/フックできるようにします
/data/data/com/yourCompanyName/yourProjectName
dex
ファイルが見つかりますdex to jar
ツール(dex2jar
)を使用して(特定の、アプリロジックを含む)dex
ファイルをjar
ファイルに変換する
ダウンロードdex2jarは得dex-tools-2.1-SNAPSHOT.zipを解凍GOT、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
jar to java src
次のいずれかのツールを使用します。
変換jar
へjava src
jarからjava srcへの変換効果:
Jadx
> Procyon
> CRF
>>JD-GUI
使用をお勧めします:Jadx
/jadx-gui
手順:
jadx-gui
dex
ファイルを開くFile
-> save all
例えば:
エクスポートされたjava src:
より詳細な説明は私のオンライン電子ブック中国語チュートリアルを見ることができます:
Androidスタジオでは、任意のapkファイルを分析できます。
1-ビルドメニューから、analyze apkオプションを選択し、apkファイルを選択します。2-これにより、classes.dexファイルとその他のファイルが生成されます。3-classes.dexをクリックすると、フォルダー、パッケージ、ライブラリ、ファイルのリストが表示されます。4-Android Studioの設定から、「Dex to Jar」というプラグインをインストールします。5-抽出したプロジェクトのアクティビティファイルをクリックし、ビルドメニューからdex to jarを選択します。
これにより、Javaファイルの実際のコードが生成されます。
乾杯。
最も簡単な方法は、Apk OneClick Decompilerを使用することです。これは、APK(Androidパッケージ)を逆コンパイルおよび逆アセンブルするためのツールパッケージです。
特徴
要件
Javaランタイム環境(JRE)がインストールされている必要があります。
このリンクからダウンロードできますApk OneClick Decompiler
それをお楽しみください。
そのためのアプリがあり、通常は数回クリックするだけで完了です。 https://github.com/Nuvolect/DeepDive-Android
その後、ソースコードを参照し、elFinderを使用して別のコンピューターにダウンロードするか、Luceneを使用してソースコードを検索します。
Jadxに加えて、CFRおよびFernflowerデコンパイラーがあります。
dex2jarをfedora 31ラップトップでapkに対して機能させるために、何も機能しなくなったapkに対して、私は何日も頭を悩ませてきました。このpython 3スクリプトはトリックを数分で実行し、jd-guiをインストールするとクラスファイルが人間が読めるようになりました。
http://java-decompiler.github.io/
https://github.com/Storyyeller/enjarify
具体的には、ここに私が実行したものがあります:
# i installed apktool before the rest of the stuff, may not need it but here it is
$> cd /opt
$> sudo mkdir apktool
$> cd apktool/
$> sudo wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
$> sudo wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
$> sudo mv apktool_2.4.1.jar apktool.jar
$> sudo mv apktool* /usr/bin/
$> sudo chmod a+x /usr/bin/apktool*
# and enjarify
$> cd /opt
$> sudo git clone https://github.com/Storyyeller/enjarify.git
$> cd enjarify/
$> sudo ln -s /opt/enjarify/enjarify.sh /usr/bin/enjarify
# and finally jd-gui
$> cd /opt
$> sudo git clone https://github.com/java-decompiler/jd-gui.git
$> cd jd-gui/
$> sudo ./gradlew build
# I made an alias to kick of the jd-gui with short commandline rather than long java -jar blahblahblah :)
$> echo "jd-gui='java -jar /opt/jd-gui/build/launch4j/lib/jd-gui-1.6.6.jar'" >> ~/.bashrc
これで、クラスファイルを取得するために次のように動作するはずです。
$> enjarify yourapkfile.apk
そして、jd-guiを開始するには:
$> jd-gui
次に、クラスファイルを開きます。
このツールを使用する http://www.javadecompilers.com/
しかし最近、デコンパイラーの新しい波が市場に参入しました: プロキオン、CFR、JD、ファーンフラワー、クラカタウ、キャンドル。
このサイトにある逆コンパイラのリストは次のとおりです。
CFR-無料、利用可能なソースコードなし、http ://www.benf.org/other/cfr/著者:Lee Benfield
非常によく更新された逆コンパイラ!CFRは、Java 9モジュール、Java 8ラムダ、Java 7文字列スイッチなど、最新のJava機能を逆コンパイルできます。クラスファイルを他のJVM言語からJavaに戻すこともできます。
JD-非営利目的でのみ無料、http ://jd.benow.ca/著者:Emmanuel Dupuy
2015年に更新されました。独自のビジュアルインターフェイスとEclipseおよびIntelliJへのプラグインがあります。C ++で書かれているため、非常に高速です。Java 5をサポートします。
Procyon-オープンソース、https ://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler作成者:Mike Strobel
Fernflower-オープンソース、https://github.com/fesh0r/fernflower :作者:Egor Ushakov
2015年に更新されました。非常に有望な分析JavaデコンパイラーがIntelliJ 14の不可欠な部分になりました。(https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler)バージョン6までのJavaをサポート(注釈、ジェネリックス、列挙型)
JAD-歴史的な理由でのみここに記載されています。無料、ソースコードなし、jadダウンロードミラー作者:Pavel Kouznetsov