您现在的位置是:群英 > 开发技术 > 移动开发
Android App防止抓包的方法操作是什么
Admin发表于 2022-08-13 17:50:211294 次浏览
这篇文章主要介绍了title,小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望大家通过这篇文章可以有所收获。

前言

app安全非常重要,尤其是数据安全。但是我们知道通过charles等工具可以对app的网络请求进行抓包,如果我们的数据没有进行加密,这样这些信息就会被清除的提取出来,会被不法分子进行利用。保证数据安全有很多种方法,今天简单聊一聊如何通过简单几步防止抓包。

正文

当我们进行网络请求的时候,一般通过url的openconnection来建立连接,代码如下:

urlconnection conn = url.openconnection()

其实openconnection这个函数还有一个版本,可以传入一个proxy对象,代码如下:

public urlconnection openconnection(proxy proxy)
    throws java.io.ioexception

这样我们通过这个函数建立连接时传入一个proxy.no_proxy,即可达到防止抓包的效果,如charles等抓包工具就无法看到我们的链接信息了,代码如下

urlconnection conn = url.openconnection(proxy.no_proxy)

官方对于proxy.no_proxy描述如下:

/**
 * a proxy setting that represents a {@code direct} connection,
 * basically telling the protocol handler not to use any proxying.
 * used, for instance, to create sockets bypassing any other global
 * proxy settings (like socks):
 * <p>
 * {@code socket s = new socket(proxy.no_proxy);}
 *
 */
public final static proxy no_proxy = new proxy();
// creates the proxy that represents a {@code direct} connection.
private proxy() {
    type = type.direct;
    sa = null;
}

我么可以看到no_proxy实际上就是type属性为direct的一个proxy对象,这个type有三种:

  • direct
  • http
  • socks

官方描述如下:

public enum type {
    /**
     * represents a direct connection, or the absence of a proxy.
     */
    direct,
    /**
     * represents proxy for high level protocols such as http or ftp.
     */
    http,
    /**
     * represents a socks (v4 or v5) proxy.
     */
    socks
};

这样因为是直连,所以不走代理。所以charles等工具就抓不到包了,这样一定程度上保证了数据的安全。

当然这种方式只是通过代理抓不到包,如果直接通过路由还是可以抓包的。

补充:使用证书校验

这种方式要在app嵌入证书,以okhttp为例:

当okhttp使用x509trustmanager对服务器证书进行校验时,如果服务器证书的 subjectdn 和嵌入证书的 subjectdn 一致,我们再进行签名内容 signature 的比对,如果不一致,抛出异常。示例代码如下:

  • 首先从本地读出证书,获取一个x509certificate
val mycrt: x509certificate by lazy {
    getcrt(r.raw.my_ca)
}

private fun getcrt(@rawres raw: int): x509certificate {
    val certificatefactory = certificatefactory.getinstance("x.509")
    val input = applicationcontext.resources.openrawresource(raw)
    input.use {
        return certificatefactory.generatecertificate(input) as x509certificate
    }
}
  • 检查服务器证书时对比嵌入的证书
private fun gettrustmanagerinrelease(): x509trustmanager {
    return object : x509trustmanager {
        override fun checkclienttrusted(chain: array<x509certificate>, authtype: string?) {}
        override fun getacceptedissuers(): array<x509certificate> = arrayof()
        override fun checkservertrusted(chain: array<x509certificate>, authtype: string?) {
            val mycrt: x509certificate = mycrt
            if (chain[0].subjectdn.name == mycrt.subjectdn.name) {
                if (!mycrt.signature!!.contentequals(chain[0].signature)) {
                    throw sslhandshakeexception("签名不符!")
                }
            }
        }
    }
}
  • 将自定义的 sslsocketfactory 和 x509trustmanager 将入到 okhttp 客户端
    private fun getclient(ssl: sslsocketfactory, trustmanager: x509trustmanager): okhttpclient {
        return okhttpclient.builder()
            .retryonconnectionfailure(true)
            .proxy(proxy.no_proxy)
            .sslsocketfactory(ssl, trustmanager)
            .build()
    }

这样一来便无法通过 drony + charles 进行抓包了


以上就是关于“Android App防止抓包的方法操作是什么”的介绍了,感谢各位的阅读,希望文本对大家有所帮助。如果想要了解更多知识,欢迎关注群英网络,小编每天都会为大家更新不同的知识。

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: app防止抓包
相关信息推荐
2022-10-13 17:43:58 
摘要:c语言源程序文件名的后缀是“.c”。c语言源程序经过C编译程序编译生成后缀为“.obj”的二进制文件(目标文件),然后由称为“连接程序”(Link)的软件把目标文件与C语言提供的各种库函数连接起来,生成后缀为“.exe”的可执行文件。
2022-05-09 17:40:31 
摘要:bootstrap sass的使用方法:首先下载Ruby;然后从官网下载Sass;接着用“@mixin”来定义代码块;最后用“@include”来复用即可。
2022-07-14 17:09:18 
摘要:在PHP中,cookie可以删除;可以将cookie的有效期设置为当前时间以前来删除,因为删除cookie需要确保该cookie的有效期在过去,才能够触发浏览器的删除机制,语法为“setcookie("Cookie_name", "" , time()-1);”。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部