Android 安全与防护策略
背景:
隨著應用的發(fā)展,應用的安全也變的越來越重要,有些不法分子開始反編譯或者劫持一些app源碼。甚至有人通過截圖然后做識別,獲取別人內(nèi)容。我們在處理時應該如何去保護我們的應用呢?接下來我們可以分析一下,一些場景,的用途
1.防止截屏:
在系統(tǒng)中,已提供防止截屏的標識,我們只需要加進去即可
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
?這個只能防止一個頁面被截屏,如果需要所有頁面,可以放在基類(父類)中,子類可以通過參數(shù)來配置
通過IDE的截屏也會報錯。
錄屏也是黑屏。?
2.數(shù)據(jù)加密
2.1SharedPreferences
SharedPreferences這個類,在Android中用的比較多,是用來存儲臨時數(shù)據(jù)的,但是這個類存儲的數(shù)據(jù)以xml文件落在文件夾里。所有,只要root設備后,找到該文件夾下的文件,就可以以明文的方式展示。有些開發(fā)者也把登錄密碼或者token值直接存儲,這樣就會導致這些數(shù)據(jù)有可能會被盜取。所以在SharedPreferences存儲一些重要數(shù)據(jù)可以進行加密。
2.2加密算法
加密分為對稱加密和非對稱加密。
對稱加密:所謂對稱,就是采用這種加密方法的雙方,使用方式用同樣的密鑰進行加密和解密。密鑰是控制加密及解密過程的指令。算法是一組規(guī)則,規(guī)定如何進行加密和解密。
非對稱加密:非對稱加密算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,如果用公開密鑰對數(shù)據(jù)進行加密,只有用對應的私有密鑰才能解密;如果用私有密鑰對數(shù)據(jù)進行加密,那么只有用對應的公開密鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法
3.網(wǎng)絡請求的證書
在APP中,應用和服務器請求需要網(wǎng)絡,常見的是http或者https。裸奔的網(wǎng)絡一般會被抓包工具抓去,這樣,我們的數(shù)據(jù)就會被被人劫持或者修改。
證書的綁定可以很好的解決這個問題,通過證書驗證,來拒絕非法攔截等
在啟用https和證書時,我們可以通過https的證書來進行證書校驗,如果證書驗證不過,會直接拒絕,目前證書在app的網(wǎng)絡中被廣泛投入使用。關于證書的綁定可以參考不同的網(wǎng)絡框架。
4.簽名驗證
每個應用都有自己的獨立簽名,我們可以獲取app當前的簽名MD5或者SHA1值,和原簽名的進行校驗,如果對不上,基本判斷是非法簽名。原簽名信息如果泄露應及時更換簽名文件,否則可能導致簽名信息被惡意盜用。
public String getSingleAlgorithm(Context context) {try {PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);byte[] cert = info.signatures[0].toByteArray();MessageDigest md = MessageDigest.getInstance("SHA1");byte[] publicKey = md.digest(cert);StringBuilder builder = new StringBuilder();for (int i = 0; i < publicKey.length; i++) {String appendString = Integer.toHexString(0xFF & publicKey[i]).toUpperCase(Locale.US);if (appendString.length() == 1)builder.append("0");builder.append(appendString);builder.append(":");}return builder.toString();} catch (Exception e) {e.printStackTrace();}return null; }5.代碼的混淆
代碼混淆,是一種安全措施。在應用中被廣泛使用。將代碼混淆后,提高了代碼的閱讀難度,即使apk被破解,混淆后的代碼閱讀難度更大。
如何混淆代碼?請看混淆詳解
混淆目前來說,對應用算是比較小的投入。在混淆開啟,需要注意的是會產(chǎn)生一個mapping.txt文件,這個文件對應的包,且該文件最好保存起來,如果在后期出現(xiàn)崩潰或者異常,可以通過trace追蹤還原源代碼所在行。有助于bug修復和定位
6.加固
加固已成為防脫殼的一種常見的手段,目前市場上有好多種加固方案,我們自己可以選擇一種,但是在進入應用市場,第三方也會對我們的應用進行加固。加固的目的就是提高apk的安全性,提高被破解的難度
7.dex加密
可以參考三方
8.android:exported="" 開閉
如果封閉起來,對應的組件只在內(nèi)部使用,無法和外部通訊,外部也無法去獲取你應用的通信。
9.其他會不定期補充進來
總結
以上是生活随笔為你收集整理的Android 安全与防护策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 排序算法:希尔排序
- 下一篇: android sina oauth2.