代码混淆技术系列
常见代码混淆技术汇总
00 分钟
2022-12-19
2024-11-11
type
status
date
slug
summary
tags
category
icon
password

代码混淆是什么

代码混淆是将计算机程序的代码,转换成一种功能是上等价,但是难以阅读和理解的 形式的行为
notion image

函数

  • 函数是代码混淆的基本单位,一个函数由若干个基本块组成,有且仅有一个入口块,可能有多个出口块
  • 一个函数可以用一个控制流图(Control Flow Graph, CFG)表示
notion image

基本块

  • 基本块由一组线性指令组成,每一个基本块都有一个入口点(第一条执行的指令)和一个出口点(最后一条执行的指令,亦即终结指令)
  • 终结指令要么跳转到另一个基本块 (br, switch),要么从函数返回 (ret)
  • 基本块等于执行指令 + 终结指令
    • notion image

控制流

  • 控制流代表了一个程序在执行过程中可能遍历到的所有路径
  • 通常情况下,程序的控制流很清晰地反映了程序的运行逻辑,但经过混淆的控制流会使得人们难以分辨正常运行逻辑
    • notion image

不透明谓词

  • 不透明谓词指的是其值为混淆者明确知晓,而反混淆者却难以推断的变量。
  • 例如混淆者在程序中使用一个恒为 0 的全局变量,反混淆者难以推断这个变量恒为 0。
这两个代码编译后用 ida 反编译会产生两个截然不同的两种结果,很好玩
notion image
notion image

代码混淆技术

分类

  1. 花指令
  1. 虚拟机
  1. 符号混淆
  1. 控制流混淆
      • 控制流平坦化
      • 虚假控制流
      • 随机控制流
  1. 计算混淆
      • 指令替代
      • 常量替代
  1. 其他混淆器 (例如 mov 混淆器等,ollvm 也算一种)

符号混淆

将函数的符号,如函数名、全局变量名去除或者混淆。对于 ELF 文件可以通过 strip 指令去除符号表完成。
notion image

控制流混淆

  • 控制流混淆指的是混淆程序正常的控制流,使其在功能保持不变的情况下不能清晰地反映原程序的正常逻辑
notion image

计算混淆

  • 计算混淆指的是混淆程序的计算流程,或计算流程中使用的数据,使分析者难以分辨某一段代码所执行的具体计算。
    • notion image

虚拟机混淆

这个我学了很久,后面一定写一篇文章好好总结,这个理解说难也不难,说简单也不简单,就是做起来很复杂 虚拟机混淆的思想是将一组指令集合(如一组 x86 指令),转化为一组攻击者未知的自定义指令集。并用与程序绑定的解释器解释执行。 虚拟机混淆代表:VMProtect。 虚拟机混淆是目前最强力的混淆,但也有许多缺点:如性能损耗大、容易被杀毒软件报毒等。
notion image

花指令

我之前参考吾爱大神的一篇写的一篇
花指令详解分析(代码分解)

指令替代

常见简单指令混淆

参考于

上一篇
恶意代码实战分析(一)
下一篇
LLVM 基本块分割