82

既存の APK を変更し、ソースを変更してから再コンパイルする必要があります。

  • dex2jarまたはapktoolを使用して逆コンパイルできます。うまく機能しています
  • jar ファイルから Java ソースを取得できます (jd-gui を使用)
  • 次に、Javaファイルを変更できます

しかし今、Javaファイルを再コンパイルしてjarファイルに戻す方法を知りたいです! (jar部分は簡単なはずです。主な問題は、Android用のJavaファイルを再コンパイルする方法のようです)

apktool を使用してから smali ファイルを変更するという別の解決策があることは知っていますが、多くのコードを追加する場合は非常に複雑に思えます。

私のアプリケーションは基本的な HelloWorld Whitout 難読化です。

4

8 に答える 8

53

Chris Jester-Young のおかげでうまくいきました!

私がやった方法は、本当に単純なプロジェクトでしか機能しないと思います。

  • Dex2jar を使用して Jar を取得しました。
  • jd-gui を使用して、Jar を Java ファイルに変換します。
  • apktool を使用して、Android マニフェストとリソース ファイルを取得しました。

  • Eclipse で、古いプロジェクトと同じ設定で新しいプロジェクトを作成します (マニフェスト ファイル内のすべての情報を確認します)。

  • プロジェクトが作成されたら、すべてのリソースとマニフェストを apktool で取得したものに置き換えます
  • Jarから抽出したJavaファイルをsrcフォルダーに貼り付けます(パッケージを尊重します)
  • これらのファイルを必要なもので変更します
  • すべてがコンパイルされています!

/!\ デバイスから古い apk を削除したことを確認してください。apk の署名が古いものと同じではないというエラーがスローされます。

于 2012-09-11T13:35:27.847 に答える
15

答えはすでに時代遅れであるか、完全ではありません。これは、保護されていない apk (Proguard なし) で機能する可能性がありますが、現在、保護されていない apk をデプロイする人はいません。(私の)十分に保護されたapk(Proguard、「ハッキングツール」をチェックするセキュリティチェック、アプリがデバッグモードで再パッケージ化されているかどうかをチェックするセキュリティチェックなど)を変更する方法は、apktoolを介してここで他の人によってすでに言及されています。しかし、アプリに再度署名する必要があるとは誰も説明しませんでした。

apktool d app.apk
//generates a folder with smali bytecode files. 

//Do something with it.

apktool b [folder name] -o modified.apk
//generates the modified apk.

//and then
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore modified.apk androiddebugkey
//signs the app the the debug key (the password is android)

//this apk can be installed on a device.

私のテストでは、元のリリースの apk にはログがありませんでした。apktool で逆コンパイルした後、ログなしのフルバイト コード ファイルとログありのフル バイト コード ファイルを交換し、再コンパイルして署名し、デバイスにインストールすることができました。その後、アプリを Android Studio に接続すると、Android Studio でログを確認できました。

私の意見では、 and を使用して逆コンパイルdex2jarするJD-GUIことは、クラスが何をしているかをよりよく理解するのに役立つだけです。しかし、すべてが保護されているため、この中途半端な Java コードを動作する apk に再コンパイルできるかどうかはわかりません。もしそうなら、私に知らせてください。この例で述べたように、バイトコード自体を操作するしか方法はないと思います。

于 2019-12-15T15:24:01.763 に答える
11
  1. 最初に次のリンクから dex2jar ツールをダウンロードします http://code.google.com/p/dex2jar/downloads/list

  2. dex2jarフォルダを作成するファイルを抽出します

  3. ここで、apk ファイルを選択し、拡張子を .apk から .zip に変更します。拡張子を変更した後、zip ファイルのようです。次に、ファイルを見つけたこの zip ファイルを抽出しclasses.dexます。

  4. 今、classes.dex ファイルを選択し、それをdex2jarフォルダーに入れます

  5. コマンドウィンドウを開き、dex2jarフォルダーのパスを入力します

  6. コマンドdex2jar.bat classes.dexを入力してEnterキーを押します

  7. ファイルdex2jarを見つけ たフォルダを開きますclasses_dex2jar.jar

  8. 次に、次のリンクから Java 逆コンパイラ ツールをダウンロードします http://java.decompiler.free.fr/?q=jdgui

  9. 最後のステップ Java 逆コンパイラ ツールでファイルを開くと、classes_dex2jar.jarapk コードが表示されます

于 2013-03-11T05:28:22.757 に答える
5

私はこの質問が回答されていることを知っており、ここでより良い回答をしようとしているわけではありません. このトピックで私の経験を共有します。

コードを失って、apkファイルしか持っていなかったことがあります。以下のツールを使用して逆コンパイルしたところ、うまくいきました。

これらのツールは、そのような状況で使用する必要があります。そうしないと、非倫理的であり、場合によっては違法になります (他人の努力を盗む)。ですから、賢く使ってください。

これらは、それを行うための私のお気に入りのツールです。

javadecompilers.com

Google Play から APK を取得するには、Google で検索するか、これらのサイトをチェックしてください。

この回答を投稿した日に、すべてのリンクをテストしましたが、完璧に機能しました。

注: Apk デコンパイルは、保護されたコードの場合は効果がありません。Proguardはコードを縮小して難読化し、クラスの名前を無意味な名前に変更するため、コードを理解するのがかなり難しくなります。

ボーナス:

Proguard の使用に関する基本的なチュートリアル:

于 2016-01-18T13:48:41.950 に答える
2

jd-guiを使用したdex2jarは、すべての Java ソース ファイルを提供しますが、それらはまったく同じではありません。これらはほぼ同等の .class ファイルです (100% ではありません)。したがって、apk ファイルのコードを変更する場合は、次のようにします。

  • apktoolを使用して逆コンパイルする

  • apktoolは、同じ名前のすべての Java ファイルに対して smali (アセンブリ バージョンの dex) ファイルを生成します。

  • smali は人間が理解できるものであり、関連するファイルを変更し、同じapktoolを使用して再コンパイルします( apktool b Nw.apk <Folder Containing Modified Files>)

于 2015-06-06T06:01:20.753 に答える
-3

これは方法です:

  1. apktoolデコードに使用:

     $ apktool d -f {apkfile} -o {output folder}
    
  2. 次に、JADX を使用します (github.com/skylot/jadx)。

     $ jadx -d {output folder} {apkfile}
    

2 つのツールは、同じ出力フォルダーに抽出および逆コンパイラーします。

簡単な方法: オンライン APK Decompiler を使用する

于 2017-05-15T00:54:08.167 に答える