花指令免杀
1、花指令免杀
1.1、概述
- 花指令:是汇编语言的一种技术,就是采用了一些干扰指令对程序进行类似加密的操作
- 花指令:就是一段本可以不存在的指令,它存在的唯一目的就是掩盖程序中的一些东西
1.2、常用的汇编语法
指令 | 作用 |
---|---|
mov(传送指令) | mov ebp,esp; 将esp的值传递给ebp |
push(进栈指令) | push ebp; 将ebp压入栈 |
pop(出栈指令) | pop ebp; 将栈顶的数据弹出,保存在ebp |
add(加法指令) | add esp,8; 将esp加0x8 |
sub(减法指令) | sub esp,8; 将esp减0x8 |
inc(增量指令) | inc ecx; ecx加1 |
dec(减量指令) | dec ecx; ecx 减1 |
jmp(无条件转移指令) | jmp 00000001; 跳转到地址00000001 |
call(子程序调用指令) | call 00001234; 调用位于00001234处的子程序 |
1.3、常用的花指令组合
- 这些指令通常都是常用的花指令组合
Nop; // 空指令,无作用(常被用来干扰反病毒软件)
pop 0; // 将0弹出栈堆
pop 0; // 将0弹出栈堆
push ebp; // 将ebp压入栈堆
pop ebp; // 将ebp弹出栈堆
add esp,1; // 将esp加1
sub esp,1; // 将esp减1
add esp,1; // 将esp加1
add esp,-1; // 将esp加-1
sub esp,1; // 将esp减1
sub esp,-1; // 将esp减-1
inc ecx; // ecx加1
dec ecx; // ecx减1
sub eax,-2; // 将eax减去-2,其实也就是加上2
dec eax; // eax减1
dec eax; // eax减1
push 00001234; // 将入口地址压入栈
retn; // 返回入口地址
mov eax,00001234; // 将入口地址传送到数据寄存器中
jmp eax; //跳到程序入口地址
1.4、花指令在免杀的应用
- 花指令应该添加在一个无壳的程序中
- 花指令首先要保证不破坏栈堆平衡,所谓栈堆平衡,简单地理解为不影响程序运行的结果
push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 程序入口点
1.5、搜索空白区域
-
搜索到了偏移量,要转换成其对应的内存地址
-
通过PEID搜索,打开一个程序后,点击>号,然后右键搜索全0处
推荐阅读: