木马免杀之汇编花指令技巧(精)
- 格式:doc
- 大小:25.00 KB
- 文档页数:10
其實是一段垃圾代碼,和一些亂跳轉,但並不影響程式的正常運行。
加了花指令後,使一些殺毒軟體無法正確識別木馬程式,從而達到免殺的效果。
二.加花指令使木馬免殺製作過程詳解:第一步:配置一個不加殼的木馬程式。
第二步:用OD載入這個木馬程式,同時記下入口點的記憶體位址。
第三步:向下拉捲軸,找到零區域(也就是可以插入代碼的都是0的空白地方)。
並記下零區域的起始記憶體位址。
第四步:從這個零區域的起始位址開始一句一句的寫入我們準備好的花指令代碼。
第五步:花指令寫完後,在花指令的結束位置加一句:JMP剛才OD載入時的入口點記憶體位址。
第六步:保存修改結果後,最後用PEditor這款工具打開這個改過後的木馬程式。
在入口點處把原來的入口位址改成剛才記下的零區域的起始記憶體位址,並按應用更改。
使更改生效。
三.加花指令免殺法實例演示部分:實例演示一:NC加花指令免殺演示過程。
實例演示二:阿拉大盜主程序免殺之加花指令和入口點加1法綜合應用。
實例演示三:阿拉大盜主程序免殺之加不同花指令免殺演示(作業)綜合實例演示:灰鴿子MINI版主程序免殺操作過程:1>.加花指令2>. 入口點加13>.變換入點地址法四.加花指令免殺技術總節:1.優點:通用性非常不錯,一般一個木馬程式加入花指令後,就可以躲大部分的殺毒軟體,不像改特徵碼,只能躲過某一種殺毒軟體。
2.缺點:這種方法還是不能過具有內存查殺的殺毒軟體,比如瑞星內存查殺等。
3.以後將加花指令與改入口點,加殼,改特徵碼這幾種方法結合起來混合使用效果將非常不錯。
好了,今天的課就結束了,下節課再見!實踐操作:1.把駭客工具NC加一段VC++花指令代碼以達到免殺效果,最後測試能否正常使用VC++程式的入口代碼: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 0e8h2.把駭客工具SNIFF加下面一段花指令,並結合入口點加1,最後測試能否正常使用push ebpmov ebp,espinc ecxpush edxnoppop edxdec ecxpop ebpinc ecxjmp (木馬剛載入時的入口地址)3.把駭客工具Findpass加以下一段花指令,以達免殺效果,並測試使用是否正常。
花指令的概念与认识花指令 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。
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。
详解常用的木马隐身术武林安全网-电脑资料一、对木马使用花指令花指令就是指程序中包括了跳转指令及一些无用的指令在内的汇编指令段,有加区加花和去头加花两种,通常是用来改变程序的入口点或打乱整个程序的顺序,。
而一些杀毒软件在进行木马查杀工作时,都是按从程序的开头到结尾的顺序进行检测的,以此来找到与病毒库中某一特征码相似的特征。
甚至一些杀毒软件就是以程序的入口点作为特征码的。
因此,如果木马的程序顺序被打乱,或者程序的入口点被修改,那么,杀毒软件也就很难检测出它来,于是就达到了隐身的目的。
能完成这些工作的,就是在木马程序中使用花指令。
要在木马程序中使用花指令,可以有两种方式,一种是使用互联网上现成的,另一种是攻击者自己编写或者使用花指令生成软件。
由于互联网上现成的花指令同样会被杀毒软件厂商所得到,因此不会有什么好的保护效果。
对于有一定汇编技术的攻击者来说,就会使用自己编写花指令的方式,还可以使用一些花指令生成软件,如超级加花器和花蝴蝶等。
正是由于给木马添加不易被检测到的花指令需要高超的编程技术,也就很少有普通的攻击者使用这种方式,至少在没有陌生的花指令生成软件出现之前,是不太喜欢使用它的。
并且,由于对木马使用花指令也只是对其可执行文件本身有效,当其加载至内存后,这种隐身方式将失去作用。
因此,使用具有内存查杀功能的杀毒软件,就能够非常容易地检测到只使用这种隐身方式的木马病毒的。
在当前具有内存查杀功能的安全软件之中,查杀花指令保护木马比较好的就是EWIDO了。
也可以使用Ollydbg程序先将木马加入到内存中后再查杀。
同时,还可以使用像“花指令清除器”一类的花指令检测软件,来识别和除去花指令。
二、终止安全软件进程现在,几乎所有的木马都在使用一种十分有效的、躲避安全检测软件的方法,就是终止系统中所有安全软件的进程,从而达到了不会被查杀的目的。
而要实现这种功能,只要木马能够枚举系统中的所有正在运行的进程,然后从中找到匹配的安全软件进程名,通过发送一个终止进程的Windows消息给它,就可以结束这些正在运行的安全软件,电脑资料《详解常用的木马隐身术武林安全网》(https://www.)。
傻瓜化的免杀工具超级加花器
痛并快乐着
【期刊名称】《网友世界》
【年(卷),期】2011(000)005
【摘要】给木马程序添加花指令,一直就是一种非常常见的兔杀方法。
可是对于普通的用户来说,添加花指令却不是一件容易的事。
还好网络中包括了很多理成的加花工具。
【总页数】1页(P59-59)
【作者】痛并快乐着
【作者单位】不详
【正文语种】中文
【中图分类】TP311.56
【相关文献】
1.傻瓜化的免杀工具冰枫文件防火墙 [J], 震震有词
2.黑客工具免杀加花三部曲 [J], 榊原ゅ桜
3.超级跑车之花——布加蒂再度凋零之后 [J], 张竞
4.傻瓜化的系统清理工具 Wise Disk Cleaner [J],
5.一种Windows木马免杀工具的设计 [J], 刘灏;耿晓洋
因版权原因,仅展示原文概要,查看原文内容请购买。
免杀木马的制作与防范作者:金良磊来源:《电脑知识与技术》2008年第01期木马相信很多人都知道,而木马的确比常规病毒更狠,监控你的操作,吞噬你的隐私,破坏你的数据。
有人要问,为什么我们的计算机安装了最新的杀毒软件,每天进行各种补丁的更新升级,还有防火墙的时时保护,为什么还会中木马呢?那是因为,有一种木马叫免杀。
一、什么是免杀?免杀是个相对词,针对目前的技术而言,多数木马都不能避免会被杀毒软件监控到并杀掉的危险,于是木马的实用性就低很多。
为了能避开杀毒软件的识别,黑客们开始从木马下手,通过各种手段“重新包装”木马,让它在杀毒软件的眼皮底下蒙混过关,这就是所谓的免杀。
二、制作免杀木马下面我们来看看黑客们是通过何种方法制作完成免杀木马的:我们首先制作一个普通的灰鸽子木马服务端取名mmsetup.exe,然后登录/zh-cn/网站把mmsetup.exe灰鸽子木马服务端上传过去,通过多引擎系统中扫描,你可以发现,绝大多数的杀毒引擎都能够识别出该木马程序,木马成功率只有10%简直可以忽略了,木马也就没意义了!(如图1)同时,针对这个mmsetup.exe我们对它进行免杀设置,一般常用的免杀方法为加密代码、花指令、加壳、修改程序入口以及手工DIY PE,至于纯手工操作并不推荐,因为这种方法制作出的程序效果虽好,但太过复杂,需要很强的汇编语言基础,并对Windows内核有一定认识。
1、代码修改法MaskPE内含多种信息模块,可以方便的修改程序指令,打乱源代码,针对利用代码识别病毒的安全软件很有效果。
下载Maskpe2.0运行起来,点击“LoadFile”按钮,通过路径选择桌面上的mmsetup.exe木马,然后在“Select Information”项里选择“PE Information”项,接着点击“Make File”在新生成的木马名字里填上“mmsetup1.exe”,最后单击“保存”按钮完成木马修改。
免杀木马的方法分多种1入口点加1能达到免杀一定效果.2变化入口地址能过一些杀软的免杀3加花指令能使木马免杀4加壳或加伪装壳免杀.5打乱壳的头文件免杀.6修改文件特征码免杀.7跳转修改8字串大小转换9重建输入表等以上都是网络上流行的免杀方法入口点加1 比如我们的入口点为:00014920 我们可以在他0上加1变为00014921 变化入口地址可以使用跳转的方式来改变入口地址:JMP指令将无条件地控制程序转移到目的地址去执行.加花免杀:找段空白处例如noppush ebpnopmov ebp,espnopsub esp,3sub esp,-3mov eax,原入口点push eaxret花是可以自己修改只要掌握花指令堆栈的平衡就可以了加壳或加修改壳免杀:多重加壳或者加冷门壳可以达到免杀效果(很朋友人朋友都喜欢加壳免杀)假如我们壳被查杀了怎么办?我们可以加壳后然后修改壳的PE或者打乱壳的PE头达到免杀(不过稍微出错会导致不上线)修改特征码:用MYCCL工具定位导入文件分块个数一般100-200 开始位置E0 修改为400 有些朋友问我怎么定位不了,如果正向定位不出特征码我们可以反向定位下当定位出来特征码后我们判断不出是真伪时可以填充90或者00看看如果90或者00被杀就证明定位错误。
那就重新定位(现在许多杀软具有干扰特征定位功能了)跳转随便找空段然后NOP JMP等进行跳转字串大小转换A=a b=B重建输入表现在各大站都有工具傻瓜式操作(非常简单)时代在进步---杀软也在进步-----而我们不要跟着别人屁股后门,大胆尝试新方法。
C32常见机器码修改方法菜鸟们一定要掌握74=>75 74=>90 74=>EB75=>74 75=>90 75=>EB0F=85=0F=84(一些地方可以修改)免杀中一些指令必须掌握的(建议大家下载个汇编辅助工具免杀时很实用)破坏指针(过nod32的常见方法本人不推荐有时后破坏了和跳转用多了一个道理会导致木马不稳定)修改函数(这个对基本基础要求很高,建议新手先学习修改特征码等在学习这)加区段(常用方法比如找不到地方写花指令,我们就可以加区段)重建PE(如果特征码较多,重建PE可以减少木马的特征码)加密(涉及到算术,不过现在加密的工具比较多,也是傻瓜式的操作)左右移位(当杀软杀到木马的字串时,我们可以利用左右移位来躲开杀软)过专杀很有用修旁免杀(当一些杀软杀到重要的特征码修改后会缺失一些功能这时我们可以修改它相近的邻居也可以达到免杀的效果)指令替换(替换法就是同等指令或者使用功能相同的代码之间的替换.就像1X1=1而1除1=1他们的结果都是一样的,在程序里这种我们可以相互替换,不会影响程序的运行(汇编辅助工具可以查询)源码免杀(前提必须要有编程基础)过360安全卫士方法360查恶意软件是查找木马的字串(修改字串简单过360恶意软件)360木马查杀(也上恶意软件是一个思路)360提示和保险箱提示这是许多朋友比较关注的)主流过法有2种:第一:捆绑模拟点击程序第二:暴力K掉360就OK了360云查杀也是大家比较关注的让你的马的MD5值和一些安全类特征库相似就过了。
反调试⼊门篇(1)——花指令花指令花指令是⼀种反静态调试的最基础⼿段(对于动态调试来说就没有⽤处),我们可以通过在程序的代码中添加⼀些不影响程序运⾏的垃圾机器码,进⽽影响反汇编结果的准确性,达到程序保护的⽬的花指令分类1、可执⾏花指令见字知其意,即花指令在程序正常运⾏的时候被执⾏,通⽤寄存器的值不发⽣改变,但不影响程序原有的功能执⾏2、不可执⾏花指令见字知其意,即花指令在程序正常运⾏的时候不会被执⾏,不影响程序原有的功能花指令编写原则:保持堆栈的平衡常⽤花指令汇编⼩知识:mov eax, 1 eax赋值为1pop 1 将1从栈顶弹出pop ebp 将栈顶的值弹出赋给寄存器ebppush 1 将1压⼊栈中push ebp 将ebp的值压⼊栈中sub eax, 1 eax的值减1add eax, 1 eax的值加1inc eax eax的值加1dec eax eax的值减1call [x] 调⽤地址为x的函数,call对应的硬编码码为0xE9nop 不做任何事情,相当于python中的pass,对应的硬编码为0x90_emit 相当于db,byte类型,1字节以下⽅式均通过内联汇编实现标签⽅式的花指令1、单节⽅式#include 'stdafx.h'void Test(){int a[3] = {1, 2, 3};_asm{jz Label;jnz Label;_emit 0xE8;}Label:a[0] = 2;a[1] = 5;a[2] = 6;printf('%d\n', a[2]);}int main(int argc, char* argv[]){Test();return 0;}使⽤IDA打开,可以看到标红的地⽅就是花指令,因为call指令的存在,使得后⾯的4字节数据被错误识别成函数地址,进⽽导致接下来的分析出错⼈⼯Patch花指令的⽅式很简单:选中call指令所在⾏,点击Edit选项>Patch program>Change byte将call的硬编码E8改为0x90(nop指令)2、多节⽅式#include 'stdafx.h'void Test(){int a[3] = {1, 2, 3};_asm{jz Label1;jnz Label1;_emit 0xE9;}Label1:a[0] = 5;a[1] = 6;a[2] = 7;_asm{jz Label2;jnz Label2;_emit 0xE8;}Label2:a[1] = a[0] a[2];a[2] = a[1] a[0];printf('%d\n', a[2]);}int main(int argc, char* argv[]){Test();3、多层乱序(疯狂套娃)#include 'stdafx.h'void Test(){int arr[3] = {1, 2, 3};_asm{jz Label3;jnz Label3;_emit 0xE8;}Label2:_asm{jz Label4;jnz Label4;_emit 0xE8;}Label3:_asm{jz Label1;jnz Label1;_emit 0xE9;}Label1:_asm{jz Label2;jnz Label2;_emit 0xE9;}Label4:int a = 10;printf('%d\n',a);4.开辟堆栈的花指令push 1push ebpmov ebp, espsub esp, 0x8push eaxpush ecxpop ecxpop eaxadd esp, 0x8pop ebpje xxxjne xxx花指令多的情况就需要⾃⼰写个IDA python脚本进⾏去除5.花指令免杀⼀些反病毒软件依靠特征码来判断⽂件是否有毒,其识别引擎在⽂件镜像(filebuffer)⼀定的偏移范围内进⾏扫描,⽐如在0x00001000~0x00006000之间,我们在其中加⼊⼀些花指令,使恶意代码偏离引擎识别的偏移范(OEP),就可以逃避这种⽅式的特征码识别end。
木马精华免杀教程教程来自【暗黑网络】暗黑网络技术公会让更多的朋友了解黑客-YY496342本公会采用YY方式是让您更加方便的交流和学习,本公会,免费赠送工具,教程,等一切免费,大量招收导师如果觉得你行那就来试试吧YY496342本公会+此文档只是让大家多一点防范的意识请勿用于非法第一部分:对国内外杀毒软件分析在讲特征码前,先要分析国内外著名杀毒软件的查杀特点。
大家在使用木马过程都会发现,内存查杀,一般都指得被瑞星的内存查杀。
瑞星的内存查杀功能是同类杀毒软件中最强的一款杀毒软件。
像强悍的卡巴,金山,等等它们的内存查杀意义不大,会制作免杀木马的人都知道,像这类杀毒软件,只要文件免杀,内存也就免杀了.还有江民也有内存查杀功能,但内存查杀功能比较弱.只针对影响力非常大的病毒程序.一般的黑客软件都没有提取内存特征码.第二部分:木马免杀的对策一.要使一个木马免杀,首先要准备一个不加壳的木马,这点非常重要,否则下面的免杀操作就不能进行下去。
二.然后我们要木马的内存免杀,从上面分析可以看出,目前的内存查杀,只有瑞星最强,其它杀毒软件内存查杀现在还不起作用所以我们只针对瑞星的内存查杀,要进行内存特征码的定位和修改,才能达到内存免杀。
二.对符其它的杀毒软件,比如江民,金山,诺顿,卡巴.我们可以采用下面的方法,或这些方面的组合使用.1>.入口点加1免杀法.2>.变化入口地址免杀法3>.加花指令法免杀法4>.加壳或加伪装壳免杀法.5>.打乱壳的头文件免杀法.6>.修改文件特征码免杀法.第三部分:免杀技术实例演示部分一.入口点加1免杀法:(NC)1.用到工具:PEditor2.特点:非常简单实用,但有时还会被卡巴查杀.3.操作要点:用PEditor打开无壳木马程序,把原入口点加1即可.二.变化入口地址免杀法:(NC)1.用到工具:OllyDbg,PEditor2.特点:操作也比较容易,而且免杀效果比入口点加1点要佳.3.操作要点:用OD载入无壳的木马程序,把入口点的前二句移到零区域去执行,然后又跳回到入口点的下面第三句继续执行.最后用PEditor把入口点改成零区域的地址.三.加花指令法免杀法:(Sniff)1.用到工具:OllyDbg,PEditor2.特点:免杀通用性非常好,加了花指令后,就基本达到大量杀毒软件的免杀.3.操作要点:用OD打开无壳的木马程序,找到零区域,把我们准备好的花指令填进去填好后又跳回到入口点,保存好后,再用PEditor把入口点改成零区域处填入花指令的着地址.四.加壳或加伪装壳免杀法:(findpass)1.用到工具:一些冷门壳,或加伪装壳的工具,比如木马彩衣等.2.特点:操作简单化,但免杀的时间不长,可能很快被杀,也很难躲过卡巴的追杀.3.操作要点:为了达到更好的免杀效果可采用多重加壳,或加了壳后在加伪装壳的免杀效果更佳.五.打乱壳的头文件免杀法:(nc)1.用到工具:秘密行动,UPX加壳工具.2.特点:操作也是傻瓜化,免杀效果也正当不错,特别对卡巴的免杀效果非常好.3.操作要点:首先一定要把没加过壳的木马程序用UPX加层壳,然后用秘密行动这款工具中的SCramble功能进行把UPX壳的头文件打乱,从而达到免杀效果.六.修改文件特征码免杀法:1.用到工具:特征码定位器,OllyDbg2.特点:操作较复杂,要定位修改一系列过程,而且只针对每种杀毒软件的免杀,要达到多种杀毒软件的免杀,必需修改各种杀毒软件的特征码.但免杀效果好.3.操作要点:对某种杀毒软件的特征码的定位到修改一系列慢长过程.第四部分:快速定位与修改瑞星内存特征码一.瑞星内存特征码特点:由于技术原因,目前瑞星的内存特征码在90%以上把字符串作为病毒特征码,这样对我们的定位和修改带来了方便.二定位与修改要点:1>.首先用特征码定位器大致定位出瑞星内存特征码位置2>.然后用UE打开,找到这个大致位置,看看,哪些方面对应的是字符串,用0替换后再用内存查杀进行查杀.直到找到内存特征码后,只要把字符串的大小写互换就能达到内存免杀效果.第五部分:木马免杀综合方案修改内存特征码--->1>入口点加1免杀法---> 1>加压缩壳--->1>再加壳或多重加壳2>变化入口地址免杀法 2>加生僻壳 2>加壳的伪装.3>加花指令法免杀法 3>打乱壳的头文件4>修改文件特征码免杀法注:这个方案可以任意组合各种不同的免杀方案.并达到各种不同的免杀效果.第六部分:免杀方案实例演示部分1.完全免杀方案一:(灰鸽子VIP2.0)内存特征码修改+ 加UPX壳+ 秘密行动工具打乱UPX壳的头文件.2.完全免杀方案二:(findpass)内存特征码修改+ 加压缩壳+ 加壳的伪装3.完全免杀方案三:内存特征码修改+ 修改各种杀毒软件的文件特征码+ 加压缩壳4.完全免杀方案四:内存特征码修改+ 加花指令+ 加压缩壳5.完全变态免杀方案五:内存特征码修改+ 加花指令+ 入口点加1 + 加压缩壳UPX + 打乱壳的头文件还有其它免杀方案可根据第五部分任意组合.暗黑网络YY496342。
花指令相信做过免杀的朋友都知道花指令吧。
加花指令是一种不错的文件免杀方法,而网上公布的花指令和花指令添加器因为里边的花指令被公布了,所以免杀效果不好。
有点汇编基础的人就写自己的花指令,但写花指令的过程比较烦,所以我萌生了写一个花指令生成器的想法,首创哦^_^一、写花指令生成器必备知识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是减去。
木马的加花指令
花指令:就是一段没有实际意义的、不影响程序正常运行的一段代码。
它的作用就是加大杀毒软件查杀病毒的难度。
(1)按照前面所讲述的方法配置一个不加壳的木马程序。
(2)用OD载入这个木马程序,如图1所示,同时记下入口点的内存地址。
图1:OD的程序界面
(3)向下拉滚动条,找到零区域(也就是可以插入代码的都是0的空白地方)。
并记下零区域的起始内存地址。
(4)从这个零区域的起始地址开始一句一句地写入我们准备好的花指令代码。
(5)花指令写完后,在花指令的结束位置加一句:JMP 刚才OD载入时的入口点内存地址。
(6)保存修改结果后,最后用PEditor这款工具打开这个改过后的木马程序。
如图2所示,在入口点处把原来的入口地址改成刚才记下的零区域的起始内存地址,并按应用更改,使更改生效。
图2:使用PEditor更改入口点
加花指令免杀技术的优缺点:
优点:通用性非常不错,一般一个木马程序加入花指令后,就可以躲避大部分的杀毒软件,不像改特征码,只能躲过某一种杀毒软件。
缺点:这种方法还是不能过具有内存查杀的杀毒软件,比如瑞星内存查杀等。
另外目前还有几款软件可以自动帮你加花,比如木马彩衣进行加花,如图3所示。
图3:利用“木马彩衣”加花
点击“浏览”选择需要加花的木马程序,选择一种加花方法,然后点击“穿上”,程序就被加入花指令了,也就是会让木马穿上一件彩衣伪装了。
木马免杀之汇编花指令技巧
作者:逆流风
(发表于《黑客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 加1
dec 减1
最后是跳转指令:
jmp 无条件跳
je 或jz 若相等则跳
jne或jnz 若不相等则跳
jb 若小于则跳
jl 若小于则跳
ja 若大于则跳
jg 若大于则跳
jle 若小于等于则跳
jge 若大于等于则跳
这些就是我们需要掌握的,怎么样不多吧,一些指令可能看不明白,看了后面的就会清楚了。
对了,忘了讲寄存器了,寄存器是中央处理器内的其中组成部份。
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。
我们需要了解的是8个通用寄存器:EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
二、特征码和花指令的修改
特征码我就不多说了,大家都知道的,现在杀毒软件查杀都用特征码查杀,改了木马的特征码,杀毒软件就查不出我们的木马,这样就达到免杀的效果。
而花指令是程序中的无用代码,程序多它没影响,少了它也能正常运行。
加花指令后,杀毒软件对木马静态反汇编使,木马的代码就不会正常显示出来,加大杀毒软件的查杀难度。
花指令的原理是堆栈平衡。
前面介绍push说了,堆栈平衡可以这样理解,有进有出,不管花指令怎么写,我们要达到的目的是加花后,堆栈与未加之前一样。
网上的花指令因为是公布出来的,所以免杀周期不长,一般公布出来不久就会被杀毒软件查杀,但是我们只要简简单单的修改一两句就可以达到免杀了。
下面我们来看看5种修改方法。
(也适用于特征码修改)
我们先看看木马彩衣(金色鱼锦衣花指令
1、push ebp
2、mov ebp,esp
3、add esp,-0C
4、add esp,0C
5、mov eax,原入口
6、push eax
7、retn
1、2、在大部分程序开头可以经常看到。
push ebp是将寄存器ebp压入堆栈,mov ebp,esp是将寄存器esp的值送给寄存器ebp。
3、4、使用了add指令,add esp,-0C是寄存器esp加上-0C,add esp,0C是寄存器esp加上0C,3、4、加起来就是什么也没做,达到堆栈平衡。
5、6、7、完成了跳转到入口点的功能,我们一句句来看看mov eax,原入口,将入口点送入寄存器eax,push eax将寄存器eax压入堆栈,retn我们知道是从堆栈取得返回地址并跳到该地址执行。
这样就回到入口点了。
我们看看实例,以木马彩衣免杀为例,先侦壳,用peid载入,显示Microsoft Visual Basic 5.0 / 6.0,(如图1)很好,免去了脱壳的麻烦,复制木马彩衣后再粘贴,得到复件木马彩衣.exe,我们用木马彩衣对复件木马彩衣.exe加花,加金色鱼锦衣,(如图2)然后用Ollydbg.exe载入,我们就可以看到看到金色鱼锦衣的花指令了。
(如图3)用卡巴扫描,被卡巴认出来了。
(如图4)这是因为金色鱼锦衣公布比较久,用的人多了,对杀毒软件就无效了。
1、替换法
我们用替换法来修改金色鱼锦衣,修改结果如下:
1、push ebp
2、mov ebp,esp
3、add esp,1
4、add esp,-1
5、mov eax,原入口
6、push eax
7、retn
将原来3、4、句add esp,-0C和add esp,0C改成add esp,1和add esp,-1这两句也能达到堆栈平衡,(如图5)右键选中add esp,-0C,点击汇编,将add esp,-0C改成add esp,1,将add esp,0C改成add esp,-1。
选中修改部分,右键单击→复制到可执行文件→选择部分,弹出窗口,右键保存文件。
这里我保存成“替换法.exe”用卡巴查杀,免杀了。
(如图6)
2、移位法
1、push ebp
2、mov ebp,esp
3、nop
4、nop
5、add esp,-0C
6、add esp,0C
7、mov eax,原入口
8、push eax
9、retn
将原来的3、4、5、6、7、几个语句向下移动2行,修改后保存为“移位
法.exe”。
3、添加法
1、push ebp
2、mov ebp,esp
3、push edx
4、pop edx
5、add esp,-0C
6、add esp,0C
7、mov eax,原入口
8、push eax
9、retn
在金色鱼锦衣中加入push edx和pop edx,这两句是将寄存器edx压入和弹出堆栈,一样达到堆栈平衡。
修改后保存成“添加法.exe”。
4、去除法
1、push ebp
2、mov ebp,esp
3、mov eax,原入口
4、push eax
5、retn
删除add esp,-0C和add esp,0C,修改后保存成“去除法.exe”。
5、跳转法
push ebp
mov ebp,esp
jmp 跳出到add esp,-0C的地址
mov eax,复件_木?0040109C
push eax
retn
add esp,-0C
add esp,0C
jmp 跳回mov eax,复件_木?0040109C的地址
这个可能比较复杂,大家看看截图(图7),修改后保存为“跳转法.exe”。
我们用卡巴试试修改后的效果,(如图8)看看,只有原来的木马彩衣,加了金色鱼锦衣的和去除法的可以查到。
去除法是因为金色鱼锦衣的代码比较短,如果花指令长点,效果会比较好。
几种修改方法结合使用效果更好,当然,一样可修改特征码,相对跳转法在修改特征码中使用比较多。
三、编写自己的花指令
通过上面的学习我们可以知道花指令大概结构,一般开始是push ebp和mov ebp,esp,接下来就是一些能保持堆栈平衡的指令,完了就是跳回入口点了。
我罗列出一些能保持堆栈平衡的代码
push ebp 把基址指针寄存器压入堆栈
pop ebp 把基址指针寄存器弹出堆栈
push eax 把数据寄存器压入堆栈
pop eax 把数据寄存器弹出堆栈
nop 无作用,就是什么也没做
mov eax,eax 将eax送入eax,等于什么也没做
sub eax,1
add eax,1 寄存器eax+1和寄存器eax-1,一样等于什么也没做
sub eax,2
dec eax
dec eax 一样很简单的加减运算,先是寄存器eax+2,紧接着连续用dec指令处理寄存器eax两次,就是-1再-1,达到堆栈平衡。
很简单,大家参考后可以自己写出N多这样的指令。
写完这些就可以写跳转语句了。
JMP 入口点这时最简单的跳转了,无条件跳回入口点,最简单当然效果也最差了
mov eax,入口点
push eax
retn 很眼熟吧,金色鱼锦衣的跳转,解释过,不多说了。
mov eax,入口点
jmp eax 和金色鱼锦衣的跳转的原理差不多吧,入口点压入寄存器eax,再跳到寄存器eax,就是跳到入口点了。
je 入口点
jne 入口点等于则跳和不等于则跳,合起来就是绝对跳咯,像这样的条件跳转语句很多,大家可参考前面跳转指令的知识自己写。
上面的指令随便结合相信大家可以写出属于自己的花指令了,这样我这篇文章的目的也就达到了。
花指令添加的方法大家可以参照去年第9期的主题乐园。