ラップトップのハード ドライブがクラッシュし、過去 2 か月間取り組んできたアプリのソース コードをすべて失いました。私が持っているのは、友人に送信したときにメールに保存されている APK ファイルだけです。
この APK ファイルからソース コードを抽出する方法はありますか?
ラップトップのハード ドライブがクラッシュし、過去 2 か月間取り組んできたアプリのソース コードをすべて失いました。私が持っているのは、友人に送信したときにメールに保存されている APK ファイルだけです。
この APK ファイルからソース コードを抽出する方法はありますか?
簡単な方法: オンライン ツールhttps://www.decompiler.com/を使用し、apk をアップロードしてソース コードを取得します。
.apk ファイルのデコード手順、段階的な方法:
新しいフォルダーを作成し、デコードする .apk ファイルをコピーします。
ここで、この .apk ファイルの拡張子を .zip に変更し (たとえば、filename.apk から filename.zip に名前を変更)、保存します。これで、classes.dex ファイルなどにアクセスできます。この段階では、drawables は表示できますが、xml および java ファイルは表示できないので、続行します。
この .zip ファイルを同じフォルダー (または新しいフォルダー) に抽出します。
dex2jarをダウンロードし、同じフォルダー (または NEW FOLDER) に展開します。
classes.dex ファイルを dex2jar フォルダーに移動します。
コマンド プロンプトを開き、ディレクトリをそのフォルダー (または NEW FOLDER) に変更します。次に、d2j-dex2jar classes.dex
(Mac ターミナルまたは ubuntu write の場合./d2j-dex2jar.sh classes.dex
)書き込み、Enter キーを押します。これで、同じフォルダーに classes.dex.dex2jar ファイルができました。
java decompilerをダウンロードし、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 つのフォルダーにコピーするだけです。
ソースコードを楽しんでください...
これは代替の説明です - 誰かが上記の説明で行き詰まった場合に備えて. 手順に従ってください:
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
からダウンロードして抽出しますclasses.dex
しますdex2jar.bat
(または<path_to>\dex2jar.bat classes.dex
DOS ボックスに入力します。Linux の場合dex2jar.sh
) 。
中間結果:classes_dex2jar.jar
classes_dex2jar.jar
(使用する逆コンパイラによってはオプションの場合があります)結果:ソースコード
注: サードパーティのパッケージを逆コンパイルすることは許可されていません。このガイドは、APK ファイルからのみ個人のソース コードを復元することを目的としています。最後に、結果のコードはおそらく難読化されます
ファイルを逆コンパイルできるかもしれませんがAPK
、1 つの大きな問題にぶつかる可能性があります。
あなたが書いたコードを返すつもりはありません。代わりに、ランダムな名前が付けられた変数とランダムな名前が付けられた関数を使用して、コンパイラがインライン化したものを返します。逆コンパイルして元のコードに復元しようとすると、最初からやり直すよりもはるかに多くの時間がかかる可能性があります。
悲しいことに、このようなことで多くのプロジェクトが中止されました。将来のために、 CVS、SVN、gitなど
のバージョン管理システムを学ぶことを強くお勧めします.
そしてバックアップ方法。
apktoolは、試すことができる最高のものです。いくつかのxmlを保存しましたが、正直なところ、.javaコードでどのように機能するかわかりません。
あなたが唯一のコーダーであっても、コードリポジトリを用意することをお勧めします。私は自分のプロジェクトにProject Lockerを使用しています。無料の svn と git リポジトリを提供します。
apktool
この 2 つの記事では、ファイルの使用とファイル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 などのツールを使用して解凍することをお勧めします。
以下のオンラインツール:
http://www.javadecompilers.com/apk
ワンクリックですべてを実行します:非常に優れた逆コンパイラを使用して、逆コンパイルされた.javaファイル+リソース+ xml(1つの.zipファイル内)(jadxは、他のコンパイルが「逆コンパイルできません」などの関数内のコメントを返す場所/関数でJavaコードを返します。 Android アセンブラー/マシンコード)
.apkファイルを逆コンパイルする別の方法を紹介します。
「 prankul garg 」から最初の 2 つの手順を実行できます。したがって、別の機会があります。
ステップ 3':
「JD-GUI」をダウンロードしてください。これは簡単に見つかります。「jd-gui.exe」で.jarファイルを開きます。([ファイル] > [ファイルを開く] > [ .jarファイルが見つかりました])。この手順の後、すべてのリソースを.zipファイルに保存できます。
そう、
1st - .apkファイルの名前を.zipに変更する必要があります
2番目 - .dexファイルをデコードする必要があります (必要に応じて、.apkファイルをdex2jarにデコードします。可能です)
3番目 - JD-GUIで.jarファイルをデコードする必要があります
サード パーティ製のクローズド バイナリ Android アプリをリバース エンジニアリングするためのApktool 。
リソースをほぼ元の形式にデコードし、いくつかの変更を加えた後に再構築できます。
smali コードを段階的にデバッグすることが可能になります。また、プロジェクトのようなファイル構造と、apk のビルドなどの反復タスクの自動化により、アプリでの作業が容易になります。
apktoolは最適な方法です。オンライン apktool サービスも存在します: http://www.javadecompilers.com/apktool
サービスの「オンラインの性質」により、明らかにいくつかの制限が存在します。アセットとマニフェスト ファイルを抽出して調査することはできますが、現時点ではアプリケーションを再コンパイルすることはできません。
それでも、これは Android アプリケーションを「開く」簡単な方法です。
1. ネイティブ Android アプリケーションからソースを抽出する
ネイティブ Android アプリケーションのソース コードを入手するのは難しくありませんが、Windows、Mac、および Linux と互換性のある追加のツールが必要です。ツールに関しては、私の個人的なお気に入りはdex2jarとJD-GUIです。
これらのツールに慣れていない場合、dex2jar は Dalvik 実行可能ファイルを読み取り、それらを標準の JAR 形式に変換します。JD-GUI は JAR ファイルを読み取り、その中にあるクラス ファイルを逆コンパイルします。
抽出プロセスを理解しやすくするために、新しいネイティブ Android プロジェクトを作成することから始めましょう。
android create project --target 19 --name TestProject --path . --activity TestProjectActivity --package com.nraboy.testproject
上記のコマンドにより、現在のコマンド プロンプト パスに Android プロジェクトが残ります。
私たちのプロジェクトにはすでに Activity クラスが含まれているので、ビルド プロセスに直接飛び込みましょう。Gradle や Maven の代わりに Ant を使用することについては、1 日中苦労するかもしれませんが、このチュートリアルでは Ant を使い続けるつもりです。
ant debug
上記のコマンドは、通常bin/TestProject-debug.apkにあるデバッグ ビルドを作成します。
お気に入りの解凍ツールを使用して、APK ファイルを抽出します。7-zip は一般的なツールですが、Mac を使用している場合は、ターミナルから次のコマンドを実行するだけです。
unzip TestProject-debug.apk
これにより、多数のファイルとフォルダーが残りますが、そのうちの 1 つが重要です。すべてのソース コードが含まれているので、classes.dex を書き留めます。それを読み取り可能なものに変換するには、dex2jar を実行する必要があります。dex2jar は Mac、Linux、Windows で使用できますが、Mac の観点から説明します。
解凍したdex2jarディレクトリにあるclasses.dexファイルを使用して、ターミナルから次のコマンドを実行します。
./dex2jar.sh classes.dex
JAR およびパッケージ化されたクラス ファイルをデコードするため、ダウンロードした JD-GUI アプリケーションを開きます。新しく作成されたclasses_dex2jar.jarファイルを開くと、次のような内容が表示されます。
ネイティブの Android APK のソース コードにたどり着くのがいかに簡単であったかをご覧ください。では、自分の身を守るために何ができるでしょうか。
Android SDKには、難読化モジュールであるProguardが付属しています。あなたが尋ねる難読化とは何ですか?
ウィキペディアによる難読化:
難読化 (またはクラウド化) は、コミュニケーションにおける意図された意味を隠し、コミュニケーションを混乱させ、故意に曖昧にし、解釈を困難にすることです。
難読化によってソース コードが暗号化されることはありませんが、意味を理解することがより困難になります。Proguard が構成されている状態で Ant をリリース モードで実行すると、ビルド時にコードが難読化されるはずです。
2. ハイブリッド Android アプリケーションからソースを抽出する
ハイブリッド アプリケーションのソース コードは、最も簡単に抽出できます。コンピューターに追加のソフトウェアをインストールする必要はなく、APK ファイルにアクセスするだけです。
わかりやすくするために、最初に新しい Apache Cordova プロジェクトを作成し、それを抽出します。次の手順を実行して開始します。
cordova create TestProject com.example.testproject TestProject
cd TestProject
cordova platform add android
プロジェクトの作成プロセス中、デフォルトの Apache Cordova CSS、HTML、および JavaScript テンプレートが残ります。この例では、それで問題ありません。先に進み、プロジェクトを配布された APK ファイルにビルドしましょう。
cordova build android
platform/android/ant-build/CordovaApp- debug.apkか、platforms/android/ant-build/*-debug.apk に沿ったものが残ることになります。
これはデバッグ ビルドですが、それでも非常に使用可能です。7-zipまたは類似のものがインストールされている状態で、APK ファイルを右クリックし、抽出または解凍を選択します。抽出されたディレクトリで、すべての Web ベースのソース ファイルにアクセスできるようになります。Apache Cordova で使用されるすべての Java ファイルがクラス ファイルにコンパイルされるため、Web ベースと言います。ただし、CSS、HTML、および JavaScript ファイルは変更されません。
ハイブリッド アプリケーションのソース コードを取得するのがいかに簡単かを確認しました。では、自分をよりよく保護するにはどうすればよいでしょうか。
難読化の一形態であるコードを醜くすることができます。
これを行ってもコードは暗号化されませんが、意味を理解するのがはるかに難しくなります.
コードを醜くしたい場合は、現在ほとんど標準になっているUglifyJSをインストールすることをお勧めします。タスク ランナーを使用したい場合は、Grunt と Gulp にも UglifyJS 用のモジュールがあります。
There's an app for that and generally takes just a few clicks and you are done. https://github.com/Nuvolect/DeepDive-Android
After that you can browse the source code, download it to another computer with elFinder or search through it using Lucene.
In addition to Jadx it has CFR and Fernflower decompilers.