欧美三级电影完整|亚洲一二三四久久|性爱视频精品一区二区免费在线观看|国产精品啪啪视频|婷婷六月综合操人妻视频网站|99爱免费视频在线观看|美女一级片在线观看|北京熟女88av|免费看黄色A级电影|欧美黄色毛片儿

Android 安全與防護(hù)策略

2023-04-12


背景:


隨著應(yīng)用的發(fā)展,應(yīng)用的安全也變的越來(lái)越重要,有些不法分子開(kāi)始反編譯或者劫持一些app源碼。甚至有人通過(guò)截圖然后做識(shí)別,獲取別人內(nèi)容。我們?cè)谔幚頃r(shí)應(yīng)該如何去保護(hù)我們的應(yīng)用呢?接下來(lái)我們可以分析一下,一些場(chǎng)景,的用途


1.防止截屏:

在系統(tǒng)中,已提供防止截屏的標(biāo)識(shí),我們只需要加進(jìn)去即可


getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);


這個(gè)只能防止一個(gè)頁(yè)面被截屏,如果需要所有頁(yè)面,可以放在基類(父類)中,子類可以通過(guò)參數(shù)來(lái)配置



通過(guò)IDE的截屏也會(huì)報(bào)錯(cuò)。



錄屏也是黑屏。


2.數(shù)據(jù)加密


2.1SharedPreferences




SharedPreferences這個(gè)類,在Android中用的比較多,是用來(lái)存儲(chǔ)臨時(shí)數(shù)據(jù)的,但是這個(gè)類存儲(chǔ)的數(shù)據(jù)以xml文件落在文件夾里。所有,只要root設(shè)備后,找到該文件夾下的文件,就可以以明文的方式展示。有些開(kāi)發(fā)者也把登錄密碼或者token值直接存儲(chǔ),這樣就會(huì)導(dǎo)致這些數(shù)據(jù)有可能會(huì)被盜取。




所以在SharedPreferences存儲(chǔ)一些重要數(shù)據(jù)可以進(jìn)行加密。


2.2加密算法


加密分為對(duì)稱加密和非對(duì)稱加密。


對(duì)稱加密:所謂對(duì)稱,就是采用這種加密方法的雙方,使用方式用同樣的密鑰進(jìn)行加密和解密。密鑰是控制加密及解密過(guò)程的指令。算法是一組規(guī)則,規(guī)定如何進(jìn)行加密和解密。


非對(duì)稱加密:非對(duì)稱加密算法需要兩個(gè)密鑰:公開(kāi)密鑰(publickey)和私有密鑰(privatekey)。公開(kāi)密鑰與私有密鑰是一對(duì),如果用公開(kāi)密鑰對(duì)數(shù)據(jù)進(jìn)行加密,只有用對(duì)應(yīng)的私有密鑰才能解密;如果用私有密鑰對(duì)數(shù)據(jù)進(jìn)行加密,那么只有用對(duì)應(yīng)的公開(kāi)密鑰才能解密。因?yàn)榧用芎徒饷苁褂玫氖莾蓚€(gè)不同的密鑰,所以這種算法叫作非對(duì)稱加密算法


3.網(wǎng)絡(luò)請(qǐng)求的證書(shū)


在APP中,應(yīng)用和服務(wù)器請(qǐng)求需要網(wǎng)絡(luò),常見(jiàn)的是http或者h(yuǎn)ttps。裸奔的網(wǎng)絡(luò)一般會(huì)被抓包工具抓去,這樣,我們的數(shù)據(jù)就會(huì)被被人劫持或者修改。


證書(shū)的綁定可以很好的解決這個(gè)問(wèn)題,通過(guò)證書(shū)驗(yàn)證,來(lái)拒絕非法攔截等


在啟用https和證書(shū)時(shí),我們可以通過(guò)https的證書(shū)來(lái)進(jìn)行證書(shū)校驗(yàn),如果證書(shū)驗(yàn)證不過(guò),會(huì)直接拒絕,目前證書(shū)在app的網(wǎng)絡(luò)中被廣泛投入使用。關(guān)于證書(shū)的綁定可以參考不同的網(wǎng)絡(luò)框架。


4.簽名驗(yàn)證


每個(gè)應(yīng)用都有自己的獨(dú)立簽名,我們可以獲取app當(dāng)前的簽名MD5或者SHA1值,和原簽名的進(jìn)行校驗(yàn),如果對(duì)不上,基本判斷是非法簽名。原簽名信息如果泄露應(yīng)及時(shí)更換簽名文件,否則可能導(dǎo)致簽名信息被惡意盜用。




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.代碼的混淆


代碼混淆,是一種安全措施。在應(yīng)用中被廣泛使用。將代碼混淆后,提高了代碼的閱讀難度,即使apk被破解,混淆后的代碼閱讀難度更大。


如何混淆代碼?請(qǐng)看混淆詳解


混淆目前來(lái)說(shuō),對(duì)應(yīng)用算是比較小的投入。在混淆開(kāi)啟,需要注意的是會(huì)產(chǎn)生一個(gè)mapping.txt文件,這個(gè)文件對(duì)應(yīng)的包,且該文件最好保存起來(lái),如果在后期出現(xiàn)崩潰或者異常,可以通過(guò)trace追蹤還原源代碼所在行。有助于bug修復(fù)和定位


6.加固


加固已成為防脫殼的一種常見(jiàn)的手段,目前市場(chǎng)上有好多種加固方案,我們自己可以選擇一種,但是在進(jìn)入應(yīng)用市場(chǎng),第三方也會(huì)對(duì)我們的應(yīng)用進(jìn)行加固。加固的目的就是提高apk的安全性,提高被破解的難度


7.dex加密


可以參考三方


8.android:exported="" 開(kāi)閉


如果封閉起來(lái),對(duì)應(yīng)的組件只在內(nèi)部使用,無(wú)法和外部通訊,外部也無(wú)法去獲取你應(yīng)用的通信。


9.其他會(huì)不定期補(bǔ)充進(jìn)來(lái)


本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請(qǐng)?jiān)谖闹凶⒚鱽?lái)源及作者名字。

免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com