1. ホーム
  2. Android

ステップバイステップでapkを逆コンパイルし、smaliを修正し、再パッケージ化することを教える

2022-02-23 06:55:04

<スパン I. ツールの紹介

<スパン 1. apktool:aapt.exe,apktool.bat,apktool.jar; 3つを同じディレクトリで組み合わせて使用し、apkの逆コンパイル、apkの再パッケージングを行う。

<スパン 2. dex2jar: このツールはclasses.dexファイルのデコンパイル、ソースコードのデコンパイル(apkがハード化されていない場合)、ファイルのデコンパイル、jd-guiツールによる閲覧に使用されます。

<スパン 3. Auto-Sign: 自動署名ツールでリパッケージされたapkに署名し、署名されていない場合は、インストールおよび使用することはできません。

<スパン ツールのダウンロードアドレスです。 https://download.csdn.net/download/sxk874890728/10443156  (3CSDNポイントが必要、もともと3ポイントに設定していたのに、なぜか16ポイントに・・・・・・)

<スパン 使用シナリオ:プロジェクトのソースコードが失われ、オンラインapkのみで、ハード化されていない、apkのインターフェースアドレスを修正し、再パッケージ化し、リリースするように要求する。

<スパン II. ツールの使用

<スパン 解凍されたツールキットはこのような感じです。

1. 感想です。 dex2jarというツールを使ってデコンパイルし、jd-guiというツールを使ってプロジェクトの構造を見たり、ソースコードを見たり、インターフェースアドレスのクラスを見つけてインターフェースアドレスを変更したりします。

ステップ1. ツールをダウンロードし、図のように逆コンパイルするAPKのサフィックスを.rar、次に.zipに変更して解凍してください。

取得 classes.dex ファイルの場所 (dxツールでコンパイルしてパッケージ化したjavaファイルです)と、取得した

解凍したツール dex2jar-0.0.9.15 フォルダにclasses.dexをコピーします。

<スパン コマンドラインで dex2jar.bat があるディレクトリに移動し、コマンドを入力します。

dex2jar.bat classes.dex

  • 1

その効果は以下の通りです。

ステップ2. 実行後、ディレクトリ内に以下のようなファイルclasses_dex2jar.jarが生成されます。

次に、ツールの jd-gui フォルダにある jd-gui.exe を開いて、生成された classes_dex2jar.jar ファイルを開くと、ソースコードが表示されます。

結果は次のようになります。

2. アイデア apktoolで、smaliファイルを逆コンパイルして修正し、リパッケージして、jd-guiツールでインターフェースアドレスクラスを探し、対応する

を比較し、インターフェイスアドレスを修正するために、smali ファイルを使用します。

上記のツールからapktoolをダウンロードし、解凍して3つのファイルを取得します: aapt.exe, apktool.bat, apktool.jar , これらはデコンパイルする必要があります。

<スパン 図のように、APKファイルをこのディレクトリにコピーしてください。

<スパン コマンドラインインターフェース(Run-CMD)を開き、apktoolフォルダを探し、以下のコマンドを入力します。

apktool.bat d -f test.apk -o test    

  • 1
apktool -f [apk to be decompiled] -o [folder to store after decompiling] 

  • 1

<スパン 写真の通りです。

デコンパイル後、testフォルダを開くと、デコンパイルによる各種リソースファイルがあります。

jd-guiを使ってソースコードを表示し、アドレスクラスを見つけ、次にsmaliファイル内のアドレスのsmaliファイルを見つけ、smaliファイル内のインターフェイスアドレスを変更します。 
図のように

smaliファイル内の対応するアドレスを検索する smaliファイル

次のように、interface smali ファイルのアドレスを変更して、Ip をドメイン名に置き換えてください。

修正後、保存してください。

3. リパッケージする。  packageコマンドを実行する

apktool.bat b test

  • 1

テストファイル内には、以下のような2つのファイルが追加されます。

distファイルの中に必要なapkが入っています。

4. apkにサインをする。 を再発行します。

次に、署名ツールを使用します。署名がないと正しく動作しません。ツール:auto-sign.zip

<スパン パッケージ化された test.apk を解凍した auto-sign フォルダにコピーし、コマンドを実行します。

java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test_signed.apk 

  • 1

test_signed.apkは署名入りapkです :)

5. 実行後 5.0 で実行するとすぐにクラッシュしてしまい、android studio は以下のエラーをキャッチします。

jd-guiで見たソースコードの位置は以下の通りです。

エラーの原因

 Caused by: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.sun3d.culturejingan.communication.link }

  • 1

エラーメッセージにあるように、android 5.0以降では、サービスインテントを明示的に指摘する必要があります。

次に、smaliファイル関連のクラスを修正する必要があり、ここではjava2smaliファイルを使用します。

6. java2smali プラグイン , アドレスです。 https://plugins.jetbrains.com/plugin/7385-java2smali

<スパン プラグインのインストールは、ローカルインストールを選択し、プラグインをインストールする方法がわからない、下のBaiduしてください。

<スパン 対応する問題のスマリファイルコードを検索するために見つけます。

smali 構文の書き方はあまり知らないので、プラグインを使って書かれた java コードを直接 smali 構文に変換し、コピーして、元の smali コードを置き換えます。 
これはジャワのコードです 

smaliのコードに変換する

で対応する変換結果を見つけ、対応するコードが直接表示されます。

デコンパイルから対応するsmaliファイルの対応するコードを置換し、repackコマンド、signコマンドを実行し、手順3を実行します。

全体の流れは複雑ではないので、根気よくやればうまく変更できるはずです。