目錄
安裝包簽名
反編譯保護
應用完整性校驗
程式可被任意除錯
程式資料任意備份
資源檔案保護
?
App安全檢測實踐基礎——客戶端程式安全

注明:影響范圍 Android所有版本
安裝包簽名
1、描述
每個Android應用程式想要安裝運行,必須經過簽名.所以開發者在發布安裝包時,必須對安裝包進行簽名.簽名資訊中包含的組織資訊,將便于用戶識別安裝包的真偽.部分手機殺毒軟體也是基于簽名資訊進行查殺的.因此一個完整詳細的簽名資訊,有助于提高用戶分辨真偽安裝包.
2、程序
- 使用簽名工具或者jeb查看簽名和證書資訊,查看簽名是否符合以下標準格式,CN=(名字與姓氏), OU=(組織單位名稱), O=(組織名稱), L=(城市或區域名稱), ST=(州或省份名稱), C=(單位的兩字母國家代碼),
-
jarsigner -verify -verbose -certs xxx.apk檢測發現如下資訊——不符合規定要求,

3、建議
- 將安裝包進行簽名并檢測安裝包簽名的例外,
- 完善企業簽名組織資訊
- 在應用發布時使用企業簽名對安裝包進行簽名
反編譯保護
1、描述
Android應用程式是使用Java進行開發,運行于Java虛擬機(Dalvik)的應用程式.通過反編譯工具可以很方便地得到Dalvik虛擬機所執行的Smali代碼和Java代碼.便可對Android應用程式進行分析,修改,重打包.若沒有任何加固保護措施,應用程式的邏輯將完完整整地暴露給分析者.
2、程序
- 使用Jeb、AndroidKiller_v1.3.1等反匯編工具加載目標Apk,檢測Apk是否經過混淆或者加固
經過檢測發現情況如下:
代碼沒有經過混淆或者加固,攻擊人員可以通過攻擊反編譯.直接在原始碼層次進行攻擊.


3、建議
- 對客戶端代碼進行代碼混淆
- 對客戶端進行加殼加固處理
應用完整性校驗
1、描述
由于Android系統固有的缺陷,Android應用分發渠道管理機制等問題,導致Android客戶端程式很容易被反編譯篡改/二次打包,經任意簽名后可在各個渠道或論壇中發布,這不僅損害了開發者的知識產權,更可能威脅到用戶的敏感資訊及財產安全,因此對客戶端自身進行完整性校驗尤為必要.
2、程序
- 只用apktool工具解包然后在重新打包apk,檢測apk能否正常使用
apktool d apk
apktool b dir -o out.apk
重簽名apk
如果app沒有對dex或者簽名進行校驗的話,可以隨意修改smali代碼和資源檔案.比如可以修改圖示.下圖展示了把某證券類應用圖片替換為手電筒應用.
更改之前:



更改之后:

發現變成其他頭像了;還是可以打開的;

改過之后,進行簽名設定

執行命令:java -jar signapk.jartestkey.x509.pem testkey.pk8 原apk檔案名 新apk檔案名
安裝APK;
若沒有進行自校驗,則可以正常打開軟體,則測驗不通過,說明存在漏洞風險
若應用進行了自校驗,則無法啟動軟體,測驗通過;不存在;
3、建議
- 增加簽名驗證邏輯
- 增加完整性校驗邏輯
程式可被任意除錯
1、描述
當在AndroidManifest.xml檔案中設定android:debuggable="true"時,應用程式可以以除錯模式啟動,并被任意除錯器附加除錯.
2、程序
- 使用Jeb加載apk客戶端檔案
- 檢查manifest檔案的application節點是否設定android:debuggable="true"
如果客戶端把android:debuggable屬性設定為true.可以試用adb命令對客戶端進行除錯,方便進行逆向分析;存在漏洞風險

3、建議
- 不設定android:debuggable屬性,或設定該屬性的值為false;
程式資料任意備份
1、描述
當在AndroidManifest.xml檔案中未設定android:allowBackup屬性值或,設定android:allowBackup="true"時,可對應用程式私有目錄下的所有資料進行備份.
2、程序
通過檢測發現AndroidManifest.xml中存在備份的設定為真;

3、建議
- 設定AndroidManifest.xml中的android:allowBackup的屬性值為false
資源檔案保護
1、描述
Android apk中的資源主要分為assets資源和res資源兩類.Assets資源存放在APP的assets目錄下,該類檔案是一些原始檔案,APP打包時并不會對其進行編譯,而是直接打包到APP中,對于這一類資源檔案的訪問,應用層代碼需要通過檔案名對其進行訪問.Res資源則存放在APP的res目錄下,該類資源在APP打包時大多會被編譯,變成二進制檔案,并會為每個該類檔案賦予一個resource id.對于該類資源的訪問,應用層代碼則是通過resource id進行訪問的.Android apk開發程序中公司大都提倡命名規范化,因此通過檔案名稱非常容易理解其含義,這樣有利于開發者理解和維護應用,但是同時也給應用破解者提供了方便,破解者通過這些命名很容易便可找到他們需要的檔案位置,并理解這些檔案的意圖.
2、程序
普通app沒有經過資源保護的res檔案夾如下:

經過混淆后的res檔案夾如下

還可以通過——隱藏的方式對資源檔案進行保護.經過加固隱藏后的res檔案夾
隱藏了一些比較重要的檔案
經過混淆后的res檔案夾如下
檔案夾中有各種的后綴做混淆:如:.a .iso .d .conf 等
普通app沒有經過資源保護的assets檔案夾

如果代碼經過混淆,或者有加殼措施,不能完整恢復源代碼的,都可以認為此項安 全,
3、建議
- 使用加固工具或者AndResGuard對資源進行混淆保護
參考鏈接:
https://www.cnblogs.com/ffrs/p/11352485.html
https://blog.csdn.net/ssjjtt1997/article/details/98947034
https://blog.csdn.net/cc20032706/article/details/70670163
https://www.cnblogs.com/Durant0420/p/13397665.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/189891.html
標籤:其他
下一篇:Spinner下拉串列

