⑴ 6.16 c語言,getchar gets getc有什麼區別 分別是表示什麼的
區分C語言中getch、getche、fgetc、getc、getchar、fgets、gets首先,這兩個函數不是C標准庫中的函數,
int getch(void)//從標准輸入讀入一個字元,當你用鍵盤輸入的時候,屏幕不顯示你所輸入的字元。也就是,不帶回顯。
int getche(void) //從標准輸入讀入一個字元,鍵盤輸入的時候,屏幕顯示所輸入的字元。帶回顯。
這兩個函數包含在頭文件conio.h中,需要記住的是conio.h不是C標准庫中的頭文件。Micorsoft 和 Borland的 C編譯器提供了conio.h,用來創建控制台文本用戶界面。一般在Windows系統下安裝了VS、VC等,就可以包含conio.h頭文件。但是一般在Unix、Linux系統中,/usr/include/中都沒有這個頭文件。
getch和getche在等待用戶從鍵盤輸入的時候,用戶按下一個鍵後,不需要按回車,程序自動往下執行。在Linux中,終端輸入在預設情況下是被「一鍋端」的,也就是說整行輸入是被一起處理的。通常,這是一種人們所希望的方便的辦法,但它也意味著在讀入數據時必須按一下回車鍵表示輸入行結束後才能得到輸入的數據。在游戲中,很多都提供了「老闆鍵」,它的實現,就是利用了這兩個函數。
其次,除了getch和getche,其他的都是C標准庫中的頭文件,包含在頭文件stdio.h中。
int fgetc ( FILE * stream ); //從流stream中讀一個字元。可以將標准輸入stdin作為它的實參,這時候從標准輸入讀取一個字元。int getc(FILE * stream); //和fgetc等效,由fgetc通過宏實現。int getchar ( void ); //從標准輸入stdin讀入一個字元,程序等待你輸入的時候,你可以輸入多個字元,回車後程序繼續執行。 //但getchar只讀入一個字元說明:getc、getchar都是通過宏定義藉助fgetc實現。如getchar的實現為,#define getchar() fgetc(stdin)。 char * fgets (char * str, int num, FILE *stream); //從流stream中讀入最多num個字元到字元數組str中,當遇到換行符時、或讀到num-1個字元時停止。 //自動加上'\0'空字元結尾char * gets ( char * str );//從標准輸入stdin讀取一個字元串,遇到換行或結束時候終止。 //不同於fgets,他沒有指定num,所以需要注意字元數組str的大小。 說明: fgets和gets之間沒有宏定義的關系,彼此各自有自己的實現。蠕蟲病毒的實現就是函數gets的「功勞」。gets函數的任務是從流中讀入一個字元串。它的調用者會告訴它把讀入的字元串放在什麼地方。但是,gets()函數並不檢查緩沖區大小,如果調用者提供了一個指向堆棧的指針,並且get()函數讀入的字元數量超過了超過了緩沖區的空間大小,get()會愉快地將多出來的字元繼續寫入到堆棧中,這就覆蓋了堆棧中原來的內容。如:main()
{
char line[512]; //在程序的堆棧上分配512個字元的空間
...
gets(line); //蠕蟲病毒的入口,可以將惡意代碼通過多出來的數據寫入堆棧
}
建議不要用getch和getche,因為它們不是C標准庫中的函數。用它們寫出的程序可移植性差,不同的編譯器不保證可以包含conio.h。建議用fgets函數徹底替代gets函數。
⑵ 常見的病毒名稱有哪些
一、trojan表示該病毒是個木馬,如果後面加.a,說明該木馬的第一個變種。
wm代表著word宏病毒;
w97m代表著word97宏病毒;
xm代表著excel宏病毒;
x97m代表著在excel97下製作完成的excel宏病毒;
xf代表著excel程式(excel formula)病毒;
am代表著在access95下製作完成並傳播發作的access的宏病毒;
a97m代表著在access97下製作完成並傳播發作的access的宏病毒;
w95代表著windows95病毒;
win代表著感染windows3.x操作系統文件的病毒;
wnt代表著感染32位windows nt操作系統的病毒。
二、系統病毒
系統病毒的前綴為:win32、pe、win95、w32、w95等。這些病毒的一般共有的特性是可以感染windows操作系統的 *.exe 和 *.dll 文件,並通過這些文件進行傳播。如cih病毒。
三、蠕蟲病毒
蠕蟲病毒的前綴是:worm。這種病毒的共有特性是通過網路或者系統漏洞進行傳播,很大部分的蠕蟲病毒都有向外發送帶毒郵件,阻塞網路的特性。比如沖擊波(阻塞網路),小郵差(發帶毒郵件)等。
(2)逃跑的蠕蟲c語言函數擴展閱讀
常見的手機病毒:
1、CCa tx A
該系列木馬:會私自對外發送一條注冊簡訊,簡訊內容包含IMSI以及渠道標識。
危害:用戶毫不知情下,造成資費消耗。
2、MLC gy A
該系列木馬:私自對外向多個號碼發送大量簡訊。
危害:惡意消耗資費。
3、CCRa A
該系列木馬:私自創建其推廣軟體下載鏈接的桌面快捷方式,並私自聯網下載安裝。
危害:誤導用戶下載安裝,造成資費消耗。
⑶ c語言蠕蟲病毒源代碼while(MIN)的分析
到Hake網去找 應該有的
⑷ 黑客的著名人物
1.Kevin Mitnick
凱文·米特尼克(Kevin David Mitnick,1964年美國洛杉磯出生),有評論稱他為世界上「頭號電腦駭客」。這位「著名人物」現年不過50歲,但其傳奇的黑客經歷足以令全世界為之震驚。
2.Adrian Lamo
艾德里安·拉莫(Adrian Lamo)
Adrian Lamo:歷史上五大最著名的黑客之一。Lamo專門找大的組織下手,例如破解進入微軟和《紐約時報》。Lamo喜歡使用咖啡店、Kinko店或者圖書館的網路來進行他的黑客行為,因此得了一個諢號:不回家的黑客。Lamo經常發現安全漏洞,並加以利用。通常他會告知企業相關的漏洞。
3.Jonathan James
喬納森·詹姆斯(Jonathan James),歷史上五大最著名的黑客之一。
16歲的時候James就已經惡名遠播,因為他成為了第一個因為黑客行徑被捕入獄的未成年人。他稍後承認自己喜歡開玩笑、四處閑逛和迎接挑戰。
4.Robert Tappan Morrisgeek.
Robert Tappan Morrisgeek.美國歷史上五大最著名的黑客之一。
Morris的父親是前美國國家安全局的一名科學家,叫做Robert Morris。Robert是Morris蠕蟲病毒的創造者,這一病毒被認為是首個通過互聯網傳播的蠕蟲病毒。也正是如此,他成為了首個被以1986年電腦欺騙和濫用法案起訴的人。
5.Kevin Poulsen
凱文·普爾森,全名凱文·李·普爾森(Kevin Lee Poulsen),1965年出生於美國的Pasadena。他常使用馬甲「Dark Dante(黑暗但丁)」作案,因攻擊進入洛杉磯電台的KIIS-FM電話線而出名,這也為他贏得了一輛保時捷。 Richard Stallman--傳統型大黑客,Stallman在1971年受聘成為美國麻省理工學院人工智慧實驗室程序員。
Ken Thompson和Dennis Ritchie--貝爾實驗室的電腦科學操作組程序員。兩人在1969年發明了Unix操作系統。
John Draper(以咔嚓船長,Captain Crunch聞名)--發明了用一個塑料哨子打免費電話
Mark Abene(以Phiber Optik而聞名)--鼓舞了全美無數青少年「學習」美國內部電話系統是如何運作的
Robert Morris--康奈爾大學畢業生,在1988年不小心散布了第一隻互聯網病毒「蠕蟲」
2002年,對於曾經臭名昭著的計算機黑客凱文·米特尼克來說,聖誕節提前來到了。這一年,的確是Kevin Mitnick快樂的一年。不但是獲得了徹底的自由(從此可以自由上網,不能上網對於黑客來說,就是另一種監獄生活)。而且,他還推出了一本剛剛完成的暢銷書《欺騙的藝術》(The Art of Deception: Controlling the Human Element of Security)。此書大獲成功,成為Kevin Mitnick重新引起人們關注的第一炮。
Jargon File中對「黑客」一詞給出了很多個定義,大部分定義都涉及高超的編程技術,強烈的解決問題和克服限制的慾望。如果你想知道如何成為一名黑客,那麼好,只有兩方面是重要的。(態度和技術)
⑸ Worm.Win32.Agent.wb是什麼病毒
病毒名稱: Worm.Magistr.g
病毒是由C語言編寫的感染型病毒,感染後綴名為EXE的32位PE可執行程序,病毒源的大小為40KB。
病毒源文件為boot.exe,由用戶從U盤上提取。
病毒源文件流程:
boot.exe運行後檢查自己是否在驅動器根目錄下,如不是退出。
檢查是否存在"C:\WINNT\linkinfo.dll",如果不存在則建立該文件。
檢查驅動文件是否存在,如不存在則生成驅動文件%SystemRoot%\system32\drivers\IsDrv118.sys(載入後刪除),並調用ZwSetSystemInformation載入驅動。
裝載該dll,然後查找病毒調用序號為101的導出函數。
DLL流程:
DLL被裝載時:
1、獲得系統sfc.dll中的SfcIsFileProtected函數地址,以便在感染時調用以防止感染受系統保護的文件。
2、獲取系統的linkinfo.dll(%system32%目錄下)的下列導出函數,使自己導出的同名函數指向正常的linkinfo.dll中正確的函數,以便轉接這些函數。
ResolveLinkInfoW
ResolveLinkInfoA
IsValidLinkInfo
GetLinkInfoData
GetCanonicalPathInfoW
GetCanonicalPathInfoA
DisconnectLinkInfo
DestroyLinkInfo
CreateLinkInfoW
CreateLinkInfoA
CompareLinkInfoVolumes
CompareLinkInfoReferents
3、檢查自己是否在explorer.exe進程中,如不是則啟動病毒主線程。
4、啟動病毒主線程
病毒首先通過VMWare後門指令檢查是否是在VMWare下運行,如果是直接重啟機器,以此來防止自己在虛擬機中被運行。
生成名稱為"PNP#DMUTEX#1#DL5"的互斥量,以保證只有一個實例在運行。
然後開始啟動各工作線程
5、工作線程1(生成窗口和消息循環)
生成隱藏的窗口和消息循環,並通過調用RegisterDeviceNotificationA注冊設備通知消息,當發現插入可移動磁碟時,向可移動磁碟寫入病毒源boot.exe。
6、工作線程2(遍歷並感染所有磁碟)
從"C:\"開始感染所有磁碟中後綴名為"exe"的文件。
病毒在感染時,不感染"QQ"、"winnt"和"windows"目錄下的程序文件,並通過調用SfcIsFileProtected來檢查是否為系統文件,如是則不感染。
同時,病毒不感染以下程序:
wooolcfg.exe
woool.exe
ztconfig.exe
patchupdate.exe
trojankiller.exe
xy2player.exe
flyff.exe
xy2.exe
大話西遊.exe
au_unins_web.exe
cabal.exe
cabalmain9x.exe
cabalmain.exe
meteor.exe
patcher.exe
mjonline.exe
config.exe
zuonline.exe
userpic.exe
main.exe
dk2.exe
autoupdate.exe
dbfsupdate.exe
asktao.exe
sealspeed.exe
xlqy2.exe
game.exe
wb-service.exe
nbt-dragonraja2006.exe
dragonraja.exe
mhclient-connect.exe
hs.exe
mts.exe
gc.exe
zfs.exe
neuz.exe
maplestory.exe
nsstarter.exe
nmcosrv.exe
ca.exe
nmservice.exe
kartrider.exe
audition.exe
zhengtu.exe
7、工作線程3(禁止其它病毒、破壞卡卡助手和感染網路)
枚舉進程,如果進程的程序文件名(包括目錄)是如下程序(常見的病毒程序),將終止該進程
realschd.exe
cmdbcs.exe
wsvbs.exe
msdccrt.exe
run1132.exe
sysload3.exe
tempicon.exe
sysbmw.exe
rpcs.exe
msvce32.exe
rundl132.exe
svhost32.exe
smss.exe
lsass.exe
internat.exe
explorer.exe
ctmontv.exe
iexplore.exe
ncscv32.exe
spo0lsv.exe
wdfmgr32.exe
upxdnd.exe
ssopure.exe
iexpl0re.exe
c0nime.exe
svch0st.exe
nvscv32.exe
spoclsv.exe
fuckjacks.exe
logo_1.exe
logo1_.exe
lying.exe
sxs.exe
病毒通過修改卡卡助手的驅動"%system32%\drivers\RsBoot.sys"入口,使該驅動在載入時失敗。
枚舉網路資源,並嘗試對網路資源中的文件進行感染。
枚舉並嘗試向區域網中計算機的隱藏共享文件夾"%s\\IPC$"、"C$"等寫入名稱為"setup.exe"的病毒源文件,嘗試連接時使用"Administrator"作為用戶名,並使用下列密碼嘗試。
password1
monkey
password
abc123
qwerty
letmein
root
mypass123
owner
test123
love
admin123
qwer
!@#$%^&*()
!@#$%^&*(
!@#$%^&*
!@#$%^&
!@#$%^
!@#$%
asdfgh
asdf
!@#$
654321
123456789
12345
admin
8、工作線程4(修改host文件並下載)
備份host文件為host.txt,並下載文件代替。
查找系統html文件的關聯程序,啟動並注入dll以便穿過防火牆的攔截。
嘗試連接以下地址並下載文件
http://top.cn372*****rg/c.asp
http://top.cn37****rg/top.dat
9、工作線程5(監視並禁止其它病毒)
通過調用驅動獲得新生成的進程,如果進程的文件是指定程序(見工作線程3),終止該進程
驅動:
該驅動載入後首先通過替換 SDT 的中的函數地址掛鉤
ZwSaveKey
ZwQueryDirectoryFile
ZwClose
ZwEnumerateKey
ZwLoadDriver
...
等 API 來保護病毒的注冊表鍵值不被發現和修改,並隱藏病毒文件(boot.exe, linkinfo.dll, nvmini.sys等),
以及禁止一些安全軟體的驅動載入。
然後,驅動創建一個名為 DL5CProc 的設備。用戶進程可以通過 ioctl = 25270860 來獲得最後一個創建進程的進程 ID。
這個進程 ID 是通過調用 得到的通知獲得。
該驅動還會通過 PsSetLoadImageNotifyRoutine 設置映像載入通知,如果載入的映像文件在以下子目錄中:
COMMON FILES, WINDOWS\SYSTEM32, WINNT\SYSTEM32
並且名為:
DLLWM.DLL
WININFO.RXK
RICHDLL.DLL
WINDHCP.DLL
DLLHOSTS.DLL
NOTEPAD.DLL
RPCS.DLL
RDIHOST.DLL
RDFHOST.DLL
RDSHOST.DLL
LGSYM.DLL
RUND11.DLL
MDDDSCCRT.DLL
WSVBS.DLL
CMDBCS.DLL
UPXDHND.DLL
該驅動會通過修改物理內存修改模塊入口是這些模塊返回失敗,無法成功載入。這些動態庫多是一些盜密碼的
病毒以及Worm.Viking的動態庫,所以被 Magister 感染的系統不會再感染這些病毒。
被感染的文件:
病毒感染文件時,會將原文件最後一個節增大,將病毒代碼寫入被感染文件的代碼節,修改入口點指向病毒代碼並保存原來的入口點地址,然後將被覆蓋的原來文件的代碼、病毒的dll、sys文件壓縮保存在文件最後一個節中增大的地方。被感染的文件運行時,病毒代碼先被運行,釋放C:\WINNT\linkinfo.dll和%SystemRoot%\system32\drivers\IsDrv118.sys並載入,然後調用linkinfo.dll的序號為101的函數。病毒代碼最後會恢復原文件被覆蓋的代碼並跳回原文件的入口開始運行原來的文件。
「馬吉斯(Worm.Magistr)」病毒專殺工具
⑹ 一個C語言問題
思路是這樣的,在不超過瓶口的時候,奇數分鍾時高度加u,偶數分鍾時高度減d
int run(float n,float u,float d)
{
float high=0;
int time=0;
while(high<n)
{
time++;
if(time%2==1)
high=high+u;
else
high-=d;
}
return time;
}
⑺ 誰有一些簡單小游戲的C語言程序
可以學寫「貪吃蛇」代碼:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <Windows.h>
#define W 78 //游戲框的寬,x軸
#define H 26 //游戲框的高,y軸
int dir=3; //方向變數,初值3表示向「左」
int Flag=0; //吃了食物的標志(1是0否)
int score=0; //玩家得分
struct food{ int x; //食物的x坐標
int y; //食物的y坐標
}fod; //結構體fod有2個成員
struct snake{ int len; //蛇身長度
int speed; //速度
int x[100];
int y[100];
}snk; //結構體snk有4個成員
void gtxy( int x,int y) //控制游標移動的函數
{ COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}
void gtxy( int x,int y); //以下聲明要用到的幾個自編函數
void csh( ); //初始化界面
void keymove( ); //按鍵操作移動蛇
void putFod( ); //投放食物
int Over( ); //游戲結束(1是0否)
void setColor(unsigned short p, unsigned short q); //設定顯示顏色
int main( ) //主函數
{ csh( );
while(1)
{ Sleep(snk.speed);
keymove( );
putFod( );
if(Over( )) {system(「cls」);
gtxy(W/2+1,H/2); printf(「游戲結束!T__T」);
gtxy(W/2+1,H/2+2); printf(「玩家總分:%d分」,score);
getch( ); break;
}
}
return 0;
}
void csh( ) //初始化界面
{ int i; gtxy(0,0);
CONSOLE_CURSOR_INFO cursor_info={1,0}; //以下兩行是隱藏游標的設置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
for(i=0;i<=W;i=i+2) //橫坐標要為偶數,因為這個要列印的字元佔2個位置
{ setColor(2, 0); //設定列印顏色為綠字黑底
gtxy(i,0); printf("■"); //列印上邊框
gtxy(i,H); printf("■"); //列印下邊框
}
for(i=1;i<H;i++)
{ gtxy(0,i); printf("■"); //列印左邊框
gtxy(W,i); printf("■"); //列印右邊框
}
while(1)
{ srand((unsigned)time(NULL)); //啟動隨機數發生器srand( )
fod.x=rand()%(W-4)+2; //隨機函數rand( )產生一個從0到比」(W-4)」小1的數再加2
fod.y=rand()%(H-2)+1; //隨機函數rand( )產生一個從0到比」(H-2)」小1的數再加1
if (fod.x%2==0) break; //fod.x是食物的橫坐標,要是2的倍數(為偶數)
}
setColor(12, 0); //設定列印顏色為淡紅字黑底
gtxy(fod.x,fod.y); printf("●"); //到食物坐標處列印初試食物
snk.len=3; //蛇身長
snk.speed=350; //刷新蛇的時間,即是移動速度
snk.x[0]=W/2+1; //蛇頭橫坐標要為偶數(因為W/2=39)
snk.y[0]=H/2; //蛇頭縱坐標
setColor(9, 0); //設定列印顏色為淡藍字黑底
gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭
for(i=1;i<snk.len;i++)
{ snk.x[i]=snk.x[i-1]+2; snk.y[i]=snk.y[i-1];
gtxy(snk.x[i],snk.y[i]); printf("■"); //列印蛇身
}
setColor(7, 0); //恢復默認的白字黑底
return;
}
void keymove( ) //按鍵操作移動蛇
{ int key;
if( kbhit( ) ) //如有按鍵輸入才執行下面操作
{ key=getch( );
if (key==224) //值為224表示按下了方向鍵,下面要再次獲取鍵值
{ key=getch( );
if(key==72&&dir!=2)dir=1; //72表示按下了向上方向鍵
if(key==80&&dir!=1)dir=2; //80為向下
if(key==75&&dir!=4)dir=3; //75為向左
if(key==77&&dir!=3)dir=4; //77為向右
}
if (key==32)
{ while(1) if((key=getch( ))==32) break; } //32為空格鍵,這兒用來暫停
}
if (Flag==0) //如沒吃食物,才執行下面操作擦掉蛇尾
{gtxy(snk.x[snk.len-1],snk.y[snk.len-1]); printf(" "); }
int i;
for (i = snk.len - 1; i > 0; i--) //從蛇尾起每節存儲前一節坐標值(蛇頭除外)
{ snk.x[i]=snk.x[i-1]; snk.y[i]=snk.y[i-1]; }
switch (dir) //判斷蛇頭該往哪個方向移動,並獲取最新坐標值
{ case 1: snk.y[0]--; break; //dir=1要向上移動
case 2: snk.y[0]++; break; //dir=2要向下移動
case 3: snk.x[0]-=2; break; //dir=3要向左移動
case 4: snk.x[0]+=2; break; //dir=4要向右移動
}
setColor(9, 0);
gtxy(snk.x[0], snk.y[0]); printf("■"); //列印蛇頭
if (snk.x[0] == fod.x && snk.y[0] == fod.y) //如吃到食物則執行以下操作
{ printf("