花指令
花指令就是一段本可以不存在的指令,存在的唯一目的就是掩盖程序中的一些东西。
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