litemars/hARMless
GitHub: litemars/hARMless
一款专为 ARM64 Linux 设计的 ELF 二进制打包器,通过多层加密与纯内存执行实现原始文件的隐蔽运行与反分析保护。
Stars: 36 | Forks: 14
# 🛡️ hARMless




**一个专为 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, 二进制防护, 代码混淆, 内存执行, 加壳工具, 加载器, 反分析, 可执行文件加密, 多层加密, 安全擦除, 客户端加密, 底层安全, 恶意软件分析, 无文件执行, 漏洞评估, 防内存转储