Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android反編譯(三)之重簽名

Android反編譯(三)之重簽名

編輯:關於Android編程

  a、Android系統簽名主要有ROM簽名和應用程序APK簽名兩種形式。ROM簽名是針對已經生成的Android系統ROM包進行簽名。應用程序APK簽名是針對開發者開發的應用程序APK進行簽名。   b、APK實際上是一個jar或者說是一個zip壓縮文件,META-INF目錄下存放的是壓縮包中所有文件的簽名信息,用來保證apk包的完整性和系統的安全。   c、重簽名:實際上就是刪除META-INF目錄(刪除已有簽名),使用自已數據證書再次重簽名。   注:APK如有簽名自校驗(代碼有校驗)需要修改其代碼,非今天文章內容。        2、工具與准備工作   1).工具  a.數字證書生成:keytool   JAVA自帶工具   如:JDK1.7 例:路徑  C:\Program Files\Java\jdk1.7.0_55\bin\keytool.exe   b.重新簽名:jarsigner JAVA自帶工具  如:JDK1.7 例: 路徑  C:\Program Files\Java\jdk1.7.0_55\bin\jarsigner.exe   c.優化APK:zipalign  Android SDK自帶工具    例:路徑  C:\Program Files\adt-bundle-windows-x86_64-20140321\sdk\tools\zipalign.exe     2).准備工作   a.安裝JDK,配置環境變量   b.安裝Android SDK,配置環境變量      3、操作步驟   1)、本機 keystore數字證書 a、找現成的keystore文件   路徑   C:\Documents and Settings\Findyou\.android\debug.keystore    debug.keystore Keystore name: “debug.keystore”  Keystore password: “android” Key alias: “androiddebugkey” Key password: “android” CN: “CN=Android Debug,O=Android,C=US”      b、keytool生成keystore數字證書:       (1).[CMD中執行下列命令] keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -keyalg RSA -validity 10000  /*解釋:  keytool是工具名稱,-genkey意味著執行的是生成數字證書操作,-v表示將生成證書的詳細信息打印出來,顯示在dos窗口中;  -keystore  debug.keystore 表示生成的數字證書的文件名為“ debug.keystore”; -alias  androiddebugkey   表示證書的別名為“ androiddebugkey  ”,可以與Keystore一樣; -keyalg RSA 表示生成密鑰文件所采用的算法為RSA; -validity 10000 表示該數字證書的有效期為10000天,意味著10000天之後該證書將失效 **/     執行結果 輸入密鑰庫口令: android 再次輸入新口令: android   您的名字與姓氏是什麼?   [Unknown]: Android Debug 您的組織單位名稱是什麼?   [Unknown]: Android 您的組織名稱是什麼?   [Unknown]: Android 您所在的城市或區域名稱是什麼?   [Unknown]: ShenZhen 您所在的省/市/自治區名稱是什麼?   [Unknown]: GuangDong 該單位的雙字母國家/地區代碼是什麼?  [Unknown]: CN  CN=Android Debug, OU=Android, O=Android, L=ShenZhen, ST=GuangDong, C=CN是否正確?   [否]:Y 正在為以下對象生成 2,048 位RSA密鑰對和自簽名證書 (SHA256withRSA) (有效期為 10,000 天):          CN=Android Debug, OU=Android, O=Android, L=ShenZhen, ST=GuangDong, C=CN 輸入 <androiddebugkey> 的密鑰口令         (如果和密鑰庫口令相同, 按回車): [回車] [正在存儲debug.keystore]      (2). debug.keystore生成在CMD執行命令的目錄中        2)、刪除原APK簽名文件   (1).ThinkDrive.apk重命名為ThinkDrive.zip,解壓ThinkDrive.zip文件    (2).ThinkDrive重名名為ThinkDrive_temp (3).ThinkDrive_temp文件夾,找到META-INF,刪除META-INF (4).將ThinkDrive_temp整個文件夾用zip工具,重新打包成zip壓縮包,然後更改後綴為apk  注意: a.進入ThinkDrive_sign文件夾內直接打包文件,不是對ThinkDrive_sign整個文件夾打包,否則會產生二級根目錄) b.注意是ZIP壓縮,不是RAR c.可以用jar來解包,壓縮包 解包: jar -xvf  ThinkDrive.apk                -->為apk文件 壓縮包 jar -cvf ../ThinkDrive.apk   ./         -->進入文件夾打包,不會產生二級根目錄;apk生成在上一層,防止死循環      3)、APK重簽名 jarsigner -verbose -keystore debug.keystore -storepass android -keypass android -signedjar Thinkdrive_signed.apk  Thinkdrive_temp.apk androiddebugkey /*解釋: jarsigner是Java的簽名工具   -verbose參數表示:顯示出簽名詳細信息   -keystore表示使用當前目錄中的debug.keystore簽名證書文件。   -storepass 密鑰口令    -signedjar ThinkDrive_signed.apk表示簽名後生成的APK名稱,   ThinkDrive_temp.apk 表示未簽名的APK,   androiddebugkey表示debug.keystore的別名   */        4)、優化APK  zipalign -v 4 ThinkDrive_signed.apk Target.apk 注:   zipalign優化的最根本目的是幫助操作系統更高效率的根據請求索引資源,將resource-handling code統一將Data structure alignment(數據結構對齊標准:DSA)限定為4-byte boundaries。        小結:通過以上四個步驟 ,最終得到的 Target.apk (名稱自己可以第四步生成時自修改) 為重簽名後的APK。      4、裝X技巧   偶爾手工敲敲代碼無所謂,需要簽名的APK一多,那你就廢了。你會說,網上下載現成的重簽名jar啊之類的,多沒意思,來自己整一個批處理。       1)、代碼: [重簽名.bat] 復制代碼 @ECHO OFF  REM key的名稱  SET KEYSTORE_NAME=debug.keystore  REM key的別名  SET KEYSTORE_ALIAS=androiddebugkey  REM key的密碼  SET KEYSTORE_STOREPASS=android  SET KEYSTORE_KEYPASS=android  REM 臨時文件名或臨時文件夾名  SET TEMP_PREFIX=temp_  REM 重簽名後apk文件名前綴  SET RE-SIGNED=Re-signed_  FOR %%I IN (*.apk) DO (   ECHO [重簽名 %%I]      ECHO [創建與APK同名的文件夾]      REM 創建文件夾,如果已存在則先刪除      RD /S /Q 【%%I】      MD 【%%I】\%TEMP_PREFIX%      REM 復制需要重新簽名的apk文件到臨時文件夾中      COPY %%I 【%%I】\%TEMP_PREFIX%      REM 復制key到APK同名文件夾中      COPY %KEYSTORE_NAME% 【%%I】      REM 進入臨時文件夾      CD 【%%I】\%TEMP_PREFIX%     REM 解壓APK文件      JAR -xvf %%I      REM 刪除復制到臨時文件夾中的APK文件      DEL %%I      REM 刪除MANIFEST      RD /S /Q META-INF     REM 重新壓縮成apk文件      ECHO [重新打包成APK]      JAR -cvf ../%TEMP_PREFIX%%%I ./      CD ..     ECHO [JARSIGNER %%I]      REM 對APK包重新簽名,JDK1.7需要增加參數      JARSIGNER -VERBOSE -KEYSTORE %KEYSTORE_NAME% -STOREPASS %KEYSTORE_STOREPASS% %TEMP_PREFIX%%%I %KEYSTORE_ALIAS% -KEYPASS %KEYSTORE_KEYPASS%         ECHO [刪除JARSIGNER臨時文件]      RD /S /Q %TEMP_PREFIX%      REM 刪除同名文件夾中復制的debug.keystore      DEL %KEYSTORE_NAME%      ECHO [ZIPALIGN %%I]      REM 使用android的zipalign工具對apk文件進行優化      ZIPALIGN -v 4 %TEMP_PREFIX%%%I %RE-SIGNED%%%I      REM 檢查apk文件是否被優化      ZIPALIGN -c -v 4 %RE-SIGNED%%%I      ECHO [刪除ZIPALIGN臨時文件]      REM 刪除優化前的APK文件,保留優化後的APK      DEL %TEMP_PREFIX%%%I      CD ..      ECHO [重簽名完成]  %RE-SIGNED%%%I      ECHO.  )  PAUSE  @ECHO ON 復制代碼     2)、使用方法   (1).拷貝 xxxx.keystore 簽名文件至 "重簽名.bat"所在目錄中   (2).拷貝需要重簽名的APK文件至 " 重簽名.bat"所在目錄中   (3).雙擊運行"重簽名.bat" 腳本   注:如需重簽名多個APK,可全部拷貝至 " 重簽名.bat"所在目錄中,BAT會查找到當前目錄下所有APK,全部重簽名。    
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved