逆向與安全學習筆記

kanyechen發表於2018-09-09

在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的完整性;

相關文章