uniapp分析思路
字数 1504 2025-08-29 08:30:24
UniApp 分析思路与技术指南
简介
UniApp 是一个使用 Vue.js 开发所有前端应用的框架,由 DCloud 公司开发和维护。它支持发布到 iOS、Android、Web、鸿蒙以及各种小程序、快应用等多个平台,实现了"一次开发,多端发布"的理念。
UniApp 应用特征
文件结构特征
- Android 客户端 APK 包中会出现
dc和io这两个纯 Java 开发 app 中没有的目录 - 应用页面基于 WebView 进行渲染(iOS 和 Android 平台)
- 可以使用安卓 SDK 的
tools\bin下的uiautomatorviewer查看 app 界面布局,会发现界面中嵌入了 WebView
分析方法
静态分析
-
核心文件定位:
app-service.js文件是整个 app 的逻辑层- 如果该文件未被加密混淆,可直接使用 IDE(如 PyCharm)的格式化功能(Ctrl+Alt+L)进行分析
-
关键信息查找:
- 使用字符串搜索大法查找关键业务逻辑
- 分析 JavaScript 代码中的数据处理和加密逻辑
动态调试
UniApp 的动态调试本质上是对 WebView 的动态调试:
-
修改调试设置:
- 大多数 UniApp 默认设置不可调试
- 需要通过 Hook 修改设置,示例 Frida 代码:
// Frida Hook 代码示例 Java.perform(function() { var WebView = Java.use('android.webkit.WebView'); WebView.setWebContentsDebuggingEnabled.implementation = function(enabled) { console.log("Setting WebView debugging enabled: true"); this.setWebContentsDebuggingEnabled(true); }; }); - 也可以使用"算法助手"等工具开启 WebView 调试
-
DevTools 调试:
- 修改设置后,确保设备已连接并开启 USB 调试
- 在 Chrome 浏览器地址栏输入:
chrome://inspect - 选择目标页面,点击"inspect"开始调试
实战案例分析
案例应用:io.dcloud.hellouniapp(示例应用包名)
分析过程:
-
抓包分析:
- 发现请求中包含加密字段
secret - 初步判断为 UniApp 开发的应用
- 发现请求中包含加密字段
-
Java 层分析:
- 脱壳后未在 Java 层找到
secret相关字段 - 转向分析 JavaScript 逻辑
- 脱壳后未在 Java 层找到
-
动态调试:
- 发现 Network 中只有本地图片请求
- 判断加密操作在 JS 层完成,Java 层仅负责发送
-
静态分析:
- 分析
app-service.js文件 - 通过字符串搜索发现关键逻辑:
// secret 生成逻辑示例 function generateSecret(path, uid, count, timestamp) { var str = path + uid + count + timestamp + uid; return md5(str); // 32位MD5加密 } secret是由以下元素拼接后 MD5 加密得到:- API 路径(如 "daily_sign/executeLog")
- 用户 ID(uid)
- 已完成任务数
- 时间戳
- 再次拼接用户 ID
- 分析
-
验证:
- 确认
secret长度为 32 位 - 通过对比确认确实是 MD5 加密结果
- 确认
高级技巧
-
反混淆方法:
- 对于混淆的 JS 代码,可使用 AST 解析工具进行反混淆
- 常见混淆特征:变量名替换、控制流平坦化、字符串加密等
-
Hook 关键函数:
- 使用 Frida 或 Xposed 框架 Hook WebView 相关方法
- 监控 JavaScript 与原生代码的交互
-
跨平台分析:
- 对比不同平台(iOS/Android)的实现差异
- 查找平台特定的业务逻辑或加密方式
参考资料
总结
UniApp 应用分析的关键在于理解其跨平台架构和 WebView 渲染机制。通过结合静态分析和动态调试,特别是对 JavaScript 逻辑的深入分析,可以有效破解应用中的加密逻辑和业务规则。实际分析中需要注意不同版本 UniApp 的差异,并灵活运用各种调试和反混淆技术。