草庐IT

文章向大家介绍安卓逆向,解决app抓包抓不到的问题,主要包括安卓逆向,解决app抓包抓不到的问题使用实例、应用技巧

阿里大叔说测试 2023-04-07 原文

本文章向大家介绍安卓逆向,解决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,我们只是要数据,不是要对抗新版本。

 还想学习的话,记得收藏及关注哦
 
感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接免费拿走:
① 2000多本软件测试电子书(主流和经典的书籍应该都有了)
② 软件测试/自动化测试标准库资料(最全中文版)
③ 项目源码(四五十个有趣且经典的练手项目及源码)
④ Python编程语言、API接口自动化测试、web自动化测试、App自动化测试(适合小白学习)
                    

                                                                                                                 
  ⑤ Python学习路线图(告别不入流的学习) 
上图的资料 在我的QQ技术交流群里(技术交流和资源共享,广告进来腿给你打断)
可以自助拿走,还有同行大神一起交流技术哦
   ————————————————
「学习资料 笔记 工具 文档领取」

备注“csdn111”
小姐姐邀你一起学习哦~~
和志同道合的测试小伙伴一起讨论测试技术吧!

 一定一定一定 要备注暗号:CSDN111

有关文章向大家介绍安卓逆向,解决app抓包抓不到的问题,主要包括安卓逆向,解决app抓包抓不到的问题使用实例、应用技巧的更多相关文章

  1. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - 如何使用 instance_variable_set 正确设置实例变量? - 2

    我正在查看instance_variable_set的文档并看到给出的示例代码是这样做的:obj.instance_variable_set(:@instnc_var,"valuefortheinstancevariable")然后允许您在类的任何实例方法中以@instnc_var的形式访问该变量。我想知道为什么在@instnc_var之前需要一个冒号:。冒号有什么作用? 最佳答案 我的第一直觉是告诉你不要使用instance_variable_set除非你真的知道你用它做什么。它本质上是一种元编程工具或绕过实例变量可见性的黑客攻击

  7. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  8. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

  9. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  10. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

随机推荐