私はAndroidセキュリティに興味のある学生です。 baksmaliとsmaliを使用してAPKファイルを変更しようとしていました。ただし、再パッケージ化されたアプリを携帯電話で実行できません。アイコンをクリックすると、「残念ながらテストが停止しました」と表示され、存在します。 (アプリのアイコンが変更されても、アプリの古い本物のカラフルなアイコンではなく、デフォルトのAndroidアイコンが表示されるようになりました)
この理由は何でしょうか?実際、apkファイルのコードも変更していません。apkを解凍してdexファイルを取得し、baksmali.jar
を使用してsmaliに変換してから、
。最後にzipして署名しました。
詳細に行ったこと:
-
apkファイルを解凍します
$ Unzip test.apk
-
1classes.dex1をsmaliに変換
$ baksmali -x classes.dex -o smaliClasses
-
クラスを
classes.dex
に戻しました(古いclasses.dex
を置き換えました。実際、smaliファイルに新しいコードを追加しませんでした。 。これが最初に機能するかどうかを知りたかったのです。$ smali smaliClasses -o classes.dex
-
すべてのファイルを
test.zip
$ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc
-
test.zip
の名前をtest.apk
$ mv test.zip test.apk
APKに再度署名する必要があると思われるので、間違っている場合は修正してくださいここ。
編集済み
:
-
java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
-
再パッケージ化された新しいAPKをインストールしようとしました。 adbシェルを使用します。 Adbシェルは、正常にインストールされたことを示しました。ただし、再パッケージ化されたアプリをモバイルで実行できません。アプリをクリックするとクラッシュします。 「残念ながら、テストは停止しました」と表示されます。
再パッケージ化されたアプリが実行されないのはなぜですか?ここで何が欠けているのかわかりませんか?
編集済み:
apktoolを使用して同じアプリを再パッケージ化しようとしました。それを使用してsmaliファイルを抽出し、再パッケージ化しました。しかし、なぜ再パッケージ化がbaksmali、smali、zip、signapkで機能しないのか。この手順でジッピングは本当の問題ですか?元のapkファイルと比較して、zipして.apkに名前を変更すると、アプリのサイズが大幅に縮小されていることがわかります:|
baksmali -x option
)していますか? " bootclasspath " you ' dexファイルに変換して戻すことができない可能性のある奇妙なsmaliコードを取得します。また、すべてのコンテンツを含むディレクトリ内でzip -r unsigned.apk *
を圧縮して実行する前に、META-INFフォルダを削除するだけです。それでもクラッシュする場合は、logcat出力を投稿してみてください