`

花指令原理

阅读更多

 

转自:http://hi.baidu.com/zhangjw918/blog/item/c69a7943e16de1189213c62f.html

 

 

 

第一个免杀花指令生成器--不简单的免杀工具(图)

陆续将以前发表在杂志的文章放上来~,发表于《黑客X档案》,第几期忘了,呵呵

 

前言

 

相信做过免杀的朋友都知道花指令吧。加花指令是一种不错的文件免杀方法,而网上公布的花指令和花指令添加器因为里边的花指令被公布了,所以免杀效果不好。有点汇编基础的人就写自己的花指令,但写花指令的过程比较烦,所以我萌生了写一个花指令生成器的想法,首创哦^_^

 

一、写花指令生成器必备知识

 

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、检测程序是否正常运行和免杀效果。

 

一般步骤就是这样了,不演示了,大家看看06年第9期主题乐园,里面有详细的例子。

 

二、开始写花指令生成器

 

1、花指令生成器的编写思路

 

了解了花指令的一些知识后我们来考虑下编写的思路。我们使用perl来编写这个花指令生成器,先看看我画的流程图:(见图1)

 

 

我们需要定义两个数组,一个是花指令数组,一个跳转语句数组,用for循环和rand函数来实现对数组的循环随机读取,我们还需要一个变量来控制循环次数。程序工作原理是对两个数组的随机读取达到生成花指令的目的。

 

2、代码编写和分析

 

#!/usr/bin/perl

 

if($#ARGV<0){

print" \nUsage: \n\n liyx_HZJ.exe <一个大于1的数字以确定花指令的长度>\n \nmade by liyx \nCopyright [w Group] 2006\n";

exit(1);

}#使用帮助。

 

$N=$ARGV[0];#获的参数,赋值给$N。

 

if($N<1){

print" \n 错误,请输入大于1的数字,以确定花指令的长度。 \n \nmade liyx \nCopyright [w Group] 2006\n";

exit(1);

}#出错提示。

 

程序的第一行注明了这是个perl程序,注释是从符号“#”开始到该行结束。“!”表示perl程序中的第一个注释具有特殊含义。

 

接下来的if($#ARGV<0)是判断有无命令行输入的参数,perl的存储命令行参数是@ARGV数组,在perl中,程序运行时自动取得程序名后和回车键之前的所有项目并根据结果生成数组@ARGV,$ARGV[0]是第一个参数。当无输入参数(即$#ARGV<0),用print输出使用帮助。有则$N=$ARGV[0],把输入参数赋值给$N变量。接着再判断$N的大小,$N必须大于1。($N在这个程序中用来控制花指令的长短)$N小于1时,一样打印出错误提示。(如图2)

 

 

$H1="push edx\npop edx\n";

$H2="push eax\npop eax\n";

$H3="inc ecx\ndec ecx\n";

$H4="add esp,10\nsub esp,10\n";

$H5="add esp,21\nadd esp,-21\n";

$H6="nop\nnop\n";

 



@H=(

$H1,

$H2,

$H3,

$H4,

$H5,

$H6,

);#花指令的数组。

 

这里定义一个数组@H用来存储花指令语句,perl中的数组可以包含变量,表达式,任何数值,引用和字符串,还可以是数组当然也可以为空。语法是:

 

@list=(

1,

2,

3,



);

 

(分行是为了看得更清楚,如无必有可以改为单行显示)为了更容易看,我先将每对指令赋值给变量,再将变量放入数组中。

 

print "\nPUSH EBP\nMOV EBP,ESP\n";

 

这句是打印出花指令的开头两句PUSH EBP和MOV EBP,ESP,和C一样\n是换行。

 

for($i=1; $i<=$N; $i )

{

$rand1 = int rand(@H);

print @H[$rand1];

}#循环打印出随机生成的花指令。

 

先讲讲这里需要用到的知识,for循环语句和rand函数,for循环几乎所有编程语言都有,我们看看语法:

 

for(变量初始值;循环条件;条件改变)

{

  循环体

}

运行过程是先给变量赋值,再判断是否符合循环条件,符合时执行循环体,再处理初始变量,之后判断是否符合循环条件,符合时执行循环体,直到不符合循环条件跳出循环。

 

这里还用到的是rand函数。

 

函数名 rand

调用语法 retval = rand (num);

解说 随机数函数,返回0和整数num之间的一个浮点数。

 

运行过程是先给$i赋值1,再比较$i是否小于等于$N,是的话执行循环体,就是用rand函数读取@H数组,赋值给$rand1,再用print打印出来。执行一遍后$i ,就是$i=$i 1,$i的值增加1,再比较$i是否小于等于$N,是的话再继续执行循环体,直到$i大于$N为止。

 

$J1="JMP 附近空地址随便乱跳\nJMP 跳回入口点\n";

$J2="je 跳回入口点\njne 跳回入口点\n";

$J3="jz 跳回入口点\njnz 跳回入口点\n";

$J4="jb 跳回入口点\njge 跳回入口点\n";

$J5="jl 跳回入口点\njge 跳回入口点\n";

$J6="ja 跳回入口点\njle 跳回入口点\n";

$J7="jg 跳回入口点\njle 跳回入口点\n";

 

@J=(

$J1,

$J2,

$J3,

$J4,

$J5,

$J6,

$J7,

);#跳转指令数组。

 

这里就是跳转语句的数组了,跳转语句在花指令中的作用是程序执行完花指令再跳回文件的原始入口点执行程序,一般用的是JMP 无条件转移指令,我们把je 等于时转移和jne 不等于时转移结合起来就成了JMP了,以此类推jb 若小于则跳和jge 大于或等于转移,ja 若大于则跳和jle 若小于等于则跳等结合都成JMP,这样我们有很多不同组合,可以加大杀毒软件对木马查杀难度。(我找了免杀的汇编知识资料,大家可以看看里面的跳转指令部分)

 

$rand2 = int rand(@J);

print @J[$rand2]; #随机生成跳转指令并打印出来。

 

最后还是用rand函数读取跳转数组,这里只需读取一次,并打印出来。

 

3、测试工具

 

代码写好了,是不是很简单啊,功能可不一般哦,看看效果吧。(如图3)怎样,不错吧,这样就可以拥有N多免杀花指令了,呵呵~~

 

 

后记

 

程序很简单,但效果很好,有兴趣的朋友可以用C,VB写个,应该不难实现。第一次写编程的文章,写得不好,见谅。最后感谢好友wo1fSea在我写这个小程序过程对我的帮助。

分享到:
评论

相关推荐

    花指令生成器(GUI)

    下面将详细解释花指令的原理、生成器的用途以及其在木马免杀中的应用。 1. 花指令的原理: 花指令源于计算机编程中的混淆技术,它通过改变正常的指令序列,创建出看似随机但实际上有特定功能的代码。这些指令可能...

    易语言花指令去除器

    "易语言花指令去除器"是一款专门针对易语言编写的程序进行优化和调试的工具,其主要功能是检测并移除程序中的"花指令"。 花指令,又称为混淆代码或乱码指令,是程序员为了保护软件不被逆向工程分析或者反编译而采用...

    花指令生成工具

    【花指令生成工具】是一种专为特定人群设计的软件,主要应用于计算机安全领域的学习与研究。"花指令",在中文IT术语中,通常指的是经过特殊编码或混淆处理的指令,目的是为了隐藏程序的真实意图,增加逆向工程的难度...

    花指令伪装器VB源码(最新)

    在IT领域,"花指令"通常是指为了混淆代码、防止反编译或逆向工程而设计的一种技术。这种技术常用于软件保护,尤其是对于商业软件,开发者可能希望防止他人轻易理解其内部工作原理。"VB"指的是Visual Basic,微软开发...

    EProt01花指令

    以下将详细介绍花指令的原理、用途以及与EProt01的关系: 1. 花指令的原理: 花指令的核心在于混淆,它通过在程序中插入大量的无用或看似无用的指令来干扰分析。这些指令可能是跳转、循环、比较等,使得静态分析...

    常用花指令

    下面我们将深入探讨花指令的概念、原理以及在实际中的运用。 **花指令**,又称为混淆指令或伪装指令,是通过特殊的编码方式对原始的机器码进行混淆,使其在代码分析工具下呈现出难以理解的形式,以此来绕过安全软件...

    8way花指令

    "8way花指令"是一个可能涉及到计算机编程和安全领域的术语,尤其在游戏修改或软件调试中常见。在本文中,我们将深入探讨...因此,对于IT专业人士来说,了解和掌握花指令的原理,同时认识到其潜在的危害,是非常重要的。

    很实用的花指令学习机

    通过这个学习机,用户可以深入探究花指令的原理、构造和应用。 【描述】"很经典的花指令学习工具,添加花指令对于卡巴的免杀效果很好!"表明这个学习机在教学内容上具有经典性和实用性。它不仅提供了全面的理论知识...

    论文研究-子程序花指令加密算法研究.pdf

    根据反汇编器原理,分析现有的花指令加密算法存在的问题,提出了一种新的花指令加密算法——子程序花指令加密算法。详细论述了子程序花指令加密的工作流程和算法描述,分析了此算法的有效性和逻辑一致性。最后,通过...

    特征码与花指令的详细定义与修改添加的方法免杀教程

    特征码与花指令是计算机安全领域中的两个重要概念,尤其在病毒分析和逆向工程中扮演着关键角色。本文将详细解析这两个概念,并探讨如何利用它们进行免杀(免受反病毒软件检测)的技术。 首先,特征码是反病毒软件...

    【技术分享】花指令总结 .pdf

    1. 花指令的原理: 反编译器通常采用线性扫描反汇编算法或递归反编译算法,从程序的入口AddressOfEntryPoint开始,逐字节转换为汇编指令。如果在正常的指令序列中插入额外的字节,反编译器可能会将这些字节错误地...

    花指令学习机初级版小软件

    花指令的运用往往需要深入理解处理器架构和程序执行原理。 该软件“花指令学习机初级版”可能是通过模拟器或者解释器的形式,提供一个安全的环境让用户实践花指令的编写和调试。用户可能可以在软件中输入自定义的...

    源码免杀-花指令

    1. **花指令的原理**:花指令的基本思想是在恶意代码中插入大量无用的指令,这些指令可能包括跳转、计算、内存访问等,它们在程序执行时并不会被执行,但会干扰静态分析工具的签名匹配和行为分析。通过这种方式,...

    2011-------花指令添加器

    花指令添加器的工作原理是,它会扫描用户提供的二进制文件(如可执行程序),然后在适当的位置插入一系列的花指令。这些插入的指令通常不会改变程序的基本功能,但会增加分析的复杂性。在恶意软件场景中,这可以使...

    NME花指令

    - **基础理论**:理解计算机体系结构、操作系统原理和编程语言是掌握花指令的基础。 - **实践经验**:通过参与开源项目、破解挑战或进行模拟实验来提升技能。 - **安全意识**:在探索和使用NME花指令时,必须具备...

    [C++Builder 2007] FISH花指令免杀器(开源代码)

    FISH花指令免杀器正是利用这一原理,通过生成和插入花指令到恶意代码中,使得反病毒软件难以准确地识别和定位恶意行为。 C++Builder 2007是一个集成开发环境(IDE),它提供了C++语言的编译器和丰富的组件库,使得...

    怒剑狂花 加花器 免杀加花器 超级加花器

    加花器的核心原理是通过对程序的二进制代码进行混淆、加密或变形处理,使得杀毒软件的静态分析和动态行为分析难以识别其真实意图。这种技术在合法软件开发中也有应用,用于保护软件版权,防止逆向工程。然而,它也...

    基于51单片机的浇花系统 PCB 原理图

    4. **控制模块**:包括继电器、电磁阀等执行机构,它们接收51单片机的指令,控制水流的开启和关闭。继电器的控制线接到51单片机的IO口,通过驱动电路来控制。 5. **时钟电路**:51单片机需要外部晶体振荡器(如12...

    微机原理 花式跑马灯

    ### 微机原理花式跑马灯实验解析 #### 实验背景与意义 微机原理是计算机科学领域中一个非常重要的分支,它主要研究微型计算机系统的基本组成、工作原理及其实现方法。其中,“花式跑马灯”作为一项基础且经典的...

    微机原理与接口技术课后答案,李广军 电子科大版

    微机原理与接口技术课后答案是计算机科学中的一门重要课程,本课后答案涵盖了微机原理与接口技术的相关知识点,包括微机系统原理、指令系统、存储器组织、输入/输出系统、微机接口技术等方面。 在本课后答案中,...

Global site tag (gtag.js) - Google Analytics