歡迎新同學的光臨
… …
人若無名,便可專心練劍
我不是一條咸魚,而是一條死魚啊!
0x01 前言
眾所周知,Android系統在安裝Apk的程序中,會對Apk進行簽名校驗,校驗通過后才能安裝成功,
APK簽名是為了保證APK的完整性和來源的真實性,分為JAR簽名和V2簽名兩種方案,核心思想均是計算APK內容的hash,再使用簽名演算法對hash進行簽名,校驗時通過簽名者公鑰解密簽名,再與校驗者計算的APK內容hash進行比對,一致則校驗通過,
在開始之前我們先了解一下APK的基本結構
0x02 APK基本結構
Android應用程式包檔案(APK)是一種Android作業系統上的應用程式安裝檔案格式,其英文全稱為Application Package File,
一個Android應用程式的代碼想要在Android設備上運行,必須先進行編譯,然后被打包成一個Android系統能識別的檔案,而這種能被Android系統識別并運行的檔案格式便是APK,
一個APK檔案內包含被編譯的代碼檔案(.dex檔案)、資源檔案(resources)、assets、證書(certificates)和清單檔案(manifest file),
APK檔案基于ZIP檔案格式,它與JAR檔案的構造方式相似,并以.apk作為檔案擴展名,它的互聯網媒體型別是application/vnd.android.package-archive,
- classes.dex
apk的代碼所在,所有的代碼、業務邏輯、演算法等,是由java代碼轉化過來的,一般篡改、加固都是針對這個檔案
- resources.arsc:
資源檔案(字符檔案),對一款軟體顯示的文字進行修改(對英語軟體漢化)
注:反編譯后消失,被反編譯res檔案下的values檔案夾
- META-INF
apk的簽名檔案,是apk正盜版的唯一標識(一款軟體想要安裝在安卓系統上,必須要有一個合法的META-INF檔案,不同的開發者簽名檔案一定是不一樣的)
注:一般反編譯后就沒有該檔案了,因為反編譯會破壞這個apk,所以反編譯后簽名檔案會被處理掉
- res檔案
圖示、畫面圖片等
注:反編譯后會比apk情況下多一些檔案,其中resources.arsc檔案一般會被反編譯到res檔案下的values檔案夾下
- lib目錄
這里存放應用程式依賴的native庫檔案,一般是用C/C++撰寫,這里的lib庫可能包含4中不同型別,根據CPU型號的不同,大體可以分為ARM,ARM-v7a,MIPS,X86,分別對應著ARM架構,ARM-V7架構,MIPS架構和X86架構,這so庫在APK包中
lib目錄包含了指定處理器的已編譯代碼,是特定于處理器的軟體層,可分為如下目錄:
Armeabi:包含所有基于ARM處理器的編譯后代碼
armeabi-v7a:包含所有基于ARMv7及更高版本的處理器的編譯后代碼
arm64-v8a:包含所有基于ARMv8、ARM64及更高版本的處理器的編譯后代碼
x86:包含所有基于x86處理器的編譯后代碼
x86_64:包含所有基于x86_64處理器的編譯后代碼
Mips:包含所有基于MIPS處理器的編譯后代碼
- assets目錄
用于存放需要打包到APK中的靜態檔案,和res的不同點在于,assets目錄支持任意深度的子目錄,用戶可以根據自己的需求任意部署檔案夾架構,而且res目錄下的檔案會在.R檔案中生成對應的資源ID,assets不會自動生成對應的ID,訪問的時候需要AssetManager類
- AndroidManifest.xml
配置清單檔案:標識這一款軟體有多少個頁面、服務、組件
0x03 簽名教程
使用signapk.jar為APK進行簽名,為應用程式配置系統的簽名:
解釋: 第一個xxx.apk是專案打包后的apk, 第二個xx.apk被系統簽名后的apk
java -jar signapk.jar platform.x509.pem platform.pk8 app-debug.apk launcherApp-debug.apk
- 結果提示:
Usage: signapk publickey.x509[.pem] privatekey.pk8 input.jar output.jar
再次調整未被系統簽名的apk的路徑,將apk拖動放到命令列中,重新輸入:
java -jar signapk.jar platform.x509.pem platform.pk8 C:\Users\xxx\Desktop\signapk.jar\app-release.apk launcherApp.apk
注:有些APK會做反篡改保護,重打包后APK就會用不了,所以重打包之后還需要測驗APK能否正常運行,
啟動時不立刻閃退,并且運行至修改過的位置不崩潰,就是修改成功了,
0x04 其它知識以及案例
請前往如下:
https://blog.csdn.net/Ananas_Orangey/article/details/122090111
https://blog.csdn.net/m0_46204016/article/details/105605946
參考鏈接:
https://ljd1996.github.io/2019/08/26/Android%E7%AD%BE%E5%90%8D%E7%AC%94%E8%AE%B0/
https://www.jianshu.com/p/286d2b372334
https://blog.csdn.net/m0_37258694/article/details/113528815
https://blog.csdn.net/freeking101/article/details/106742734
https://www.cnblogs.com/LuLuLuHao/p/12863978.html
https://www.52pojie.cn/thread-1513149-1-1.html
https://blog.csdn.net/qq_34149335
《智能硬體安全》劉鍵皓等編著
我自橫刀向天笑,去留肝膽兩昆侖
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/401675.html
標籤:其他
