移动端安全 鸿蒙app分析初探(arkanalyzer)
字数 1296 2025-08-22 12:23:30

鸿蒙App静态分析工具ArkAnalyzer深度解析

1. 鸿蒙应用开发基础

1.1 开发语言演进

  • Java:鸿蒙早期主要开发语言
  • TypeScript(TS):HarmonyOS 3.1开发者预览版开始引入
  • ArkTS:当前主流开发语言,基于TS扩展,特点:
    • 匹配ArkUI框架
    • 扩展声明式UI语法
    • 轻量化并发机制
    • 文件后缀.ets

1.2 环境配置

  1. Node.js安装:必备运行环境
  2. TypeScript安装npm install -g typescript
  3. ArkTS开发:直接继承TS语法,开发者可无缝过渡

1.3 应用架构模型

Stage模型(HarmonyOS 3.1+主推):

开发态结构

项目根目录/
├── AppScope/          # 自动生成,不可更改
├── entry/             # 主入口模块
│   └── src/
│       └── main/
│           ├── ets/
│           │   ├── entryability/  # UIAbility入口
│           │   ├── pages/        # 页面UI文件
│           │   └── common/       # 公共资源
│           └── module.json5      # 模块配置
└── hvigor/            # 构建工具配置

UIAbility生命周期

  • Create
  • Foreground
  • Background
  • Destroy

编译态转换

  • .ets.abc(ArkTS编译结果)
  • 资源合并规则:AppScope优先
  • 配置合并:app.json5 → module.json

发布态包结构

  • .app包

    • META-INF/:签名信息
    • resources/:资源文件
    • libs/:原生库
    • entry.hap:主模块
  • .hap模块

    • code/:业务逻辑代码
    • resources/:模块资源
    • libs/:模块专用库

2. ArkAnalyzer工具详解

2.1 环境配置

  1. 安装Node.js和npm
  2. 克隆仓库:https://gitee.com/openharmony-sig/arkanalyzer
  3. 安装依赖:npm install(管理员权限运行)
  4. 测试运行:通过package.json执行测试用例

2.2 核心架构

分析流程

ArkTS代码 → AST生成 → Scene数据结构 → CFG生成 → CG生成 → 数据流分析

关键数据结构

  1. Scene类(核心访问入口):

    • 文件列表
    • 命名空间列表
    • 类列表
    • 方法列表
    • 属性列表
  2. CFG(控制流图)

    • blocks:基本块集合
    • stmtToBlock:语句到基本块映射
    • startingStmt:起始语句
    • defUseChains:定义-使用链
    • declaringMethod:声明方法
    • declaringClass:声明类
  3. IR表示

    • 临时变量命名:$temp+序号
    • 循环消减:转为if+代码块
    • 语法糖处理:如匿名函数重命名为AnonymousFunc$desuagring$0

2.3 基础分析示例

示例1:基本信息提取

// 获取所有文件
let files: ArkFile[] = projectScene.getFiles();
let filenames: string[] = files.map(file => file.getName());

// 获取所有命名空间
let namespaces: ArkNamespace[] = projectScene.getNamespaces();

// 获取所有类(含默认类_DEFAULT_ARK_CLASS)
let classes: ArkClass[] = projectScene.getClasses();

// 获取类属性
let fields: ArkField[] = targetClass.getFields();

// 获取类方法
let methods: ArkMethod[] = targetClass.getMethods();

示例2:控制流分析

// 生成调用图
let callGraph = new CallGraph(projectScene);
let callGraphBuilder = new CallGraphBuilder(callGraph, projectScene);
callGraphBuilder.buildClassHierarchyCallGraph(entryPoints);
callGraph.dump("out/cg/cg.dot");  // 输出Graphviz格式

示例3:数据流分析

// SSA转换
let staticSingleAssignmentFormer = new StaticSingleAssignmentFormer();
staticSingleAssignmentFormer.transformBody(method.getBody());

// 定义-使用链分析
cfg.buildDefUseChain();
for (const chain of cfg.getDefUseChains()) {
    console.log(`变量: ${chain.value}, 定义: ${chain.def}, 使用: ${chain.use}`);
}

示例4:空指针检测

const method = ModelUtils.getMethodWithName("U2", defaultMethod);
if (method) {
    const problem = new UndefinedVariableChecker(
        [...method.getCfg().getBlocks()][0].getStmts()[method.getParameters().length], 
        method
    );
    const solver = new UndefinedVariableSolver(problem, projectScene);
    solver.solve();
}

3. 实战案例

3.1 环境配置

修改./tests/AppTestConfig.json

{
    "projectPath": "实际项目路径"
}

3.2 典型分析流程

  1. 初始化分析

    node -r ts-node/register AppTest.ts
    
  2. 控制流可视化

    • 生成的.dot文件可用Graphviz渲染
    • 在线工具:GraphvizOnline
  3. 深度分析建议

    • 结合SSA进行变量追踪
    • 利用定义-使用链追踪数据流
    • 自定义分析规则继承基础Checker类

4. 扩展资源

  1. 官方快速入门
  2. ArkTS语法规范
  3. Stage模型文档

注:ArkAnalyzer仍处于活跃开发阶段,建议定期关注仓库更新获取最新功能。

鸿蒙App静态分析工具ArkAnalyzer深度解析 1. 鸿蒙应用开发基础 1.1 开发语言演进 Java :鸿蒙早期主要开发语言 TypeScript(TS) :HarmonyOS 3.1开发者预览版开始引入 ArkTS :当前主流开发语言,基于TS扩展,特点: 匹配ArkUI框架 扩展声明式UI语法 轻量化并发机制 文件后缀 .ets 1.2 环境配置 Node.js安装 :必备运行环境 TypeScript安装 : npm install -g typescript ArkTS开发 :直接继承TS语法,开发者可无缝过渡 1.3 应用架构模型 Stage模型 (HarmonyOS 3.1+主推): 开发态结构 UIAbility生命周期 Create Foreground Background Destroy 编译态转换 .ets → .abc (ArkTS编译结果) 资源合并规则:AppScope优先 配置合并:app.json5 → module.json 发布态包结构 .app包 : META-INF/:签名信息 resources/:资源文件 libs/:原生库 entry.hap:主模块 .hap模块 : code/:业务逻辑代码 resources/:模块资源 libs/:模块专用库 2. ArkAnalyzer工具详解 2.1 环境配置 安装Node.js和npm 克隆仓库: https://gitee.com/openharmony-sig/arkanalyzer 安装依赖: npm install (管理员权限运行) 测试运行:通过 package.json 执行测试用例 2.2 核心架构 分析流程 : 关键数据结构 Scene类 (核心访问入口): 文件列表 命名空间列表 类列表 方法列表 属性列表 CFG(控制流图) : blocks :基本块集合 stmtToBlock :语句到基本块映射 startingStmt :起始语句 defUseChains :定义-使用链 declaringMethod :声明方法 declaringClass :声明类 IR表示 : 临时变量命名: $temp +序号 循环消减:转为 if +代码块 语法糖处理:如匿名函数重命名为 AnonymousFunc$desuagring$0 2.3 基础分析示例 示例1:基本信息提取 示例2:控制流分析 示例3:数据流分析 示例4:空指针检测 3. 实战案例 3.1 环境配置 修改 ./tests/AppTestConfig.json : 3.2 典型分析流程 初始化分析 : 控制流可视化 : 生成的 .dot 文件可用Graphviz渲染 在线工具:GraphvizOnline 深度分析建议 : 结合SSA进行变量追踪 利用定义-使用链追踪数据流 自定义分析规则继承基础Checker类 4. 扩展资源 官方快速入门 ArkTS语法规范 Stage模型文档 注:ArkAnalyzer仍处于活跃开发阶段,建议定期关注仓库更新获取最新功能。