Oops-re's Blog.

花指令随记

字数统计: 414阅读时长: 1 min
2022/11/25

分为两大类:

  • 可执行花指令
  • 不可执行花指令

可执行花指令

IDApro函数的识别分析失败是因为IDA检测出堆栈操作破坏堆栈平衡

  • 函数调用
    首先要知道一个函数的调用以及返回的栈变化
1
2
3
4
5
6
7
call label              
---push 下一条指令的地址/mov eip,offset label
label:
add [esp],5
---[esp]+5
ret
--- pop eip

lmage1

image2
IDA主要还是看retn处的堆栈不平衡,没有将esp=ebp。

  • 混淆特征码
1
2
3
4
mov op1,op2     ---->    push op2 / pop op1
jmp label ----> push label / ret
call label ----> push label_next_instruction / push label / ret
push op ----> sub esp,4 / mov [esp],op

目的就是增加反汇编的复杂程度
这个就是主要用于使用AV查杀引擎的木马查杀绕过,
在扫描区段加入一些花指令,
使恶意代码偏离引擎识别的偏移范围,
再使用工具修改程序入口(OEP),
就可以逃避这种方式的查杀。

不可执行花指令

利用IDA 静态分析算法的缺陷 使得代码在反编译解析时出错。其原理使反汇编分析执行流命中执行会出错的垃圾数据,就会造成解析错误,而实际执行过程中垃圾数据并不会执行。

junkcode

1
2
3
4
5
jz Label        // 采用条件互补的方法跳转绕过垃圾数据
jnz Label
junkcode
Label:
...

或者构建必然条件实现跳转

1
2
3
4
5
6
7
8
9
10
11
12
#include "stdio.h"
int main(int argc, char const* argv[]){
_asm{
test eax,0 // 构造必然条件实现跳转,绕过破坏堆栈平衡的指令
jz label
add esp,0x1 //触发IDA中堆栈不平衡
label:
}
printf("Hello world!\n");
return 0;
}

CATALOG
  1. 1. 可执行花指令
  2. 2. 不可执行花指令
    1. 2.1. junkcode