【HarmonyOS Next】鴻蒙加固方案調研和分析

【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 osdef 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.pswp.cn/bicheng/73132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73132.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【前端拓展】Canvas性能革命!WebGPU + WebAssembly混合渲染方案深度解析

為什么需要混合方案&#xff1f; 真實場景痛點分析&#xff1a; 傳統WebGL在高頻數據更新時存在CPU-GPU通信瓶頸JavaScript的垃圾回收機制導致渲染卡頓復雜物理模擬&#xff08;如SPH流體&#xff09;難以在單線程中實現 技術選型對比&#xff1a; graph LRA[計算密集型任務…

win11編譯llama_cpp_python cuda128 RTX30/40/50版本

Geforce 50xx系顯卡最低支持cuda128&#xff0c;llama_cpp_python官方源只有cpu版本&#xff0c;沒有cuda版本&#xff0c;所以自己基于0.3.5版本源碼編譯一個RTX 30xx/40xx/50xx版本。 1. 前置條件 1. 訪問https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…

【Python運維】實現高效的自動化備份與恢復:Python腳本從入門到實踐

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 在信息化時代,數據備份和恢復的有效性對企業和個人來說至關重要。本文將帶領讀者深入了解如何使用Python編寫自動化備份與恢復腳本,確保重…

Electron應用中獲取設備唯一ID和系統信息

讓我創建一篇關于如何在Electron應用中獲取設備唯一ID和系統信息&#xff0c;并在登錄時使用這些信息的博客文章。我將確保步驟明確、條理清晰&#xff0c;適合初學者和有經驗的開發者。 這篇博客應包含以下部分&#xff1a; 介紹 - 為什么需要獲取設備信息前提條件和安裝依賴…

【每日學點HarmonyOS Next知識】自定義對話框關閉、WaterFlow嵌套、狀態欄顏色、滾動吸附、滾動動效

1、HarmonyOS 自定義對話框自動關閉的問題&#xff1f; 啟動頁做了個隱私協議彈窗&#xff0c;autoCancel為false。UI中使用 Text() ContainerSpan() Span()組件&#xff0c;設置了點擊事件&#xff0c;點擊后使用router.pushUrl()的方法跳轉到協議頁面。點擊時&#xff0c;對…

【物聯網-WIFI】

物聯網-WIFI ■ ESP32-C3-模塊簡介■ ESP32-C3-■ ESP32-C3-■ WIFI-模組■ WIFI-■ WIFI- ■ ESP32-C3-模塊簡介 ■ ESP32-C3- ■ ESP32-C3- ■ WIFI-模組 ■ WIFI- ■ WIFI-

Xilinx ZYNQ FSBL解讀:LoadBootImage()

篇首 最近突發奇想&#xff0c;Xilinx 的集成開發環境已經很好了&#xff0c;很多必要的代碼都直接生成了&#xff0c;這給開發者帶來了巨大便利的同時&#xff0c;也讓人錯過了很多代碼的精彩&#xff0c;可能有很多人用了很多年了&#xff0c;都還無法清楚的理解其中過程。博…

LeetCode1871 跳躍游戲VII

LeetCode 跳躍游戲 IV&#xff1a;二進制字符串的跳躍問題 題目描述 給定一個下標從 0 開始的二進制字符串 s 和兩個整數 minJump 和 maxJump。初始時&#xff0c;你位于下標 0 處&#xff08;保證該位置為 0&#xff09;。你需要判斷是否能到達字符串的最后一個位置&#xf…

Burpsuite使用筆記

Burpsuite使用筆記 抓包設置代理open Browserintercept on輸入要抓包的網站回車ForwardHTTP history查看抓包數據其他瀏覽器配置burpsuite代理瀏覽器代理器插件配置打開代理同樣步驟訪問原理三級目錄抓包 設置代理 open Browser 打開內置瀏覽器 intercept on 輸入要抓包的網…

Windows 遠程桌面多端口訪問,局域網虛擬IP映射多個Windows 主機解決方案

情景 項目現場4G路由局域網中兩臺主機通過VPN連接到公司內網&#xff0c;實現遠程管理&#xff0c;要求映射兩個Windows 桌面進行管理。 目錄 情景 網絡 思路 已知 問題解決 1.客戶端通過VPN進入內網路由器配置NAT 2.使用遠程主機遠程桌面功能&#xff1a;IP端口號訪問 …

【深度學習】讀寫文件

讀寫文件 到目前為止&#xff0c;我們討論了如何處理數據&#xff0c;以及如何構建、訓練和測試深度學習模型。 然而&#xff0c;有時我們希望保存訓練的模型&#xff0c;以備將來在各種環境中使用&#xff08;比如在部署中進行預測&#xff09;。 此外&#xff0c;當運行一個…

仿Manus一

復制 ┌───────────────┐ ┌─────────────┐ │ 主界面UI │?─────?│ 會話管理模塊 │ └───────┬───────┘ └──────┬──────┘│ │▼ ▼ ┌─…

VS Code C++ 開發環境配置

VS Code 是當前非常流行的開發工具. 本文講述如何配置 VS Code 作為 C開發環境. 本文將按照如下步驟來介紹如何配置 VS Code 作為 C開發環境. 安裝編譯器安裝插件配置工作區 第一個步驟的具體操作會因為系統不同或者方案不同而有不同的選擇. 環境要求 首先需要立即 VS Code…

Flutter 學習之旅 之 flutter 不使用插件,實現簡單帶加載動畫的 LoadingToast 功能

Flutter 學習之旅 之 flutter 不使用插件&#xff0c;實現簡單帶加載動畫的 LoadingToast 功能 目錄 Flutter 學習之旅 之 flutter 不使用插件&#xff0c;實現簡單帶加載動畫的 LoadingToast 功能 一、簡單介紹 二、LoadingToast 三、簡單案例實現 四、關鍵代碼 一、簡單…

Spring (八)AOP-切面編程的使用

目錄 實現步驟&#xff1a; 1 導入AOP依賴 2 編寫切面Aspect 3 編寫通知方法 4 指定切入點表達式 5 測試AOP動態織入 圖示&#xff1a; 一 實現步驟&#xff1a; 1 導入AOP依賴 <!-- Spring Boot AOP依賴 --><dependency><groupId>org.springframewor…

開源數字人模型Heygem

一、Heygem是什么 Heygem 是硅基智能推出的開源數字人模型&#xff0c;專為 Windows 系統設計。基于先進的AI技術&#xff0c;僅需1秒視頻或1張照片&#xff0c;能在30秒內完成數字人形象和聲音克隆&#xff0c;在60秒內合成4K超高清視頻。Heygem支持多語言輸出、多表情動作&a…

uniapp開通開屏廣告后動態開啟或關閉開屏廣告

近期使用uniapp開發的APP有uniad的廣告對接&#xff0c;并且要求會員用戶不顯示包含開屏廣告在內的廣告&#xff0c;除開屏廣告外的廣告都可以通過uniapp廣告組件控制是否顯示 因uniad的開屏廣告無需代碼開發&#xff0c;經過uniad客服指點可在App.vue中的onLaunch生命周期中執…

神經網絡為什么要用 ReLU 增加非線性?

在神經網絡中使用 ReLU&#xff08;Rectified Linear Unit&#xff09; 作為激活函數的主要目的是引入非線性&#xff0c;這是神經網絡能夠學習復雜模式和解決非線性問題的關鍵。 1. 為什么需要非線性&#xff1f; 1.1 線性模型的局限性 如果神經網絡只使用線性激活函數&…

使用SSH密鑰連接本地git 和 github

目錄 配置本地SSH&#xff0c;添加到github首先查看本地是否有SSH密鑰生成SSH密鑰&#xff0c;和郵箱綁定將 SSH 密鑰添加到 ssh-agent&#xff1a;顯示本地公鑰*把下面這一串生成的公鑰存到github上* 驗證SSH配置是否成功終端跳轉到本地倉庫把http協議改為SSH&#xff08;如果…

關于AI數據分析可行性的初步評估

一、結論&#xff1a;可在部分環節嵌入&#xff0c;無法直接處理大量數據 1.非本地部署的AI應用處理非機密文件沒問題&#xff0c;內部文件要注意數據安全風險。 2.AI&#xff08;指高規格大模型&#xff09;十分適合探索性研究分析&#xff0c;對復雜報告無法全流程執行&…