逆向與安全學習筆記
在Android工程中,程式碼檔案大致可以分成Java、Native和資原始檔。拿到apk包就可以針對這三類檔案進行破解。
一、常見app漏洞及風險
1、靜態破解;
2、二次打包;
3、通過Root獲取儲存資料;
4、介面擷取,獲取聊天記錄等敏感資訊;
5、輸入法資訊的攔截和獲取;
6、協議抓取;
二、混淆機制
通過Proguard工具進行二次打包
1、壓縮,去除沒有被引用到的,減少java位元組碼,減少包體大小;
2、優化;
3、混淆,將類、方法、屬性的名稱通過簡易字母進行替換;
4、預校驗;
生成四個檔案
dump.txt:class檔案的內部結構;
mapping.txt:混淆前後java檔案的名稱對映,在檢視異常上報堆疊的時候,可以用來定位問題;
seeds.txt:未被混淆的物件,keep住不混淆;
usage.txt:沒有被引用的物件,會被裁剪掉;
三、反編譯機制
平時常用的反編譯工具,apktool用於反編譯出資原始檔,也可以修改其中的檔案,然後進行二次打包;
Dex2jar工具,將dex檔案反編譯成jar包,用於檢視java原始碼;
四、敏感資訊的隱藏
1、如果將重要string.xml,java檔案,BuildConfig,一旦應用被反編譯,資訊就會洩露;
2、通過Base64將重要的資訊進行編碼,通過金鑰加密;
3、將重要資訊放在so檔案裡面也是一種方法,提高反編譯的成本;
4、對apk進行加固;
五、加固技術
1、漏洞分析
1)檔案檢查;
2)漏洞掃描;
3)後門檢測;
2、加密服務
1)防二次打包保護;
2)資原始檔保護;
3)DEX加殼保護,防止靜態反編譯;
4)防偵錯程式保護;
六、安全編碼
1、實時關注Android系統暴露的漏洞,進行修補;
比如之前我分享過WebView遠端執行惡意程式碼的漏洞,需要通過@JavaInterface註解的方式進行修復;
2、關鍵資訊的非明文儲存,比如使用加密資料庫,編碼或是加密儲存sp等等,防止反編譯或是root之後,可被檢視到;
3、將一些有可能會出現邊界情況,容易出現相容性的程式碼,進行異常的處理,比如在世界盃設定系統鬧鐘的介面實現上,就有一些引數高版本的android版本才有,就需要進行版本的判斷;在廠商高度定製的情況下,一些程式碼會被裁減、修改掉,也要做好ClassNotFound的異常處理;
七、總結
1、想要保護應用的安全,就需要在對應的破解方法下,提出相應反破解的技術方案,提高破解的成本;
2、混淆,靜態分析;
3、檢測偵錯程式,檢測模擬器,動態除錯;
4、防止重編譯,簽名校驗,apk,dex的完整性;
相關文章
- 關於網路安全的逆向分析方向學習筆記筆記
- 逆向學習筆記3——暫存器與彙編指令筆記
- 登入抓包逆向分析學習筆記筆記
- Linux系統與安全學習筆記(轉)Linux筆記
- 天草脫殼視訊學習筆記(逆向 OD)筆記
- UE4(5)逆向學習筆記(三)——UEDumper原始碼學習筆記原始碼
- linux安全學習筆記(轉)Linux筆記
- iOS逆向學習筆記 - 彙編(一) - 初識彙編iOS筆記
- 【學習筆記】mvc與mvvm筆記MVCMVVM
- Internet安全協議 學習筆記協議筆記
- iOS逆向筆記iOS筆記
- Nginx 學習筆記--程式與模組Nginx筆記
- MySQL與MariaDB學習筆記MySql筆記
- JDBC與JavaBean學習筆記(二)JDBCJavaBean筆記
- Java學習筆記--sql與javaJava筆記SQL
- SAP學習筆記--整合與核算筆記
- 飛機的 PHP 學習筆記九:安全PHP筆記
- CISSP學習筆記之安全管理基礎筆記
- numpy的學習筆記\pandas學習筆記筆記
- 深度學習與神經網路學習筆記一深度學習神經網路筆記
- Nginx 學習筆記--程式與模組(二)Nginx筆記
- 【學習筆記】OpenMV與arduino通訊筆記UI
- Java註解與反射學習筆記Java反射筆記
- Linux與DNS的學習筆記LinuxDNS筆記
- MySQL學習筆記——建立與約束MySql筆記
- sed 學習筆記(與大家共勉)(轉)筆記
- 期望 與 機率論 學習筆記筆記
- 飛機的 PHP 學習筆記之安全篇PHP筆記
- IT學習筆記筆記
- 學習筆記筆記
- Neo4j/cypher學習筆記與學習建議筆記
- iOS逆向學習筆記 - 彙編(四) - 迴圈&選擇[cmp 比較指令]iOS筆記
- Erlang學習筆記(五)記錄與對映組筆記
- Ansible學習筆記——基礎與配置筆記
- flutter 學習筆記-容器與佈局(1)Flutter筆記
- 區塊鏈學習筆記與思考-4區塊鏈筆記
- 計網學習筆記三 MAC與LAN筆記Mac
- 【學習筆記】Spring與Junit的整合筆記Spring