apktool反編譯和二次打包,jarsigner和apksigner進行簽名
今天在嘗試簡單的反編譯,但是網上資料多繁雜重複且存在不可行的方式,遂記下此收穫
1.apktool反編譯
反編譯:
apktool d test.apk //apktool d XXX.apk
反編譯test.apk檔案,並且會在當前目錄下生成test資料夾,其中,
res資料夾下存放的是反編譯出來的所有資源,
smali資料夾下存放的是反編譯出來的所有程式碼,
AndroidManifest.xml則是經過反編譯還原後的manifest檔案,
smali資料夾下的檔案smali檔案使用的是Android虛擬機器所使用的暫存器語言。
二次打包:
apktool b test -o new_test.apk //apktool b XXX(反編譯後的資料夾名稱) -o newXXX.apk(新APP的名字)
會在當前目錄下生成需重新簽名的APK檔案,無法安裝到安卓系統上
可以使用Android Studio或者IDEA簡單生成簽名檔案來簽名,使用JDK自帶的jarsigner來對APK簽名
APK簽名和jar包簽名,兩者原理流程差不多
對APK簽名,既可用 JDK/bin/jarsigner.exe,
也可用 Android SDK/build-tools/版本號/apksigner.bat或者Android SDK/build-tools/版本號/lib/apksigner.jar
最新版下載地址:https://ibotpeaches.github.io/Apktool/install/
2.jarsigner簽名
網上例項裡包含演算法名稱,同時我想到在AS或者IDEA裡生成祕鑰的時候並沒有指定演算法,所以演算法上的指定可能就是在這裡,並且如果不指定話,似乎預設為RSA
使用IDEA生成金鑰庫123_key.jks,密碼123456,別名(似乎是金鑰鏈)key,別名密碼123456(以下親測可行,具體含義請看下面的引數說明)
(命令在java路徑下:\jdk路徑\bin\jarsigner.exe)
1.jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystrore 123_key.jks -storepass 123456 app.apk key
2.jarsigner -verbose -keystrore 123_key.jks -storepass 123456 app.apk key
驗證是否簽名成功:jarsigner -verify -verbose -certs new_test_aligned.apk
zipalign是一款對APK檔案進行優化的工具。(該工具在/build-tools/目錄下)
APK檔案本質上是一個zip壓縮文件,經過優化能使包內未壓縮的資料有序的排列,從而減少應用程式執行時的記憶體消耗。在使用jarsigner對APK重簽名之後,可以使用該工具優化已簽名APK檔案。
zipalign -v 4 in.apk out.apk //執行4位元組對齊優化操作
zipalign -c -v 4 in.apk //檢查當前APK是否已經執行過Align優化
注意:
1)簽名檔案,APK檔案為完全路徑不能有中文,空格,轉譯字元
2)簽名前後的檔案路徑不能改
3)加密演算法請參考官方文件自行選取,但是第一次選擇了後後面不要再隨意更換加密演算法
4)在jdk7及以上版本中執行jarsigner命令時,務必新增上-digestalg SHA1 -sigalg MD5withRSA引數,以修改jdk7預設digest演算法sha256為sha1,修復Android低版本(4.2以下)出現的問題。
C:\Users\悅>jarsigner -help
用法: jarsigner [選項] jar-file 別名
jarsigner -verify [選項] jar-file [別名...]
[-keystore <url>] 金鑰庫位置
[-storepass <口令>] 用於金鑰庫完整性的口令
[-storetype <型別>] 金鑰庫型別
[-keypass <口令>] 私有金鑰的口令 (如果不同)
[-certchain <檔案>] 替代證照鏈檔案的名稱
[-sigfile <檔案>] .SF/.DSA 檔案的名稱
[-signedjar <檔案>] 已簽名的 JAR 檔案的名稱
[-digestalg <演算法>] 摘要演算法的名稱
[-sigalg <演算法>] 簽名演算法的名稱
[-verify] 驗證已簽名的 JAR 檔案
[-verbose[:suboptions]] 簽名/驗證時輸出詳細資訊。
子選項可以是 all, grouped 或 summary
[-certs] 輸出詳細資訊和驗證時顯示證照
[-tsa <url>] 時間戳頒發機構的位置
[-tsacert <別名>] 時間戳頒發機構的公共金鑰證照
[-tsapolicyid <oid>] 時間戳頒發機構的 TSAPolicyID
[-tsadigestalg <演算法>] 時間戳請求中的摘要資料的演算法
[-altsigner <類>] 替代的簽名機制的類名
[-altsignerpath <路徑列表>] 替代的簽名機制的位置
[-internalsf] 在簽名塊內包含 .SF 檔案
[-sectionsonly] 不計算整個清單的雜湊
[-protected] 金鑰庫具有受保護驗證路徑
[-providerName <名稱>] 提供方名稱
[-providerClass <類> 加密服務提供方的名稱
[-providerArg <引數>]]... 主類檔案和構造器引數
[-strict] 將警告視為錯誤
3.apksigner簽名
注:
APK除錯簽名的預設金鑰庫, 預設在C:\Users\使用者名稱\.android
金鑰庫名: debug.keystore
金鑰別名: androiddebugkey
金鑰庫密碼: android
apksigner是一款在Android build tools 24.0.3及以上版本中提供的對apk檔案簽名以及驗證簽名資訊的工具,它與jarsigner的作用類似,但比後者功能更加強大。注意在使用apksigner前,請先對APK執行zipalign,而不能在之後執行zipalign操作,這一點與jarsigner不同。(路徑在build-tools\相應版本\apksigner.bat)
apksigner sign --ks release.jks app.apk //簽名
apksigner verify --verbose app.apk //驗證簽名
4.更多資訊
更多資訊請自行查閱jarsigner.jar -help和apksigner.bat help
相關文章
- 反編譯之安裝Apktool編譯APK
- MAC使用APKTool反編譯apk修改版本號後重新打包MacAPK編譯
- Android反編譯工具Apktool淺析Android編譯APK
- apkTool反編譯apk碰到的問題APK編譯
- Android反編譯工具ApkTool的使用Android編譯APK
- Android反編譯:反編譯工具和方法Android編譯
- Android使用Ant自動編譯簽名打包詳解Android編譯
- MAC上反編譯android apk---apktool, dex2jar, jd-jui安裝使用(含手動簽名)Mac編譯AndroidAPKJARUI
- 蘋果企業簽名和蘋果超級簽名該怎麼進行選擇?蘋果
- Android Apk 檔案反編譯和重新打包的過程分析AndroidAPK編譯
- 使用AndroidKiller進行APK反編譯AndroidAPK編譯
- Android逆向之旅---反編譯利器Apktool和Jadx原始碼分析以及錯誤糾正Android編譯APK原始碼
- apkTool---一個簡單好用的apk反編譯工具APK編譯
- apktool + smali + dex2jar + jdgui實現apk反編譯APKJARGUI編譯
- 利用766IPA/iOS/蘋果簽名工具在Mac和win電腦上進行簽名iOS蘋果Mac
- 練習向:一次簡單的APK反編譯後二次打包APK編譯
- 使用ilasm 和 ildasm編譯和反編譯工具對DLL檔案修改ASMLDA編譯
- 分享一個自動編譯,打包,簽名 android apk 的小指令碼編譯AndroidAPK指令碼
- iText7使用IExternalSignatureContainer進行簽名和驗籤AI
- Android反編譯和程式碼混淆Android編譯
- 利用X.509證書對XML進行加密和簽名XML加密
- Android 打包簽名 從生成keystore到完成簽名Android
- 利用Xcode進行重簽名XCode
- 使用jadx反編譯 除錯“XX值得買”APP獲取介面簽名key(一)編譯除錯APP
- ijkplayer 的編譯、打包 framework 和 https 支援編譯FrameworkHTTP
- 蘋果軟體打包簽名原理蘋果
- 簽名打包Android版apkAndroidAPK
- Android App的簽名打包AndroidAPP
- Android反編譯 檔名或擴充名太長Android編譯
- Android專案如何進行簽名打包釋出Android
- Android Apk反編譯系列教程(二)APK重打包AndroidAPK編譯
- Android反編譯和微信機器人初探Android編譯機器人
- Android v1 簽名 和 v2+ 簽名Android
- python2 反編譯pyinstaller打包的可執行exe檔案Python編譯
- 程式碼簽名證書能給哪些應用程式進行簽名
- IPA簽名怎麼進行重籤
- 加固+美團walle簽名打包+Python一鍵打包Python
- 使用Reflector和Filedisassembler逆向編譯反編譯.cs.dll檔案程式碼編譯