ステップバイステップでapkを逆コンパイルし、smaliを修正し、再パッケージ化することを教える
<スパン 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を実行します。
全体の流れは複雑ではないので、根気よくやればうまく変更できるはずです。
関連
-
Android ARTランタイムのDalvik仮想マシンをシームレスに置き換えるプロセスの分析
-
Dalvik仮想マシンと学習プランの簡単な紹介
-
解決策 エラーです。jarfile にアクセスできません。\ʕ-̫͡-ʔ
-
Android リソースのリンクに失敗する、解決方法
-
エミュレータです。PANIC: AVDのシステムパスが壊れています。ANDROID_SDK_ROOTの値を確認してください。
-
Jniエラー:構造体でも組合でもないものにメンバー 'FindClass' を要求する、 解決方法
-
Androidです。ListView.addHeaderView()の使用方法と注意点
-
java.lang.SecurityException を解決してください。android パッケージは 10065 に属していません。
-
Android画像角丸
-
アンドロイドアンダーライン(図形入り
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
adb connect device offline エラー解決
-
com.android.ide.common.process.ProcessException が発生する可能性のある原因。aaptの実行に失敗したエラー(解決済み)
-
警告: 構成 'compile' は廃止され、'implementation' と 'api' に置き換わりました。
-
アプリの実行エラー。デフォルトのアクティビティが見つかりません
-
RecyclerView がアダプタが接続されていませんと表示され、レイアウトソリューションをスキップする
-
Android StudioでJavaファイルが認識されない問題を解決(赤いJが表示される)。
-
Android 開発の問題 - いくつかのプロジェクトはすでにワークスペースに存在するため、インポートできません。
-
Androidスレッドの詳細
-
Android Studioのインポートプロジェクトが表示されます。ファイルをクランチするのに失敗しました
-
android AVD開始時刻エラー