当前位置: 首页 > news >正文

app逆向抓包技巧:noProxy、vpn与sslpinning检测绕过

本篇博客旨在记录学习过程,不可用于商用等其它途径

app逆向抓包技巧:noProxy、vpn与sslpinning检测绕过

  • noProxy检测
    • 场景
    • 检测原理
    • 绕过方式
  • vpn检测
    • 场景
    • 检测原理
    • 绕过方式
  • sslpinning检测
    • 场景
    • 检测原理
    • 绕过方式
      • 降低系统版本
      • 将服务器证书添加到系统证书
      • 采用Xposed框架和JustTrustMe模块或者sslunpining模块
      • Frida Objection绕过
      • hooker工具包
      • HTTPS 修改为 HTTP
    • 题外场景

noProxy检测

场景

WIFI网络下设置Charles代理
在这里插入图片描述
这个时候手机访问百度网址是可以抓到包的
在这里插入图片描述
访问猿人学2020app却抓不到包
在这里插入图片描述

检测原理

⽤代理⽅式抓包容易被检测到,
System.getProperty("http.proxyHost")
System.getProperty("http.proxyPort")
这个app没有使用代理请求,所以使用代理模式无法抓到包
new OkHttpClient().newBuilder().proxy(Proxy.NO_PROXY).build();

绕过方式

使⽤vpn⽅式抓包,这里使用的是工具Posternvpn抓包运⾏在⽹络层,相对代理抓包更加底层,意味着可以捕获更多的上层流量。
在这里插入图片描述

vpn检测

场景

打开目标app后发现提示网络不给力且Charles无法抓到包
在这里插入图片描述

检测原理

  1. 判断网络接口名字包含ppp0tun0
  2. 获取当前网络Transpoart字样

绕过方式

其实也是根据检测原理来绕过,使用Frida Hook执行下面代码实现绕过

function hook_vpn(){Java.perform(function (){var String = Java.use("java.lang.String");var NetworkInterface = Java.use("java.net.NetworkInterface");NetworkInterface.getName.implementation = function (){var result = this.getName();console.log("find getName:", result);if (result && (result.indexOf("ppp0") > -1 || result.indexOf("tun0") > -1)){result = String.$new("rmnet_data0");}return result;}var ConnectivityManager = Java.use("android.net.ConnectivityManager");ConnectivityManager.getNetworkCapabilities.implementation = function (arg){var result = this.getNetworkCapabilities(arg);console.log("find getNetworkCapabilities:", result);return null;}Java.use("android.net.NetworkCapabilities").hasTransport.implementation = function(v){console.log(v)var res = this.hasTransport(v)console.log("res hasTransport ==> ", res)return false;}})
}setImmediate(hook_vpn);

需要先运行好Frida环境,然后执行frida -UF -l 代码脚本.js,就能hook到运行中的app
在这里插入图片描述

这里刷新页面,重新加载就能绕过检测了
在这里插入图片描述

sslpinning检测

场景

charles抓包下,某斑马app在注册时发现点击登录毫无反应,看抓包结果提示SSL handshake with client failed,确定是触发了SSL/TLS Pinning(证书锁定)
在这里插入图片描述
在这里插入图片描述

关闭charles抓包后,再次点击登录可以看到有请求成功
在这里插入图片描述

检测原理

SSL/TLS Pinning(证书锁定),也叫作单向认证,其将服务器提供的SSL/TLS证书内置到移动端开发的App客户端中,当客户端发起请求时,通过比对内置的证书和服务器端证书的内容,以确定这个连接的合法性。

Android7.0以上的系统版本,应用不再信任用户自己安装的用户证书,一般应用只信任系统预装证书或者是自身的内置证书,导致SSL/TLS Pinning(证书锁定),用charles或者fiddler无法抓取数据包。这种情况下,App会返回网络出错,且无法获取数据的信息,也就出现了上面出现的情况了。

不过在需要查看发包情况时,就需要解决SSL/TLS Pinning了

绕过方式

降低系统版本

使用Android7.0以下的系统版本

将服务器证书添加到系统证书

这个需要能拿到服务器证书(比较麻烦),且要添加进系统级证书中(参考:Windows与Android实现Charles证书设置)。

采用Xposed框架和JustTrustMe模块或者sslunpining模块

这两个模块可以通过Xposed仓库下载或者GITHUB下载导入
GITHUB:JustTrustMe、sslunpining
sslunpining模块为例,开启之后需要重新打开app就能绕过检测了。
在这里插入图片描述

Frida Objection绕过

Objection 是基于 Frida 框架开发的一个工具,它提供了一组便捷的功能和脚本,以简化在移动应用程序中使用 Frida 进行动态分析和漏洞利用的过程。
安装:pip install objection

由于Objection依赖Frida,在运行Objection前需要先运行Frida
启动命令:objection -g 包名 explore
题外话:如果不知道报名,可以打印当前activity的信息查看包名adb shell dumpsys activity | grep packageName
在这里插入图片描述
使用Objection控制app后,输入android sslpinning disable后就可以绕过了。
在这里插入图片描述

hooker工具包

hooker是一个基于frida实现的逆向工具包。为逆向开发人员提供统一化的脚本包管理方式、通杀脚本、自动化生成hook脚本、内存漫游探测activity和service、firda版JustTrustMe、disable ssl pinning
下载地址:github
虽然项目不支持windows,我们只拿disable ssl pinning相关的脚本
使用js/just_trust_me.js脚本hook也能绕过检测

HTTPS 修改为 HTTP

sslpinning是针对SSL证书校验,如果把https请求改为http就不会有这个问题了

  1. 替换 app 中 https 的 url 为 http,hook到net的url包修改请求请求url,这样charles就能抓到包了
  2. 但是改成http请求容易被服务后台检测到,所以需要使用charles map remote 建⽴映射规则,将 http 映射为 https 发包
    在这里插入图片描述

题外场景

有些app进入后也会提示网络失败或者内容更新失败,比如某咨询app进去后提示以下信息
在这里插入图片描述
这个时候不能直接定位为被SSL/TLS Pinning检测,需要结合抓包情况分析。根据抓包结果可以确定实际能法宝成功,只是响应结果failed了,实际原因是没有登录服务器没有返回数据,登录后就可以成功拿到数据了。
在这里插入图片描述

而像某新闻app进去页面便是以下情况
在这里插入图片描述

实际上也不是被SSL/TLS Pinning检测了,根据抓包结果分析应该是进入页面前的请求返回的数据拦截了后续的发包请求,这种用上面的绕过方式是解决不了的,需要看它返回的内容根据情况做反检测处理。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring Boot 3.x gradle脚手架工程build.gradle详解
  • Linux: 进程概念详解
  • DataX PostgreSQL 读写支持Geometry类型
  • 【C#】读取与写入txt文件内容
  • Redis中zset结构的常用命令总结
  • HTTP、HTTPS、SOCKS5三种协议特点
  • spring boot 笔记大杂烩
  • 【ARM】CMSIS 软件标准接口
  • 回归预测|基于灰狼优化GWO-Transformer-BiLSTM组合模型的数据回归预测Matlab程序 多特征输入单输出
  • 前端(三):Ajax
  • 【Linux】Linux环境基础开发工具使用之软件包管理(yum)与 Linux编辑器(vim)
  • 力扣面试经典100题
  • php7.2后解密微信推送过来的数据
  • 使用 Java RestClient 与 Elasticsearch 进行商品文档操作
  • 进阶SpringBoot之 Thymeleaf 模板引擎
  • 【译】JS基础算法脚本:字符串结尾
  • [译]CSS 居中(Center)方法大合集
  • AWS实战 - 利用IAM对S3做访问控制
  • Cumulo 的 ClojureScript 模块已经成型
  • Docker入门(二) - Dockerfile
  • export和import的用法总结
  • JAVA SE 6 GC调优笔记
  • mockjs让前端开发独立于后端
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Twitter赢在开放,三年创造奇迹
  • vue 配置sass、scss全局变量
  • 观察者模式实现非直接耦合
  • 使用 QuickBI 搭建酷炫可视化分析
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 赢得Docker挑战最佳实践
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • PostgreSQL之连接数修改
  • ​低代码平台的核心价值与优势
  • # 安徽锐锋科技IDMS系统简介
  • # 透过事物看本质的能力怎么培养?
  • #FPGA(基础知识)
  • #pragma once
  • ${ }的特别功能
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (20)docke容器
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)kafka实战——kafka源码编译启动
  • (转)memcache、redis缓存
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Framework杂记
  • .net 受管制代码
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)