私は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に名前を変更すると、アプリのサイズが大幅に縮小されていることがわかります:|
コメント
回答
この目的のためにapktool
を使用し、APKを逆コンパイルおよび再コンパイルするためのシェルスクリプトの短いペアを使用します:
-
decompile-apk
#!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done."
-
compile-apk
#!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build
apktool
を使用すると、すべてのリソースを表示および編集できるという利点があります。デコードされたマニフェストファイルとして。
コメント
- これは私にとって有効な唯一の方法です。 '何十回も試しましたが、うまくいきませんでした。どうもありがとうございました。
回答
smali / baksmaliで遊んだ後、動作しました。 を圧縮するときに、再帰フラグを使用しなかったと思います。これにより、resフォルダーが空になり、クラッシュが発生しました。また、apkに署名した後にzipalignを実行します。
手順:
- 解凍
$ unzip test.apk
- Baksmali
$ baksmali classes.dex -o smaliClasses
- Smali
$ smali smaliClasses -o classes.dex
- Zip -r
$ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
- ジャーサイン
$ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
- Zipalign
$ zipalign -v 4 test-patched.apk final-apk.apk
- 利益:)
回答
コメントできない評判なので、ここに投稿します。
apktoolを使用するとジョブが正しく実行されるため、zipプロセスで問題が発生しているようです。
後アプリを再パッケージ化して、新しいAPKの内容が元のAPKの内容と同じであることを確認できますか(ファイル名と構造に関する限り)?
編集:また、ファイルは.dexファイルの場合、baksmaliで-xオプションは必要ないと思います。
EDIT2:再パッケージするときに、zipファイルにMETA-INFディレクトリを含める必要はありません。 tに署名すると作成されますファイル。
回答
baksmaliを実行していないため、deodexオプション「-x」を使用する必要はありません。 odex。 dexファイルでbaksmaliを実行するだけです。 apktoolを使用して、すべてを解凍/パックすることもできます。これは、簡単だと思います。
回答
-
ファイルサイズが減少した理由
apktool
が再コンパイル中に最適化したため。 -
クラッシュした理由?
クラッシュの考えられる理由:
-
すべての手順を適切な順序で実行できるとは限りません。
-
アプリケーションにファイルサイズのCRCチェック。
-
ツールGUIで完全に自動化されています。最近のAndroidフレームワークで更新されているため、リソースの逆コンパイルエラーは発生しません。
https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0
そしてこの小さな紙androidアプリの反転に関するTutsと、apkの変更/処理に関するすべての基本情報が含まれています。
回答
AnroidアプリREに興味がある場合は、定期的に使用するためのより優れたツールを見つける必要があります。
まあ、ツールの1つはAndroidCracker Kit(私が開発したもの)で、必要なものがすべて揃っています。AndroidCrackerKit(ACK):
コメント
- リンク切れ。修正してください。
- ここに移動します: forum.exetools.com/showthread.php?t=16538
- @raypixar:リンクが壊れていません。遅いだけです。
回答
APK EditorProを使用して編集していますAndroidデバイスからのAPK!
https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro
コメント
- すばらしいヒント。生成されたapkは、上記の(逆)コンパイルスクリプトでは正しくインストールされませんが(なぜですか?)、classes.dexを置き換えるとインストールされました。
回答
ステップ4.再帰的に行うのを忘れました。 zipしたときに/ res内のファイルはコピーされません。-rオプションを追加してください。
zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc
ステップ6.署名する必要はありません。すでにMETA-INFディレクトリでapkに再パックしたので。署名情報はMETA-INF内にあります。
baksmali -x option
)していますか? " bootclasspath " you ' dexファイルに変換して戻すことができない可能性のある奇妙なsmaliコードを取得します。また、すべてのコンテンツを含むディレクトリ内でzip -r unsigned.apk *
を圧縮して実行する前に、META-INFフォルダを削除するだけです。それでもクラッシュする場合は、logcat出力を投稿してみてください