汇编花指令

花指令是一堆汇编指令组成,对于程序来说,是一堆废话,加不加花指令都
不影响程序的正常运行.编写的花指令要终始保持堆栈的平衡.


花指令:(junk code) 意思是程序中有一些指令,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。经典的是一些跳转指令,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可能利用各种 jmp, call, ret, 一些堆栈技巧,位置运算,等等
去除花指令,跟去除混淆不一样,花指令只是一些迷惑的语句,混淆可能包含的更多一些。
所以还是有必要去实现一个代码分析器。
 
找不到Microsoft Visual C++ 6.0 SPx Method 1
1。伪装 vc++5.0
PUSH EBP
MOV EBP,ESP
PUSH -1
push 415448       -\___
PUSH 4921A8       -/    在这段代码中类似这样的操作数可以乱填     
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)无效PE文件
往回跳转0040639B        00           db 00
xxxxxx:
nop
POP EAX     ---\
POP EAX        |--这部分是花指令!
POP EAX        |
JMP yyyyyy     /(跳回旧入口点:)
新入口点 --->
push ebp
mov ebp,esp
inc ecx
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
MOV DWORD PTR FS:[0],EAX     \
POP EAX                      |
POP EAX                      \
MOV DWORD PTR FS:[0],EAX      |(注意了。。花指令)
POP EAX                      /
POP EAX                      |
MOV DWORD PTR FS:[0],EAX     /
loop xxxxxx.....(转到地址)
(3)伪装Microsoft Visual 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) 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 原入口
(5)
在mov ebp,eax
后面加上
PUSH EAX
POP EAX
(6)
防杀精灵终极防杀代码
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
push eax
jmp入口
(7)木马彩衣(金色鱼锦衣)花代码
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,原入口
push eax
retn
(8)木马彩衣(虾米披风)花代码
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
(9)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              /花代码
      。。。。。。。。。 。。。。花指令。。。。。。。。。。。。。。。。。。。


一.花指令概念:
花指令是一堆汇编指令组成,对于程序来说,是一堆废话,加不加花指令都
不影响程序的正常运行.编写的花指令要终始保持堆栈的平衡.
二.写花指令的原则:
写花指令的基本原则就是要保持堆栈的平衡.
写花指令细细品味下面一段比喻:
我们把一段花指令比喻成一道数学运算题,把汇编指令(push pop等)比喻成加减
乘除,把寄存器或数据(eax,ebx,1等)比喻成
数字(1,2,3等),那么要保持花指令堆栈的平衡,等于保持这道数学题的结果是0 .
三.解释一些指令含意
push ebp ----把基址指针寄存器压入堆栈
pop    ebp ----把基址指针寄存器弹出堆栈
push eax ----把数据寄存器压入堆栈
pop    eax ----把数据寄存器弹出堆栈
nop        -----不执行
add esp,1-----指针寄存器加1
sub esp,-1-----指针寄存器加1
add esp,-1--------指针寄存器减1
sub esp,1-----指针寄存器减1
inc ecx    -----计数器加1
dec ecx    -----计数器减1
sub esp,1 ----指针寄存器-1
sub esp,-1----指针寄存器加1
jmp 入口地址----跳到程序入口地址
push 入口地址---把入口地址压入堆栈
retn        ------ 反回到入口地址,效果与jmp 入口地址一样.
mov eax,入口地址 ------把入口地址转送到数据寄存器中.  
jmp eax        ----- 跳到程序入口地址  
jb 入口地址
jnb 入口地址    ------效果和jmp 入口地址一样,直接跳到程序入口地址.
四.免杀花指令编写手册:
注:以后编写花指令,都可以参考本手册,灵活组合,快速写出自己的花指令.
*******************************************************************
我加上的可利用的命令:
xor eax,eax    寄存器EAX清0
CALL 空白命令的地址   无效call
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值