# ARMOR 面向易语言程序的专属压缩保护壳 **Repository Path**: byhandsome/ARMOR ## Basic Information - **Project Name**: ARMOR 面向易语言程序的专属压缩保护壳 - **Description**: 面向易语言/32 位程序的压缩保护壳 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-09-02 - **Last Updated**: 2026-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ARMOR —— x86 / x64 通用的 PE 压缩保护壳 > **作者:byHandsome** | 官网:https://armorv3.7x0.cn/ QQ群:647765957 > > 支持 **x86(32 位)与 x64(64 位)**,支持 **EXE 与 DLL**,默认保留图标与版本版权 > 与 UPX、VMProtect 怎么选?以及它**做不到**什么 --- ## 一、ARMOR 是什么 ARMOR 是一款针对 **Windows PE 程序(尤其易语言静态编译程序)** 的 **压缩 + 入门级保护** 壳:一条命令,把原始 EXE(或 DLL)变成加壳后的文件。 **支持范围(按 PE 格式自动判定,不看扩展名):** | 输入 | 支持 | | ------------------------------------------------------ | --------------------- | | x86(PE32)EXE / x64(PE32+)EXE | ✅ | | x86 / x64 DLL | ✅(需`--allow-dll`) | | 扩展名是`.com` / `.scr` 等、但本身是 x86/x64 PE 的文件 | ✅ | | 内核驱动`.sys` / Native 子系统 | ❌ | | .NET 程序(含 CLR 头) | ❌ | | 16 位 DOS COM / DOS MZ / Win3.x NE | ❌ | | ARM / ARM64 / IA64 等其它架构的 PE、EFI 固件 | ❌ | 已实测能做到的事: - **体积变小**:某易语言程序 684032 → 425984 字节(**约 62%**)。注意这是大文件的效果; - **图标、版本版权保留**:资源节默认不压缩,磁盘图标、文件属性里的版本/版权、运行时窗口标题栏图标与原程序一致; - **导入表 / 重定位 / TLS 正常还原**:自编译测试目标(含导入、重定位、TLS、版本资源)在 x86 与 x64 上加壳后,**标准输出与退出码与原件完全一致**; - **DLL 可正常加载调用**:x86/x64 DLL 加壳后 `LoadLibrary` / `GetProcAddress` / 调用 / 线程通知转发 / `FreeLibrary` 均正常; - **一键解压还原**:随时把加壳产物还原成与原件**逐字节一致**的原始文件(x86/x64 的 EXE 与 DLL 均已验证 0 字节差异)。 一句话:**它是"压缩瘦身 + 提高随手破解门槛"的工具,不是防逆向的方案。** 下面第五节会把保护强度说清楚,建议先看。 --- ## 二、它做不到什么(请先看这节) 为了不误导,把边界写在前面: 1. **它自带完美脱壳器。** ARMOR 提供 `--unpack`,能一键还原出与原文件逐字节一致的原始程序。这意味着任何人拿到你的加壳产物和 ARMOR,都能还原出原始代码。**它不能防住"有心人",只能挡住"随手拖进静态分析器"这一步。** 2. **"加密"是混淆,不是密码学保护。** 载荷用 RC4 加密,但 **RC4 密钥以明文形式存放在产物的 `ARMOR_HEADER.key` 字段里**(见 `src/common/packfmt.h`)。它的作用是让 IDA 等工具无法直接看到原始代码,而不是抵御知道格式的逆向者。 3. **反调试是可绕过的常规检测。** 检测点包括 PEB `BeingDebugged`、`NtGlobalFlag`、`IsDebuggerPresent`、`NtQueryInformationProcess`(DebugPort / DebugObjectHandle / DebugFlags)、调试器窗口名与进程名、计时。这些都是公开多年的成熟检测点,有经验的逆向者可以 patch 掉。 4. **反转储只是提高 dump 门槛。** 做法是还原后随机化内存中的节名、清零 DOS stub,PE 头仍可被修复后再 dump。 5. **易语言特征隐藏只掩盖已知特征。** 内置约 30 条特征规则,对命中的字节做 RC4 混淆。**它不能让一个易语言程序"不再是易语言程序"**,只能降低被基于这些规则的工具/规则库直接命中的概率。 6. **关于杀软误报:无法保证。** 任何加壳都可能触发误报。ARMOR 提供可调参数(自定义节名、开关特征隐藏等),**但这些参数能否降低误报,没有任何实测数据支撑,需要你用自己的样本自己测**。 7. **小文件加壳会变大。** 外壳本身约 32 KB(x86)/ 36 KB(x64),几 KB 的小程序加壳后体积会明显增加。压缩收益只对较大的程序成立。 --- ## 三、核心特性一览 | # | 特性 | 状态 | | -- | ---------------------------------------------------------------------------------------------------------------------- | ------------------- | | 1 | **x86 / x64 双架构**:同一条命令,按 PE 格式自动选择外壳与产物格式 | ✅ 已实测 | | 2 | **EXE / DLL 加壳**:DLL 保留导入/导出/重定位表 | ✅ 已实测 | | 3 | **压缩**:自研 DEFLATE(zlib 兼容),级别 1..9 | ✅ 已实测 | | 4 | **保留图标与版本版权**:资源节默认不压缩 | ✅ 已实测 | | 5 | **一键解压还原**:还原结果与原文件逐字节一致 | ✅ 已实测 | | 6 | **载荷 RC4 混淆**:密钥在文件头明文,属混淆非强加密 | ⚠️ 见第二节 | | 7 | **反调试**:PEB / API / 窗口 / 进程名 / 计时,两档强度 | ⚠️ 可绕过 | | 8 | **反转储**:还原后混淆内存 PE 头与节名 | ⚠️ 可绕过 | | 9 | **易语言特征隐藏**:内置约 30 条规则,RC4 混淆命中字节 | ⚠️ 仅掩盖已知特征 | | 10 | **载荷 CRC 校验**:防止产物被篡改(校验值同样在文件头,防篡改不等于防篡改绕过) | ✅ | | 11 | **自定义产物节名**:`.arm0/.armr/.arm1` → `.shield0/...`,避开固定特征串 | ✅ | | 12 | **配置文件**:参数写进 INI,`--config=` 复用,命令行可覆盖 | ✅ | | 13 | **拖放加壳**:把 EXE / DLL 拖到 `ArmorCLI.exe` 上即按默认参数加壳(**保留压缩与特征隐藏**),输出 `原名_packed.扩展名` | ✅ 已实测 | | 14 | **零依赖交付**:日常使用**只需一个 `ArmorCLI.exe`**(x86 与 x64 版都能给两种架构加壳) | ✅ | --- ## 四、快速上手 ### 最省事:直接拖 **把 EXE 或 DLL 拖到 `ArmorCLI.exe` 图标上就完事了**,一条命令都不用敲,还能一次拖多个文件。 - 输出:`原文件名_packed.扩展名`,和原文件放一起(`app.exe` → `app_packed.exe`); - x86 / x64 / EXE / DLL **全自动识别**,DLL 不用额外加参数; - 默认参数:**压缩开(级别 6)、易语言特征隐藏开(auto)**,另外默认还有载荷加密、反调试、反转储、CRC 校验、**保留资源节(图标/版本版权不丢)**; - 加壳结束**窗口直接关闭**,不等按键;结果写进日志文件 **`ArmorCLI.log`**(和被加壳文件同一个目录,追加记录,UTF-8)。 每次拖放一段,记着:时间、输入/输出路径、体积和压缩比、架构与类型、载荷大小、特征隐藏统计、耗时;失败的会写清楚原因。 - 已经加过壳的文件会被拒绝并写进日志,防止重复加壳把体积越滚越大。 命令行下 `ArmorCLI.exe <文件路径>` 走的是同一套逻辑: ```bat ArmorCLI.exe app.exe ArmorCLI.exe a.exe b.dll :: 一次处理多个 ``` > 拖放模式固定使用上面的默认参数,不读 `armor.ini`。想调压缩级别、节名前缀、反调试强度这些,用下面的命令行。 ### 命令行 ```bat ::: x86 程序 ArmorCLI.exe pack 你的程序.exe 你的程序_packed.exe ::: x64 程序(同一条命令,外壳自动切换为 x64 版) ArmorCLI.exe pack app64.exe app64_packed.exe ::: DLL(x86 / x64 均可) ArmorCLI.exe pack my.dll my_packed.dll --allow-dll ::: 一键解压还原 ArmorCLI.exe unpack 你的程序_packed.exe 还原.exe ::: 先看目标信息再决定(架构 / 类型 / 将使用的外壳) ArmorCLI.exe scan 你的程序.exe ``` 默认配置:载荷加密、反调试(exit)、反转储、CRC 校验、易语言特征隐藏(auto)、**保留资源节**。 --- ## 五、调用参数(完整) | 参数 | 说明 | 默认 | | ------------------------------ | ----------------------------------------- | ---- | | `pack <输入> <输出>` | 加壳 | — | | `unpack <加壳文件> <还原文件>` | 一键解压还原(等价`--unpack`) | — | | `scan <输入>` | 只扫描分析,不写文件 | — | | `--level=N` | 压缩级别 1..9 | 6 | | `--encrypt=0|1` | 载荷 RC4 混淆 | 1 | | `--anti-debug=none|exit|fake` | 反调试动作 | exit | | `--anti-debug-level=1|2` | 反调试强度(2 增加窗口/进程名/计时) | 1 | | `--anti-dump=0|1` | 反转储 | 1 | | `--hide-features=模式` | 易语言特征隐藏:`auto|none|all|名称;名称` | auto | | `--keep-manifest=0|1` | 保留清单资源(权限/视觉样式) | 1 | | `--keep-rsrc=0|1` | **资源节不压缩(保留图标/版本版权)** | 1 | | `--crc=0|1` | 解包前校验载荷 CRC | 1 | | `--force` | 忽略"重复加壳"等告警 | 关 | | `--allow-dll` | 允许对 DLL 加壳(x86/x64 均可) | 关 | | `--stub=<映像>` | 使用外部外壳映像(架构须与目标一致) | 内嵌 | | `--section-prefix=<前缀>` | 自定义产物节名前缀(1..6 个字母数字) | arm | | `--unpack` | 一键解压还原(等价独立子命令`unpack`) | 关 | | `--config=<路径>` | 从配置文件加载参数(命令行优先) | 无 | 常用组合: ```bat ::: 最高压缩比 ArmorCLI.exe pack app.exe app_packed.exe --level=9 ::: 自定义节名 + 增强反调试 ArmorCLI.exe pack app.exe app_packed.exe --anti-debug-level=2 --section-prefix=shield ::: 关闭反调试(自己调试程序时) ArmorCLI.exe pack app.exe app_packed.exe --anti-debug=none ::: 全部参数写进配置文件复用 ArmorCLI.exe pack app.exe app_packed.exe --config=armor.ini ``` `armor.ini` 示例: ```ini level=9 anti-debug=exit anti-debug-level=2 anti-dump=1 keep-rsrc=1 ; 保留图标/版本版权 crc=1 section-prefix=shield allow-dll=0 ; 给 DLL 加壳时设为 1 unpack=0 ; 设为 1 时该次调用做一键解压还原 ``` 退出码:`0` 成功、`1` 参数错误、`2` 输入输出错误、`3` 不支持的目标、`4` 处理失败。 --- ## 六、与 UPX 的区别 **UPX** 是应用最广的开源压缩壳。**先说结论:如果你只要"压小",UPX 通常是更好的选择**——它免费、开源、跨平台跨架构、兼容性经过二十多年全球验证,压缩率在多数样本上也更高。ARMOR 的差异在于它多做了一些保护动作,以及对易语言生态的针对性处理。 | 维度 | ARMOR | UPX | | ---------------- | ----------------------------------------------------- | -------------------------------------------------------- | | 定位 | 压缩 + 载荷混淆 + 反调试 + 反转储 | 通用压缩壳,主打减小体积 | | 支持架构 | x86 / x64 的 PE(不支持 .NET、驱动) | 多平台多架构,覆盖面远大于 ARMOR | | 压缩率 | 大文件约压到 60%;**小文件会因附加外壳而变大** | 多数样本上更高(请以自己的样本实测) | | 是否自带一键脱壳 | ✅ 自带`--unpack`(这是刻意的取舍,也说明它不防逆向) | ✅`upx -d` | | 载荷加密 | RC4,**密钥明文存在文件头**,属混淆 | 不加密 | | 资源处理 | **默认保留资源节不压缩** | 默认一并压缩资源(通常也能正常显示;也可用参数不压资源) | | 易语言适配 | 内置特征库与特征隐藏 | 无针对性处理 | | 成熟度 | 自用工具,样本覆盖有限 | 全球广泛使用,兼容性久经验证 | | 费用 | 免费 | 开源免费(GPL) | > 关于"杀软误报":加壳普遍会提高误报概率,UPX 因使用广泛、特征被大量规则库收录而常被标记。**这不代表 ARMOR 的误报就一定更低**——两者都需要你用自己的样本实测,此处不做保证。 --- ## 七、与 VMProtect(VMP)的区别 **VMProtect** 是商业代码虚拟化保护壳。**如果目标是真正防逆向核心逻辑,VMP 是量级更高的方案,ARMOR 不能替代它。** | 维度 | ARMOR | VMProtect | | ---------- | ------------------------------------------------------------------ | ----------------------------------------------- | | 保护思路 | 压缩 + 载荷混淆 + 反调试 + 反转储(**解壳后原生执行**) | 代码虚拟化 + 指令混淆 + 授权管理 | | 保护强度 | **入门级**:挡"随手静态分析",挡不住有经验的逆向者(且自带脱壳器) | 商业级:可显著提高核心逻辑的逆向成本 | | 体积 | 大文件变小;小文件变大 | 通常增大(虚拟化代码膨胀) | | 运行开销 | 启动期解压一次,之后原生执行 | 虚拟化部分解释执行,开销取决于虚拟化范围 | | 兼容性风险 | 相对小(保留资源、开关可控),但仍需逐个样本验证 | 反调试/反虚拟机检测更激进,兼容问题与误报更常见 | | 费用 | 免费 | 商业付费授权 | 两者**不冲突**:可以用 ARMOR 做整体瘦身,再对最关键的算法/逻辑用 VMP 虚拟化——一个管体积,一个管核心。**但要注意反过来是没用的:先用 VMP 再套 ARMOR,会让 ARMOR 的脱壳器把 VMP 壳整个还原出来。** --- ## 八、怎么选 | 需求 | 推荐 | 说明 | | ------------------------------------------- | ------------- | ------------------------------------- | | 只求把程序压小 | **UPX** | 压缩率、成熟度、平台覆盖都优于 ARMOR | | 压小 + 默认保住图标/版本 + 挡住随手静态分析 | **ARMOR** | 这是它最主要的适用场景 | | 给易语言程序加壳 | **ARMOR** | 内置特征隐藏 + 资源默认保留 | | 给 DLL 加壳(x86/x64) | **ARMOR** | `--allow-dll`,导出/导入/重定位表保留 | | 核心算法高强度防逆向 | **VMProtect** | ARMOR 做不到,别指望它 | | 内核驱动`.sys` / .NET 程序 | 都不行 | ARMOR 会明确拒绝并说明原因 | --- ## 九、注意事项 1. **加壳前先备份原文件。** 虽然有 `--unpack` 可逐字节还原,但先备份是更稳妥的习惯; 2. **它的定位是"提高门槛"不是"防破解"。** 自带脱壳器、密钥在文件头、反调试可绕过——请在第二节的边界内使用它,配合正版授权校验、服务端验证等手段; 3. **杀软误报需自行实测。** 可用 `--section-prefix=`、`--hide-features=none` 等参数调整,但效果没有保证; 4. **调试自己的程序时**加 `--anti-debug=none`(默认是检测到调试器就退出); 5. **DLL 加壳**需 `--allow-dll`;DLL 模式下 `--anti-dump` 会自动跳过,这是正常设计(宿主进程和 `GetProcAddress` 仍需读取 PE 头); 6. **逐个样本验证。** 本项目自测覆盖有限(x86/x64 的 EXE 与 DLL,含导入表、重定位、TLS、版本资源的样本)。你的程序是否在覆盖范围内,请加壳后实际运行验证。 --- ## 十、获取与使用 - **作者:byHandsome** - 自研免费工具,交付物**只有一个 `ArmorCLI.exe`**(`bin\Win32\Release\` 与 `bin\x64\Release\` 各一份,二者功能相同,都能给 x86 与 x64 目标加壳),无需安装;右键文件属性即可看到公司名与版权信息; - 命令行下 `ArmorCLI version` 会输出版本号、作者与版权: ```bat C:\> ArmorCLI version ARMOR 2.0.0 作者 : byHandsome Copyright (c) 2026 byHandsome 支持 : x86 (PE32) / x64 (PE32+) 的 EXE 与 DLL ``` - 命令行风格,Windows 下直接运行,支持中文路径; - 参数可写进配置文件批量复用,适合接入你自己的发布流程; - 【下载地址 / 联系方式:此处由发帖者自行补充(署名:byHandsome)】 > 已验证:x86/x64 EXE 加壳后输出与退出码一致、脱壳逐字节一致;x86/x64 DLL 加载调用与线程通知正常、脱壳逐字节一致;宿主位宽与目标架构无关。 > 仍在持续迭代,欢迎交流反馈。**请注意第二节的能力边界,不要把它当成防逆向方案。**