2024小迪安全课程第四节复习笔记

APP与小程序安全测试架构分析


一、课程概述

1.1 核心定位

  • 前置知识:网站架构安全(WAF/CDN/OSS/反向代理/负载均衡)

  • 本节课目标:理解APP与小程序的四种开发架构,明确不同架构对应的安全测试方法论

  • 核心原则开发架构决定测试思路------不同技术栈对应完全不同的渗透测试路径

1.2 四种开发架构总览

表格

架构类型 技术栈 核心特征 测试重点
Web封装 PHP/Java/.NET等后端语言 网站套壳,无独立开发 等同于Web渗透测试
原生开发 Java(Android)/Objective-C(iOS) 独立编码,完整功能 反编译+抓包提取资产
H5开发 HTML5静态页面 纯前端展示 接口安全测试
H5+Vue混合开发 HTML5 + Vue.js框架 前后端分离架构 JS框架漏洞+API接口测试

二、Web封装开发(网站套壳)

2.1 核心原理

定义 :将现有Web应用通过封装平台直接转换为APP安装包,无独立开发过程

技术本质

plain

复制

复制代码
Web应用(已有网站)
    ↓
封装平台(一门APP/变色龙等)
    ↓
生成APP安装包(Android/iOS)
    ↓
用户安装后通过WebView加载原网站

2.2 封装平台操作流程

环境准备

  • 已有Web应用(如ShopXO商城、WordPress博客)

  • 封装平台账号(一门APP、变色龙等)

  • 应用图标、启动图等素材

封装步骤

Markdown

复制

代码预览

复制代码
1. 登录封装平台(如https://sapp.app)
2. 创建新应用 → 选择"Web封装"类型
3. 填写目标网站URL(如https://shop.xxx.com)
4. 配置应用信息:
   - 应用名称、图标、启动图
   - 版本号、包名
   - 是否支持缩放、是否显示导航栏
5. 选择生成平台(Android/iOS)
6. 提交编译 → 等待生成安装包(APK/IPA)
7. 下载安装包 → 安装测试

2.3 安全测试特征

核心结论 :Web封装APP = 原网站,测试方法完全等同于Web渗透

表格

测试维度 Web封装APP 原生APP 差异说明
漏洞类型 SQL注入、XSS、文件上传等 逻辑漏洞、组件漏洞、逆向漏洞 封装APP无独立漏洞面
测试工具 BurpSuite、SQLMap、Dirsearch IDA Pro、Frida、JADX 封装APP无需移动端工具
资产识别 直接分析网站URL 需反编译提取隐藏资产 封装APP资产透明
权限获取 网站GetShell即控制APP 需突破应用沙箱 封装APP无额外防护

识别特征

  • 界面与网站完全一致,仅适配移动端显示

  • 功能与网站无差异,无独立原生功能(如摄像头、蓝牙调用)

  • 网络请求全部指向原网站域名


三、原生开发(Native)

3.1 核心概念

定义 :使用平台专属编程语言独立开发,不依赖Web技术

技术栈

  • Android:Java/Kotlin + Android SDK

  • iOS:Objective-C/Swift + iOS SDK

3.2 与Web封装的本质差异

表格

对比维度 原生开发 Web封装
界面设计 独立XML/Storyboard布局 复用Web页面CSS样式
功能实现 调用系统API(相机、GPS、蓝牙) 受限于WebView能力
性能体验 流畅,响应速度快 依赖网络,可能出现卡顿
开发成本 高(需掌握平台语言) 极低(仅需提供URL)
代码形态 编译后的DEX/Mach-O二进制 WebView+HTML+JS
逆向难度 需专业反编译工具 直接看到网站源码

3.3 安全测试方法论

核心思路反编译提取静态资产 + 抓包分析动态流量 → 对提取资产进行定向测试

3.3.1 反编译技术

工具链

表格

工具 用途 适用场景
JADX Java反编译,还原DEX为可读Java代码 Android APK分析
GDA 图形化反编译工具,支持交叉引用 快速定位关键代码
IDA Pro 二进制逆向,支持ARM/x86汇编 深度分析、Native层
Frida 动态插桩,Hook运行时方法 绕过反调试、抓加密流量

反编译目标

java

复制

复制代码
// 典型需关注的代码片段
// 1. 硬编码密钥
private static final String API_KEY = "sk-1234567890abcdef";

// 2. 后端接口地址
public static final String BASE_URL = "https://api.music.xxx.com/v1";

// 3. 数据库连接信息
String dbHost = "10.0.0.5";
String dbUser = "root";
String dbPass = "password123";

// 4. 加密算法实现(AES/DES/RSA密钥)
SecretKeySpec key = new SecretKeySpec("0123456789ABCDEF".getBytes(), "AES");
3.3.2 抓包分析技术

工具链

表格

工具 协议支持 核心功能
BurpSuite HTTP/HTTPS Web流量拦截、重放、爆破
Charles HTTP/HTTPS/WebSocket 移动端友好,支持SSL代理
Wireshark 全协议(TCP/UDP/ICMP等) 底层网络分析
tcpdump 全协议 命令行抓包,服务器端使用

抓包配置要点

bash

复制

复制代码
# 1. 移动端代理设置(以Android为例)
设置 → WLAN → 长按当前网络 → 修改网络
→ 高级选项 → 代理 → 手动
→ 服务器主机名:Burp所在PC的IP
→ 服务器端口:8080

# 2. 证书安装(HTTPS抓包必需)
Burp → Proxy → Options → Export CA Certificate
→ 发送到手机 → 设置 → 安全 → 从存储安装

# 3. 绕过SSL Pinning(APP证书校验)
使用Frida脚本:
frida -U -f com.target.app -l ssl-pinning-bypass.js --no-pause
3.3.3 完整测试流程

Mermaid

全屏

下载

复制

代码预览

获取目标APP反编译APK提取静态资产域名/IP/接口/密钥运行时抓包分析动态流量发现隐藏接口/参数资产整合定向安全测试Web渗透/API测试/服务漏洞


四、H5开发与H5+Vue混合开发

4.1 H5开发(纯静态)

技术特征

  • 纯HTML5 + CSS3 + JavaScript

  • 无后端交互或仅通过AJAX请求数据

  • 内容静态展示为主

安全测试重点

  • 前端漏洞:XSS(反射型/存储型)、CSRF、点击劫持

  • 接口安全:若存在数据接口,测试未授权访问、IDOR

  • 第三方组件:jQuery、Bootstrap等历史漏洞

4.2 H5+Vue混合开发(前后端分离)

技术栈

plain

复制

复制代码
前端:Vue.js/React/Angular + HTML5 + CSS3
    ↓
通信:RESTful API / GraphQL / WebSocket
    ↓
后端:Node.js/Python/Java/Go(提供JSON数据)

与常规Web应用的核心差异

表格

维度 传统Web(PHP/JSP/ASP) H5+Vue前后端分离
渲染方式 服务端渲染(SSR) 客户端渲染(CSR)
数据交互 表单提交,页面跳转 AJAX异步请求,无刷新
漏洞类型 SQL注入、RCE、文件包含 XSS、IDOR、API未授权
代码位置 服务端不可见 前端JS完全暴露
测试重点 服务端逻辑 API接口+前端逻辑

4.3 Vue.js应用安全测试

典型漏洞点

表格

漏洞类型 成因 检测方法
XSS(Vue特定) v-html指令渲染未过滤内容 搜索v-html使用点,测试富文本输入
API未授权 前端路由守卫绕过,后端未校验 直接请求API端点,不带Token测试
敏感信息泄露 config.js硬编码API密钥 检查src/config/public/目录
CORS配置不当 Access-Control-Allow-Origin: * 抓包检查响应头
路由绕过 前端路由鉴权,后端未校验 直接访问/#/admin等管理路径

测试工具

bash

复制

复制代码
# Vue DevTools(浏览器扩展)
# 查看组件树、Vuex状态、路由信息

# 源码分析
npm run build # 生成生产包
source-map-explorer dist/static/js/*.js # 分析打包内容

# API测试
curl -X POST https://api.target.com/v1/user \
  -H "Content-Type: application/json" \
  -d '{"id":1}' # 测试IDOR

五、小程序开发架构与安全测试

5.1 小程序的两种开发模式

表格

模式 技术实现 测试方法 典型场景
Web封装小程序 平台将网站直接转为小程序 等同于Web渗透测试 快速上线、功能简单
H5+Vue原生开发 使用微信开发者工具,WXML+WXSS+JS 前端代码审计+API测试 功能复杂、体验要求高

5.2 小程序特有安全机制

表格

机制 说明 测试影响
域名白名单 小程序只能访问配置的合法域名 需配置Burp代理域名或在开发者工具中关闭校验
HTTPS强制 所有网络请求必须HTTPS 需安装证书,或开启"不校验合法域名"
代码包加密 上传后微信加密存储 本地可获取明文源码,线上需解密
云函数 部分逻辑在腾讯云执行 需关注云函数权限配置、数据库规则

5.3 小程序测试环境搭建

bash

复制

复制代码
# 1. 安装微信开发者工具
# 下载地址:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

# 2. 获取小程序源码(三种方式)
# 方式A:开发者直接提供源码
# 方式B:从手机端提取(需Root)
# 方式C:使用解密工具(如wxappUnpacker)

# 3. 导入项目
# 开发者工具 → 导入项目 → 选择小程序目录
# AppID:可选择测试号(无真实AppID时使用)

# 4. 调试配置
# 详情 → 本地设置 → 勾选:
#   □ 不校验合法域名、web-view(业务域名)、TLS版本以及HTTPS证书
#   □ 不校验安全域名

# 5. 抓包配置
# 电脑端开启Burp/Charles代理
# 开发者工具 → 设置 → 代理 → 使用系统代理/手动设置代理

六、架构识别与测试策略选择

6.1 快速识别方法

表格

识别维度 Web封装 原生开发 H5/Vue
界面流畅度 有卡顿,加载等待 流畅,即时响应 取决于复杂度
网络依赖 强依赖,无网无法使用 可离线使用部分功能 通常需联网
系统功能 无法调用(相机/蓝牙等) 完整调用系统API 需JSBridge支持
界面元素 网页特征(可缩放、有滚动条) 原生组件(固定布局) 混合特征
包体大小 极小(仅WebView壳) 较大(含完整代码) 中等(含JS框架)

6.2 确定性识别:反编译分析

bash

复制

复制代码
# Android APK结构分析
unzip target.apk -d target_folder
cd target_folder

# Web封装特征
ls assets/www/  # 存在HTML/JS/CSS文件
# 或
ls res/raw/      # 存在本地网页资源

# 原生开发特征
ls lib/arm64-v8a/  # 存在.so原生库
# 且
find . -name "*.dex" | xargs strings | grep -i "android/app/Application"

# H5/Vue特征
ls assets/dist/    # 存在Vue打包后的静态资源
# 查看JS文件内容含"vue"、"webpack"等关键字

6.3 测试策略决策树

plain

复制

复制代码
开始测试APP
    ↓
反编译获取代码? ──是──→ 存在大量Java/OC代码 ──→ 原生开发
    ↓否                                         ↓
存在assets/www/或WebView配置 ──是──→ Web封装 ──→ 直接Web渗透
    ↓否
存在Vue/React/Angular特征 ──是──→ H5+Vue ──→ JS审计+API测试
    ↓否
纯HTML/JS/CSS ──是──→ H5静态 ──→ 前端漏洞测试
    ↓否
无法识别 ──→ 抓包分析流量特征 ──→ 根据协议类型选择工具

七、核心工具与命令速查

7.1 反编译工具链

bash

复制

复制代码
# JADX(推荐)
jadx -d output_folder target.apk
# 输出可读Java代码到output_folder

# apktool(资源提取)
apktool d target.apk -o apktool_output
# 提取AndroidManifest.xml、资源文件等

# dex2jar(旧方案)
d2j-dex2jar.sh target.apk
# 生成target-dex2jar.jar,再用JD-GUI打开

7.2 抓包工具配置

bash

复制

复制代码
# tcpdump服务器端抓包(需Root)
tcpdump -i any -w capture.pcap port 80 or port 443

# Frida Hook脚本示例(绕过SSL Pinning)
Java.perform(function() {
    var array_list = Java.use("java.util.ArrayList");
    var TrustManagerImpl = Java.use("com.android.org.conscrypt.TrustManagerImpl");
    
    TrustManagerImpl.checkTrustedRecursive.implementation = function() {
        return array_list.$new();
    };
});

7.3 小程序工具

表格

工具 用途 获取方式
微信开发者工具 小程序调试、源码查看 官方下载
wxappUnpacker 小程序包解密、反编译 GitHub开源
Postman/Apifox API接口测试 官方下载
Charles 小程序HTTPS抓包 官方下载

八、可复现实验流程

实验1:Web封装APP生成与测试

目标:验证Web封装APP与网站的一致性

步骤

Markdown

复制

代码预览

复制代码
1. 准备目标网站(如ShopXO商城)
2. 登录"一门APP"或"变色龙"平台
3. 创建应用 → 选择Web封装 → 输入网站URL
4. 配置应用图标、启动图
5. 生成Android APK
6. 安装到模拟器/真机
7. 抓包分析:确认所有请求均指向原网站
8. 结论:测试方法完全等同于网站渗透

实验2:原生APP反编译与资产提取

目标:掌握JADX反编译与关键信息定位

步骤

Markdown

复制

代码预览

复制代码
1. 获取目标APK(如仿网易云音乐APP)
2. 使用JADX打开APK
3. 全局搜索关键词:
   - "http://" / "https://" → 提取URL
   - "api" / "接口" → 定位API定义
   - "key" / "secret" / "password" → 提取密钥
   - "database" / "mysql" / "redis" → 数据库信息
4. 分析AndroidManifest.xml:
   - 查看包名、权限声明、组件暴露情况
5. 运行时抓包,对比静态分析与动态流量
6. 对提取的资产进行定向测试

实验3:Vue.js小程序源码审计

目标:理解H5+Vue架构的安全测试点

步骤

Markdown

复制

代码预览

复制代码
1. 使用HBuilderX创建Vue项目
2. 编写包含以下漏洞的示例代码:
   - v-html导致的XSS
   - 未授权API调用
   - 硬编码API密钥
3. 编译为微信小程序
4. 使用微信开发者工具导入
5. 审查源码,定位漏洞点
6. 使用开发者工具调试,验证漏洞

九、本章核心考点总结

简答题高频考点

表格

考点 标准答案要点 考察频率
四种APP开发架构及测试方法 ①Web封装=网站测试 ②原生=反编译+抓包提取资产 ③H5=前端漏洞+接口测试 ④H5+Vue=JS框架漏洞+API测试 ⭐⭐⭐⭐⭐
原生APP与Web封装的核心区别 原生:独立编码,需反编译分析 封装:网站套壳,直接Web渗透 识别:界面流畅度、系统功能调用、包体分析 ⭐⭐⭐⭐⭐
Vue.js应用与传统Web漏洞差异 Vue:前后端分离,重点XSS/IDOR/API未授权 传统:服务端渲染,重点SQL注入/RCE/文件包含 ⭐⭐⭐⭐
小程序两种开发模式 ①Web封装:平台转换,等同网站测试 ②原生开发:WXML+WXSS+JS,需代码审计 环境:微信开发者工具+抓包配置 ⭐⭐⭐⭐
反编译与抓包的互补性 反编译:静态资产(硬编码、未使用接口) 抓包:动态资产(实际通信、加密流量) 结合:全面覆盖目标攻击面 ⭐⭐⭐⭐

实操题高频场景

  1. 架构识别:给定APK,判断是原生/Web封装/H5,并说明测试思路

  2. 反编译分析:使用JADX提取APP中的API接口和密钥

  3. 抓包绕过:配置Frida绕过SSL Pinning,抓取HTTPS流量

  4. 小程序测试:配置微信开发者工具,进行源码审计和API测试

  5. Vue漏洞挖掘:分析Vue.js应用,发现XSS或API未授权漏洞

关键记忆口诀

plain

复制

复制代码
封装APP是网站,直接渗透别多想
原生开发要反编,抓包提取资产忙
H5纯静态看接口,Vue前后端要分离
小程序分两种型,封装原生各不同
反编译看静态码,抓包看动态流量
两者结合全覆盖,测试思路要清晰
相关推荐
菜根Sec2 小时前
网络安全冬天怎么过
安全·web安全·网络安全·网络安全公司
雷工笔记3 小时前
AI使用|通过AI学习物料分类编码表
笔记·学习
Shea的笔记本4 小时前
MindSpore实战笔记:WaveNet音乐生成复现全记录
笔记
koo3644 小时前
pytorch深度学习笔记23
pytorch·笔记·深度学习
FakeOccupational5 小时前
【电路笔记 STM32】Cortex-M7 内核上的数据缓存结构图 + MPU内存保护单元 + Cache基本操作 + Cache&DMA 时序图
笔记·stm32·缓存
剑海风云5 小时前
JDK 26之安全增强
java·开发语言·安全·jdk26
喵喵爱自由5 小时前
Docker容器共享宿主机-安全网络
网络·安全·docker
C羊驼5 小时前
C语言学习笔记(十一):数据在内存中的存储
c语言·经验分享·笔记·学习