uniapp分析思路
字数 1504 2025-08-29 08:30:24

UniApp 分析思路与技术指南

简介

UniApp 是一个使用 Vue.js 开发所有前端应用的框架,由 DCloud 公司开发和维护。它支持发布到 iOS、Android、Web、鸿蒙以及各种小程序、快应用等多个平台,实现了"一次开发,多端发布"的理念。

UniApp 应用特征

文件结构特征

  • Android 客户端 APK 包中会出现 dcio 这两个纯 Java 开发 app 中没有的目录
  • 应用页面基于 WebView 进行渲染(iOS 和 Android 平台)
  • 可以使用安卓 SDK 的 tools\bin 下的 uiautomatorviewer 查看 app 界面布局,会发现界面中嵌入了 WebView

分析方法

静态分析

  1. 核心文件定位

    • app-service.js 文件是整个 app 的逻辑层
    • 如果该文件未被加密混淆,可直接使用 IDE(如 PyCharm)的格式化功能(Ctrl+Alt+L)进行分析
  2. 关键信息查找

    • 使用字符串搜索大法查找关键业务逻辑
    • 分析 JavaScript 代码中的数据处理和加密逻辑

动态调试

UniApp 的动态调试本质上是对 WebView 的动态调试:

  1. 修改调试设置

    • 大多数 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 调试
  2. DevTools 调试

    • 修改设置后,确保设备已连接并开启 USB 调试
    • 在 Chrome 浏览器地址栏输入:chrome://inspect
    • 选择目标页面,点击"inspect"开始调试

实战案例分析

案例应用io.dcloud.hellouniapp(示例应用包名)

分析过程

  1. 抓包分析

    • 发现请求中包含加密字段 secret
    • 初步判断为 UniApp 开发的应用
  2. Java 层分析

    • 脱壳后未在 Java 层找到 secret 相关字段
    • 转向分析 JavaScript 逻辑
  3. 动态调试

    • 发现 Network 中只有本地图片请求
    • 判断加密操作在 JS 层完成,Java 层仅负责发送
  4. 静态分析

    • 分析 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
  5. 验证

    • 确认 secret 长度为 32 位
    • 通过对比确认确实是 MD5 加密结果

高级技巧

  1. 反混淆方法

    • 对于混淆的 JS 代码,可使用 AST 解析工具进行反混淆
    • 常见混淆特征:变量名替换、控制流平坦化、字符串加密等
  2. Hook 关键函数

    • 使用 Frida 或 Xposed 框架 Hook WebView 相关方法
    • 监控 JavaScript 与原生代码的交互
  3. 跨平台分析

    • 对比不同平台(iOS/Android)的实现差异
    • 查找平台特定的业务逻辑或加密方式

参考资料

  1. UniApp 逆向分析实战 - 52PoJie
  2. UniApp 安全分析视频教程 - Bilibili
  3. DCloud 官方文档

总结

UniApp 应用分析的关键在于理解其跨平台架构和 WebView 渲染机制。通过结合静态分析和动态调试,特别是对 JavaScript 逻辑的深入分析,可以有效破解应用中的加密逻辑和业务规则。实际分析中需要注意不同版本 UniApp 的差异,并灵活运用各种调试和反混淆技术。

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 代码: 也可以使用"算法助手"等工具开启 WebView 调试 DevTools 调试 : 修改设置后,确保设备已连接并开启 USB 调试 在 Chrome 浏览器地址栏输入: chrome://inspect 选择目标页面,点击"inspect"开始调试 实战案例分析 案例应用 : io.dcloud.hellouniapp (示例应用包名) 分析过程 : 抓包分析 : 发现请求中包含加密字段 secret 初步判断为 UniApp 开发的应用 Java 层分析 : 脱壳后未在 Java 层找到 secret 相关字段 转向分析 JavaScript 逻辑 动态调试 : 发现 Network 中只有本地图片请求 判断加密操作在 JS 层完成,Java 层仅负责发送 静态分析 : 分析 app-service.js 文件 通过字符串搜索发现关键逻辑: secret 是由以下元素拼接后 MD5 加密得到: API 路径(如 "daily_ sign/executeLog") 用户 ID(uid) 已完成任务数 时间戳 再次拼接用户 ID 验证 : 确认 secret 长度为 32 位 通过对比确认确实是 MD5 加密结果 高级技巧 反混淆方法 : 对于混淆的 JS 代码,可使用 AST 解析工具进行反混淆 常见混淆特征:变量名替换、控制流平坦化、字符串加密等 Hook 关键函数 : 使用 Frida 或 Xposed 框架 Hook WebView 相关方法 监控 JavaScript 与原生代码的交互 跨平台分析 : 对比不同平台(iOS/Android)的实现差异 查找平台特定的业务逻辑或加密方式 参考资料 UniApp 逆向分析实战 - 52PoJie UniApp 安全分析视频教程 - Bilibili DCloud 官方文档 总结 UniApp 应用分析的关键在于理解其跨平台架构和 WebView 渲染机制。通过结合静态分析和动态调试,特别是对 JavaScript 逻辑的深入分析,可以有效破解应用中的加密逻辑和业务规则。实际分析中需要注意不同版本 UniApp 的差异,并灵活运用各种调试和反混淆技术。