花指令

合集下载

网上收集的花指令代码2

网上收集的花指令代码2
push -1
push 111111
push 222222
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6C
push ebx
push esi
push edi
push ebp
mov ebp,esp
PUSH EAX
POP EAX
RETN
55 64 A3 00 00 00 00 58 58 64 A3 00 00 00 00 58 58 64 A3 00 00 00 00 8B EC 83 C4 F4 83 C4 0C B8
2C 52 40 00 50 8B E8 50 58 C3
0088102A 8BE8 MOV EBP,EAX
0088102C B8 34A64000 MOV EAX,40A634
00881031 50 PUSH EAX
00881032 C3 RETN
00881033 90 NOP
50 58 90 8B EC 6A FF 68 11 11 11 00 68 22 22 22 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 58 64 A3 00 00 00 00 58 58 58 58 8B E8 B8 34 A6 40 00 50 C3 90
-----------------------------------------------------------------
二次加花
push ebp
mov ebp,esp
jmp
UPX 文件头前=NOP

花指令原理 -回复

花指令原理 -回复

花指令原理-回复花指令原理是今天计算机科学领域中的一个热门话题。

它涉及到计算机指令的执行过程以及与之相关的概念。

在本文中,我们将详细讨论花指令的原理,并解释其在计算机体系结构中的作用。

首先,让我们先了解一下计算机指令的概念。

计算机指令是计算机内部用于执行特定任务的基本命令。

它们由二进制代码表示,由计算机处理器识别和执行。

计算机指令可以包括算术运算、逻辑运算、存取内存等操作。

花指令则是一种特殊的指令,它的存在可以为其他指令提供有用的附加功能。

花指令的原理可以简单地解释为在计算机执行指令的过程中,将某些指令的执行与其他指令的执行相结合,以提高计算机系统的性能。

花指令可以通过减少总执行时间、提高指令并行性或减少指令冲突来实现这一目的。

指令并行性是花指令原理的一个重要概念。

它涉及到多个指令同时执行的能力。

在传统的计算机体系结构中,指令是按顺序执行的,即一条指令执行完毕后才能执行下一条指令。

这种顺序执行的模式有时会导致计算机的性能瓶颈。

花指令原理通过将多条指令的执行重叠在一起,从而提高计算机系统的效率。

为了实现指令并行性,计算机体系结构通常会采用流水线处理技术。

流水线是一种将指令的执行过程划分为多个阶段的技术。

每个阶段都专门处理指令的某个部分,使得多个指令可以同时在不同的阶段进行处理。

通过这种方式,计算机可以同时执行多个指令,从而提高整体的执行速度。

然而,指令并行性也会面临一些挑战,例如指令间的依赖关系和数据冒险。

指令依赖发生在一个指令需要在另一个指令执行完成后才能执行的情况下。

数据冒险则发生在一个指令需要访问另一个指令还未完成的数据时。

这些问题都可能导致指令的执行顺序被打乱,从而降低整体性能。

花指令原理通过插入一些无效或者冗余的指令来解决指令并行性面临的问题。

这些花指令在计算的角度上没有实际意义,但它们可以用来填充指令流水线中的空闲周期,以保证指令的连续执行。

这样一来,指令间的依赖关系和数据冒险问题就可以得到解决。

花指令(精)

花指令(精)

花指令的概念与认识花指令 1、什么是花指令什么是花指令?实际上,把它按照“乱指令”来理解可能更贴切一些,我们知道,汇编语言其实就是机器指令的符号化,从某种程度上看,它只是更容易理解一点的机器指令而已。

每一条汇编语句,在汇编时,都会根据cpu特定的指令符号表将汇编指令翻译成二进制代码。

而日常应用中,我们通过VC的IDE或其它如OD等反汇编、反编译软件也可以将一个二进制程序反汇编成汇编代码。

机器的一般格式为:指令+数据。

而反汇编的大致过程是:首先会确定指令开始的首地址,然后根据这个指令字判断是哪个汇编语句,然后再将后面的数据反汇编出来。

由此,我们可以看到,在这一步的反汇编过程中存在漏洞:如果有人故意将错误的机器指令放在了错误的位置,那反汇编时,就有可能连同后面的数据一起错误地反汇编出来,这样,我们看到的就可能是一个错误的反汇编代码。

这就是“花指令”,简而言之,花指令是利用了反汇编时单纯根据机器指令字来决定反汇编结果的漏洞。

2、花指令与免杀的关系加花就是,在程序汇编中,加了一些无用的废话,用来扰乱杀软对特征码的扫描对比,来达到免杀的目的。

是一种逃避方式,主要用于表面免杀。

加花指令的确没有改变特征码的位置,但是他改变了程序执行顺序,有的也能改变文件结构。

使杀毒软件扫描的时候跳到花指令处,即判断没有病毒。

通常情况下,在文件免杀的时候,加花指令是最简单、有效的方法,而且一般能通杀很多杀毒软件,所以一般文件免杀通用此法,前提是你的花指令不是常用的,最好能自己做出你个人的花指令,才会很有效。

3.花指令执行顺序花指令一般添加到程序的头部。

执行顺序:花指令入口-->执行花指令-->程序原入口-->执行原程序花指令的好坏直接决定程序是否可以躲避杀毒软件的查杀,花指令和壳的本质差不多,都是为了保护程序而做,所以我们做免杀的时候,可以多结合壳和花指令各自的优点对程序进行处理,达到更好的免杀效果。

大概步骤总结: 第一步:从编写手册中成对的提取几对第二步:打乱它们之间的顺序,也可不打乱第三步:中间插入几个nop或jmp,也可不插入第四步:最后添加跳转到入口地址指令第五步:把编写好的花指令添加到程序中后,测试是否可以正常运行,然后再用杀毒软件查杀 3、花指令的样本 PUSH EBP MOV EBP,ESP DEC EBP INC EBP ADD ECX,1 SUB ECX,-1 MOV EAX,DWORDPTR FS:[0] PUSH EAX MOV DWORD PTR FS:[0],ESP POP EAX MOV DWORD PTR FS:[0],EAX MOV CL,1 PUSH EAX SUB AL,90 POP EAX ADD ESP,-0C ADD ESP,0C PUSH EAX JNO 原始入口 ________________ push ebp mov ebp ,esp //常见的入口代码 add esp ,68 //以下的指令都是对称的(成对的) sub esp ,68 inc ecx dec ecx push edi pop edi push eax pop eax push edi pop edi inc ecx dec ecx nop jz 跳回入口点 //跳到程序的入口,执行原程序 jnz 跳回入口点 ____________ push ebp mov ebp, esp push eax push eax nop pop eax pop aex sub eax, 1 inc eax, 1 push 入口地址 retn。

花指令

花指令

花指令的概念与认识花指令
1、什么是花指令
什 么是花指令?实际上,把它按照“乱指令”来理解可能更贴切一些,我们知道,汇编语 言其实就是机器指令的符号化,从某种程度上看,它只是更容易理解一点的机器指令而已。每一条汇编语句,在汇编时,都会根据cpu特定的指令符号表将汇编指 令翻译成二进制代码。而日常应用中,我们通过VC的IDE或其它如OD等反汇编、反编译软件也可以将一个二进制程序反汇编成汇编代码。机器的一般格式为: 指令+数据。而反汇编的大致过程是:首先会确定指令开始的首地址,然后根据这个指令字判断是哪个汇编语句,然后再将后面的数据反汇编出来。由此,我们可以 看到,在这一步的反汇编过程中存在漏洞:如果有人故意将错误的机器指令放在了错误的位置,那反汇编时,就有可能连同后面的数据一起错误地反汇编出来,这 样,我们看到的就可能是一个错误的反汇编代码。这就是“花指令”,简而言之,花指令是利用了反汇编时单纯根据机器指令字来决定反汇编结果的漏洞。
push eax
push eax
nop
pop eax
pop aex
sub eax, 1
inc eax, 1
push 入口地址
retn
3.花指令执行顺序
花指令一般添加到程序的头部。
执行顺序:花指令入口-->执行花指令-->程序原入口-->执行原程序
花指令的好坏直接决定程序是否可以躲避杀毒软件的查杀,花指令和壳的本质差不多,都是为了保护程序而做,所以我们做免杀的时候,可以多结合壳和花指令各自的优点对程序进行处理,达到更好的免杀效果。
大概步之间的顺序,也可不打乱
第三步:中间插入几个nop或jmp,也可不插入
第四步:最后添加跳转到入口地址指令

木马免杀之汇编花指令技巧(精)

木马免杀之汇编花指令技巧(精)

木马免杀之汇编花指令技巧作者:逆流风(发表于《黑客X档案》07.07,转载注明出处)相信很多朋友都做过木马免杀,早期的免杀都是加壳和改特征码,现在免杀技术已经发展到花指令免杀,改壳之类的,而这些需要一定的汇编知识,但是汇编却不是一块容易啃的骨头,所以我写了这篇菜鸟版的免杀汇编教程,帮助小菜们快速入门,掌握免杀必备的汇编知识,改花指令,改特征码的技巧和编写自己的花指令。

一、免杀必备的汇编知识push 压栈,栈是一种数据结构,记住四个字:先进后出。

压栈就是把数据放如栈中,从栈顶放如,出栈的时候也是从栈顶取出,所以会有先进后出的特点!先进后出我们可以这样理解,例如:一个乒乓球筒,我们放入乒乓球,然后取出乒乓球,取出的都是就后放进的球。

就如我们放入球的顺序是球1、2、3、4,取出的顺序是球4、3、2、1。

pop 出栈,与push相对应。

mov a,b 把b的值送给a,把它看作编程中的赋值语句就是b赋值给a,这时a的值就是b了。

nop 无作用,就是什么也没做。

retn 从堆栈取得返回地址并跳到该地址执行。

下面是一些算术运算指令:ADD 加法sub 减法inc 加1dec 减1最后是跳转指令:jmp 无条件跳je 或jz 若相等则跳jne或jnz 若不相等则跳jb 若小于则跳jl 若小于则跳ja 若大于则跳jg 若大于则跳jle 若小于等于则跳jge 若大于等于则跳这些就是我们需要掌握的,怎么样不多吧,一些指令可能看不明白,看了后面的就会清楚了。

对了,忘了讲寄存器了,寄存器是中央处理器内的其中组成部份。

寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。

我们需要了解的是8个通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP二、特征码和花指令的修改特征码我就不多说了,大家都知道的,现在杀毒软件查杀都用特征码查杀,改了木马的特征码,杀毒软件就查不出我们的木马,这样就达到免杀的效果。

花指令收集(精)

花指令收集(精)

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 push eax push eax push eax push eax mov ebp,eax call jnz 来源:网络花指令---之收集 ==精心收集之花指令=== 大家有好的花指令都拿来这里贴出来,大家一起共享!!呵呵 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 1。

VC++ 5.0 PUSH EBP MOV EBP,ESP PUSH -1 push 515448 PUSH 6021A8 MOV EAX,DWORD PTR FS:[0] PUSH EAX MOV DWORD PTR FS:[0],ESP ADD ESP,-6C PUSH EBX PUSH ESI PUSH EDI jmp 跳转到程序原来的入口点 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 2。

花指令——精选推荐

花指令——精选推荐

花指令刚在52破解看了⼀篇花指令的⽂章,感觉挺好的。

第⼀种花指令是jmp+垃圾数据⽐如jmp label//这⾥存放垃圾指令或数据label://正常指令push ebpmov ebp,esp第⼆种是假分⽀跳转xor eax, eax;test eax, eax;jnz LABEL1;jz LABEL2;xor eax,eax这让eax为0,逻辑运算指令会影响ZF标志位的,所以会置ZF为1,那么永远会跳转到LABEL2处,这样LABEL1处的代码全部是垃圾指令,不管看起来多么正常,统统都是垃圾指令。

第三种是call和retn配合,看起来好像调⽤了⼀个函数,但实际上啥事也没做就返回了。

我写了⼀段测试代码。

int main(int argc, char* argv[]){printf("hello world");int a;__asm {call LABEL9;_emit 0x55;_emit 0x8b;_emit 0xec;_emit 0xff;_emit 0x83;_emit 0xec;_emit 0xc;LABEL9:add dword ptr ss : [esp], 0x0D;ret;__emit 0xF3;}a = 3;return 0;}_emit 0x55;_emit 0x8b;_emit 0xec;_emit 0xff;_emit 0x83;_emit 0xc;这中间有_emit的都是垃圾数据,⼲扰分析者的。

我们真正有效的代码就是int a;a=3;return 0;没了。

add dword ptr ss : [esp], 0x0D;这个改变函数返回地址的,调⽤完call Lable9之后,栈顶会存放函数的返回地址,也就是_emit 0x8b这个数据的地址。

由于是垃圾数据,我们必须不能让它返回到这个地址,要改⼀下改到下⼀句有效代码的地址处,也就是a=3;这句代码的地址,那么就需要让返回地址加⼀个值,加多少呢?这个我是反汇编之后⽤OLLYDBG调试之后算出来的。

简单花指令例题

简单花指令例题

简单花指令例题
以下是一个简单的花指令示例,使用x86汇编语言编写:assembly复制代码:
section .data
label1 db 'Hello, World!',0
label2 db 'This is a jump label.',0
section .text
global _start
_start:
; 跳转到label2
jmp label2
; 输出字符串到控制台
mov eax,4 ; 系统调用号(sys_write)
mov ebx,1 ; 文件描述符(stdout)
mov ecx,label1 ; 指向要输出的字符串的指针
mov edx,13 ; 要输出的字符串的长度(包括终止符)int 0x80 ; 发起系统调用
; 退出程序
mov eax,1 ; 系统调用号(sys_exit)
xor ebx,ebx ; 返回值(0)
int 0x80 ; 发起系统调用
label2:
; 在这里添加花指令,以干扰静态分析
mov eax,0x11111111 ; 一个随机的系统调用号
int 0x80 ; 发起系统调用
在这个示例中,我们使用jmp指令跳转到label2,并在label2处添加了一些花指令。

花指令的目的是干扰静态分析,使得逆向工程师难以理解程序的真正意图。

在这个例子中,我们使用了一个随机的系统调用号来发起一个无效的系统调用,以实现干扰的目的。

请注意,这只是一个简单的示例,实际的花指令可能会更加复杂和难以识别。

电脑常用花指令大全

电脑常用花指令大全

常用花指令大全用花指令大全常用花指令大全╬┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╬常用花指令大全╬┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╬┇部分花指令内容相同只是改了一些跳转处的汇编代码换了名字┇┇大家在加花指令的时候可以在新入口处先NOP几行在开始加花┇┇在加花的同时你也可以在花指令中随便NOP几行在继续添加花┇╬┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅┅╬******************************************************************** ****1.伪装vc++5.0代码:PUSH EBPMOV EBP,ESPPUSH -1push 415448 -\___PUSH 4021A8 -/ 在这段代码中类似这样的操作数可以乱填MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPADD ESP,-6CPUSH EBXPUSH ESIPUSH EDIADD BYTE PTR DS:[EAX],AL /这条指令可以不要!jmp 原入口地址******************************************************************** ****2.胡乱跳转代码:push ebpmov ebp,espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxloop somewhere /跳转到上面那段代码地址去!somewhere:nop /"胡乱"跳转的开始...jmp 下一个jmp的地址 /在附近随意跳jmp ... /...jmp 原入口地址 /跳到原始oep******************************************************************** ****3.伪装c++代码:push ebpmov ebp,esppush -1push 111111push 222222mov eax,fs:[0]push eaxmov fs:[0],esppop eaxmov fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址******************************************************************** ****4.伪装Microsoft Visual C++ 6.0代码:PUSH -1PUSH 0PUSH 0MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPSUB ESP,68PUSH EBXPUSH ESIPUSH EDIPOP EAXPOP EAXPOP EAXADD ESP,68POP EAXMOV DWORD PTR FS:[0],EAXPOP EAXPOP EAXPOP EAXPOP EAXMOV EBP,EAXJMP 原入口地址******************************************************************** ****5.伪装防杀精灵一号防杀代码:push ebpmov ebp,esppush -1push 666666push 888888mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],esppop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址******************************************************************** ****6.伪装防杀精灵二号防杀代码:push ebpmov ebp,esppush -1push 0push 0mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],espsub esp,68push ebxpush esipush edipop eaxpop eaxpop eaxadd esp,68pop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 原入口地址******************************************************************** ****7.伪装木马彩衣(无限复活袍)代码:PUSH EBPMOV EBP,ESPPUSH -1push 415448 -\___PUSH 4021A8 -/ 在这段代码中类似这样的操作数可以乱填MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPADD ESP,-6CPUSH EBXPUSH ESIPUSH EDIADD BYTE PTR DS:[EAX],AL /这条指令可以不要!jo 原入口地址jno 原入口地址call 下一地址******************************************************************** ****8.伪装木马彩衣(虾米披风)代码:push ebpnopnopmov ebp,espinc ecxnoppush edxnopnoppop edxnoppop ebpinc ecxloop somewhere /跳转到下面那段代码地址去!someshere:nop /"胡乱"跳转的开始...jmp 下一个jmp的地址 /在附近随意跳jmp ... /...jmp 原入口的地址 /跳到原始oep******************************************************************** ****9.伪装花花添加器(神话)代码:-----------根据C++改nopnopnopmov ebp,esppush -1push 111111push 222222mov eax,dword ptr fs:[0]push eaxmov dword ptr fs:[0],esppop eaxmov dword ptr fs:[0],eaxpop eaxpop eaxpop eaxpop eaxmov ebp,eaxmov eax,原入口地址push eaxretn******************************************************************** ****10.伪装花花添加器(无极)代码:nopmov ebp, esppush -1push 0A2C2Apush 0D9038mov eax, fs:[0]push eaxmov fs:[0], esppop eaxmov fs:[0], eaxpop eaxpop eaxpop eaxpop eaxmov ebp, eaxmov eax, 原入口地址jmp eax******************************************************************** ****11.伪装花花添加器(金刚)代码:--------根据VC++5.0改nopnopmov ebp, esppush -1push 415448push 4021A8mov eax, fs:[0]push eaxmov fs:[0], espadd esp, -6Cpush ebxpush esipush ediadd [eax], almov eax,原入口地址jmp eax******************************************************************** ****12.伪装花花添加器(杀破浪)代码:nopmov ebp, esppush -1push 0push 0mov eax, fs:[0]push eaxmov fs:[0], espsub esp, 68push ebxpush esipush edipop eaxpop eaxpop eaxadd esp, 68pop eaxmov fs:[0], eaxpop eaxpop eaxpop eaxpop eaxmov ebp, eaxmov eax, 原入口地址jmp eax******************************************************************** ****12.伪装花花添加器(痴情大圣)代码:nop..........省略N行nopnoppush ebpmov ebp, espadd esp, -0Cadd esp, 0Cmov eax, 原入口地址push eaxretn******************************************************************** ****13.伪装花花添加器(如果*爱)代码:nop........省略N行nopnoppush ebpmov ebp, espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxmov eax, 原入口地址jmp eax******************************************************************** ****14.伪装PEtite 2.2 -> Ian Luck代码:mov eax,0040E000push 004153F3push dword ptr fs:[0]mov dword ptr fs:[0],esppushfwpushadpush eaxxor ebx,ebxpop eaxpopadpopfwpop dword ptr fs:[0]pop eaxjmp 原入口地址 '执行到程序的原有OEP******************************************************************** ****15.无效PE文件代码:push ebpmov ebp,espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxMOV DWORD PTR FS:[0],EAX \POP EAX |POP EAX \MOV DWORD PTR FS:[0],EAX |(注意了。

ida 反汇编 花指令

ida 反汇编 花指令

ida 反汇编花指令
IDA反汇编器是一种用于将机器码转换成原始汇编代码的工具。

花指令是一种特殊的汇编指令,旨在增加程序的复杂性,使逆向工程师更加困惑。

花指令的目的是混淆代码,增加反汇编的难度,使分析者更难理解程序的逻辑。

IDA反汇编器可以识别并解析大多数常见的花指令,但对于一些更复杂的花指令可能需要手动进行分析和解释。

在使用IDA反汇编器时,可以使用以下方法来处理花指令:
1. 了解常见的花指令模式:花指令通常采用特殊的编码方式,例如使用无效指令、变长指令、冗余指令或无关代码来混淆程序。

通过了解这些模式,可以更容易地识别和处理花指令。

2. 分析程序的逻辑:花指令旨在混淆程序的逻辑和流程。

通过仔细分析程序的逻辑,可以更好地理解它的功能,揭示出隐藏在花指令下面的真实代码。

3. 标记和注释:在IDA中,可以使用标记和注释来标记花指
令和真实代码的区分。

这样可以帮助您更好地理解程序的结构和逻辑。

4. 手动分析:对于一些更复杂的花指令,可能需要手动进行分析和解释。

这包括查看反汇编代码、查找相关引用等。

虽然花指令可以增加逆向工程的难度,但使用适当的工具和技术,结合耐心和专注的分析,可以成功地处理和解决花指令。

花指令模糊变换逻辑一致性研究

花指令模糊变换逻辑一致性研究

p pr tde o rv elgcivrait o jn o et nfr t nw t fr aiainmeh d Af r td igtefr a df io fuk ae u is w t poet i n aibly fu k d asoma o i m l t to . t u yn m l ei t no jn s h O h o i c r i ho z o es h o ni
维普资讯
第 3 卷 第 2 期 2 0
VL o 32







20 0 6年 1 0月
Oc o e 0 6 tb r 2 0
2 O
Co p t rEn i e r n m u e gn e ig
安 全技 术 ・
文章编号:1 o- 2( o) _03 3 文献标识码: o -3 8 06 0_15 o 4 2 2- —0 A
( e to o ue ce c T cn lg. nigUnvri f ot& T lc mmu iain. nig2 00 ) D p. f mp t S ine& eh oo yNaj ies yo s C r n t P s ee o nct sNajn 0 3 o 1 [ src ]J n o et nfr t ni o eo f cieapoc fh o eo fsaintc n lg . sdo ea a ss f urn n o e Abta t u kcd asoma o n f e t p raho ec d buct h oo yBae nt n l i o r tu kc d r i s e v t o e h y c e j
c d r n f r ai n s me l mma r d c d. i h s e o eta s o m to , o e sa e e u e W t t e e l mma . n r m h e s e t u h a J P Ex a d , J C wi h ’ n “ u k Co e , h s a d fo t r e a p c ss c s“ M p n ” “ M S t ’ a d J n d ” c

花指令原理

花指令原理

花指令原理
花指令,也被称为花指令集或花指令片段,是一种干扰反汇编引擎正常工作的指令片段。

其原理是利用反汇编器静态分析算法的缺陷,使得代码在反编译解析时出错,从而干扰程序正常执行。

花指令内部如果涉及到寄存器的使用,一般会将其保存在栈中。

花指令可分为两大类:可执行花指令和不可执行花指令。

其中不可执行花指令是利用反汇编器静态分析算法的缺陷使得代码在反编译解析时出错。

其原理使反汇编分析执行流命中执行会出错的垃圾数据,就会造成解析错误,而实际执行过程中垃圾数据并不会执行。

此外,花指令还分为两类:一种是通过构造巧妙的代码,引导反汇编引擎解析一条错误的指令,扰乱指令的长度,使反汇编引擎无法按照正常的指令长度一次解析邻接未解析的指令,最终使反汇编引擎输出错误的反汇编结果;另一种是利用间接跳转形式的花指令(在定长指令集如arm中比较常见)。

总的来说,花指令的原理是利用反汇编器的缺陷和特性,通过干扰反汇编引擎的正常工作,增加程序静态分析的难度,从而达到保护程序代码、防止逆向工程等目的。

花指令

花指令

公花指令push ebp ----把基址指针寄存器压入堆栈pop ebp ----把基址指针寄存器弹出堆栈push eax ----把数据寄存器压入堆栈pop eax ----把数据寄存器弹出堆栈nop -----不执行dd esp,1-----指针寄存器加1sub esp,1-----指针寄存器减1inc ecx -----计数器加1dec ecx -----计数器减1sub esp,1 ----指针寄存器加1sub esp,-1----指针寄存器加-1jmp 入口地址------跳到程序入口地址与它效果一样的还有(以下三个):push 入口地址retnjb 入口地址jnb 入口地址mov eax,入口地址jmp eaxjmp 入口地址----跳到程序入口地址push 入口地址---把入口地址压入堆栈retn ------ 反回到入口地址,效果与jmp 入口地址一样.mov eax,入口地址------把入口地址转送到数据寄存器中.jmp eax ----- 跳到程序入口地址jb 入口地址jnb 入口地址------效果和jmp 入口地址一样,直接跳到程序入口地址.四.免杀花指令编写手册:注:以后编写花指令,都可以参考本册,灵活组合,快速写出自己的花指令.************************************************************* ****** push ebppop ebppush eaxpop eaxpush esppop esppush 0push 0push 10 -------其中数字可以任意,注意与下面对应push -10nop -----------可任意在中间添加move edi,edi ----效果与nop一样add esp,1 -------其中数字可以任意,注意以下面对应add esp,-1add esp,1 --------其中数字可以任意,注意以下面对应sub esp,1inc ecxdec ecxsub eax,2 ----------其中数字可任意,与inc的个数对应inc eaxinc eaxadd eax 2 ----------其中数字可任意,与dec的个数对应dec ecxdec ecxjmp 下一个jmp地址jmp 下一个地址push ebpmov ebp,esp -------可做为花指令的开头句jmp 入口地址------跳到程序入口地址与它效果一样的还有(以下三个):push 入口地址retnjb 入口地址jnb 入口地址mov eax,入口地址jmp eax在写花指令的时候,最好先提取好成对的花指令,然后在随便打乱顺序,这样能更好的达到免杀效果,还有在最后跳转到原始入口点的时候最好不要用jmp 语句,以为卡巴对这个查的很严,即使你的花指令免杀了,到最后你用jmp跳转,卡巴也会把你的马马杀掉. 最好用push 搭配retn 来使用.效果是一样的。

如何加花指令

如何加花指令

花指令相信做过免杀的朋友都知道花指令吧。

加花指令是一种不错的文件免杀方法,而网上公布的花指令和花指令添加器因为里边的花指令被公布了,所以免杀效果不好。

有点汇编基础的人就写自己的花指令,但写花指令的过程比较烦,所以我萌生了写一个花指令生成器的想法,首创哦^_^一、写花指令生成器必备知识1、花指令原理花指令是程序中的无用代码,程序多它没影响,少了它也能正常运行。

加花指令后,杀毒软件对木马静态反汇编时,木马的代码就不会正常显示出来,加大杀毒软件的查杀难度。

2、如何写花指令下面我们先看看一段花指令,分析理解它的原理:PUSH EBPMOV EBP,ESPpush edxpop edxinc ecxdec ecxadd esp,21add esp,-21add esp,10sub esp,10JMP 附近空地址随便乱跳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是加上,下面一句ad d esp,-21是寄存器esp加-21,小学知识,+21+(-21)=0,还是什么也没做。

再下来add esp,10寄存器es p加21,sub esp,10寄存器esp减10,sub是减去。

免杀常用花指令

免杀常用花指令

push mov mov nop push dec nop jnz nop mov push pop push push pop sub sub push push push inc dec push pop jmp
ห้องสมุดไป่ตู้
ebp ebp, esp ecx, 6 0 ecx short 004BC008 esi, esi edi edi ebp esp ebp esp, 0C esp, -0C eax esi edi ecx ecx ebp ebp 004BB000
对应的二进制: 55 8B EC B9 06 00 00 00 90 6A 00 49 90 75 F9 90 8B F6 57 5F 55 54 5D 83 EC 0C 83 EC F4 50 56 57 41 49 55 5D E9 D7 EF FF FF ---------------------------------------------------004BB000 55 push 004BB001 8BEC mov 004BB003 50 push 004BB004 58 pop 004BB005 68 86110000 push 004BB00A EB 01 jmp 004BB00C 90 nop 004BB00D 68 89330000 push 004BB012 50 push 004BB013 64:A3 00000000 mov 004BB019 64:A1 00000000 mov 004BB01F 64:8925 0000000>mov
ebp ebp, esp eax eax 1186 short 004BB00D 3389 eax dword ptr fs:[0], eax eax, dword ptr fs:[0] dword ptr fs:[0], esp

12木马的加花指令

12木马的加花指令

木马的加花指令
花指令:就是一段没有实际意义的、不影响程序正常运行的一段代码。

它的作用就是加大杀毒软件查杀病毒的难度。

(1)按照前面所讲述的方法配置一个不加壳的木马程序。

(2)用OD载入这个木马程序,如图1所示,同时记下入口点的内存地址。

图1:OD的程序界面
(3)向下拉滚动条,找到零区域(也就是可以插入代码的都是0的空白地方)。

并记下零区域的起始内存地址。

(4)从这个零区域的起始地址开始一句一句地写入我们准备好的花指令代码。

(5)花指令写完后,在花指令的结束位置加一句:JMP 刚才OD载入时的入口点内存地址。

(6)保存修改结果后,最后用PEditor这款工具打开这个改过后的木马程序。

如图2所示,在入口点处把原来的入口地址改成刚才记下的零区域的起始内存地址,并按应用更改,使更改生效。

图2:使用PEditor更改入口点
加花指令免杀技术的优缺点:
优点:通用性非常不错,一般一个木马程序加入花指令后,就可以躲避大部分的杀毒软件,不像改特征码,只能躲过某一种杀毒软件。

缺点:这种方法还是不能过具有内存查杀的杀毒软件,比如瑞星内存查杀等。

另外目前还有几款软件可以自动帮你加花,比如木马彩衣进行加花,如图3所示。

图3:利用“木马彩衣”加花
点击“浏览”选择需要加花的木马程序,选择一种加花方法,然后点击“穿上”,程序就被加入花指令了,也就是会让木马穿上一件彩衣伪装了。

花指令编写手册-花指令-彩衣

花指令编写手册-花指令-彩衣

送木马彩衣7 花指令代码7:防杀精灵一号防杀代码: push ebpmov ebp,esppush -1push 666666push 888888mov eax,dword ptr fs:[0] push eaxmov dword ptr fs:[0],esp pop eaxmov dword ptr fs:[0],eax pop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 入口8:防杀精灵二号防杀代码: push ebpmov ebp,esppush -1push 0push 0mov eax,dword ptr fs:[0] push eaxmov dword ptr fs:[0],esp sub esp,68push ebxpush esipush edipop eaxpop eaxpop eaxadd esp,68pop eaxmov dword ptr fs:[0],eax pop eaxpop eaxpop eaxpop eaxmov ebp,eaxjmp 入口9.防杀精灵终极防杀代码push ebpmov ebp,espadd esp,-0Cadd esp,0Cpush eaxjmp入口10:木马彩衣(金色鱼锦衣)花代码push ebpmov ebp,espadd esp,-0Cadd esp,0Cmov eax,原入口push eaxretn11:木马彩衣(虾米披风)花代码push ebpnopnopmov ebp,espinc ecxnoppush edxnopnoppop edxnoppop ebpinc ecxloopd /跳转到下面那段代码地址去!<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< nop /"胡乱"跳转的开始...jmp 下一个jmp的地址/在附近随意跳jmp ... /...jmp 原入口的地址/跳到原始oep12.VC++5.0代码(木马彩衣无限复活袍):PUSH EBPMOV EBP,ESPPUSH -1push 415448 -\___PUSH 4021A8 -/ 在这段代码中类似这样的操作数可以乱填MOV EAX,DWORD PTR FS:[0]PUSH EAXMOV DWORD PTR FS:[0],ESPADD ESP,-6CPUSH EBXPUSH ESIPUSH EDIADD BYTE PTR DS:[EAX],AL /这条指令可以不要!jo 00401000 /原入口jno 00401000 /原入口db 0e8h /花代码xxxxxx: nop \/|\ POP EAX |看了,其实这两部分就是花指令| POP EAX || POP EAX /| JMP yyyyyy (跳回旧入口点:00100016DB )||| 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 |(注意了。

ida去除花指令 原理

ida去除花指令 原理

ida去除花指令原理以IDA去除花指令原理为标题的文章IDA是一款常用的逆向工程软件,它可以帮助我们分析和反汇编二进制文件。

在逆向工程过程中,我们可能会遇到花指令(也称为无效指令)的情况。

花指令是指在二进制文件中存在的一些无效或冗余指令,它们对代码的逻辑没有任何意义,但却会干扰我们的分析和理解。

因此,我们需要使用IDA去除这些花指令,以便更好地进行逆向分析。

那么,IDA是如何去除花指令的呢?其原理主要包括以下几个步骤:1. 识别花指令:首先,IDA会对二进制文件进行静态分析,识别出其中的花指令。

它会根据一些特定的模式或规则,判断某条指令是否为花指令。

例如,IDA可以通过判断指令的操作码是否合法,或者通过分析指令的执行路径是否存在逻辑错误来确定是否为花指令。

2. 分析指令流:一旦识别出花指令,IDA会对指令流进行分析,确定花指令的起始和结束位置。

这一步骤通常需要IDA解析二进制文件的控制流图,并进行数据流分析,以确定花指令的具体位置。

3. 剔除花指令:在确定了花指令的位置后,IDA会将其从指令流中剔除。

具体而言,它会将花指令的字节码替换为NOP指令(即空操作指令),这样花指令在执行时就不会产生任何影响。

4. 修复指令跳转:在剔除花指令后,指令流的结构可能发生改变,导致原本的跳转指令无法正确跳转。

为了修复这个问题,IDA会重新分析指令流,并修复受到影响的跳转指令。

修复的方式通常是修改跳转指令的目标地址,使其指向正确的位置。

通过以上步骤,IDA可以有效地去除二进制文件中的花指令,提高逆向分析的准确性和效率。

在实际应用中,我们可以根据IDA提供的API或插件进行自动化的花指令去除操作,以加快分析过程。

需要注意的是,花指令的去除可能会引入一些风险。

因为花指令通常是由编译器生成的,它们可能存在某种特殊的用途或优化策略。

因此,在去除花指令之前,我们需要仔细分析和评估,确保不会对程序的行为和逻辑产生负面影响。

总结起来,IDA去除花指令的原理包括识别花指令、分析指令流、剔除花指令和修复指令跳转。

ida 反汇编 花指令

ida 反汇编 花指令

ida 反汇编花指令IDA反汇编工具是一种功能强大的工具,可以对二进制文件进行逆向分析。

花指令则是一种带有特殊意义的指令序列,用于干扰分析者的反汇编和逆向工作。

本文旨在介绍IDA反汇编工具和花指令的相关内容,并提供一些建议和指导,帮助读者更好地理解和应对花指令。

首先,让我们了解一下IDA反汇编工具。

IDA是一款功能强大的静态反汇编工具,可以将二进制文件转化为汇编代码。

它通过解析二进制文件的机器码,还原出原始的汇编指令,从而使分析者能够深入研究二进制文件的功能和结构。

然而,在反汇编的过程中,花指令可能会带来一些困扰。

花指令是一种被精心设计的指令序列,它与正常的汇编指令相似,但实际上并没有任何实际功能,或者在执行过程中产生误导性的结果。

这些花指令的目的是为了混淆和模糊二进制文件的逻辑结构,使其更难被分析者理解和还原。

对于分析者而言,遇到花指令可能会导致分析困难加大。

由于它们的存在,正常的代码逻辑可能会因为含糊不清的指令而产生误导。

此外,花指令还可能会伪装为有用指令,在分析过程中浪费时间和精力。

对于这些问题,我们可以采取一些有效的措施来应对花指令。

首先,我们可以通过观察指令的执行流程和逻辑,辨别并排除花指令。

通常花指令的执行结果是无效的,这就是我们区分它们的关键。

其次,在遇到花指令时,我们可以利用IDA的辅助工具和插件来进行分析。

例如,将IDA与调试器结合使用,可以动态调试并跟踪指令的执行,从而更好地识别和理解花指令。

此外,阅读源代码和文档也是处理花指令的重要一环。

通过对二进制文件的背景知识和编写者意图的了解,我们可以更好地区分花指令和正常指令,并找到正确的分析角度。

同时,与其他研究者和专家进行交流,分享经验和技巧也是关键。

通过集思广益,我们可以共同解决花指令带来的问题,提高分析的效率和准确性。

总而言之,IDA反汇编工具是一种非常有用的工具,可以帮助我们分析二进制文件的结构和功能。

而花指令则是一种常见的反汇编干扰手段,可以增加分析者的困难。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JNE-------不等于时转移(Jump if Not Equal)
JZ--------等于转移(Jump if Zero)
JNZ-------不等于时转移(Jump if Not Zero)
JB--------小于转移(Jump if Below)
JNB-------大于或等于转移(Jump if Not Below)
nop -------可任意在中间添加
与它等效的:
mov EDI,EDI
add esp,1 -------其中数字可以任意,注意以下面对应
add esp,-1
add esp,1 -------其中数字可以任意,注意以下面对应
sub esp,1
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
跳转
somewhere:
nop /"胡乱"跳转的开始...
jmp 下一个jmp的地址 /在附近随意跳
jmp ... /...
POPAD-----把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.
3.算术运算指令:
ADD-------加法.
SUB-------减法.
INC-------加 1
DEC-------减 1
MUL-------无符号乘法
DIV-------无符号除法
4.加区加花
首先通过加区段工具给无壳的服务端加一个区段。区段名子随便填写,比如hacker,大小一般填写在50-200 就好了。然后我们用LORDPE打开首先记下入口点。然后选择区段记下新添加的HACKER区段的入口点。因为我们要写花指令,所以我们在入口点设置为HACKER区段的比入口点稍微大点的地址。然后我们在写花指令。通常找不到零区域的时候就可以加区段。
花指令
用途:抵御静态反汇编。
原理:
数据与代码的区分、指令本身的不等长。
使用无用字节干扰反汇编器对指令起始位置的判断。
方法:
1.寄存器介绍:
(1).数据寄存器: 存放数据EAX、EBX、ECX、EDX
(2).指针寄存器: 主要用途就是在存储器寻址时,提供偏移地址.ESP、EBP、EDI、ESI
add eax,3
add eax,2
jmp 下一个jmp地址
jmp 下一个地址
push ebp
mov ebp,esp ------可做为花指令的开头句
jmp 入口地址 ------跳到程序入口地址
与它效果一样的还有(以下三个):
push 入口地址
retn
jb 入口地址
nop
pop edx
dec ecx
pop ebp
inc ecx
loop somewhere /跳转到上面那段代码地址去!
跳转花指令 加在c++的后面,多跳几次过卡巴是最容易的了,呵呵
算是一个小窍门吧
>>>>>>>>>>>>>>>ห้องสมุดไป่ตู้>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1。 VC++ 5.0
PUSH EBP
MOV EBP,ESP
| POP EBP
| INC ECX
| MOV DWORD PTR FS:[0],EAX /
| POP EAX |
| POP EAX /
注:编写花指令,可参考以下成双指令,可任意自由组合.达到免杀效果.
push ebp
pop ebp
push eax
pop eax
push esp
pop esp
push 0
push 0
push 10 -------其中数字可以任意,注意与下面对应
push -10
4.逻辑运算指令
AND------与运算
OR-------或运算
XOR------异或运算
NOT------取反
5.无条件转移指令
JMP--------无条件转移指令
CALL-------过程调用
RET/RETF---过程返回
6.条件转移指令
JE--------等于转移(Jump if Equal)
ESP(堆栈指针寄存):以“后进先出”方式工作的一个存储区,它必须存在于堆栈段中.
EBP(基址指针寄存器):内存放一个指针,该指针指向系统栈最上面一个栈帧的底部。
ESI(源变址寄存器):内存操作指令中作为“源地址指针”使用。
EDI(目的变址寄存器):内存操作指令中作为“目的地址指针”使用。
实际物理地址(OD载入的入口点)= 内存地址(0000F000)+镜象基址(RVA)
5.壳中加花
用加壳工具(如ASPACK壳)给服务端先加一层壳,然后在加花指令。事先记好入口点
7.壳中加区加花
加壳---加区段---加花指令 综合了以上所有方法。
收集花指令一:
往回跳转0040639B 00 db 00
| loop xxxxxx
>>>>>>>>>>>>>>>>>>>>>>>>>>>.
2。C++的花指令
push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
inc ecx
dec ecx
sub eax, -2 --------其中数字可任意,与dec的个数对应
dec eax
dec eax
add eax -2 --------其中数字可任意,与inc的个数对应
inc eax
inc eax
sub eax,5 --------其中数字可以任意,注意以下面对应
| PUSH EBP 004063AA <-新入口点:
| MOV EBP,ESP
| INC ECX
| PUSH EDX
| NOP
| POP EDX
| DEC ECX
push -1
push 515448
push 6021A8
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6c
push ebx
push esi
push edi
jmp 跳转到程序原来的入口点
加花方法:
1.直接加花
1)记住入口点
2)找零区域
3)NOP填充
4)记住新入口点
5)编写花指令跳转回原入口点
6)保存文件
7)lordPE修改新入口点
2.去头加花
1)配置一个无壳的服务端
2)用OD载入后记下从入口点地址
3)入口点地址往下选择几处然后复制再NOP掉
2.数据传输指令:
MOV-------传送字或字节
PUSH------把字压入堆栈
POP-------把字弹出堆栈
PUSHA-----把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.
POPA------把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.
PUSHAD----把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
jnb 入口地址
mov eax,入口地址
jmp eax
手动编写例子
push ebp
mov ebp,esp
sub eax,-2
dec eax
dec eax
sub eax,5
add eax,3
add eax,2
add esp,0B
add esp,-0B
JNC-------无进位时转移(Jump if Not Carry)
JP--------奇偶性为偶数时转移(Jump if Parity)
JNP-------奇偶性为奇数时转移(Jump if Not Parity)
7.其它
nop-----在汇编中代表空指令,不执行任何代码.
Mov edi,edi-----效果与nop一样.
jb 原入口点
jnb 原入口点
花指令的变形技巧.
cmp a,b ;比较a与b
mov a,b ;把b的值送给a
ret 返回主程序
nop ;无作用
call 调用子程序
加花方法
加花的方法:
1.去头加花,又分为直接去头.头前加花.头后加花。
2.加区加花.
相关文档
最新文档