猿问

如果手机上安装了数据包捕获或任何嗅探器,则阻止 android 应用程序运行

我想让我的 Android 应用程序安全。在某些应用程序中,如果手机安装了网络嗅探器程序(数据包捕获、ssl 捕获等),应用程序会发出警报(删除数据包捕获)并关闭。如何添加类似的安全措施?我应该寻找哪些技术?


达令说
浏览 104回答 2
2回答

守候你守候我

在安装网络嗅探器时禁用它不会使您的应用程序更安全。作为用户,我会对这种无效的所谓安全措施感到非常恼火。为了保护您的应用程序,您应该考虑攻击者会做什么。假设您担心网络流量分析,请注意有主动和被动攻击。被动攻击包括网络嗅探、网络监控等。攻击者可以在安卓手机本身使用VPNService监控所有流量,无需root。当然,您可以尝试根据已安装的应用程序检测并阻止它,但是攻击者将继续前进并设置外部捕获。他们可以在他们的笔记本电脑上设置一个接入点,并将手机连接到它,然后从笔记本电脑上运行网络捕获。要正确保护您免受此类攻击者的侵害,请确保您的通信已加密(使用 HTTPS/TLS)。那么无论某人是否能够在电话或本地网络上记录网络流量,他们将只能看到目标 IP 地址和主机名,而不能看到实际的请求详细信息(URL、cookie 等)主动攻击包括中间人(MitM)、SSL/TLS代理等。控制网络的攻击者可以拦截连接并试图伪装成服务器。如果流量没有使用 TLS 保护,这很简单。即使您确实实施了 TLS,您仍然必须验证服务器提供的证书。TLS 代理将无法显示由受信任的 CA 签名的有效证书,因此通常这很好。然而,用户可以将他们自己的 CA 添加到设备中,这将允许他们再次读取未加密的应用程序流量。为了防止这种情况,您可以考虑证书固定。这样,您在应用程序中硬编码受信任的证书,而用户无法以通常的方式覆盖它。最后请注意,坚定的攻击者还可以修补(修改)您的 apk,将其安装在模拟器中,或尝试反编译它。从中他们还可以学习如何与服务器通信。在开发服务器时请记住这种情况。进一步阅读https://developer.android.com/training/articles/security-ssl

慕标5832272

我使用 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))
随时随地看视频慕课网APP

相关分类

Java
我要回答