⑴ 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("