初探鸿蒙应用逆向分析(奇妙的Math逻辑运算)
字数 1220 2025-08-22 12:23:12

鸿蒙应用逆向分析:Math逻辑运算解析

1. 鸿蒙应用基础

1.1 鸿蒙系统概述

  • 鸿蒙OS(HarmonyOS)是面向万物互联的全场景分布式操作系统
  • 主要特点:与硬件解绑、生态共享、跨端共享
  • 定位:不是替代安卓,而是实现万物互联

1.2 HAP包结构

  • HAP(Harmony Ability Package)是鸿蒙应用安装和运行的基本单元
  • 类比Android的APK包
  • 两种类型:
    • entry:应用主模块,作为应用入口
    • feature:动态特性模块,作为能力扩展

2. 逆向分析准备

2.1 关键文件

  • ./ets/modules.abc:ArkTS源码编译结果(类比Android的Java层)
  • ./libs:动态库文件(类比Android的so层)

2.2 工具准备

  • 反编译工具:abc-decompiler(基于jadx和abcde开发)
    • GitHub地址:https://github.com/ohos-decompiler/abc-decompiler

3. 逆向分析过程

3.1 分析modules.abc

  1. 使用abc-decompiler打开modules.abc
  2. 查看main包的pages目录(包含所有页面)
  3. 定位关键函数:
    • 查找onSubmit事件
    • 跟进handleInput方法
    • 发现调用libentry.so中的check函数

3.2 分析libentry.so

  1. 使用IDA Pro等工具打开libentry.so
  2. 定位入口函数
  3. 发现check函数(sub_3750)

3.2.1 混淆处理

  • 使用了ollvm的指令混淆
  • 特点:
    • 将简单运算复杂化
    • 增加大量无用分支
    • 变量名随机化(vxxx)

3.2.2 关键发现

  • flag长度为32
  • 主要比较函数:sub_57B0
  • 密文数据位置明显

3.3 加密算法分析

主要加密函数:

  1. sub_62F0
  2. sub_CC10
  3. sub_6D20
  4. sub_8270
  5. sub_9890
  6. sub_A8F0
  7. sub_C160

算法逻辑还原

通过分析发现实际运算为:

(((x*x + (x)*2)) - 3)/2

这实际上是完全平方公式的变形

4. 数学求解

4.1 算法逆向

  1. 已知密文为y = (((x² + 2x) - 3)/2)
  2. 逆向步骤:
    • y × 2 + 3 = x² + 2x
    • 加1凑完全平方:x² + 2x + 1 = (x + 1)²
    • 开平方得:x + 1
    • 减1得:x

4.2 Python解题脚本

def solve(y):
    # y = (((x*x + x*2) - 3)/2)
    # 逆向计算x
    temp = y * 2 + 3  # x² + 2x
    temp += 1         # x² + 2x + 1 = (x+1)²
    x_plus_1 = int(temp ** 0.5)
    x = x_plus_1 - 1
    return x

# 示例使用
ciphertext = [...]  # 从二进制中提取的密文
flag = ''.join([chr(solve(y)) for y in ciphertext])
print(flag)

5. 总结

5.1 逆向要点

  1. 鸿蒙应用逆向与Android逆向类似但有所不同
  2. 关键文件:modules.abc和libs目录
  3. 遇到ollvm混淆时注意识别真实运算逻辑
  4. 数学运算类加密可通过公式逆向求解

5.2 扩展思考

  1. 鸿蒙应用逆向的特殊性
  2. 更复杂的混淆处理方式
  3. 其他可能的加密算法变形

通过本案例,我们掌握了鸿蒙应用逆向的基本流程和数学运算类加密的分析方法,这对于CTF竞赛和实际安全研究都有重要参考价值。

鸿蒙应用逆向分析:Math逻辑运算解析 1. 鸿蒙应用基础 1.1 鸿蒙系统概述 鸿蒙OS(HarmonyOS)是面向万物互联的全场景分布式操作系统 主要特点:与硬件解绑、生态共享、跨端共享 定位:不是替代安卓,而是实现万物互联 1.2 HAP包结构 HAP(Harmony Ability Package)是鸿蒙应用安装和运行的基本单元 类比Android的APK包 两种类型: entry:应用主模块,作为应用入口 feature:动态特性模块,作为能力扩展 2. 逆向分析准备 2.1 关键文件 ./ets/modules.abc :ArkTS源码编译结果(类比Android的Java层) ./libs :动态库文件(类比Android的so层) 2.2 工具准备 反编译工具:abc-decompiler(基于jadx和abcde开发) GitHub地址:https://github.com/ohos-decompiler/abc-decompiler 3. 逆向分析过程 3.1 分析modules.abc 使用abc-decompiler打开modules.abc 查看main包的pages目录(包含所有页面) 定位关键函数: 查找onSubmit事件 跟进handleInput方法 发现调用libentry.so中的check函数 3.2 分析libentry.so 使用IDA Pro等工具打开libentry.so 定位入口函数 发现check函数(sub_ 3750) 3.2.1 混淆处理 使用了ollvm的指令混淆 特点: 将简单运算复杂化 增加大量无用分支 变量名随机化(vxxx) 3.2.2 关键发现 flag长度为32 主要比较函数:sub_ 57B0 密文数据位置明显 3.3 加密算法分析 主要加密函数: sub_ 62F0 sub_ CC10 sub_ 6D20 sub_ 8270 sub_ 9890 sub_ A8F0 sub_ C160 算法逻辑还原 通过分析发现实际运算为: 这实际上是完全平方公式的变形 4. 数学求解 4.1 算法逆向 已知密文为y = (((x² + 2x) - 3)/2) 逆向步骤: y × 2 + 3 = x² + 2x 加1凑完全平方:x² + 2x + 1 = (x + 1)² 开平方得:x + 1 减1得:x 4.2 Python解题脚本 5. 总结 5.1 逆向要点 鸿蒙应用逆向与Android逆向类似但有所不同 关键文件:modules.abc和libs目录 遇到ollvm混淆时注意识别真实运算逻辑 数学运算类加密可通过公式逆向求解 5.2 扩展思考 鸿蒙应用逆向的特殊性 更复杂的混淆处理方式 其他可能的加密算法变形 通过本案例,我们掌握了鸿蒙应用逆向的基本流程和数学运算类加密的分析方法,这对于CTF竞赛和实际安全研究都有重要参考价值。