web-dev-qa-db-ja.com

APKインジェクション、再コンパイルAndroidマニフェスト

私が達成したいこと

Apkにパッケージ化されたAndroidManifest.xmlをバイナリ形式から通常のxmlファイルに逆コンパイルし、編集して、apkで受け入れられるバイナリファイルに再コンパイルします。基本的に、AXMLファイルのドライバーが必要です

短い背景

APKインジェクションプロジェクトに取り組んでいます。私の目標は

  1. Dalvikバイナリを分解する
  2. AndroidManifest xmlを読み取り、メインアクティビティの変更や権限の追加などの変更を加えます。
  3. apkファイルを再構築して署名する

私はapkの組み立てと分解にapktoolを使用しています。ただし、apkツールは--no-resオプションでのみ機能します。apkがリソースで分解されると、ビルドできません。 これは、このバグを説明するgithubの問題です

問題

Resフラグなしでapktool d --no-res app-debug.apkを分解するので、生成されたAndroidマニフェストはバイナリ形式で提供されます。apktoolを使用してマニフェストを分解できますが、元に戻すことはできません。

私がしたいこと

私はどちらかをする必要があります:

  • マニフェストを分解してからバイナリ形式に戻す方法を見つける
  • リソースでapktoolを使用する方法を見つける

これまでに試したこと

  • バイナリAndroidManifest.xmlをプレーンテキストバージョンに置き換えてビルドします。 apktoolがビルドされます。ただし、デバイスへのアプリのインストールは、「パッケージの解析中に問題が発生しました。解析エラー」で失敗します。
  • apktoolの異なるバージョンの使用:v2.3.2v2.3.1v2.3.0v2.2.0v2.2.1v2.2.2
  • 次のプロジェクトを使用してaxmlをコンパイルする: https://github.com/rednaga/axmlprinter ; https://github.com/ZaratustraN/axml-parser ; https://github.com/shazam/axmlparser

免責事項

Stackoverflowは知識共有のためのコミュニティであり、それが何のために使用されているかを判断するものではありませんが、違法行為の非難を伴う同様の質問で他の人を選ぶ人がたくさんいます。

私がやっていることは完全に合法であり、誰かを悪用するために使用されることはありません。

24
Ben

プレーンテキストのandroiodマニフェストを使用してアプリケーションを再パッケージ化する唯一の信頼できる方法は、aaptを直接使用して再パッケージ化することです。

aapt package -f -M ./AndroidManifest.xml -S res1/ -S res2/ ... -I Android.jar -F MyProject.apk.unaligned

Apkを作成するには、次のようにします。

aapt add -f MyProject.apk.unaligned classes.dex

コンパイルされたソースをパッケージに追加します。

次に、jarsignerを使用してパッケージに署名します。

jarsigner -storepass <keystore password> -keystore <keystore filename> MyProject.apk.unaligned <key name>
0
Ben

インストールにより、次の条件で解析エラーが発生する可能性があります。いずれかが満たされているかどうかを確認してください-

  • 署名後にパッケージの名前が変更される:署名されたパッケージと同じ正確な名前を使用します(代わりにマニフェストで名前を調整します)
  • パッケージ。より高いAPIレベルでコンパイルされています:マニフェストファイルのAPIレベルを修正してください。
  • パッケージはSDカードから実行されます。携帯電話のメモリからapk -fileを実行(インストール)しますOR adbコマンドを使用してインストールします。

指定された here として手動でapkに署名できます。