本文章向大家介绍安卓逆向,解决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,路由器抓包,网络组网方式,因为所有的流量都要从路由器过,使用特殊的路由器,可以进行路由器抓包,
公司有的老板,监控每一个员工的访问记录,就是路由器可以监控每一个机器的访问记录
这个也没有什么可将的,你去买一个有这个功能的路由器就可以了,
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,我们只是要数据,不是要对抗新版本。