危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18787802

用纯C编写覆写型病毒

写一款病毒相信是许多朋友的梦想,而且是遥不可及的梦想。今天危险漫步就给大家介绍一下如何用纯C编写覆写型的病毒。虽然这只是个很拙劣的雏形,但希望看完以后,至少那把遥不可及这顶帽子摘掉。

先聊一下病毒。各种书籍对病毒有着各种艰涩的定义,然而我总怀疑他们是为了凑字数故意把问题复杂化,照我看,一个合格的病毒,只需要具备两点:运行和传播。其实这样分也并不妥当,毕竟二者相辅相成,缺一不可。以覆写型病毒为例,这种病毒原理相当简单,就是用病毒体覆盖原来的可执行程序,说白了就是各位喜闻乐见的文件复制,唯一的区别只在于保留了原来文件的文件名罢了。正因为病毒体同名取代了原来的可执行文件,因此用户在正常使用原文件时,就会误为运行了病毒,而病毒获得运行之后,就会加剧感染。总之,感染

的可执行文件越多,获得运行的机会就越多。

或许有人会担心,这样的简单复制会不会导致程序的不能运行?肯定不会。我们是要把一个可以正常的运行的程序完整地覆写过去,正常运行所需要的部分是不会落下任何一项的。

听起来是不是简单易懂?那么,我们现在就着手用纯C写一款覆写型病毒。为什么要用纯C呢?用纯C编写的代码,在不同系列的操作系统,例如windows和linux下,只需要简单的重新编译一遍就可以了。这就是所谓的可移植型,我称为源码级的可抑制性。当然,作为代价,操作系统提供的一些便捷的编程接口(例如API),就不能使用了。如果想获得程序级的可移植性,欢迎使用号称一次编译到处运行的Java语言。

那么我们开始。覆写型病毒的核心算法就是打开宿主程序,读取病毒体并写入。这里涉及两个文件的操作,首先是宿主程序的打开:if (!(fliost - fopen(pathOfflost,"wb+")return,C的文件操作很简单,使用之前用fopen函数打开,获取一个文件指针就可以为所欲为了。fopen只有两个参数,第一个是文件路径的字符串,第二个则是打开方式,这里填写"wb"。"w"是写操作的意思,如果只有一个"w",则文件当中文本来打开,这里必须加个"b",表示当做二进制文件来进行操作,否则进行复制的时候程序会崩溃。

接着是打开病毒文件:

if (fVirus= fopen(pathOfVirus,"rb")return;

大同小异。"r"代表只读打开,同样需要加个"b"。

接着就是向宿主文件复制病毒体:

while(! feof(fVirus》fputc(fgetc(fVirus),fHost);

这里用while来构造一个循环体,以feof(函数作为循环标志。当文件指针指向文件最末尾,feof返回非0,因此,用"!"作一个非操作,就能保证文件指针在移动到文件末位之前,程序会一直循环下去。

接着涉及两个函数,fgetc和fputc分别用来读文件和写文件,这两个函数非常适合在循环体内配对使用,因为每次都读或者写一个字符。这样编写的代码,不但简洁,而且移动,这也是C的好处。

经过这三步,覆写型病毒的感染部分就写好了。只要传入合适的文件路径,它就是一款标准的覆写型病毒了。核心算法如下:

getHostPath(pathOfflost);

getVirusPath(pathOfVirus);

copyS elf(pathOfl-Iost,pathOfVirus);

务别获取病毒路径,获取宿主路径,然后传入病毒的感染部分。至于获取路径,也即文件的搜索算法,也即感染策略,将会有另一篇文章。

奉上可编译的源码,有兴趣了解周边的朋友请自行参考,将编译后得到的可执行文件改名为virus.exe,运行,就会感染同路径下名为host.exe的可执行文件,如果不存在该文件,则退出。

为了演示一下效果,我们请到了系统自带的notepad记事本程序,将它改名为host.exe,把它放在病毒所在目录。

运行病毒。只见一道黑影刷的一下一——记事本程序的图标顿时变色,说明它已经被病毒感染。

因为是console程序,所以会弹出一个黑框。黑框是可以隐藏的,如果在windows下,可以通过写加入以下代码调整编译选项实现:

#pragma comment(linker,"/subsystem:\"windows\"/entry\"mainCRTStartupV"’)

最后总得说下覆写型病毒的坏话。覆盖性病毒正如大家所见,具有算法简单,实现容易的优点。但劣处也很明显,这样赤裸裸地覆写,肯定会破坏了宿主文件的功能,所以是很容易就会被用户发现,因此有人提出,隐蔽性也应该是病毒等恶意软件必备的一项因素。正所谓鱼与熊掌不能兼得,要想编写简单,就肯定不能指望太多。然而,覆写型病毒的隐蔽性实在太差了,所以,它只能是我们写病毒路上的第一步,不过,既然第一步跨出去了,目标也就不再遥不可及。危险漫步也很努力,希望大家跟我一起执着不放弃。

.