源代码:src/aotu/string_encryption
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_STRING_ENCRYPTION | 是否启用字符串加密: • true —— 启用;• false —— 关闭; |
false |
| AMICE_STRING_ALGORITHM | 控制字符串的加密算法: • xor —— 使用异或加密字符串。• simd_xor —— (beta) 使用SIMD指令的异或加密字符串。 |
xor |
| AMICE_STRING_DECRYPT_TIMING | 控制字符串的解密时机: • global —— 程序启动时在全局初始化阶段一次性解密所有受保护字符串;• lazy —— 在每个字符串首次被使用前按需解密(随后可缓存)。 备注:解密在栈上的字符串不支持这个配置! |
lazy |
| AMICE_STRING_STACK_ALLOC | (beta) 控制解密字符串的内存分配方式: • true —— 将解密的字符串分配到栈上;• false —— 将解密的字符串分配到堆上。备注:栈分配模式下仅支持 lazy 解密时机! |
false |
| AMICE_STRING_INLINE_DECRYPT_FN | 控制是否内联解密函数: • true ——内联解密函数;• false —— 不内联解密函数。 |
false |
| AMICE_STRING_ONLY_DOT_STRING | 控制是否仅处理 .str 段中的字符串:• true ——只加密.str字符串;• false —— 可能加密了llvm::Module内的类型为char[]全局变量,导致崩溃。 |
true |
| AMICE_STRING_ALLOW_NON_ENTRY_STACK_ALLOC | 控制是否允许在栈解密模式下,在非基本块分配栈: • true ——允许,许多LLVM优化pass假设所有 alloca 都在入口块;• false —— 推荐 |
false |
Rust 注意
export AMICE_STRING_ONLY_LLVM_STRING=false # Rust 字符串全局变量名为 alloc_xxx,而非 .str
源代码:src/aotu/indirect_call
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_INDIRECT_CALL | 是否启用间接跳转: • true —— 启用;• false —— 关闭; |
false |
| AMICE_INDIRECT_CALL_XOR_KEY | 间接跳转下标xor密钥 备注:输入 0关闭间接跳转下标加密 |
随机数 |
源代码:src/aotu/indirect_branch
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_INDIRECT_BRANCH | 是否启用间接指令: • true —— 启用;• false —— 关闭; |
false |
| AMICE_INDIRECT_BRANCH_FLAGS | 间接指令的额外混淆扩展功能,以逗号分隔的字符串形式指定。可选扩展 | ""(空字符串,表示无额外扩展) |
dummy_block—— 在无条件跳转(br label)转换为indirectbr时,插入一个或多个虚假的基本块(dummy block),执行 1~3 条无意义的计算指令(如空加法、位运算等),再跳转至真实目标块;chained_dummy_blocks—— 增强dummy_block,支持插入多个连续的虚假块,形成跳转链,显著增加控制流复杂度;encrypt_block_index—— 加密基本块在跳转表的下标;dummy_junk—— 虚假块里面塞干扰性指令;shuffle_table—— 打乱跳转表顺序,随机化基本块在表中的排列(默认关闭);
源代码:src/aotu/split_basic_block
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_SPLIT_BASIC_BLOCK | 是否启用切割基本块: • true —— 启用;• false —— 关闭; |
false |
| AMICE_SPLIT_BASIC_BLOCk_NUMS | 切割基本块次数 | 3 |
源代码:src/aotu/lower_switch
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_LOWER_SWITCH | 是否开启: • true —— 启用;• false —— 关闭; |
false |
是否开启降级后插入无效代码(开启可能无法通过模块校验导致-O1等编译失败) |
false |
源代码:src/aotu/vm_flatten
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_VM_FLATTEN | 是否开启: • true —— 启用;• false —— 关闭; |
false |
源代码:src/aotu/vm_virtualize
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_VM_VIRTUALIZE | 是否启用指令级 VMP 虚拟化: • true —— 启用;• false —— 关闭; |
false |
| AMICE_VM_PROFILE_PATH | VM profile package 路径;为空时使用内置 amice-simple-vmp profile package |
内置 amice-simple-vmp |
| AMICE_VM_RUNTIME_SCOPE | 覆盖 profile 中的 runtime scope: • func —— 每个函数独立 runtime;• module —— 模块共享 runtime |
profile 声明的 runtime scope |
| AMICE_VM_EMIT_MARKERS | 生成 AMICEVMP bytecode magic、AMICE_VMP_RUNTIME_BYTECODE、.amice.vm.meta.* 和可读 bytecode 符号等稳定 VMP 测试/调试 marker;生产环境保持关闭。 |
false |
| AMICE_VM_DUMP_BYTECODE | 通过 debug 日志输出编码后的 VM bytecode | false |
| AMICE_VM_DUMP_LOWERING | 通过 debug 日志输出 LLVM IR 到 VM IR 的 lowering 结果 | false |
源代码:src/aotu/flatten
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_FLATTEN | 是否开启: • true —— 启用;• false —— 关闭; |
false |
| AMICE_FLATTEN_MODE | 混淆模式: • basic —— 基本的;• dominator —— 支配树加强版; |
basic |
| AMICE_FLATTEN_FIX_STACK | 是否在混淆后执行fixStack修复phi |
true |
| AMICE_FLATTEN_LOWER_SWITCH | 是否自动降级switch | true |
| AMICE_FLATTEN_LOOP_COUNT | 循环次数(最好小于等于7) | 1 |
| AMICE_FLATTEN_ALWAYS_INLINE | 是否把dominator模式的更新key_array的函数给inline了 |
false |
源代码:src/aotu/mba
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_MBA | 是否开启: • true —— 启用;• false —— 关闭; |
false |
| AMICE_MBA_AUX_COUNT | 算术混淆辅助变量个数 | 2 |
| AMICE_MBA_REWRITE_OPS | 24 |
|
| AMICE_MBA_REWRITE_DEPTH | 3 |
|
| AMICE_MBA_ALLOC_AUX_PARAMS_IN_GLOBAL | 是否将辅助变量分配到全局变量 | false |
| AMICE_MBA_FIX_STACK | 混淆后执行fixStack |
false |
源代码:src/aotu/bogus_control_flow
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_BOGUS_CONTROL_FLOW | 是否开启: • true —— 启用;• false —— 关闭; |
false |
| AMICE_BOGUS_CONTROL_FLOW_MODE | 混淆模式: • basic —— 默认的,基础版,甚至可能被优化;• polaris-primes —— 从Polaris-Obfuscator抄的一个变种; |
basic |
| AMICE_BOGUS_CONTROL_FLOW_PROB | 混淆概率 | 80 |
| AMICE_BOGUS_CONTROL_FLOW_LOOPS | 循环执行次数 | 1 |
源代码:src/aotu/function_wrapper
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_FUNCTION_WRAPPER | 是否开启: • true —— 启用;• false —— 关闭; |
false |
| AMICE_FUNCTION_WRAPPER_PROBABILITY | 混淆概率 | 80 |
| AMICE_FUNCTION_WRAPPER_TIMES | 循环执行次数 | 1 |
源代码:src/aotu/clone_function
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_CLONE_FUNCTION | 是否开启: • true —— 启用;• false —— 关闭; |
false |
源代码:src/aotu/alias_access
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_ALIAS_ACCESS | 是否开启: • true —— 启用;• false —— 关闭; |
false |
| AMICE_ALIAS_ACCESS_MODE | 工作模式: • pointer_chain —— 随机链式指针访问; |
pointer_chain |
| AMICE_ALIAS_ACCESS_SHUFFLE_RAW_BOX | 是否打乱局部变量分配顺序: • true —— 启用;• false —— 关闭; |
false |
| AMICE_ALIAS_ACCESS_LOOSE_RAW_BOX | 是否在RawBox内插入幻象数据: • true —— 启用;• false —— 关闭; |
false |
源代码:src/aotu/custom_calling_conv
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_CUSTOM_CALLING_CONV | 是否开启: • true —— 启用;• false —— 关闭; |
true |
默认情况下开启,但是不会修改任何函数的调用约定,
#define OBFUSCATE_CC __attribute__((annotate("+custom_calling_conv"))) OBFUSCATE_CC int add(int a, int b) { return a + b; }只有当函数标记了
custom_calling_conv注解的时候,才会对这个函数执行该混淆!
源代码:src/aotu/delay_offset_loading
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_DELAY_OFFSET_LOADING | 是否开启: • true —— 启用;• false —— 关闭; |
false |
| AMICE_DELAY_OFFSET_LOADING_XOR_OFFSET | 是否xor加密偏移量 | true |
源代码:src/aotu/param_aggregate
| 变量名 | 说明 | 默认值 |
|---|---|---|
| AMICE_PARAM_AGGREGATE | 是否开启: • true —— 启用;• false —— 关闭; |
false |