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

1464

积分

0

好友

216

主题
发表于 昨天 19:18 | 查看: 4| 回复: 0

0x1 前言

在当前的移动互联网时代,移动应用安全测试已成为网络安全领域的重要分支。无论是企业招聘渗透测试工程师,还是实际的安全众测项目,对Android、iOS等移动端应用进行安全评估的需求日益增长。掌握Android APP的抓包、逆向分析与安全绕过技巧,是安全从业者不可或缺的核心技能。

本文旨在系统性地梳理Android APP安全测试中的关键技术环节,涵盖从基础抓包设置、反编译分析,到高级的Frida动态脱壳、单向/双向SSL证书认证绕过,以及Root环境检测与隐藏技巧。通过详细的步骤讲解与工具使用演示,帮助读者构建完整的移动应用安全测试知识体系。

图片

0x2 APP抓包基础

一、浅谈

抓包是流量分析与安全研究的基础。常用的抓包软件包括Burpsuite、Mitmproxy、Fiddler以及移动端专用的Reqable(小黄鸟)等。抓包方式主要有设置系统代理、AP热点抓包、透明代理等,不同方式适用于不同的场景。

在Android环境中进行抓包,常会遇到因系统版本、应用自身保护机制(如SSL Pinning、证书绑定)导致的抓包失败问题。本节将系统介绍Android环境下的常用抓包技术与相关配置。

考虑到许多读者可能没有root过的真机,本节将先用模拟器进行演示,其原理与真机操作基本一致。建议有兴趣的读者后续可购置一台已root的测试机(如Google Pixel系列、小米8-10等)进行更深入的实践。

二、Android各版本抓包区别

Android系统对证书的信任策略在版本7.0(API Level 24)发生了重大变化,这直接影响了抓包配置:

  • Android < 7.0:抓包相对简单。只需将抓包工具(如Burpsuite、Yakit)的CA证书导入到系统的“用户证书”区域,应用即会信任该证书,流量可正常捕获。
  • Android ≥ 7.0:系统默认不再信任用户安装的CA证书,只信任预置在系统分区/system/etc/security/cacerts/下的“系统证书”。因此,需要将抓包工具的CA证书以特定格式([证书哈希值].0)安装到系统证书目录,才能成功拦截HTTPS流量。

图片

三、安装证书移动模块Move Certificate

对于已Root的设备,最便捷的证书安装方式是使用Magisk模块。

1、Move Certificate模块简介

这是一个用于将用户证书自动移动到系统证书目录的Magisk/KernelSU/APatch模块,支持Android 7-15。其GitHub项目地址为:https://github.com/ys1231/MoveCertificate

图片

2、Move Certificate模块安装

首先,从上述地址下载模块的ZIP文件。然后通过ADB命令将其推送至手机存储。

常用ADB命令

# 推送文件到手机下载目录
adb push MoveCertificate-v1.5.5.zip /sdcard/Download/
# 从手机拉取文件到电脑
adb pull /sdcard/Download/文件 电脑路径
# 直接从电脑安装APK
adb install 某App.apk

四、Magisk面具安装

Magisk是目前Android设备上最流行的系统级Root解决方案。它通过系统启动时修补bootinit镜像来实现Root,并提供了丰富的模块化功能。

  • 获取Root设备:建议购买已Root的二手测试机,如Google Pixel 3-4或小米8-10,卖家通常会提供刷机服务。
  • 模拟器安装:在模拟器中,只需下载Magisk的APK安装包(GitHub地址:https://github.com/topjohnwu/Magisk),通过ADB安装即可
  • 替代方案:另有名为“KSU(KernelSU,常称狐狸面具)”的Root方案,功能类似,可根据喜好选择。

安装Magisk后,即可通过其“模块”功能安装如Move Certificate等实用模块。

五、burpsuit&Yakit证书生成与导入

1、前期准备

确保设备(模拟器或真机)已开启USB调试模式并与电脑连接。对于模拟器,可能需要切换磁盘为“可写”模式并开启ADB调试。

2、证书生成与格式转换

抓包工具的CA证书需要转换为Android系统识别的格式。

以Burpsuite为例

  1. 从Burpsuite导出CA证书,格式为DER(通常为.cer.der后缀)。
  2. 使用OpenSSL命令进行转换:
    # 将DER格式转换为PEM格式
    openssl x509 -inform DER -in cacert.cer -out cacert.pem
    # 计算PEM证书的哈希值
    openssl x509 -inform PEM -subject_hash_old -in cacert.pem

    命令会输出一个哈希字符串(如9a5ba575)。

  3. 将PEM证书重命名为[哈希值].0格式:
    mv cacert.pem 9a5ba575.0

以Yakit为例

  1. 从Yakit设置中导出CA证书(PEM格式)。
  2. 直接计算其哈希值并重命名。
3、使用Move Certificate模块导入
  1. 将转换好的xxxx.0文件通过ADB推送到手机目录:/data/local/tmp/cert/
    adb push 9a5ba575.0 /data/local/tmp/cert/
  2. 在Magisk中安装并启用Move Certificate模块,重启设备。
  3. 重启后,证书将被自动移动到/system/etc/security/cacerts/。可以在手机“设置” -> “安全” -> “加密与凭据” -> “信任的凭据” -> “系统”中查看到新增的证书。

图片

六、抓包测试

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

  1. 配置代理:在Burpsuite中开启一个监听端口(如0.0.0.0:8080)。在Android设备的Wi-Fi设置中,为当前网络配置手动代理,服务器地址为运行Burpsuite的电脑IP,端口为8080。
  2. 拦截流量:在设备上打开任意APP进行网络操作,即可在Burpsuite中看到拦截到的HTTP/HTTPS请求。

对于模拟器,此过程相对简单。真机操作逻辑相同,但可能涉及更多网络环境配置。

0x3 使用 Reqable(小黄鸟)进行抓包

Reqable(俗称小黄鸟)是一款功能强大的跨平台抓包工具,特别针对移动端优化,使用起来非常便捷。

一、工具简介

官方网站:https://reqable.com/zh-CN/。提供Windows、macOS客户端和Android客户端

二、Reqable证书安装

  1. 电脑端:安装Reqable桌面版后,在设置中一键安装本地根证书。
  2. 手机端
    • 方法一(推荐):使用Reqable手机版自带的“安装系统证书”功能,它通常需要Root权限并通过Magisk模块方式安装,自动化程度高。
    • 方法二:手动处理。从电脑端Reqable导出证书(reqable-ca.crt),按照上一节的方法转换为xxxx.0格式,然后通过Move Certificate模块导入。

三、使用Reqable抓包

  1. 确保电脑和手机在同一局域网。
  2. 打开电脑端Reqable,创建一个HTTP/HTTPS代理服务。
  3. 打开手机端Reqable,使用“扫码连接”或手动输入电脑IP和端口进行连接。
  4. 在手机端Reqable中开启抓包,即可看到所有经过代理的网络请求。
  5. 为了便于使用Burpsuite进行深入测试,可以将Reqable设置为一级代理,Burpsuite设置为二级代理,将Reqable捕获的流量转发至Burpsuite。

图片

0x4 使用 Brook 进行代理抓包

当主流代理方式被应用检测或绕过时,可以尝试一些小众的代理工具,如Brook。

一、Brook简介

Brook 是一个用Go语言编写的高效代理软件,支持多种协议(Socks5, Shadowsocks, Brook协议等),跨平台且配置简单。GitHub项目:https://github.com/txthinking/brook

二、抓包配置

  1. 在Android设备上安装Brook客户端。
  2. 在Brook中添加一个Socks5代理,服务器地址和端口指向你的抓包工具(如Burpsuite或Reqable)所在机器的IP和监听端口。
  3. 在手机Wi-Fi设置中配置代理为Brook提供的本地Socks5代理(通常是127.0.0.1和一个特定端口),或者直接使用Brook的全局代理/VPN模式。
  4. 这样,应用流量会先经过Brook,再转发到你的抓包工具,有时可以绕过简单的代理检测。

0x5 APP 反编译与 Frida 脱壳

一、APK 查壳

在逆向分析前,通常需要判断APK是否被加固(加壳)。可以使用查壳工具进行快速识别,例如一些开源的Java查壳工具,将APK文件拖入即可显示加固类型(如腾讯御安全、梆梆、爱加密等)。

二、APK静态反编译

APK文件本质是一个ZIP压缩包。

  1. 解压APK:将apk后缀改为zip后解压,可以得到资源文件、AndroidManifest.xmlclasses.dex等。
  2. 反编译dexclasses.dex是包含Java字节码的核心文件。使用dex2jar等工具将其转换为jar文件。
    sh d2j-dex2jar.sh classes.dex
  3. 查看源码:使用JD-GUI或功能更强大的jadx-gui打开生成的jar文件,即可浏览反编译后的Java代码。jadx-gui甚至支持直接拖入APK文件进行一键反编译。

三、静态脱壳工具 BlackDex

BlackDex 是一个运行在Android手机上的脱壳工具,无需连接电脑,支持高版本安卓。安装APK后,选择需要脱壳的目标应用,即可在短时间内将内存中的DEX文件 dump 到存储中(路径通常为/sdcard/Download/),之后便可对这些DEX文件进行静态反编译分析。

四、动态脱壳工具 Frida

对于强壳或动态加载的代码,静态脱壳可能失效,此时需要使用Frida进行动态脱壳。Frida是一个动态代码插桩工具,通过注入JavaScript代码来Hook目标进程。

1、环境搭建
  • PC端:安装Python版本的Frida和frida-tools。
    pip install frida frida-tools
  • 手机端:根据手机CPU架构(armarm64)下载对应的frida-server,推送到手机并赋予执行权限。
    adb push frida-server /data/local/tmp/
    adb shell
    cd /data/local/tmp
    chmod 755 frida-server
    ./frida-server &
2、使用 frida-dexdump 脱壳

frida-dexdump是一个基于Frida的脱壳脚本。

  1. 确保frida-server在手机端运行。
  2. 在PC端使用以下命令枚举进程或脱壳:
    # 查看正在运行的App包名
    frida-ps -Ua
    # 对指定包名的App进行脱壳
    frida-dexdump -U -f com.example.app
    # 或对指定PID的进程进行脱壳
    frida-dexdump -U -p 1234
  3. 脱壳成功后,会在当前目录生成多个DEX文件,使用jadx-gui打开分析即可。

0x6 LSPosed 安装与 APP 单向证书校验绕过

许多应用会使用“SSL Pinning”(证书锁定)技术,即在代码中硬编码或校验服务端证书,导致即使系统信任了抓包工具的CA证书,应用自身仍会拒绝连接。这时需要Hook绕过此校验。

一、LSPosed 模块安装

LSPosed是一个基于Riru/Zygisk的Xposed框架实现,可以在不修改APK的情况下修改系统和应用行为。

  1. 在Magisk中安装LSPosed的ZIP模块包,重启。
  2. 安装LSPosed的Manager APK,用于管理模块。

二、使用Hook模块绕过单向校验

常见的用于绕过证书校验的Xposed/LSPosed模块有:

  • JustTrustMe
  • TrustMeAlready
  • JustMePlush
  • JustTrustMePP

使用方法

  1. 将上述模块的APK安装到设备。
  2. 打开LSPosed Manager,在模块管理中启用对应模块。
  3. 在模块的作用域中,勾选需要绕过证书校验的目标应用。
  4. 重启目标应用(或系统),再次尝试抓包,通常即可成功。

如果某个模块无效,可以尝试切换其他模块。这些模块的原理大都是Hook了Android网络框架(如OkHttp, HttpURLConnection)中负责证书验证的关键方法,使其直接返回“验证成功”。

0x7 APP 双向证书校验 Hook 绕过技巧

比单向校验更复杂的是双向SSL校验(mTLS),即客户端也需要向服务器出示证书。此时仅绕过客户端校验无效,会收到类似“400 No required SSL certificate was sent”的错误。

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

r0capture是一个强大的Frida脚本,专治各种应用层抓包难题,包括双向证书校验。

工具地址https://github.com/r0ysue/r0capture

使用步骤

  1. 确保Frida环境已配置好,frida-server在手机运行。
  2. 给目标App授予存储权限(用于保存导出的证书)。
  3. 运行脚本:
    python r0capture.py -U -f com.example.app -v
  4. 脚本运行后,会自动启动目标App并开始Hook。当App发起网络请求时,脚本会将其使用的客户端证书导出到手机存储(如/sdcard/Download/com.example.app.p12),密码默认为r0ysue
  5. 使用ADB拉取证书文件到电脑。

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

拿到.p12客户端证书后,需要在抓包工具中配置,以便工具能代表客户端与服务器完成双向握手。

  • 在Burpsuite中导入
    Proxy -> Options -> Proxy Listeners -> 选中你的监听器 -> Edit -> Certificate选项卡 -> 选择Use a custom server certificate -> Import,选择.p12文件,输入密码r0ysue

  • 在Reqable中导入
    在抓包会话的设置中,找到SSL证书配置,添加“客户端证书”,导入.p12文件并输入密码。

配置完成后,抓包工具就能使用该客户端证书与服务器通信,从而成功拦截双向认证的流量。

0x8 Root 检测与绕过

许多金融、支付类应用会检测设备是否Root,并在Root环境下禁用功能或直接退出。作为测试者,有时需要隐藏Root状态。

一、Root 检测原理

App检测Root的常见方法:

  • 检查/system/bin/su, /system/xbin/su等关键文件是否存在。
  • 检查build.prop中的属性、系统指纹是否被修改。
  • 尝试执行su命令或检查当前用户权限。
  • 使用RootBeer等专业检测库。

二、绕过Root检测

  1. Magisk Hide(Zygisk DenyList)

    • 在Magisk设置中,启用Zygisk遵守排除列表(Enforce DenyList)。
    • 配置排除列表中,勾选需要对其隐藏Root的目标应用。
    • 重启应用。这是最基本且有效的隐藏方法。
  2. Shamiko 模块
    Shamiko 是一个更高级的隐藏模块,需要在关闭“遵守排除列表”的情况下使用。

    • 在Magisk中安装Shamiko模块。
    • 确保Magisk设置中遵守排除列表关闭状态。
    • 在Magisk的“配置排除列表”中勾选目标App(列表仍会生效,但由Shamiko处理)。
    • 重启设备。Shamiko可以绕过更多更复杂的Root检测。

注意:隐藏Root是一个不断对抗的过程,并非所有检测都能100%绕过,需根据目标应用的检测强度选择合适的方案。

0x9 总结

本文系统地介绍了Android APP安全测试中从抓包、逆向到防护绕过的主要流程与实战技巧。关键点包括:

  1. 抓包基础:理解Android版本差异,掌握系统证书安装方法(如Move Certificate模块)。
  2. 工具链:熟练使用Burpsuite、Reqable、Brook等代理抓包工具。
  3. 逆向分析:掌握APK查壳、静态反编译与动态脱壳(BlackDex, Frida)方法。
  4. 证书绕过:利用LSPosed模块(如JustTrustMe)绕过单向SSL Pinning;使用r0capture脚本导出并配置客户端证书以绕过双向认证。
  5. 环境隐藏:使用Magisk Hide及Shamiko模块应对App的Root环境检测。

移动应用安全是一个深度与广度并存的领域,希望本文能为大家的学习与实践提供一个清晰的路线图和实用的工具箱。在实际测试中,需灵活组合运用这些技术,并关注最新的攻防动态。




上一篇:AI提示词快速生成图书产品详情页:以《Python编程快速上手》为例
下一篇:Node.js NPM镜像源配置全攻略:加速国内依赖下载与镜像站对比
您需要登录后才可以回帖 登录 | 立即注册

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

GMT+8, 2025-12-24 18:58 , Processed in 0.307337 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

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