标题：花指令
代码
【深层】伪装 PEtite 2.2 -> Ian Luck  汇编代码：
============================
伪装代码部分：
============================ 
mov eax,0040E000
push 004153F3
push dword ptr fs:[0]
mov dword ptr fs:[0],esp
pushfw
pushad
push eax
xor ebx,ebx
pop eax
popad
popfw
pop dword ptr fs:[0]
pop eax
jmp XXXXXXXX        '执行到程序的原有OEP 
============================
【深层】伪装 WCRT Library (Visual C++) DLL Method 1 -> Jibz  二进制代码 + 汇编代码：
============================
伪装代码部分：
============================ 
使用二进制粘贴以下代码：
55 8B EC 83 7D 0C 01 75 41 A1 C0 30 00 10 85 C0 74 0A FF D0 85 C0 75 04 6A FE EB 17 68 0C 30 00 10 68 08 30 00 10 E8 89 00 00 00 85 C0 59 59 74 08 6A FD FF 15 08 20 00 10 68 04 30 00 10 68 00 30 00 10 E8 52 00 00 00 59 59
粘贴完毕后，再添加2行汇编语句：
jmp XXXXXXXX        '执行到程序的原有OEP 
retn 0C
1。伪装 vc
VC++程序的入口代码:
PUSH EBP                    
MOV EBP,ESP                  
PUSH -1                      
push 415448            -\___
PUSH 4021A8            -/  在这段代码中类似这样的操作数可以乱填      
MOV EAX,DWORD PTR FS:[0]          
PUSH EAX                    
MOV DWORD PTR FS:[0],ESP          
ADD ESP,-6C                  
PUSH EBX                    
PUSH ESI                    
PUSH EDI  
ADD BYTE PTR DS:[EAX],AL  /这条指令可以不要!
jmp 跳转到程序原来的入口点
******************************************************************************************
2。跳转
somewhere:            
nop            /"胡乱"跳转的开始...
jmp 下一个jmp的地址  /在附近随意跳
jmp ...          /...
jmp 原入口的地址    /跳到原始oep
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
新入口: push ebp
mov ebp,esp
inc ecx
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
loop somewhere    /跳转到上面那段代码地址去！
3. 伪装 C
融合
把A的代码换成B的
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 老入口
4. c ++
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
5.Microsoft Visual C++ 6.0
PUSH -1
PUSH 0
PUSH 0
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,68
PUSH EBX
PUSH ESI
PUSH EDI
POP EAX
POP EAX
POP EAX
ADD ESP,68
POP EAX
MOV DWORD PTR FS:[0],EAX
POP EAX
POP EAX
POP EAX
POP EAX
MOV EBP,EAX
JMP 原入口 
6.
在mov ebp,eax
后面加上
PUSH EAX 
POP EAX
7:
防杀精灵一号防杀代码:
push ebp
mov ebp,esp
push -1
push 666666
push 888888
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
pop eax
mov dword ptr fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 入口
8:
防杀精灵二号防杀代码:
push ebp
mov ebp,esp
push -1
push 0
push 0
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
sub esp,68
push ebx
push esi
push edi
pop eax
pop eax
pop eax
add esp,68
pop eax
mov dword ptr fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 入口
9.
防杀精灵终极防杀代码
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
push eax
jmp入口
10:
木马彩衣(金色鱼锦衣)花代码
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,原入口
push eax
retn
11:
木马彩衣(虾米披风)花代码
push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loopd /跳转到下面那段代码地址去！
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
nop            /"胡乱"跳转的开始...
jmp 下一个jmp的地址  /在附近随意跳
jmp ...          /...
jmp 原入口的地址    /跳到原始oep
12.
VC++5.0代码(木马彩衣无限复活袍):
PUSH EBP                                
MOV EBP,ESP                            
PUSH -1                                
push 415448                  -\___
PUSH 4021A8                  -/  在这段代码中类似这样的操作数可以乱填          
MOV EAX,DWORD PTR FS:[0]                
PUSH EAX                                
MOV DWORD PTR FS:[0],ESP                
ADD ESP,-6C                            
PUSH EBX                                
PUSH ESI                                
PUSH EDI    
ADD BYTE PTR DS:[EAX],AL  /这条指令可以不要!
jo 00401000                /原入口
jno 00401000              /原入口
db 0e8h                    /花代码
花指令生成器
一、写花指令生成器必备知识
1、花指令原理
花指令是程序中的无用代码，程序多它没影响，少了它也能正常运行。加花指令后，杀毒软件对木马静态反汇编时，木马的代码就不会正常显示出来，加大杀毒软件的查杀难度。
2、如何写花指令
下面我们先看看一段花指令，分析理解它的原理：
PUSH EBP
MOV EBP,ESP
push edx
pop edx
inc ecx
dec ecx
add esp,21
add esp,-21
add esp,10
sub esp,10
JMP 附近空地址随便乱跳
JMP 原入口点
花指令一般有三部分，开头就是PUSH EBP和MOV EBP,ESP这两句在大部分程序开头可以经常看到。PUSH EBP是把EBP压入堆栈，MOV EBP,ESP是把ESP的值赋给EBP，不懂没关系，只要知道PUSH EBP和MOV EBP,ESP这两句经常出现在文件开头就可以了，随便用OllyDbg打开一个不加壳的文件载入后经常停在PUSH EBP MOV EBP,ESP。
接下来就是花指令啦，push edx是把通用寄存器EDX压入堆栈，pop edx是把通用寄存器EDX弹出堆栈，这两句和起来就相当于什么也没做。接下来的inc ecx，ecx用来保存计数值，也是寄存器，INC是加1；下面的dec ecx中的dec是减1，加1减1相抵消，又是什么也没做。add esp,21这是寄存器esp加21，add是加上，下面一句add esp,-21是寄存器esp加－21，小学知识，+21+（-21）=0，还是什么也没做。再下来add esp,10寄存器esp加21，sub esp,10寄存器esp减10，sub是减去。一个+10，一个-10相互抵消了。
最后是跳转语句，我用两句JMP，第一句在花指令附近随便跳到个空地址，第二个JMP是从空地址跳回文件的原入口点。
3、如何写入花指令
我们来看看加花指令的一般步骤：
1、准备好要加的花指令；
2、准备未加壳的黑客软件；
3、用OllyDbg打开这个黑客软件，记下入口点的内存地址；
4、找到零地址，一句一句写入花指令，再用JMP跳回程序入口点；（如果找不到空白地址，我们可以用zeroadd加区段，E文软件，我汉化好的，操作简单就不演示了。）
5、保存后用Peditor修改文件入口点为开始写花指令的地址。这样运行程序就先运行花指令再跳回程序的原始开头执行程序了；
6、检测程序是否正常运行和免杀效果。