代码混淆技术系列
代码混淆技术之常量替换
00 分钟
2022-12-21
2024-11-11
type
status
date
slug
summary
tags
category
icon
password

什么是常量替代

  • 常量替代指将二元运算指令(如加法、减法、异或等等)中使用的常数,替换为等效而更复杂的表达式,以达到混淆计算过程或某些特殊常量的目的
  • 例如将 TEA 加密中使用的常量 0x9e3779b 替换为 1216716715+1885832146-643678438
  • 同指令替代,目前仅支持整数常量的替换,因为替换浮点数会造成舍入的错误和误差。
  • 且仅支持 32 位整数的替换
  • 不过是可以拓展到任意位数整数的替换
  • 和指令替代很像

常量替代的混淆效果

  • 类似于指令替代,函数的控制流没有发生变化,但是运算过程变得难以分析

拓展能力强

  • 常量替代可进一步拓展为常量数组的替代和字符串替代
  • 常量数组替代可以抹去 AES, DES 等加密算法中特征数组,字符串替代可以防止攻击者通过字符串定位关键代码

替换思路

  1. 扫描所有指令,对目标指令(操作数类型为 32 位整数)进行替换
  1. 线性替换:val -> ax + by + c
    1. 其中 val 为原常量 a, b 为随机常量 x, y 为随机全局变量 c = val - (ax+by)
  1. 按位运算替换:val -> (x << 5 | y >> 3) ^ c
    1. 其中 val 为原常量 x, y 为随机全局变量 c = val ^ (x << 5 | y >> 3)
  1. 还有许多自定义方案

参考于

上一篇
恶意代码实战分析(三)
下一篇
代码混淆技术之随机控制流