APP渗透测试指南(一)
引言
本文主要围绕MacOS系统架构讲解,从环境搭建到实现APP逆向(即对应用程序进行反向工程分析),也包含了在过程中可能遇到的坑点,希望能帮助到此刻看到这篇文章的你,话不多说,开干!
APP渗透测试环境搭建
1.1 adb安装
ADB(Android Debug Bridge)是一个用于与Android设备通信的命令行工具,在APP测试中必不可少。
1 | 通过 Homebrew 安装 adb |
1.2 frida安装
Frida是一个动态插桩工具,能够在运行时注入代码到目标进程,用于分析APP的运行行为。
1 | # 检查Android设备是否已连接 |
1.3 frida-server安装
1 | adb shell getprop ro.product.cpu.abi # 查看设备CPU架构类型 |

根据CPU架构下载对应版本frida-server,下载地址:https://github.com/frida/frida/releases 【记得往下翻,就能找到】
1 | adb connect 192.168.10.13:5555 && adb root # 连接设备,并获取root权限,192.168.10.13为设备IP,5555为端口号,下面俩端口任意一个都行 |

1 | adb push frida-server /data/local/tmp/ # 推送frida-server到设备 |
1.4 apktool安装
apktool是一款Android APK反编译工具,能够将APK文件解包为可读的资源文件和Smali代码。
1 | # 安装apktool(MacOS) windows安装方式略有不同,请自行查找 |
解包后的APK文件将生成一个输出目录,其中包含了资源文件、配置文件和代码文件。您可以查看AndroidManifest.xml文件,了解应用程序的基本信息和结构。
1.5 dex2jar安装
dex2jar是一个将Android的dex文件转换为Java jar文件的工具,方便使用Java反编译工具查看代码。
1 | # 安装dex2jar |
在JD-GUI中,您可以查看和修改Java代码。修改完成后,可使用apktool重新打包APK文件。
1 | # 重新打包APK文件 |
到这里,其实常规的APP逆向工具都已经安装好了,接下来就是如何使用这些工具进行逆向工作了。(Burpsuite、Yakit等抓包工具自行准备,本文着重用Burpsuite+MuMu模拟器讲解)
MacOs下Burpsuite+MUMU模拟器下APP抓包
2.1 环境准备
- Burpsuite安全工具(一款强大的Web安全测试工具,可拦截和分析HTTP/HTTPS流量)
- MUMU模拟器(国内知名的Android模拟器)
- openssl(一个强大的加密工具库,mac自带,无需安装)
2.2 抓包流程
打开Burpsuite,选择Proxy->Options,配置代理监听端口(例如8080)

导出Burpsuite的CA证书(Certificate Authority,用于HTTPS流量解密)

使用openssl将CA证书转换为PEM格式(一种常见的证书格式)
1 | openssl x509 -inform der -in cacert.der -out burp.pem |

- 获取pem证书hash(用于Android系统识别证书)
1 | openssl x509 -subject_hash_old -in burp.pem |

手动将新建的burp.pem重命名为9a5ba575.0,别忘了后面的.0
- 导入证书到模拟器
1 | adb devices |
注:一定要将证书导入/system/etc/security/cacerts/ 目录下
设置模拟器root权限配置

模拟器设置代理,指向burpsuite的IP和端口
设置->网络和互联网->互联网,就会到如下界面:
点开右上角的铅笔,选择代理设置
设置代理,ip和端口需要与你burpsuite配置的保持一致即可

如果上述配置正确,在模拟器中打开任意网页,Burpsuite应该能够捕获到请求,如下:
至此,模拟器抓包配置完成,接下来就可以在Burpsuite中捕获APP的请求了
初识APP逆向
什么是APP逆向?在实际渗透测试中,APP逆向通常指的是对Android或iOS应用程序进行逆向工程分析的过程。这个过程包括但不限于:
- 获取APP的apk或ipa文件(分别是Android和iOS应用的安装包)
- 使用工具查看APP是否加壳(壳是一种保护机制,防止应用被轻易反编译)
- 进行脱壳或解包(移除保护层,获取原始代码)
- 分析APP的代码逻辑(理解应用的功能实现方式)
- 分析APP的网络请求,判断是否使用加密
- 未加密情况下可直接阅读代码,通过黑白盒测试挖掘漏洞;加密则需要通过逆向手段破解加密算法
基于上述步骤,接下来将以一个简单的APP为例进行演示。