1400

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

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

4

31 に答える 31

1697

簡単な方法: オンライン ツールhttps://www.decompiler.com/を使用し、apk をアップロードしてソース コードを取得します。


.apk ファイルのデコード手順、段階的な方法:

ステップ1:

  1. 新しいフォルダーを作成し、デコードする .apk ファイルをコピーします。

  2. ここで、この .apk ファイルの拡張子を .zip に変更し (たとえば、filename.apk から filename.zip に名前を変更)、保存します。これで、classes.dex ファイルなどにアクセスできます。この段階では、drawables は表示できますが、xml および java ファイルは表示できないので、続行します。

ステップ2:

  1. この .zip ファイルを同じフォルダー (または新しいフォルダー) に抽出します。

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

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

  4. コマンド プロンプトを開き、ディレクトリをそのフォルダー (または NEW FOLDER) に変更します。次に、d2j-dex2jar classes.dex(Mac ターミナルまたは ubuntu write の場合./d2j-dex2jar.sh classes.dex)書き込み、Enter キーを押します。これで、同じフォルダーに classes.dex.dex2jar ファイルができました。

  5. java decompilerをダウンロードし、jd-gui をダブルクリックし、ファイルを開くをクリックして、そのフォルダーから classes.dex.dex2jar ファイルを開きます。これで、クラス ファイルが取得されます。

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

ステップ 3:

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

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

  2. 最新バージョンのapktoolapktool インストール ウィンドウをダウンロードし (どちらも同じリンクからダウンロードできます)、同じフォルダーに配置します。

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

  4. 次のようなコマンドを実行apktool if framework-res.apkします(持っていない場合はここで入手してください)そして次へ

  5. apktool d myApp.apk ( myApp.apk は、デコードするファイル名を示します)

これで、そのフォルダーにファイル フォルダーが作成され、apk の xml ファイルを簡単に読み取ることができます。

ステップ 4:

任意の手順ではなく、両方のフォルダー (この場合は両方の新しいフォルダー) の内容を 1 つのフォルダーにコピーするだけです。

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

于 2011-05-21T11:20:04.800 に答える
140

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

  1. ダウンロードapktool.bat(またはapktoolLinux の場合) およびhttp://ibotpeaches.github.io/Apktool/install/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.dexしますdex2jar.bat(または<path_to>\dex2jar.bat classes.dexDOS ボックスに入力します。Linux の場合dex2jar.sh) 。

    中間結果:classes_dex2jar.jar

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

    結果:ソースコード

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

于 2013-03-13T20:09:10.843 に答える
120

ファイルを逆コンパイルできるかもしれませんがAPK、1 つの大きな問題にぶつかる可能性があります。

あなたが書いたコードを返すつもりはありません。代わりに、ランダムな名前が付けられた変数とランダムな名前が付けられた関数を使用して、コンパイラがインライン化したものを返します。逆コンパイルして元のコードに復元しようとすると、最初からやり直すよりもはるかに多くの時間がかかる可能性があります。

悲しいことに、このようなことで多くのプロジェクトが中止されました。将来のために、 CVSSVNgitなど
のバージョン管理システムを学ぶことを強くお勧めします.

そしてバックアップ方法。

于 2010-08-29T03:58:12.263 に答える
30

apktoolは、試すことができる最高のものです。いくつかのxmlを保存しましたが、正直なところ、.javaコードでどのように機能するかわかりません。

あなたが唯一のコーダーであっても、コードリポジトリを用意することをお勧めします。私は自分のプロジェクトにProject Lockerを使用しています。無料の svn と git リポジトリを提供します。

于 2010-08-29T12:17:54.973 に答える
26

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

基本的にあなた:

  1. apktoolapk からリソース ファイルを取得するために使用します。
  2. dex2jarEclipse が好む形式のクラスを含む jar ファイルを取得するために使用します。
  3. リソース ファイルと新しい jar ファイルを指す Eclipse プロジェクトを作成します。
  4. zip ユーティリティで jar ファイルを開き、既存のリソースを削除します。
  5. JDGuiソースコードを表示するには、jar ファイルを開きます
  6. から必要なソース コードを取得しJDGui、Eclipse 内のクラスに貼り付けて変更します。
  7. jar ファイルからそのクラスを削除します (同じクラスが複数回定義されないようにします)。
  8. それを実行します。
于 2012-12-06T01:38:54.927 に答える
23

apktool が動作します。ソース コードを抽出するためにキーストアを知る必要さえありません (これは少し怖いことです)。主な欠点は、ソースが Java ではなく Smali 形式で表示されることです。ただし、アイコンや main.xml などの他のファイルは完全に正常に処理されるため、少なくともそれらを回復するために時間をかける価値があるかもしれません。最終的には、Java コードをゼロから書き直す必要が生じる可能性が高くなります。

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

于 2010-08-29T04:02:46.953 に答える
7

以下のオンラインツール:

http://www.javadecompilers.com/apk

ワンクリックですべてを実行します:非常に優れた逆コンパイラを使用して、逆コンパイルされた.javaファイル+リソース+ xml(1つの.zipファイル内)(jadxは、他のコンパイルが「逆コンパイルできません」などの関数内のコメントを返す場所/関数でJavaコードを返します。 Android アセンブラー/マシンコード)

于 2017-06-10T14:36:39.130 に答える
6

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

「 prankul garg 」から最初の 2 つの手順を実行できます。したがって、別の機会があります。

ステップ 3':

「JD-GUI」をダウンロードしてください。これは簡単に見つかります。「jd-gui.exe」で.jarファイルを開きます。([ファイル] > [ファイルを開く] > [ .jarファイルが見つかりました])。この手順の後、すべてのリソースを.zipファイルに保存できます。

そう、

1st - .apkファイルの名前を.zipに変更する必要があります

2番目 - .dexファイルをデコードする必要があります (必要に応じて、.apkファイルをdex2jarにデコードします。可能です)

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

于 2013-02-25T12:22:01.730 に答える
5

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

リソースをほぼ元の形式にデコードし、いくつかの変更を加えた後に再構築できます。

smali コードを段階的にデバッグすることが可能になります。また、プロジェクトのようなファイル構造と、apk のビルドなどの反復タスクの自動化により、アプリでの作業が容易になります。

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

于 2016-05-15T08:21:25.713 に答える
5

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

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

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

于 2017-07-11T05:51:03.133 に答える
1

1. ネイティブ Android アプリケーションからソースを抽出する

ネイティブ Android アプリケーションのソース コードを入手するのは難しくありませんが、Windows、Mac、および Linux と互換性のある追加のツールが必要です。ツールに関しては、私の個人的なお気に入りはdex2jarJD-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 用のモジュールがあります。

于 2020-09-10T21:06:23.857 に答える
1

私は、iPhone/iPad/Mac で実行され、Java/Android ファイルを分析するためのツール - コード アナライザーを開発しました ( https://decompile.io )。

ここに画像の説明を入力

ここに画像の説明を入力

于 2020-05-11T02:05:14.613 に答える
1

There's an app for that and generally takes just a few clicks and you are done. https://github.com/Nuvolect/DeepDive-Android

  1. Select Apps, under "Installed Apps" select your app. If it is not there you can load the APK.
  2. Select "Extract APK"
  3. Select "Unpack APK"
  4. Select "Decompile with Jadx". This can take a few seconds or a few minutes depending on the speed of your device

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.

于 2019-02-26T21:46:50.313 に答える