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

小迪安全v2023学习笔记(八十六讲)—— FridaHOOK证书提取SSL双向校验绕过

文章目录

  • 前记
  • APP攻防——第八十六天
    • 资产收集篇&Frida&HOOK&Xposed&证书提取&单向双向绕过&检测抓包
      • APP - 综合分析-Mobexler&MobSF识别
      • APP - 综合分析-HOOK&Frida
        • HOOK&Frida介绍
        • Frida安装及使用
      • APP - 某社交-双向证书绕过&Frida&HOOK
        • 绕过手段介绍
        • 案例演示
          • frida+r0capture+WireShark
          • frida+HOOK-JS+BurpSuite(推荐)
          • burp导入证书
      • APP - 某游戏-单向证书绕过&XP框架&Frida

前记

  • 今天是学习小迪安全的第八十六天,本来昨天应该更新笔记的,但是这个模拟器老是让我的电脑死机,而且有些东西莫名其妙的报错,改来改去花费了不少时间
  • 本节课内容主要围绕Frida绕过SSL证书双向检验,其他也没什么东西
  • 主要是理解这种绕过的思路,然后学会使用frida去绕过这种检验即可
  • 所需要用到的资源已放至下方链接,需要自取:
    • https://pan.baidu.com/s/1j9KqDpiY9hUur36s8jvVAQ
    • 提取码:xxxd

APP攻防——第八十六天

资产收集篇&Frida&HOOK&Xposed&证书提取&单向双向绕过&检测抓包

APP - 综合分析-Mobexler&MobSF识别

  • 在安卓逆向当中,我们主要会用到两款工具:

    1. MobSF:移动安全框架 (MobSF) 是 Android、iOS 和 Windows Mobile 中移动应用程序的安全研究平台。MobSF 可用于各种用例,例如移动应用程序安全、渗透测试、恶意软件分析和隐私分析。静态分析器支持流行的移动应用程序二进制文件,如 APK、IPA、APPX 和源代码。同时,动态分析器支持 Android 和 iOS 应用程序,并提供了一个用于交互式仪表测试、运行时数据和网络流量分析的平台。
      在这里插入图片描述

    2. AppInfoScanner:一款适用于以HW行动/红队/渗透测试团队为场景的移动端(Android、iOS、WEB、H5、静态网站)信息收集扫描工具,可以帮助渗透测试工程师、攻击队成员、红队成员快速收集到移动端或者静态WEB站点中关键的资产信息并提供基本的信息输出,如:Title、Domain、CDN、指纹信息、状态信息等。
      在这里插入图片描述

  • 两款工具各有优劣,MobSF主要是针对APP的一款分析工具,同时支持动静态分析,但是本地搭建比较复杂;而AppInfoScanner主要是一款快速分析的工具,只支持静态分析,但是使用比较方便

  • 我们主要还是使用MobSF去进行APP分析,如果搭建比较困难,可以选择使用Mobexler这款虚拟机,他里面集成了MobSF和一些其他的APP逆向工具

APP - 综合分析-HOOK&Frida

HOOK&Frida介绍
  • 要了解今天这节课的核心,我们需要搞懂什么是HOOK,以及什么是Frida,他们有什么用
  • 首先什么是HOOK,直译过来就是钩子,说简单一点就是“在APP的代码执行到关键位置时,由调试器临时更改内存指令导致CPU抛出异常,操作系统把异常传给调试器,此时调试器就可以插入我们自己的代码指令,执行完之后再进行原本的流程”
  • 而Frida就是一款好用的跨平台HOOK工具,他可以通过ptrace/zygote注入将JS引擎塞进目标进程,执行我们自己的代码
  • 我们今天的课程就需要使用到Frida去动态插入代码绕过SSL证书检测,它有三个核心组件:
    • frida-server:推送到Android端的小马,负责注入
    • frida-tools:PC端CLI(包括frida-psfrida-tracefrida-ls-devices
    • JS APIJava.useInterceptor.attachNativeFunctionMemory 读写
Frida安装及使用
  • 我们要使用frida去调试,需要在安卓模拟器端和PC端都装上这个东西
  • 首先在本机安装frida
pip install frida
pip install frida-tools

在这里插入图片描述

  • 然后我们在github上去找到对应版本的frida-server,注意这里一定要和我们安装的版本相对应
    在这里插入图片描述

  • 我们可以通过如下命令去看模拟器的系统位数:

getprop ro.product.cpu.abi
  • 这里用的是夜神模拟器,所以还是安装终端或者用adb输入命令查看:
    在这里插入图片描述

  • 这里是x86的,那我们就下载x86的就行,然后将他放到安卓模拟器上:

.\nox_adb.exe push .\frida-server-16.1.7-android-x86 /data/local/frida-x86
  • 然后我们直接用adb启动即可:
    在这里插入图片描述

  • 没有任何报错就说明frida-server启动成功了

  • 接着我们再看一看PC端能否正常连接即可,首先输入以下命令开启流量转发:

.\nox_adb.exe forward tcp:27042 tcp:27042
  • 然后再输入以下命令验证是否连接成功:
frida-ps -U
frida-ps -R

在这里插入图片描述

  • 如果成功输出模拟器上面的软件包信息,就说明成功启动frida,接下来我们就可以使用frida

APP - 某社交-双向证书绕过&Frida&HOOK

绕过手段介绍
  • 本节课我们主要的目的是在如何绕过双向SSL证书验证,因为有的软件可能为了防止抓包,会采取双向证书校验来确定双方都是合法的身份

  • 小迪演示的那个案例好像是注册不了了,然后用某音也很容易闪退,所以这里就只用探探演示了,理解思路即可,首先我们直接WIFI抓包看看是否有反代理机制:
    在这里插入图片描述

  • 这里它会显示网络错误,并且啥也抓不到,说明可能是WIFI代理不行,那我们再尝试用软件代理:
    在这里插入图片描述

  • 还是显示网络错误,但是抓到了一些东西,虽然并不是我们想要的,那我们猜测是它采用了SSL证书校验,于是我们使用昨天讲的XP框架尝试绕过:
    在这里插入图片描述
    在这里插入图片描述

  • 这时抓到了很多包,说明就是SSL证书校验的问题,但是他仍然显示网络错误,软件并不能正常运行,所以我们猜测他使用了双向的证书校验

  • 我们为了绕过这个限制,主要有三种方式

    1. frida+r0capture+WireShark:这个是一个安卓端通杀绕过方案,唯一的缺点就是只能导入到WireShark中查看流量包
    2. frida+HOOK-JS+BrupSuite:这个只针对于一些检测不是很严的双向验证,但是这是更为推荐的绕过手段
    3. 导入证书:这个基本也属于通杀的绕过方案,但是利用难度比较大,适合能够进行反编译、并且包含证书文件的APP
  • 那下面我们就通过一个简单的案例来演示这三种绕过手段

案例演示
frida+r0capture+WireShark
  • 下载地址:https://github.com/r0ysue/r0capture,下载好之后放到本地,然后我们先启动frida-server
.\nox_adb.exe shell
su root
cd /data/local
./frida-x86
  • 接着再转发端口流量:
.\nox_adb.exe forward tcp:27042 tcp:27042
  • 然后执行命令开启抓包,将捕获到的流量保存到.pacp文件中:
python r0capture.py -U -f com.tencent.gamehelper.smoba -p tencent.pcap
  • 这里的com.tencent.gamehelper.smoba是需要捕获流量包的软件包包名,这个怎么查看呢

  • 我们可以通过夜神模拟器自带的amaze文件管理器查看,也可以通过APK资源提取这个软件查看,比如这里我们抓取的应用是探探:
    在这里插入图片描述

  • 他的包名为com.p1.mobile.putong,所以我们在PC端运行刚才的命令开启抓包,注意这里一定要把代理关掉!!!
    在这里插入图片描述

  • 可以看到这里能够成功访问,没有报网络错误,然后当前文件夹下就会出现tencent.pcap包,只需要用WireShark打开查看即可:
    在这里插入图片描述

  • 但是使用WireShark来看网络包,对于我们还是太吃力了,所以我们更推荐使用下面一种方法

frida+HOOK-JS+BurpSuite(推荐)
  • 这是我们更为推荐的一种抓包方式,因为他能够将数据包导入到BP中,便于我们进行渗透
  • 但是他并不是通杀方案,有的APP可能检测深度和检测手段比较强,或者走的一些其他协议,仍可能导致抓包失败
  • 我们使用这个手段前,需要下载HOOK-JS文件:https://github.com/apkunpacker/FridaScripts
  • 然后我们就按照上一个方法,启动frida-server,通过如下命令使用HOOK-JS文件,这里记得先将代理打开!!!
frida -U -f <APP包名> -l <HOOK-JS文件>

在这里插入图片描述

  • 如果这里你和我一样,出现了如下报错:
    在这里插入图片描述

  • 解决方法就是将SSLUnpinning.js中的前41行代码更改为:

console.warn(Process.arch, "environment Detected")  
/*  
On higher version of android , there may be issue that android reject runtime registered classes  
and throw error that writable dex are not allowed. We can try to set different permission for those file.  
*/  
Java.performNow(function () {  const DexClassLoader = Java.use("dalvik.system.DexClassLoader");  DexClassLoader.$init.implementation = function (dexPath, optimizedDirectory, libraryPath, parent) {  const JFile = Java.use('java.io.File');  if (dexPath.includes("/data/data/") && dexPath.includes("frida") && dexPath.includes("dex")) {  console.warn(`[*] Making ${dexPath} readonly`)  JFile.$new(dexPath).setReadOnly()  this.$init(dexPath, optimizedDirectory, libraryPath, parent);  }  this.$init(dexPath, optimizedDirectory, libraryPath, parent);  };  
})  let do_dlopen = null;  
let call_ctor = null;  
let LibraryName = "libflutter.so";  
const moduleName = Process.pointerSize === 4 ? "linker" : "linker64";  
let reg = Process.arch == "arm" ? "r0" : "x0";  
let Arch = Process.arch;  
Process.getModuleByName(moduleName)  .enumerateSymbols()  .forEach(function (sym) {  if (sym.name.indexOf('do_dlopen') !== -1) {  do_dlopen = sym.address;  } else if (sym.name.indexOf('call_constructor') !== -1) {  call_ctor = sym.address;  }  })  
Interceptor.attach(do_dlopen, function () {  let pathPtr;  if (Process.pointerSize === 4) {                // 32 位(ARM / x86)  pathPtr = this.context.esp.add(4).readPointer();  } else {                                          // 64 位  pathPtr = Process.arch === 'x64'             // x86-64  ? this.context.rdi  : this.context.x0;                 // ARM64  }  const Lib = pathPtr.readCString();  if (Lib && Lib.indexOf(LibraryName) !== -1) {  Interceptor.attach(call_ctor, function () {  Hook(LibraryName);  })  }  
})
  • 然后再次运行上述命令即可抓到包
burp导入证书
  • 这个适用于APP能够被反编译,并且能够找到证书文件的情况

  • 比如探探这个软件,我们先通过APK资源提取器将apk文件提取下载下来:
    在这里插入图片描述

  • 然后放到PC端本地,通过上传到MobSF去分析,他会帮我们反编译,但是我这里没有反编译成功

  • 或者这里推荐一个在线网站:https://www.decompiler.com/,编译完成后就可以直接看了:
    在这里插入图片描述

  • 一般是找assert或者res这种目录:
    在这里插入图片描述

  • 一般找的证书文件呢,大致后缀为:p12cercrtdercertpem等等,那这里也可以直接搜这些关键字看有没有
    在这里插入图片描述

  • 这里就只找到了这一个,然后我们可以尝试将他下载下来导入到BP中:
    在这里插入图片描述

  • 选择证书文件并输入密码,这里一般需要输入密码的才是真证书,至于密码去哪里找,我们就需要用到逆向的知识了

  • 去反编译软件找到对应代码,慢慢找密码,但是现代的软件一般都加壳了,所以emmm,拿到源码的概率比较小

  • 拿到密码之后就导入到BP中,然后就可以直接抓包了,不需要再额外配置了

APP - 某游戏-单向证书绕过&XP框架&Frida

  • 单向SSL证书验证上节课已经讲过了,这里就不再重复演示了,只不过这节课我们并不需要用到XP框架,直接用我们上述的方法即可绕过
  • 我已经不想折腾了,上面的内容,不知道是我模拟器有问题,还是电脑太烂了,重启电脑无数次,所以你们有时间就下去自己复现吧
http://www.dtcms.com/a/398390.html

相关文章:

  • 律师事务所网站方案网站 建设 初期规划
  • 舒适化诊疗的关键支持:伟荣局部麻醉器械使用体验
  • Kanass入门到实战(1) - 安装教程
  • 【Linux系统】深入理解线程同步,实现生产消费模型
  • 【2025-系统规划与管理师】第六章:云资源规划
  • JDK17 新特性梳理
  • ZooKeeper源码分析与实战-模块一:基础篇
  • 网站建设 优势网站开发需求报告
  • jikuaiarc项目构建,参考arc,把arc一直到antlr4,生成g4文件
  • 白话讲讲GenAI、LLM、Agent、RAG、LangChain
  • (25.09)使用Livox-mid-360录制数据并运行Fast-lio2命令
  • 【图文】Codex接入Kimi K2/GLM-4.5 环境配置指南 (Windows/macOS/Ubuntu)
  • 异步 vs 同步:JavaScript中的速度与激情
  • Django模型与数据表的映射方式详解:不止Code First与Database First
  • LangChain4J-(7)-Function Calling
  • C程序设计-01程序设计和C语言
  • 为何上不了建设银行网站网络营销工程师前景
  • 设计模式的几个准则
  • python+nodejs+springboot在线车辆租赁信息管理信息可视化系统
  • 计算机毕业设计 基于Python的音乐推荐系统 Python 大数据毕业设计 Hadoop毕业设计选题【附源码+文档报告+安装调试】
  • 《人机分工重塑开发:遗留系统重构的AI实践指南》
  • 从0死磕全栈第十天:nest.js集成prisma完成CRUD
  • 网站开发做什么科目网页设计与网站建设连接数据库
  • 如何看网站是html几代做的加拿大pc网站搭建
  • C#的MVVM架构中的几种数据绑定方式
  • Jmeter接口测试:jmeter组件元件介绍,利用取样器中http发送请求
  • Apache Tomcat 部署与配置
  • 网站建设详细合同范本西部数码网站管理助手破解版
  • 权限提升专项训练靶场:hacksudo: L.P.E.
  • 工作笔记----lwip的数据管理结构pbuf源码解析