CTF中干扰逆向分析的几种技术的介绍和解题思路

常见的干扰逆向分析的技术:花指令,反调试,加壳,控制流混淆,双进程保护,虚拟机保护技术

1.花指令

这是一种比较简单的技巧,在原始的代码中插入一段无用的,能够干扰反汇编引擎的代码
解题思路:花指令主要影响的是静态分析,在IDA中,可以手动将花指令patch为nop空指令

2. 反调试

反调试技术是指在程序运行过程中探测其是否处于被调试状态,如果程序正处于被调试,则无法正常运行

几种Linux下常见的反调试方法:

  1. 利用ptrace
    linux下的调试主要是通过ptrace系统调用来实现的。一个进程只能被一个程序跟踪
  2. proc文件系统检测
    读取/proc/self/目录下的部分文件,根据程序在调试和非调试状态下的不同来进行反调试。如果是在非调试情况下,TracePid为0;如果是在调试情况下,则TracePid为跟踪进程的pid号
  3. 父进程检测
    通过getppid系统调用获取到程序的父进程,如果父进程是gdb,strace,ltrace,则处于正在被调试

基本思路:定位到反调试的代码,对程序进行patch,在不影响程序正常运行的情况下,跳过对调试器的检测代码

3. 加壳

经过加壳的程序,其真正的代码是加密存放在二进制文件中的,只有在执行时才从内存中解密还原出来。因此,首先自然是脱壳

4. 控制流混淆

这是一种很棘手的方式,没有办法直接进行静态分析,也没有办法直接进行反编译,调试器也会陷入控制流的跳转混乱中。
基本思路就是对于程序流混淆的程序,通常采用Trace的方法

5. 双进程保护

Debug Blocker,是一种在调试模式下运行自身程序的方法
这种保护通常存在两个进程:调试器和被调试器的关系
特点:

  1. 防止代码调试
  2. 父进程能控制子进程

基本思路:通常父进程的功能都比较单一,因此首先对父进程进行分析,了解处理子进程的逻辑,然后对子进程进行patch,使子进程脱离主进程后也能正常运行,最后对子进程进行分析

6. 虚拟机保护

这种技术是指将代码翻译为机器和人都无法识别的一串伪代码字节流。这段用于翻译伪代码并负责具体执行的子程序就称为虚拟机。它以一个函数的形式出现,函数的参数就是字节码的内存地址
一个虚拟机,它有一套自己的指令集架构。一开始,会有一个vm_init阶段完成初始化操作,对寄存器进行初始化,对内存进行加载,之后,会有一个vm_run阶段,开始取指令,解析指令,然后根据代码的操作码opcode分派处理函数

基本思路:首先逆向虚拟机,得到ISA,然后编写相应的反汇编工具对虚拟机指令进行反汇编,最后分析虚拟机的汇编代码

Logo

更多推荐