題:
使用baksmali和smali重新包裝APK文件
aMa
2015-01-17 22:34:41 UTC
view on stackexchange narkive permalink

我是一名對Android安全性感興趣的學生。我試圖使用baksmali和smali修改APK文件。但是,我無法在手機上運行重新打包的應用程序。當我單擊圖標時,它說“不幸的是,測試已停止”並且存在。 (即使該應用程序的圖標已更改,現在我看到的是默認的android圖標,而不是該應用程序的舊真實彩色圖標)

這可能是什麼原因?實際上,我什至沒有修改過apk文件的代碼。我只是解壓縮apk以獲取dex文件,然後使用 baksmali.jar 將其轉換為smali,然後使用 smali.jar 還原為dex。最後壓縮並簽名。

我已完成的詳細操作:

  1. 解壓縮apk文件

      $解壓縮test.apk  
  2. 將1classes.dex1轉換為smali

      $ baksmali -x classes.dex -o smaliClasses  
  3. 將類轉換回 classes.dex (替換了舊的 classes.dex ,實際上我沒有向smali文件添加任何新代碼。我想知道這是否先行。)

      $ smali smaliClasses -o classes.dex  
  4. 壓縮所有文件到 test.zip

      $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc  
  5. test.zip 重命名為 test.apk

      $ mv test.zip test.apk  > 
  6. ol>

    現在,我相信我必須再次對APK進行簽名,如果此處有誤,請糾正我。

    已編輯

    1. java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk cod e>

    2. 我嘗試安裝新的重新打包的APK。使用adb shell。 Adb Shell顯示成功安裝。但是,我無法在移動設備上運行重新打包的應用程序。當我單擊它時,該應用程序崩潰。它說“不幸的是,測試已停止”。

    3. ol>

      為什麼重新打包的應用程序不運行?我不明白我在這裡缺少什麼?我使用它提取了smali文件並重新打包。但是,為什麼重新包裝不能與baksmali,smali,zip和signapk一起使用。在此過程中壓縮真正的問題嗎?與原始的apk文件相比,我將其壓縮並將其重命名為.apk時,該應用程序的大小已大大減少:

您應該檢查logcat以獲取更多信息,如果可能的話,也請發布崩潰日誌。
@xDragonZ,I已編輯該帖子。這次,我嘗試使用“ adb install”進行安裝,並使用signapk.jar進行了簽名。這次應用已安裝到手機中。但是,當我單擊該應用程序時,它崩潰並顯示““不幸的是,應用程序已停止”。我注意到的一件事是,重新打包的apk的大小小於原始值,這是因為zip工具更改的原因是大小?關於為什麼應用程序崩潰的信息?我如何獲得此日誌?非常感謝。
也許您還需要zipalign文件?
您是否故意刪除(`baksmali -x選項`)?您似乎會因為執行此選項而沒有提供“ bootclasspath”,您會得到一些奇怪的smali代碼,這些代碼可能無法轉換回dex文件。此外,只需刪除META-INF壓縮並嘗試在包含所有內容的目錄內執行zip -r unsigned.apk *之前的文件夾。如果仍然崩潰,請嘗試發布logcat輸出
我無法相信任何人仍然會自己使用backsmali,請只使用Apktool,它將極大地簡化您的生活。
因此,在“五個答案”中,沒有一個是可以接受的嗎?
八 答案:
nneonneo
2015-06-20 15:12:09 UTC
view on stackexchange narkive permalink

為此,我使用 apktool 和一小段用於反編譯和重新編譯APK的shell腳本:

  • decompile-apk

     #!/ bin / bash -eif! [“ $ 1”];然後回顯“用法:$ 0 <file.apk>”,退出-1fifn = $ {1%.apk} target_apk = $ fn.apkapktool d -f“ $ target_apk” -o smaliecho“ Done。”。 
  • compile-apk

     #!/ bin / bash -eif! [“ $ 1”];然後回顯“用法:$ 0 <original.apk>”退出-1fifn = $ {1%.apk} rm -f $ fn.unaligned.apk $ fn.smali.apkrm -rf smali / buildapktool b -f smali / -o $ fn .unaligned.apkjarsigner-詳細-sigalg MD5withRSA -digestalg SHA1 -keystore〜/ .android / debug.keystore -storepass android $ fn.unaligned.apk androiddebugkeyzipalign -v 4 $ fn.unaligned.apk $ fn.smali.apkrm -rf smali / build  
    使用 apktool 的優勢在於能夠查看和編輯所有資源以及解碼後的清單文件。
這是唯一對我有效的方法。我已經嘗試了數十次,但都沒有成功。非常感謝。
Gal
2017-10-09 14:43:45 UTC
view on stackexchange narkive permalink

玩了smali / baksmali之後,我開始使用它。我認為您在壓縮時沒有使用遞歸標記。這導致res文件夾為空,從而導致崩潰。我也對apk簽名後運行zipalign。

步驟:

  1. 解壓縮
    $ unzip test.apk
  2. Baksmali
    $ baksmali classes.dex -o smaliClasses
  3. Smali
    $ smali smaliClasses -o classes.dex
  4. 郵編-r
    $ zip -r test.apk AndroidManifest.xml classes.dex res / resources.arsc
  5. Jarsign
    $ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
  6. Zipalign
    $ zipalign -v 4 test-patched.apk final -apk.apk
  7. Profit :)
  8. ol>
The Dart Code
2015-02-19 18:08:27 UTC
view on stackexchange narkive permalink

由於聲譽我無法發表評論,因此將其發佈在這裡。

由於使用apktool可以正確完成工作,因此在我看來zip出現了問題

重新打包應用程序後,您是否可以驗證新APK的內容(就文件名和結構而言)與原始APK的內容相同?

EDIT:而且,由於該文件是.dex文件,因此我認為您不需要baksmali中的-x選項。

EDIT2:重新打包時,無需包括壓縮文件中的META-INF目錄。將在文件簽名時創建。

Michael Schwartz
2015-03-12 07:24:16 UTC
view on stackexchange narkive permalink

由於不需要在odex上執行baksmali,因此不需要使用deodex選項“ -x”。只需在dex文件上運行baksmali。您還可以使用apktool解包所有東西,我認為這更容易。

Nieo
2015-07-04 10:33:41 UTC
view on stackexchange narkive permalink
  • 為什麼減小文件大小?

    因為 apktool 在重新編譯時對其進行了優化。

  • 為什麼它崩潰了?

    崩潰的可能原因:

    1. 您無法以正確的順序執行所有步驟。

    2. 應用程序可能具有文件大小的CRC檢查。

    3. ol>

工具完全使用GUI進行自動化。它已使用最新的android框架進行了更新,因此沒有資源反編譯錯誤和更好的處理。

https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0

這是一篇小論文,其中包括有關反轉Android應用程序的Tuts以及有關修改/處理apk的所有基本信息。

https://www.dropbox.com/ s / nkkmp4ait71kjku / Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl = 0

Yaser Al-Najjar
2015-06-23 08:37:17 UTC
view on stackexchange narkive permalink

如果您對Anroid apps RE感興趣,那麼您會發現可以定期使用的更好的工具。

嗯,其中之一是Android Cracker Kit(由我開發),它為您提供了所有您需要:Android Cracker Kit(ACK):

鏈接斷開。請修復它。
在這裡你去:http://forum.exetools.com/showthread.php?t = 16538
@raypixar:鏈接沒有斷開,只是速度很慢。
Tyler Brownfield
2016-05-05 00:51:50 UTC
view on stackexchange narkive permalink

我使用APK Editor Pro從我的Android設備上直接編輯APK!

https://play.google.com/store/apps/details?id=com.gmail.heagoo .apkeditor.pro

大提示。生成的apk無法使用上述(反)編譯腳本正確安裝(為什麼?),但替換了classes.dex即可。
Hao Liu
2016-08-20 06:10:03 UTC
view on stackexchange narkive permalink

第4步。您忘記了遞歸地進行操作。壓縮時不會復制/ res中的文件。添加-r選項。

  zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc  

步驟6。您沒有無需再次簽名,因為您已經將它與META-INF目錄重新打包到了APK中。簽名信息位於META-INF內部。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...