litemars/hARMless

GitHub: litemars/hARMless

一款专为 ARM64 Linux 设计的 ELF 二进制打包器,通过多层加密与纯内存执行实现原始文件的隐蔽运行与反分析保护。

Stars: 36 | Forks: 14

# 🛡️ hARMless ![License](https://img.shields.io/badge/license-MIT-blue.svg) ![Platform](https://img.shields.io/badge/platform-ARM64%20Linux-green.svg) ![Build](https://img.shields.io/badge/build-passing-brightgreen.svg) ![Stars](https://img.shields.io/github/stars/litemars/hARMless?style=social) **一个专为 AArch64 Linux 二进制文件设计的 ARM64 ELF 打包器/加载器** 一款全面的安全研究工具,使用多层加密对 ARM64 ELF 可执行文件进行加密,并在运行时提供内存中执行功能,无需将原始二进制文件写入磁盘。 ## 📋 目录 - [功能特性](#-features) - [快速开始](#-quick-start) - [安装说明](#-installation) - [使用方法](#-usage) - [技术细节](#-technical-details) - [安全特性](#-security-features) - [架构](#-architecture) - [贡献](#-contributing) - [许可证](#-license) ## ✨ 功能特性 - **🎯 ARM64 ELF 支持**:专为 AArch64 Linux 二进制文件设计 - **🔐 多层加密**:使用 AES-256、ChaCha20 和 RC4 进行三重加密 - **💾 内存执行**:使用 `memfd_create` 在内存中完全进行运行时解密与执行 - **🔒 代码混淆**:用于反分析的高级混淆技术 - **✅ CRC32 校验**:完整性检查以检测篡改 - **📦 自包含**:打包后的二进制文件完全独立 - **🛡️ 防止核心转储**:使用 `setrlimit` 防止内存转储 - **🧹 安全内存擦除**:对敏感数据进行多轮内存擦除 - **🔧 直接系统调用**:绕过用户态 Hook 以增强隐蔽性 ## 🚀 快速开始 ``` # Clone 仓库 git clone https://github.com/litemars/hARMless.git cd hARMless # 构建所有内容 make all # 打包二进制文件 make pack INPUT=/bin/ls OUTPUT=packed_ls # 运行已打包的二进制文件 ./packed_ls ``` ## 📦 安装说明 ### 前置条件 - **ARM64/AArch64 Linux 系统**或交叉编译工具链 - 用于 ARM64 的 **GCC**(`aarch64-linux-gnu-gcc` 或原生) - **Make** - **标准开发工具**(`git`、`build-essential`) ### 构建步骤 ``` # 1. Clone 仓库 git clone https://github.com/litemars/hARMless.git cd hARMless # 2. 构建所有组件 make all # 这将创建: # - build/packer : Binary packer # - build/loader : Stub loader # - build/stubgen : Stub generator ``` ### 交叉编译 (x86_64 → ARM64) ``` # 安装 ARM64 cross-compiler sudo apt-get install gcc-aarch64-linux-gnu # 使用 cross-compiler 构建 make CC=aarch64-linux-gnu-gcc all ``` ## 📖 使用方法 ### 基础打包 ``` # 打包 ARM64 二进制文件 make pack INPUT=your_arm64_binary OUTPUT=packed_binary # 替代方案:直接使用工具 ./build/packer your_arm64_binary packed_data ./build/stubgen ./build/loader packed_data packed_binary ``` ### 运行打包后的二进制文件 ``` # 直接执行已打包的二进制文件 ./packed_binary # 已打包的二进制文件将会: # 1. 读取其自身嵌入的加密数据 # 2. 在内存中解密原始 ELF # 3. 使用 CRC32 验证完整性 # 4. 使用 memfd_create 直接从内存执行 ``` ### 测试 ``` # 使用 /bin/ls 进行测试 make test # 输出:packed_binary: packed_ls ``` ## 🔬 技术细节 ### 加密流水线 该打包器使用**三重加密**方法: 1. **RC4 流密码**:初始混淆层 2. **AES-256-CTR**:业界标准的对称加密 3. **ChaCha20**:现代流密码,提供额外安全性 ``` Original Binary → RC4 → AES-256 → ChaCha20 → Packed Data ``` **密钥生成**:通过 `/dev/urandom` 生成密码学安全的随机密钥(每层 256 位) ### ARM64 直接系统调用 加载器使用直接系统调用以绕过用户态 Hook: | 系统调用 | 号码 | 用途 | |---------|--------|---------| | `memfd_create` | 279 | 创建匿名文件描述符 | | `execve` | 221 | 执行解密后的二进制文件 | | `mmap` | 222 | 内存映射 | | `write` | 64 | 输出操作 | | `fexecve` | 281 | 从文件描述符执行 | **系统调用约定 (ARM64)**: ``` // x8 = syscall number // x0-x5 = arguments // svc #0 = invoke ``` ### 内存安全 - **安全擦除**:3 次覆写(零、一、随机数) - **无磁盘写入**:原始二进制文件永不接触文件系统 - **栈保护**:不可执行栈 - **兼容 ASLR**:位置无关代码 ## 🛡️ 安全特性 ### 防止核心转储 ``` setrlimit(RLIMIT_CORE, &(struct rlimit){0, 0}); ``` 确保敏感内存即使在崩溃期间也不会被写入磁盘。 ### 完整性校验 CRC32 校验和可检测以下内容的任何篡改: - 加密的 Payload - 解密密钥 - 加载器代码 ### 反分析 - **无调试符号**:剥离的二进制文件 - **混淆控制流**:减少逆向工程的攻击面 - **直接系统调用**:规避 LD_PRELOAD 和 EDR Hook - **内存中执行**:无 `/tmp` 产物 ## 🏗️ 架构 ``` ┌─────────────────────────────────────────────────────────┐ │ Original Binary │ └────────────────────┬────────────────────────────────────┘ │ ▼ ┌───────────────────────┐ │ Packer (packer.c) │ │ - Read ELF │ │ - Generate keys │ │ - Triple encrypt │ │ - Compute CRC32 │ └───────────┬───────────┘ │ ▼ ┌───────────────────────┐ │ Packed Data File │ │ [encrypted payload] │ └───────────┬───────────┘ │ ▼ ┌───────────────────────┐ │ Stub Generator │ │ (stubgen.c) │ │ - Embed loader │ │ - Append data │ └───────────┬───────────┘ │ ▼ ┌────────────────────────────────────────────────────────┐ │ Packed Binary (Output) │ │ ┌──────────────────────────────────────────────┐ │ │ │ Loader Stub (loader.c) │ │ │ │ - Read embedded data │ │ │ │ - Decrypt (ChaCha20 → AES → RC4) │ │ │ │ - Verify CRC32 │ │ │ │ - Create memfd │ │ │ │ - Execute via fexecve │ │ │ └──────────────────────────────────────────────┘ │ │ ┌──────────────────────────────────────────────┐ │ │ │ Encrypted Payload + Metadata │ │ │ └──────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────┘ │ ▼ ┌───────────────────────┐ │ Runtime Execution │ │ (in-memory only) │ └───────────────────────┘ ``` ## 📄 许可证 本项目基于 MIT 许可证授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:AArch64, AES-256, ARM64, ChaCha20, CRC32校验, DAST, DNS 反向解析, ELF, Makefile, memfd_create, Raspberry Pi, RC4, 二进制防护, 代码混淆, 内存执行, 加壳工具, 加载器, 反分析, 可执行文件加密, 多层加密, 安全擦除, 客户端加密, 底层安全, 恶意软件分析, 无文件执行, 漏洞评估, 防内存转储