1. 程式人生 > >Android apk破解後重簽名

Android apk破解後重簽名

本文所訴內容為在實現《Android軟體安全與逆向分析》第二章內容所遇到的問題

本章內容為手動破解一個簡單的示例apk,體驗破解apk的過程。

1、使用apktool反編譯apk後,修改smali程式碼進行破解。

>apktool d crackme02.apk -o outdir

2、再次使用apktool編譯,將在oudir目錄下生成dist與build兩個目錄,其中未簽名的apk位於dist目錄下

>apktool b outdir

3、手工對apk簽名時,由於沒有android原始碼,無法按照書中所述,使用signapk.jar、testkey.x509.pem、testkey.pk8(缺少如上檔案)對apk進行重簽名,上網翻閱資料,找到一個簡單的方法,

(只需按照java jdk即可)

------------------------------------------------------------------------------------------------------------------------

參考:http://www.cnblogs.com/qianxudetianxia/archive/2011/04/09/2010468.html

命令列下對apk簽名
  建立key,需要用到keytool.exe (位於jdk1.6.0_24\jre\bin目錄下),使用產生的key對apk簽名用到的是jarsigner.exe (位於jdk1.6.0_24\bin目錄下),把上兩個軟體所在的目錄新增到環境變數path後,開啟cmd輸入

D:\>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 -keystore demo.keystore /*說明:-genkey 產生金鑰 -alias demo.keystore 別名 demo.keystore -keyalg RSA 使用RSA演算法對簽名加密 -validity 40000 有效期限4000天 -keystore demo.keystore */ D:\>jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore
/*說明:-verbose 輸出簽名的詳細資訊 -keystore  demo.keystore 金鑰庫位置 -signedjar demor_signed.apk demo.apk demo.keystore 正式簽名,三個引數中依次為簽名後產生的檔案demo_signed,要簽名的檔案demo.apk和金鑰庫demo.keystore.*/
------------------------------------------------------------------------------------------------------------------------
按照如上,方法簽名獲得signed.apk,執行 >adb install signed.apk 提示[INSTALL_PARSE_FAILED_NO_CERTIFICATES] 原因:jdk1.7以上的簽名工具需要timestamp的原因 (本人使用的jdk1.8) 解決方法:在簽名命令中加入-digestalg SHA1 -sigalg MD5withRSA引數 >jarsigner -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore -digestalg SHA1 -sigalg MD5withRSA 解決!不過簽名時還是會提示