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

什么是指令替代

  • 指令替代是指将一些运算指令(如加法、减法、异或等等),替换为等效而更复杂的指令序列,以达到混淆计算过程的目的 例如将上面的简单异或运算改成下面的等价运算
再说一个简单一点的,例如将 a+b 替换为 a - (-b) ,将 a ^ b 替换为 (~a & b) | (a & ~b) 等等 需要注意的是这些替换仅支持整数运算的替换,因为替换浮点指令会造成舍入的错误和误差 指令替代不会影响程序的控制流,但反编译出来的式子难以分辨,所以我们可以用这个来改掉一些加密算法的特征值比如 tea 系列算法的魔数,AES 和 DES 的加密盒
notion image

指令替代实现

步骤

步骤很简单,只需要一步,扫描所有指令,对需要进行替换的指令(加法、减法、与或非、异或)进行替换

加法(+)指令替换

a = b + c,一共有四种替代方案 第一种AddNeg
第二种 AddDoubleNeg
第三种 AddRand1
第四种AddRand2

减法(-)指令替代

a = b - c,一共有三种替换方案 第一种 subNeg
第二种 subRand1
第三种 subrand2

与 (&) 运算指令替换

a = b & c,一共有两种替换方案 第一种 andSubstitute
第二种 andSubstituteRand
这里举例较为复杂,用代码举例吧

或(|)运算指令替换

a = b | c,一共有两种替换方案 第一种 orSubstitue
第二种 orSubstitueRand
一样上代码

异或(^)指令替换

a = b ^ c,一共有两种替换方案 第一种 xorSubsititute
第二种 xorSubsitituteRand
上代码
 

参考于

上一篇
代码混淆技术之随机控制流
下一篇
代码混淆技术之虚假控制流