花指令

花指令就是一段本可以不存在的指令,存在的唯一目的就是掩盖程序中的一些东西。

5.1 什么是花指令?

程序正常运行时完全可以不需要的,人们可以加进去的一段代码,或是刻意修改程序流程的一段代码。

5.2 脚本木马的花指令应用

  • 定义空变量
  • 输出无用的if语句条件判断
  • 无意义的输出

5.3 花指令的根基-汇编语言

5.3.1 认识汇编

80x86指令系统大致刻意分为以下5个功能组:

  • 数据传输指令
  • 逻辑运算指令
  • 串操作指令
  • 控制转移指令
  • 处理器控制指令

5.3.2 通过反汇编添加任意功能

这一小节主要通过例子演示通过反汇编添加功能。

  • 文件末尾空白处添加CMD命令
  • 作为参数调用WinExec
  • 记录下原程序入口点地址
  • 修改入口点到空白位置反汇编修改的位置
  • 跳转回原程序入口点地址
  • 修改原OEP入口点

实行以上几步操作后,在程序执行前其实是先执行了我们所加入的代码。

这里也会涉及一个知识点,stdcall,cdcel的知识

结合前面修改入口点的知识,这一小节的知识是从本书中【空白区域跳转法】免杀方法延伸而来。在入口点跳转的过程中添加了花指令做混淆。

5.4 花指令入门

常用的花指令组合

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 ****** ;将入口地址压入栈
retn        ;再返回到入口地址  

mov eax,****** ;将入口地址传送到数据寄存器中
jmp eax        ;跳到程序入口地址

5.5 花指令在免杀领域的应用

  • 选择空白区域,写入花指令,JMP跳回原程序入口点,修改OEP入口点

A 空白区域寻找与加空区段

  • WinHex
  • PEID
  • CodeCaver(运行程序才能进行查找)
  • ToPo(添加空白区段工具)

5.6 花指令高级应用-提取与快速应用

  • 怒剑狂花

SEH异常的应用

SEH异常也叫做“结构化异常处理”,是系统提供的一个服务。

当系统检测到异常时,它马上会将发生异常的程序挂起,并交由系统特定的调试程序来处理,当程序执行流程已经转移到系统上,而程序又运行起来。那么就会使程序的运行流程产生更大的迷惑性。

push *******                 ;地址*******压入堆栈
mov eax,dword ptr fs:[0]     ;fs[0]压入堆栈,执行完成后,fs[0]指向栈顶
push eax                     
mov dword ptr fs:[0],esp     ;构造1个err结构
nop 
vxdcall 134543

参考文章

[分享]反调试跟踪的一点心得
http://bbs.pediy.com/thread-79205.htm

反病毒攻防研究第002篇:利用缝隙实现代码的植入

反病毒攻防研究第003篇:添加节区实现代码的植入

黑客免杀攻防笔记

Seh异常
http://blog.sina.com.cn/s/blog_4f06d8e40100bs3d.html