亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果手機上安裝了數據包捕獲或任何嗅探器,則阻止 android 應用程序運行

如果手機上安裝了數據包捕獲或任何嗅探器,則阻止 android 應用程序運行

達令說 2022-10-12 16:06:17
我想讓我的 Android 應用程序安全。在某些應用程序中,如果手機安裝了網絡嗅探器程序(數據包捕獲、ssl 捕獲等),應用程序會發出警報(刪除數據包捕獲)并關閉。如何添加類似的安全措施?我應該尋找哪些技術?
查看完整描述

2 回答

?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

在安裝網絡嗅探器時禁用它不會使您的應用程序更安全。作為用戶,我會對這種無效的所謂安全措施感到非常惱火。

為了保護您的應用程序,您應該考慮攻擊者會做什么。假設您擔心網絡流量分析,請注意有主動和被動攻擊。

被動攻擊

包括網絡嗅探、網絡監控等。攻擊者可以在安卓手機本身使用VPNService監控所有流量,無需root。當然,您可以嘗試根據已安裝的應用程序檢測并阻止它,但是攻擊者將繼續前進并設置外部捕獲。他們可以在他們的筆記本電腦上設置一個接入點,并將手機連接到它,然后從筆記本電腦上運行網絡捕獲。

要正確保護您免受此類攻擊者的侵害,請確保您的通信已加密(使用 HTTPS/TLS)。那么無論某人是否能夠在電話或本地網絡上記錄網絡流量,他們將只能看到目標 IP 地址和主機名,而不能看到實際的請求詳細信息(URL、cookie 等)

主動攻擊

包括中間人(MitM)、SSL/TLS代理等??刂凭W絡的攻擊者可以攔截連接并試圖偽裝成服務器。如果流量沒有使用 TLS 保護,這很簡單。即使您確實實施了 TLS,您仍然必須驗證服務器提供的證書。TLS 代理將無法顯示由受信任的 CA 簽名的有效證書,因此通常這很好。

然而,用戶可以將他們自己的 CA 添加到設備中,這將允許他們再次讀取未加密的應用程序流量。為了防止這種情況,您可以考慮證書固定。這樣,您在應用程序中硬編碼受信任的證書,而用戶無法以通常的方式覆蓋它。

最后請注意,堅定的攻擊者還可以修補(修改)您的 apk,將其安裝在模擬器中,或嘗試反編譯它。從中他們還可以學習如何與服務器通信。在開發服務器時請記住這種情況。

進一步閱讀

https://developer.android.com/training/articles/security-ssl


查看完整回答
反對 回復 2022-10-12
?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

我使用 ConnectivityManager 來檢測 VPN 服務是否啟用。使用它我停止調用 api 調用。


要檢測 VPN 是否啟用:


fun isVPNEnabled(): Boolean {

    val connectivityManager = mContext.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager

    return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {

        val network = connectivityManager.activeNetwork

        val capabilities = connectivityManager.getNetworkCapabilities(network)

        capabilities!= null && capabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN)

    } else {

        connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_VPN)!!.isConnectedOrConnecting

    }

}

如果啟用了 VPN,則使用攔截器停止 api 調用:


class VPNInterceptor(val context: Context) : Interceptor {

override fun intercept(chain: Interceptor.Chain): Response {

    val codeSnippet = CodeSnippet(context)

    return if (codeSnippet.isVPNEnabled()) {

        Timber.d("====>VPN Status : true")

        val errorResponse = ErrorResponse("Please turn-off VPN service for security reason.", true)

        Response.Builder()

            .code(Constants.InternalHttpCode.VPN_CODE) // Whatever code

            .body(ResponseBody.create(null, "")) // Whatever body

            .protocol(Protocol.HTTP_2)

            .message(errorResponse.moshiObjToString(ErrorResponse::class.java))

            .request(chain.request())

            .build()

    } else {

        Timber.d("====>VPN Status : false")

        chain.proceed(chain.request())

    }

}

}


val httpClient: OkHttpClient.Builder = OkHttpClient.Builder()

    httpClient.connectTimeout(2, TimeUnit.MINUTES) //Connection time out set limit

    httpClient.readTimeout(2, TimeUnit.MINUTES)  //Connection read time out set limit

    httpClient.addInterceptor(VPNInterceptor(context))


查看完整回答
反對 回復 2022-10-12
  • 2 回答
  • 0 關注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號