首页 技术杂谈 正文
  • 本文约1023字,阅读需5分钟
  • 164
  • 0

花指令免杀

摘要

水文~花指令基本学习

1、花指令免杀

1.1、概述

  1. 花指令:是汇编语言的一种技术,就是采用了一些干扰指令对程序进行类似加密的操作
  2. 花指令:就是一段本可以不存在的指令,它存在的唯一目的就是掩盖程序中的一些东西

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处

标签:免杀
评论