找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2791

积分

0

好友

383

主题
发表于 2025-12-24 14:51:47 | 查看: 75| 回复: 0

0x1 前言

在当前的移动应用安全测试与漏洞挖掘中,Android APP的渗透测试技能已成为一项重要需求。无论是企业安全评估、众测项目还是日常学习,掌握如何有效抓取APP流量、逆向分析其逻辑并绕过常见防护机制,都是一线安全工程师的必备能力。本文旨在系统性地梳理从基础抓包配置、到进阶的SSL证书绕过(单向/双向认证)、再到frida动态脱壳与Root检测隐藏等一系列实战技巧,帮助你构建完整的Android APP测试链路。

0x2 APP抓包基础与证书配置

一、Android抓包概述

抓包是流量分析与安全研究的基础环节。常用的抓包工具包括Burpsuite、mitmproxy、Fiddler及Reqable等,抓包方式则主要有设置系统代理、AP热点抓包及透明代理等。不同的方式适用于不同场景,而安全研究者常会遇到因SSL证书校验、不走代理等技术对抗导致无法抓包的问题。本文将从基础配置开始,逐步拆解这些问题的解决方案。

二、Android版本与证书信任的区别

Android系统对证书的信任策略在7.0版本发生了重要变化:

  • Android < 7.0:系统同时信任“用户证书”和“系统证书”。抓包工具生成的CA证书只需安装到“用户证书”区域即可生效。
  • Android ≥ 7.0:默认情况下,系统仅信任预置在/system/etc/security/cacerts/目录下的“系统证书”,且要求证书文件格式为[证书哈希值].0。简单地将证书导入“用户证书”区域将无法被APP信任,这是导致高版本Android抓包失败的主要原因之一。

三、使用Move Certificate模块安装系统证书

对于已获取Root权限的设备,最便捷的解决方案是使用Magisk模块Move Certificate,它能自动将用户证书转换为系统证书格式并移至正确目录。

  1. 模块简介Move Certificate是一个Magisk/KernelSU/APatch模块,支持Android 7-15,可将用户证书自动迁移至系统证书目录。
  2. 安装步骤
    • 从GitHub项目页面( https://github.com/ys1231/MoveCertificate )下载最新版本的ZIP包。
    • 使用adb push命令将ZIP包上传至设备,例如:adb push MoveCertificate-v1.5.5.zip /sdcard/Download/
    • 在Magisk Manager中,选择“模块”->“从本地安装”,刷入该ZIP包并重启设备。
    • 将抓包工具(如Burpsuite、Yakit)导出的CA证书文件(需先转换为[hash].0格式)放置于设备的/data/local/tmp/cert/目录下。
    • 再次重启设备,证书应成功安装至系统证书区。

四、Magisk(面具)Root环境搭建

获取并管理Root权限是进行深度测试的前提。Magisk是目前主流的系统级Root解决方案,它支持Systemless方式,对系统改动小,易于隐藏Root状态。

  1. 设备选择:建议选用易于刷机和社区支持度高的设备作为测试机,如Google Pixel 3/4系列或小米8/10系列。
  2. 安装Magisk:可从其官方GitHub仓库( https://github.com/topjohnwu/Magisk )下载Manager APK进行安装。对于模拟器或特定设备,可能需要通过自定义Recovery刷入Magisk ZIP包来完成Root。

五、生成与部署抓包证书

以Burpsuite和Yakit为例,讲解如何生成适用于高版本Android的系统证书。

  1. 从Burpsuite导出证书:在Proxy -> Options -> Proxy Listeners中,导出CA Certificate,选择Der格式。
  2. 证书格式转换:使用OpenSSL命令行工具进行转换。
    # 将der格式转为pem格式
    openssl x509 -inform DER -in cacert.der -out cacert.pem
    # 计算证书哈希值
    hash=$(openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -n 1)
    # 重命名为系统证书格式
    mv cacert.pem "${hash}.0"
  3. 从Yakit导出证书:Yakit可直接导出PEM格式证书,同样使用上述openssl x509 -inform PEM -subject_hash_old命令计算哈希并重命名。
  4. 部署证书:将生成的${hash}.0文件放入设备的/data/local/tmp/cert/目录,并确保已安装并启用Move Certificate模块,重启后证书即生效。

六、基础抓包测试

完成证书安装后,即可进行基础抓包测试。

  1. 在Burpsuite中配置一个监听所有接口(如0.0.0.0:8080)的代理。
  2. 在Android设备的Wi-Fi设置中,手动配置代理,服务器地址为运行Burpsuite的电脑IP,端口为8080。
  3. 在设备上访问任意HTTP/HTTPS网站或目标APP,Burpsuite应能成功截获流量。

0x3 使用Reqable进行便捷抓包

Reqable(小黄鸟)是一款功能强大的跨平台抓包工具,其Android端应用配合桌面端能实现流畅的抓包体验。

  1. 安装与证书配置
    • 在桌面端Reqable中安装根证书。
    • 通过USB连接Android设备并开启调试,使用桌面端Reqable的“安装证书到Android设备”功能。对于Android 7+,仍需借助Move Certificate模块将其转化为系统证书,或直接安装Reqable提供的Magisk证书模块。
  2. 抓包操作
    • 确保手机与电脑处于同一局域网。
    • 在手机端Reqable应用中,扫描电脑端Reqable的二维码或手动配置服务器地址。
    • 开启抓包,所有经过手机的网络流量将被捕获并同步至电脑端分析。
    • 为进一步利用Burpsuite的扫描和重放功能,可将Reqable捕获的流量通过上游代理转发至Burpsuite。

0x4 使用Brook代理进行抓包

当主流代理方式被目标APP检测或绕过时,可以尝试使用小众代理工具。Brook是一个高效的Socks5/HTTP代理软件,使用Golang编写,跨平台支持好。

  1. 部署:在Android设备上安装Brook客户端,在电脑上运行Brook服务器端。
  2. 配置抓包:在手机端Brook配置Socks5代理,指向电脑端的Brook服务器。随后在抓包工具(如Burpsuite)中设置透明代理或Socks5代理,监听来自Brook的流量。这种方式有时能绕过APP对系统代理的检测。

0x5 APP反编译与frida动态脱壳

一、APK查壳

在对APP进行逆向分析前,首先需要判断其是否加壳。可以使用Android KillerPKIDApkScan-PKID等工具进行快速查壳,识别常见的第三方加固厂商。

二、APK静态反编译

对于未加固或已脱壳的APK,可以进行静态分析。

  1. 解压APK:APK本质是ZIP包,可直接解压获得assetslibresclasses.dex等资源文件。
  2. dex转jar:使用dex2jar工具将classes.dex文件转换为JAR包。
    sh d2j-dex2jar.sh classes.dex
  3. 源码查看:使用JD-GUIJADX-GUIBytecode Viewer等工具打开生成的JAR包,查看反编译后的Java代码。JADX-GUI功能强大,支持直接拖入APK文件进行分析,并提供了代码搜索、跳转等便捷功能。

三、使用BlackDex进行静态脱壳

BlackDex是一款运行在Android手机上的脱壳工具,支持高版本系统,无需依赖复杂环境。

  1. BlackDex APK安装到已Root的设备。
  2. 运行BlackDex,选择目标APP,即可一键脱壳,输出DEX文件到/sdcard/Download/目录。
  3. 使用adb pull拉取DEX文件,再用dex2jarJADX-GUI进行后续分析。

四、使用frida进行动态脱壳

对于强壳或动态加载的代码,frida动态脱壳是更有效的手段。frida是一个动态代码插桩工具,在移动端安全测试中应用广泛。

  1. 环境准备
    • PC端:安装Python及frida绑定库。建议使用稳定版本以避免兼容性问题,例如frida==16.1.0frida-tools==12.1.3
    • 设备端:根据设备CPU架构(arm/arm64/x86等),从frida releases页面下载对应的frida-server,推送到设备并赋予执行权限。
      adb push frida-server /data/local/tmp/
      adb shell
      su
      cd /data/local/tmp
      chmod 755 frida-server
      ./frida-server &
  2. 使用frida-dexdump脱壳
    • 在PC端执行frida-ps -Ua,找到目标APP的进程名或PID。
    • 使用frida-dexdump工具进行脱壳。
      # 通过包名脱壳
      frida-dexdump -U -f com.example.target
      # 或通过PID脱壳
      frida-dexdump -U -p 1234
    • 命令执行后,会在当前目录下生成脱壳出的DEX文件,随后即可进行静态分析。

0x6 绕过APP SSL单向证书校验

许多APP会开启SSL Pinning(证书绑定),只信任自身的特定证书,导致即使安装了系统CA证书也无法抓包。此时需要借助Hook框架来绕过校验。

  1. 安装LSPosed框架:LSPosed是基于Riru/Zygisk的Xposed框架实现,可以在不修改APK的情况下Hook应用行为。通过Magisk模块方式刷入,并安装其管理器APK。
  2. 使用SSL绕过模块:在LSPosed中激活以下模块之一,并勾选目标APP:
    • JustTrustMe:经典的单向证书校验绕过模块。
    • TrustMeAlready:另一个流行的绕过模块。
    • JustMePlush:功能更全面的增强版。
    • JustTrustMePP:针对某些定制化校验的改进版。
  3. 激活模块并重启APP后,通常即可成功抓取HTTPS流量。如果单个模块无效,可尝试组合使用或寻找更新版本。

0x7 绕过APP SSL双向证书校验

更严格的安全策略是双向SSL认证,即客户端也需要向服务器提供合法证书。此时仅绕过客户端校验无效,会出现“400 No required SSL certificate was sent”等错误。

一、使用r0capture导出客户端证书

r0capture是一款强大的安卓应用层抓包通杀脚本,其核心功能之一正是应对双向认证。

  1. 环境与脚本准备:确保frida环境(建议16.x版本)正常工作。从GitHub( https://github.com/r0ysue/r0capture )下载r0capture.py脚本。
  2. 运行脚本:授予目标APP存储权限。运行脚本以自动Hook并导出客户端证书。
    python r0capture.py -U -f com.example.target -v
  3. 获取证书:脚本运行成功后,客户端证书(P12格式)会保存在设备的/sdcard/Download/[包名].p12,默认密码为r0ysue。使用adb pull导出。

二、在抓包工具中导入客户端证书

  1. Burpsuite导入
    • 进入Proxy -> Options -> Proxy Listeners,选中监听器,点击Edit
    • Certificate标签页中,选择Use a custom server certificate,导入导出的P12文件并输入密码。
  2. Reqable导入
    • 在电脑端Reqable的SSL证书设置中,添加“客户端证书”,选择导出的P12文件并输入密码。
    • 配置完成后,抓包工具即能代表客户端提供合法证书,从而完成双向SSL握手,成功截获流量。

0x8 绕过Root检测

许多金融、支付类APP会检测设备是否已Root,一旦发现则禁止运行或限制功能。

一、Magisk自身隐藏功能

  1. Magisk Hide(旧版)/排除列表(新版):在Magisk设置中,进入“排除列表”(或Configure Denylist),勾选需要对其隐藏Root状态的目标APP。
  2. 启用Magisk随机包名:在Magisk设置中,开启“隐藏Magisk应用”功能,Magisk Manager将以随机包名重新安装,增加检测难度。
  3. 启用上述功能后需重启APP或设备生效。

二、使用Shamiko模块增强隐藏

Shamiko是一款专为隐藏Root和Magisk设计的模块,效果更强。

  1. 安装:通过Magisk刷入Shamiko模块ZIP包并重启。
  2. 配置重要:在Magisk设置中关闭“遵守排除列表”开关。Shamiko会接管隐藏工作。
  3. 生效:在Magisk的“排除列表”中勾选目标APP。使用Root检测工具(如RootBeer)验证隐藏效果。如果无效,尝试重启设备。

0x9 总结

本文系统性地介绍了Android APP安全测试中的关键实战技能链:从基础抓包环境搭建、高低版本证书处理,到使用frida进行动态分析与脱壳;从利用Hook框架绕过常见的SSL单向证书绑定,到通过r0capture等高级技巧攻克严格的双向认证;最后还探讨了如何隐藏Root状态以通过应用检测。这些技能环环相扣,熟练掌握后能够应对市面上大多数Android APP的安全测试挑战。需要注意的是,移动安全对抗技术迭代迅速,在实际测试中需灵活组合各种工具与方法,并持续关注社区的新工具与新思路。




上一篇:Python列表从入门到精通:创建、访问、操作与生成式完整指南
下一篇:腾讯IntelliScene 2.0:视觉引导的多智能体AI如何生成高质量游戏场景
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-9 11:53 , Processed in 0.308783 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表