【HarmonyOS Next】鸿蒙加固方案调研和分析

news2025/7/19 4:35:05

【HarmonyOS Next】鸿蒙加固方案调研和分析

一、前言

在这里插入图片描述

根据鸿蒙应用的上架流程,本地构建app文件后,上架到AGC平台,平台会进行解析。根据鸿蒙系统的特殊设置,仿照IOS的生态闭环方案。只能从AGC应用市场下载app进行安装。这样的流程一定程度上提高了防破解和逆向的成本。

但应用代码防逆向是一个持续攻防对抗的过程,如对代码文件保护有更高的要求,需要结合其他安全加固措施,进一步提高逆向分析应用的难度。

二、目前市面上鸿蒙的加固服务商:

1.梆梆加固
https://www.bangcle.com/pages/cat_id/96.html
在这里插入图片描述

2.NAGA 娜迦科技
https://www.nagain.com/activity/article/76/#/produCtenter/securityReinforce/hap
在这里插入图片描述

娜迦移动应用APP安全加固服务
https://developer.huawei.com/consumer/cn/market/prod-detail/6b8d4d7cebf743aaa9d926fe55658a01/1
在这里插入图片描述

3.网易易盾
https://dun.163.com/product/harmony-reinforce
在这里插入图片描述

4.爱加密
https://www.ijiami.cn/harmonyOS
在这里插入图片描述

5.FairGuard 游戏加固
https://www.fair-guard.com/help/list-375.html

6. 360加固
https://jiagu.360.cn/#/global/details/HongMengNext
在这里插入图片描述

三、鸿蒙加固方案

1.代码混淆
对 ArkTS 代码中的类名、方法名、变量名等进行替换,使用无意义的字符来代替原本有明确含义的名称。攻击者难以从代码符号中获取有价值的信息,增加了代码理解和逆向分析的难度。

  • 控制流混淆:通过改变代码的执行流程,在不影响程序正常功能的前提下,插入一些无用的跳转、循环和条件判断语句。这样会打乱代码的逻辑结构,使得逆向工程中难以还原出清晰的程序逻辑。
    加密保护
entry/build-profile.json5
"enable": true,即可开启混淆。

// 打包
将项目配置为release模式进行打包,此时混淆才会实际执行,最终生成混淆后的应用包。
另外,如果想混淆字符串字面量属性名,还需在上述基础上再使用-enable-string-property-obfuscation

2.代码加密:
对 ArkTS 源代码或编译后的字节码进行加密处理,在应用运行时动态解密。即使攻击者获取到应用文件,看到的也是加密后的代码,无法直接进行分析和篡改。

  • 资源加密:对应用中的图片、音频、视频等资源文件进行加密,防止资源被非法提取和复用。应用在运行时会自动对加密资源进行解密和加载。

可以编写脚本对代码文件进行加密处理,在应用启动时再进行解密。常见的加密算法有 AES(高级加密标准)。也可使用一章节中的三方服务商。

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad
import os

def encrypt_file(key, input_file_path, output_file_path):
    cipher = AES.new(key, AES.MODE_CBC)
    with open(input_file_path, 'rb') as f_in:
        plaintext = f_in.read()
    ciphertext = cipher.encrypt(pad(plaintext, AES.block_size))
    with open(output_file_path, 'wb') as f_out:
        f_out.write(cipher.iv)
        f_out.write(ciphertext)

# 使用示例
key = os.urandom(16)  # 生成 16 字节的密钥
input_file = 'your_code_file.js'
output_file = 'encrypted_code_file.js'
encrypt_file(key, input_file, output_file)

在这里插入图片描述
也可使用AGC平台提供的加密,不过会对APP冷启动带来时间影响。目前加密还是白名单设置,并非开放给所有APP。

3.虚拟机加壳
将应用程序包裹在一个自定义的虚拟机环境中运行,对应用的指令集进行转换和解释执行。攻击者需要先破解虚拟机的运行机制,才能进一步分析应用代码,增加了逆向的难度。

  • 代码抽取加壳:将应用的核心代码从原程序中抽取出来,存储在加壳程序的特定区域,并在运行时动态加载和执行。这样可以有效保护核心代码不被轻易获取和分析。
    运行时防护

4.反调试检测
在应用运行过程中,实时检测是否有调试器连接。如果检测到调试行为,应用可以采取相应的措施,如终止运行、弹出警告提示或进行数据加密等,防止攻击者通过调试手段获取应用的敏感信息。【这些检测方法并非绝对安全,有经验的攻击者可能会绕过这些检测。】
在 ArkTS 中,要判断是否运行在模拟器环境,可通过读取系统文件信息来实现:

import fileio from '@ohos.fileio';

// 判断是否运行在模拟器环境的函数
async function isRunningOnEmulator(): Promise<boolean> {
    const sysDirPath = '/sys/devices/virtual/dmi/id';
    const biosVendorFilePath = `${sysDirPath}/bios_vendor`;

    try {
        // 检查 sysDirPath 是否存在
        const sysDirStat = await fileio.stat(sysDirPath);
        if (sysDirStat) {
            // 检查 biosVendorFilePath 是否存在
            const biosVendorFileStat = await fileio.stat(biosVendorFilePath);
            if (biosVendorFileStat) {
                // 读取 bios_vendor 文件内容
                const fd = await fileio.open(biosVendorFilePath, 0o400);
                const buffer = new ArrayBuffer(1024);
                const readLength = await fileio.read(fd, buffer);
                const biosVendor = new TextDecoder().decode(buffer.slice(0, readLength));
                await fileio.close(fd);

                // 判断是否包含模拟器相关标识
                return biosVendor.includes('Android') || biosVendor.includes('Genymotion');
            }
        }
    } catch (e) {
        console.error(`Error checking emulator: ${e.message}`);
    }
    return false;
}

// 使用示例
isRunningOnEmulator().then((result) => {
    if (result) {
        console.log('The app is running on an emulator.');
    } else {
        console.log('The app is running on a real device.');
    }
});

5.内存保护:对应用在内存中的数据和代码进行监控和保护,防止内存被非法访问、篡改或注入恶意代码。可以采用内存加密、内存访问控制等技术手段来实现内存保护。

  • 设备环境检测:检测应用运行的设备环境是否安全,如是否存在模拟器、Root / 越狱设备等。如果检测到不安全的设备环境,应用可以限制部分功能或拒绝运行,降低被攻击的风险。
    数据安全防护
    处理敏感数据并及时清除示例:


struct SensitiveDataProtectionExample {
  private sensitiveData: string | null = null;

  handleSensitiveData() {
    // 模拟获取敏感数据
    this.sensitiveData = 'mySecretPassword';

    // 处理敏感数据
    console.log(`Processing sensitive data: ${this.sensitiveData}`);

    // 处理完后及时清除敏感数据
    this.sensitiveData = null;
  }

  build() {
    Column({ space: 50 }) {
      Button('Process Sensitive Data')
        .onClick(() => {
          this.handleSensitiveData();
        })
    }
    .width('100%')
  }
}

6.数据传输加密:在应用与服务器之间进行数据传输时,采用 SSL/TLS 等加密协议对数据进行加密,防止数据在传输过程中被窃取或篡改。

  • 数据存储加密:对应用在本地存储的敏感数据,如用户信息、配置文件等,进行加密处理。只有在经过授权的情况下才能解密和访问这些数据,确保数据的安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2313916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯javaB组备战第二天 题目 区间次方和 编号3382

这是一个前缀和问题&#xff0c;但是不同于以为前缀和问题 前缀和问题求解思路&#xff1a; 创建一个前缀数组 s[] ,存储输入的元素的a[1]到a[n]的和 及&#xff1a;s[1] s[i-1]a[i] ,i>1 这样比暴力算法的复杂度要低很多可以将 时间复杂度从O(q*n*m)下降到 O(n*mq) …

《Android 平台架构系统启动流程详解》

目录 一、平台架构模块 1.1 Linux 内核 1.2 硬件抽象层 (HAL) 1.3 Android 运行时 1.4 原生 C/C 库 1.5 Java API 框架 1.6 系统应用 二、系统启动流程 2.1 Bootloader阶段 2.2 内核启动 2.3 Init进程&#xff08;PID 1&#xff09; 2.4 Zygote与System Serv…

强化学习(赵世钰版)-学习笔记(3.最优策略与贝尔曼最优方程)

这是本章在课程中的位置&#xff0c;属于基础工具中的最后一章&#xff0c;主要讨论了最优状态值&#xff08;Optimal State Value&#xff09;与最优策略&#xff08;Optimal Policy&#xff09;&#xff0c;并介绍了对应的计算方法-贝尔曼最优方程&#xff08;Bellman Optima…

六十天前端强化训练之第十一天之事件机制超详解析

欢迎来到编程星辰海的博客讲解 目录 一、事件模型演进史 1.1 原始事件模型&#xff08;DOM Level 0&#xff09; 1.2 DOM Level 2事件模型 1.3 DOM Level 3事件模型 二、事件流深度剖析 2.1 捕获与冒泡对比实验 2.2 事件终止方法对比 三、事件委托高级应用 3.1 动态元…

调试正常 ≠ 运行正常:Keil5中MicroLIB的“量子态BUG”破解实录

调试正常 ≠ 运行正常&#xff1a;Keil5中MicroLIB的“量子态BUG”破解实录——从勾选一个选项到理解半主机模式&#xff0c;嵌入式开发的认知升级 &#x1f4cc; 现象描述&#xff1a;调试与烧录的诡异差异 在线调试时 程序正常运行 - 独立运行时 设备无响应 ! 编译过程 0 Err…

基于SpringBoot实现旅游酒店平台功能八

一、前言介绍&#xff1a; 1.1 项目摘要 随着社会的快速发展和人民生活水平的不断提高&#xff0c;旅游已经成为人们休闲娱乐的重要方式之一。人们越来越注重生活的品质和精神文化的追求&#xff0c;旅游需求呈现出爆发式增长。这种增长不仅体现在旅游人数的增加上&#xff0…

ArcGIS Pro中字段的新建方法与应用

一、引言 在地理信息系统&#xff08;GIS&#xff09;的数据管理和分析过程中&#xff0c;字段操作起着至关重要的作用。 无论是进行地图制作、空间分析还是数据统计&#xff0c;字段都是承载属性信息的基本单元。 ArcGIS Pro作为一款功能强大的GIS软件&#xff0c;为用户提…

c#面试题12

1.ApplicationPool介绍一下 c#里没有 2.XML 可扩展标记语言&#xff0c;一般以.xml文件格式的形式存在。可用于存储结构化的数据 3.ASP.NET的用户控件 将原始的控件&#xff0c;用户根据需要进行整合成一个新的控件 4.介绍一下code-Behind 即代码后置技术&#xff0c;就是…

Matlab中快速查找元素索引号

1、背景介绍 在算法设计过程中&#xff0c;有时候需要从一维/二维数组中&#xff0c;快速查找是否某个元素&#xff0c;以及该元素所在的位置。如一维矩阵[1 2 3 4 5 6 6 7 8]所示&#xff0c;元素6所在的位置为6 7。 2、函数测试 matlab中函数find()可以快速查找到指定元素所…

LabVIEW非线性拟合实现正弦波参数提取

LabVIEW的Nonlinear Curve Fit.vi基于Levenberg-Marquardt算法&#xff0c;能够实现非线性最小二乘拟合&#xff0c;包括正弦波三参数&#xff08;幅值、频率、相位&#xff09;的精确求解。该工具适用于非均匀采样、低信噪比信号等复杂场景&#xff0c;但需注意初始参数设置与…

S19文件格式详解:汽车ECU软件升级中的核心镜像格式

文章目录 引言一、S19文件格式的起源与概述二、S19文件的核心结构三、S19在汽车ECU升级中的应用场景四、S19与其他格式的对比五、S19文件实例解析六、工具链支持与安全考量七、未来趋势与挑战结语引言 在汽车电子控制单元(ECU)的软件升级过程中,S19文件(也称为Motorola S-…

Redis 缓存穿透、缓存击穿与缓存雪崩详解:问题、解决方案与最佳实践

目录 引言 1. 缓存穿透 1.1 什么是缓存穿透&#xff1f; 示例&#xff1a; 1.2 缓存穿透的原因 1.3 缓存穿透的解决方案 1.3.1 缓存空对象 1.3.2 布隆过滤器&#xff08;Bloom Filter&#xff09; 1.3.3 参数校验 2. 缓存击穿 2.1 什么是缓存击穿&#xff1f; 示例&…

Qt入门笔记

目录 一、前言 二、创建Qt项目 2.1、使用向导创建 2.2、最简单的Qt应用程序 2.2.1、main函数 2.2.2、widget.h文件 2.2.3、widget.cpp文件 2.3、Qt按键Botton 2.3.1、创建一个Botton 2.3.2、信号与槽 2.3.3、按键使用信号与槽的方法 2.4、文件Read与Write-QFile类 2…

C语言每日一练——day_4

引言 针对初学者&#xff0c;每日练习几个题&#xff0c;快速上手C语言。第四天。&#xff08;连续更新中&#xff09; 采用在线OJ的形式 什么是在线OJ&#xff1f; 在线判题系统&#xff08;英语&#xff1a;Online Judge&#xff0c;缩写OJ&#xff09;是一种在编程竞赛中用…

下降路径最⼩和(medium)

题目描述&#xff1a; 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多相隔一列&#xff08…

redux_旧版本

reduxjs/toolkit&#xff08;RTK&#xff09;是 Redux 官方团队推出的一个工具集&#xff0c;旨在简化 Redux 的使用和配置。它于 2019 年 10 月 正式发布&#xff0c;此文章记录一下redux的旧版本如何使用&#xff0c;以及引入等等。 文件目录如下&#xff1a; 步骤 安装依…

18、TCP连接三次握手的过程,为什么是三次,可以是两次或者更多吗【高频】

三次握手的过程&#xff1a; 第一次握手&#xff1a;客户端 向 服务器 发送一个 SYN&#xff08;也就是同步序列编号报文&#xff09;&#xff0c;请求建立连接。随后&#xff0c;客户端 进入 SYN_SENT 状态&#xff1b;服务器收到 SYN 之后&#xff0c;由 LISTEN 状态变为 SYN…

Ceph(2):Ceph简介

1 Ceph简介 Ceph使用C语言开发&#xff0c;遵循LGPL协议开源。Sage Weil(Ceph论文发表者)于2011年创立了以Inktank公司主导Ceph的开发和社区维护。2014年Redhat收购inktank公司&#xff0c;并发布Inktank Ceph企业版&#xff08;ICE&#xff09;软件&#xff0c;业务场景聚焦云…

wireshark 如何关闭混杂模式 wireshark操作

Fiddler和Wireshark都是进行抓包的工具&#xff1a;所谓抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作&#xff0c;也用来检查网络安全。抓包也经常被用来进行数据截取等。黑客常常会用抓包软件获取你非加密的上网数据&#xff0c;然后通过分析&#…

ChatGPT4.5详细介绍和API调用详细教程

OpenAI在2月27日发布GPT-4.5的研究预览版——这是迄今为止OpenAI最强大、最出色的聊天模型。GPT-4.5在扩大预训练和微调规模方面迈出了重要的一步。通过扩大无监督学习的规模&#xff0c;GPT-4.5提升了识别内容中的模式、建立内容关联和生成对于内容的见解的能力&#xff0c;但…