本文章向大家介绍安卓逆向,解决app抓包抓不到的问题,主要包括安卓逆向,解决app抓包抓不到的问题使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

有时候app抓不到包,这不是工具的问题,而是你没有搞清楚网络协议,

网络协议

网络协议,比如http协议,这是全球通用的,大家约定好的,你要开发软件,就要遵守这个协议,

浏览器都是只能抓到应用层,

TCP/IP五层模型
五层协议:
应用层:用户使用的应用程序都归属于应用层,作用为规定应用程序的数据格式。
抓包工具,比如fiddler,Charles,都是只能抓应用层的协议,wareshark可以抓传输层的协议,但是一般不用这个软件太重了,
http协议,FTP,SMTP协议,都在应用层,
tcp,udp,在传输层,
ip协议,在网络层,

传输层:网络层帮我们找到主机,但是区分应用层的应用就是靠端口,所以传输层就是建立端口到端口的通信。(端口范围0-65535,0-1023为系统占用端口)
网络层:区分不同的广播域或者子网(否则发送一条数据全世界都会收到,是灾难)。
数据链路层:定义电信号的分组方式。
物理层:基于电器特性发送高低点电压(电信号),高电压对应数字1,低电压对应数字0。

c)OSI七层模型
七层协议:(应用层、表示层、会话层)、传输层、网络层、(数据链路层、物理层)

比如pc版本的qq客户端,你就抓不到包,因为这个没有用http协议,而是用的tcp协议,所以你抓不到

你发了一个微信消息给另外一个人,发生了什么?

这个就是遵守这个tcp/ip五层协议,

先从应用层往下封包,----然后到物理层开始传输,---到了对方那里之后开始从物理层开始解包,----一直到在微信里面开始展示出来,

抓包方式:

抓包方式

第一种抓包:代理抓包

1,代理抓包,比如fiddler,Charles,这都是使用的代理抓包,这是抓的应用层,这种是用的最多的,

优点:
配置简单/抓取解析SSL方便
缺点:
APP对代理抓包的检测屏蔽越发厉害

原理:

注意,这个fiddler这样的工具,只能抓http,https,websocket三种协议,比如发一个邮件是抓不到的,因为这是smtp协议,

这种代理抓包,又叫做中间人攻击,

所以这个工具的抓包原理是什么样的,就是使用的代理,把请求拦截,然后转发,

代理抓不到包的原因第一种:app设置了自己的代理

主要是app设置了自己的代理,安卓会优先走app自己设置的代理,所以就不会走抓包工具的代理,

如果判断app没有走我们的fiddler代理呢?

就是保持网络连接,关闭抓包工具,如果app还能访问正常,就说明没有走我们的fiddler代理,因为正常是fiddler关闭了之后,整个的app就访问不了了,

怎么解决这个问题?

使用一个app,proxydroid,这个app强制把代理往fiddler上面转,

原理就是配置了全局代理,强制把ip指向指定的端口上,

案例:mm应用市场

代理抓不到包的第二种:ssl pining ssl证书校验,这个是大部分的app抓不到包的原因

就是app对服务端的证书做校验,我们也叫做单向认证,

而fiddler上面肯定是没有这个证书的,所以app会校验不过,

为什么浏览器不会出现这个问题,因为浏览器不会校验这个证书,而app是公司自己开发的,可以加这个校验的功能,

怎么解决这个问题,

ssl pinning解决办法:

1.使用Hook手段 Hook APP端网络请求库对 ssl证书的判断方法

借助xposed 模块 justtrustme apk 地址:https://github.com/Fuzion24/JustTrustMe  ----通过安吉星演示

借助frida 程序 DroidSSLUnpinning https://github.com/WooyunDota/DroidSSLUnpinning  ----这个没有演示,

解决的思路是直接强制校验证书通过

示例:安吉星

2.逆向APP 扣出里面的证书 放到charles里 让charles使用真实证书做代理(在双向验证中讲) ---这种没有演示

部分 ssl pinning 失效的原因:---这种没有演示

Hook 失败,APP的网络请求库代码被混淆,或者大厂自己实现了一套网络请求库

解决办法:

逆向APP,找到证书验证的地方,修改xposed 的 justtrustme 或者 frida的DroidSSLUnpinning 代码,

重新Hook

这个是一个比较麻烦的事情,

代理抓不到包的第三种,双向认证

双向认证 使用者很少,会影响服务器性能 很难找到有app使用这种app

双向认证解决办法:

客服端校验仍然使用SSL unPinning方法

服务端校验,需把APP里的证书导入到代理抓包软件中,让代理抓包工具使用真实的APP证书。charles 比较方便配置

示例:soul

如何找到APP里的证书

反编译APP 在assert文件夹里有.p12 .pem之类文件cer ssl

反编译后,在源代码里大量搜索

Hook 监听Assert文件夹 知道读了哪些文件

可能有密码 Hook java.security.KeyStore 查看密码

通常有上面三个手段,就可以把大部分抓不到包的问题都解决了,

代理抓不到包的第四种,没有走应用层-----了解

socket通信是IP层,fiddler/charles抓不到,用wireshark抓包 在网卡混杂模式里讲wireshark

比如PC QQ

解析socket通信数据麻烦,要分析APP协议解析部分

代理抓不到包的第五种,私有协议----了解

这种不是通用的协议,

wireshark能抓到,不知道协议细节,解不了包。

需要分析APP协议解析部分

第二种抓包:网卡混杂抓包--了解

2,网卡混杂抓包,webshark,这个能抓传输层,和应用层,但是一般不用这个软件太重了,

第三种抓包:路由器抓包--了解

3,路由器抓包,网络组网方式,因为所有的流量都要从路由器过,使用特殊的路由器,可以进行路由器抓包,

公司有的老板,监控每一个员工的访问记录,就是路由器可以监控每一个机器的访问记录

这个也没有什么可将的,你去买一个有这个功能的路由器就可以了,

第四种抓包:hook域名--了解

4,hook域名,把https改成http,

5,hook网络请求库,比如request,

这种hook的抓包就比较麻烦了,了解一下有这种方式,但是不做为掌握,

注意:

 1.安卓7.0(包括7.0)以后,安卓系统不再信任用户安装的证书。(例如 fiddler/charles的代理抓包证书) mumu模拟器
解决7.0以后用户证书不信任问题两种方法:
(1)root手机,把代理证书放到系统证书根目录下
用户CA证书目录
/data/misc/user/0/cacerts-added
系统CA证书目录
/system/etc/security/cacerts
问题:
有的手机root /system 分区是只能读 仍然不能把证书放到系统根目录, 比如魅族pro5
df 命令
mount -o rw,remount /system
(2) hook 系统方法,强行让系统信任用户证书:
比如:使用xposed框架的justtrustme模块 和 frida的DroidSSLUnpinning
tricks:
1.优先使用安卓系统低版本抓包
优先使用安卓4.0 5.0 6.0抓包
2.优先使用APP低版本抓包
比如微信7.0以下 在安卓4.0-6.0上 容易抓包微信小程序
优先使用能用的APP最低版本

所以工具充分准备,

各种抓包工具都准备好,fiddler,Charles,wirsshark,

各种模拟器都安装一下,夜神,mumu,雷电,4.0 5.0 6.0

各种手机都准备一下,安卓4.0 5.0 6.0 7.0 root过的,还有苹果手机,

没有必要因为一个抓包非要搞定一个高版本的app,我们只是要数据,不是要对抗新版本。