Android 过反抓包总结入门篇
做协议分析少不了抓包,但是对于新入门我们来说,这是一大难题,网上各种各样的工具不少。但是如果遇到反抓包,那就芭比Q了。但是一些简单的反抓包机制还是很好过的。
1.要理解反抓包常用的手段
情况1:抓包工具无法抓到包,但app可以正常联网使用,这可能就是防止代理抓包,中间人攻击式抓包。如:fiddler chars 等抓包工具。
可能原因:app内部使用的非http协议,可能是websocket或是tcp协议(qq,微信)
解决方案:对于这种情况,只能逆向app进一步去分析底层的二进制协议,暂无其他方法
可能原因:app内部设置了http协议不走代理流量(支付宝,美团等)
解决方案:一些第三方代理应用程序,可以通过使用vpn捕获数据包来强制应用程序的http协议使用代理流量。但是,如果是一个需要翻墙的应用程序,这种方法是无效的,因为翻墙本身需要一个海外vpn连接,你不能再使用这些代理软件打开另一个vpn。对于这种做法通俗一点说。让vpn虚拟出来一张网卡,让app走虚拟网卡。我们去抓虚拟网卡的包。我就没走代理。我走的是网卡我为什么抓不到。所以这也是大佬们常说的一句话,降维打击。
2.抓包工具无法抓到https包,且app无法联网,这种证书校验的,有单向证书校验,有双向证书校验
原因:大部分是app有对服务器证书的校验,因为我们使用的是抓包工具自己的证书,所以app证书校验不过去,也就自然拒绝发送请求,在外界看来app就相当于一个断网的状态单向认证解决方案:
解决方案1:逆向app,找到发包接口,动态调试下断点来获取https请求和返回的数据
解决方案2:逆向app,找到证书校验的位置,通过hook的方式来过掉校验。
解决方案3:使用xposed模块,当然这也是最推荐的一种做法,方便简单。最常见的有justme。双向认证解决方案:
解决方案1:扣出app的证书,找到证书的密码。发包的时候使用携带证书(这里本人在易语言方面使用过)
情况3:可以抓到包,但app无法联网,请求包中没有有效数据返回
很可能的原因是服务器端有对app客户端的证书校验,所以app虽然可以发送请求,但是服务器因为验证客户端证书不通过,拒绝返回数据。
如soul这个app,其中有客户端,服务端双向验证,在通过服务器证书校验后用fidder抓包会出现如下提示,表示需要客户端证书来验证客户端身份:双向认证解决方案:
那就在你的客户端上安装证书吧。
总结
只是个人见解释,有一部分个人理解的不通透,希望大佬多多指点,对于反抓包,个人感觉第一步应该做的是反抓包的形式,而不是第一个想到的是用这个工具可以不可以抓,用那个可以不可以。分析到反抓包的形式,自然而然问题就迎刃而解了。