Skip to content

Latest commit

 

History

History
188 lines (136 loc) · 14.4 KB

File metadata and controls

188 lines (136 loc) · 14.4 KB

运行时环境变量

字符串加密

源代码: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 间接指令的额外混淆扩展功能,以逗号分隔的字符串形式指定。可选扩展 ""(空字符串,表示无额外扩展)

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

switch降级

源代码:src/aotu/lower_switch

变量名 说明 默认值
AMICE_LOWER_SWITCH 是否开启:
true —— 启用;
false —— 关闭;
false
AMICE_LOWER_SWITCH_WITH_DUMMY_CODE 是否开启降级后插入无效代码(开启可能无法通过模块校验导致-O1等编译失败) false

扁平化控制流 (VM)

源代码:src/aotu/vm_flatten

变量名 说明 默认值
AMICE_VM_FLATTEN 是否开启:
true —— 启用;
false —— 关闭;
false

指令级 VMP 虚拟化

源代码: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

MBA算术混淆

源代码: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注解的时候,才会对这个函数执行该混淆!

GEP偏移量混淆(延迟偏移加载)

源代码:src/aotu/delay_offset_loading

变量名 说明 默认值
AMICE_DELAY_OFFSET_LOADING 是否开启:
true —— 启用;
false —— 关闭;
false
AMICE_DELAY_OFFSET_LOADING_XOR_OFFSET 是否xor加密偏移量 true

参数结构化混淆(PAO)

源代码:src/aotu/param_aggregate

变量名 说明 默认值
AMICE_PARAM_AGGREGATE 是否开启:
true —— 启用;
false —— 关闭;
false