Process Explorer简介

[不指定 2006/08/11 00:19 | by ipaddr ]
Process Explorer简介

Process Explorer是http://www.sysinternals.com/的一款免费的强大的进程查看器,几乎能看到任何进程相关的内容.另外,http://www.sysinternals.com网站提供很多免费的,开源的,实用的系统工具.这里简单介绍Process Explorer的使用

Process Explorer完全可以取代Windows自带的任务管理器,且很容易实现,点击菜单Option->Replace Task Manager就可以替代了.
(一直漂原创,转载请注明.)
Process Explorer可以查看所有进程的ID,CPU占用率,内存占用,进程描述,进程调用的DLL,以及DLL的PATH,而且可以终止任何进程.下面就功能做个简单介绍:
a.View->System Information 可以查看整个系统的负载,I/O的负载
b.View->Lower pane view->Dll 可以查看某个进程调用的所有DLL,此功能可以用来查杀木马,病毒,以及流氓软件
c.View->Lower pane view->Handles可以查看进程的一些外部引用,包括文件,注册键,线程等
d.View->Select Columns 用来指定需要显示进程,线程,DLL,内存的哪些详细信息.比如,你可以在这里指定显示DLL的PATH.
e.右击一个进程(比如ipaddr,bcomcn),查看属性,可以看到更详细的内容,包括进程的文件路径,版本,占用CPU,I/O,Haneles,Memory等情况,线程数量,进程里的字符串信息,引用的环境变量,一些安全属性,以及使用网络的情况.

几种常用应用:
1.查杀病毒(可以查看所有进程,可以查看该进程调用的所有DLL,很容易能识别是否异常)
2.查杀木马(可以在进程属性的TCP/IP里查看某个程序所有的网络连接情况,包括本机IP,协议,端口,对方IP协议,端口,一看就能看出某进程是否正常.)
3.删除正在使用的文件(删除一个文件时,经常会提示文件正在使用,无法删除,但去不知是哪个应用程序在使用,你可以使用Find Handler功能,轻易查出哪个进程正在使用,杀死该进程,就可以删除文件了.)

  从DLL技术说起

  要了解DLL木马,就必须知道这个“DLL”是什么意思,所以,让我们追溯到几年前,DOS系统大行其道的日子里。在那时候,写程序是一件繁琐的事情,因为每个程序的代码都是独立的,有时候为了实现一个功能,就要为此写很多代码,后来随着编程技术发展,程序员们把很多常用的代码集合(通用代码)放进一个独立的文件里,并把这个文件称为“库”(Library),在写程序的时候,把这个库文件加入编译器,就能使用这个库包含的所有功能而不必自己再去写一大堆代码,这个技术被称为“静态链接”(Static Link)。静态链接技术让劳累的程序员松了口气,一切似乎都很美好。可是事实证明,美好的事物不会存在太久,因为静态链接就像一个粗鲁的推销员,不管你想不想要宣传单,他都全部塞到你的手上来。写一个程序只想用到一个库文件包含的某个图形效果,就因为这个,你不得不把这个库文件携带的所有的图形效果都加入程序,留着它们当花瓶摆设,这倒没什么重要,可是这些花瓶却把道路都阻塞了——静态链接技术让最终的程序成了大块头,因为编译器把整个库文件也算进去了。

  时代在发展,静态链接技术由于天生的弊端,不能满足程序员的愿望,人们开始寻找一种更好的方法来解决代码重复的难题。后来,Windows系统出现了,时代的分水岭终于出现。Windows系统使用一种新的链接技术,这种被称为“动态链接”(Dynamic Link)的新技术同样也是使用库文件,微软称它们为“动态链接库”——Dynamic Link Library,DLL的名字就是这样来的。动态链接本身和静态链接没什么区别,也是把通用代码写进一些独立文件里,但是在编译方面,微软绕了个圈子,并没有采取把库文件加进程序的方法,而是把库文件做成已经编译好的程序文件,给它们开个交换数据的接口,程序员写程序的时候,一旦要使用某个库文件的一个功能函数,系统就把这个库文件调入内存,连接上这个程序占有的任务进程,然后执行程序要用的功能函数,并把结果返回给程序显示出来,在我们看来,就像是程序自己带有的功能一样。完成需要的功能后,这个DLL停止运行,整个调用过程结束。微软让这些库文件能被多个程序调用,实现了比较完美的共享,程序员无论要写什么程序,只要在代码里加入对相关DLL的调用声明就能使用它的全部功能。最重要的是,DLL绝对不会让你多拿一个花瓶,你要什么它就给你什么,你不要的东西它才不会给你。这样,写出来的程序就不能再携带一大堆垃圾了——绝对不会让你把吃剩的东西带回家,否则罚款,这是自助餐。(静态链接与动态链接)

  DLL技术的诞生,使编写程序变成一件简单的事情,Windows为我们提供了几千个函数接口,足以满足大多数程序员的需要。而且, Windows系统自身就是由几千个DLL文件组成,这些DLL相互扶持,组成了强大的Windows系统。如果Windows使用静态链接技术,它的体积会有多大?我不敢想。

  应用程序接口API

  上面我们对DLL技术做了个大概分析,在里面我提到了“接口”,这又是什么呢?因为DLL不能像静态库文件那样塞进程序里,所以,如何让程序知道实现功能的代码和文件成了问题,微软就为DLL技术做了标准规范,让一个DLL文件像奶酪一样开了许多小洞,每个洞口都注明里面存放的功能的名字,程序只要根据标准规范找到相关洞口就可以取得它要的美味了,这个洞口就是“应用程序接口”(Application Programming Interface),每个DLL带的接口都不相同,尽最大可能的减少了代码的重复。

  用Steven的一句话:API就是一个工具箱,你根据需要取出螺丝刀、扳手,用完后再把它们放回原处。

  在Windows里,最基本的3个DLL文件是kernel32.dll、user32.dll、gdi32.dll。它们共同构成了基本的系统框架。

  DLL与木马

  DLL是编译好的代码,与一般程序没什么大差别,只是它不能独立运行,需要程序调用。那么,DLL与木马能扯上什么关系呢?如果你学过编程并且写过DLL,就会发现,其实DLL的代码和其他程序几乎没什么两样,仅仅是接口和启动模式不同,只要改动一下代码入口,DLL就变成一个独立的程序了。当然,DLL文件是没有程序逻辑的,这里并不是说DLL=EXE,不过,依然可以把DLL看做缺少了main入口的EXE,DLL带的各个功能函数可以看作一个程序的几个函数模块。DLL木马就是把一个实现了木马功能的代码,加上一些特殊代码写成DLL文件,导出相关的API,在别人看来,这只是一个普通的DLL,但是这个DLL却携带了完整的木马功能,这就是DLL木马的概念。也许有人会问,既然同样的代码就可以实现木马功能,那么直接做程序就可以,为什么还要多此一举写成DLL呢?这是为了隐藏,因为DLL运行时是直接挂在调用它的程序的进程里的,并不会另外产生进程,所以相对于传统EXE木马来说,它很难被查到。

  DLL的运行

  虽然DLL不能自己运行,可是Windows在加载DLL的时候,需要一个入口函数,就如同EXE的main一样,否则系统无法引用DLL。所以根据编写规范,Windows必须查找并执行DLL里的一个函数DllMain作为加载DLL的依据,这个函数不作为API导出,而是内部函数。 DllMain函数使DLL得以保留在内存里,有的DLL里面没有DllMain函数,可是依然能使用,这是因为Windows在找不到DllMain的时候,会从其它运行库中找一个不做任何操作的缺省DllMain函数启动这个DLL使它能被载入,并不是说DLL可以放弃DllMain函数。

  DLL木马技术分析

  到了这里,您也许会想,既然DLL木马有那么多好处,以后写木马都采用DLL方式不就好了吗?话虽然是这么说没错,但是DLL木马并不是一些人想象的那么容易写的。要写一个能用的DLL木马,你需要了解更多知识。

  1.木马的主体

  千万别把木马模块写得真的像个API库一样,这不是开发WINAPI。DLL木马可以导出几个辅助函数,但是必须有一个过程负责主要执行代码,否则这个DLL只能是一堆零碎API函数,别提工作了。

  如果涉及一些通用代码,可以在DLL里写一些内部函数,供自己的代码使用,而不是把所有代码都开放成接口,这样它自己本身都难调用了,更不可能发挥作用。

  DLL木马的标准执行入口为DllMain,所以必须在DllMain里写好DLL木马运行的代码,或者指向DLL木马的执行模块。

  2.动态嵌入技术

  Windows中,每个进程都有自己的私有内存空间,别的进程是不允许对这个私人领地进行操作的,但是,实际上我们仍然可以利用种种方法进入并操作进程的私有内存,这就是动态嵌入,它是将自己的代码嵌入正在运行的进程中的技术。动态嵌入有很多种,最常见的是钩子、API以及远程线程技术,现在的大多数DLL木马都采用远程线程技术把自己挂在一个正常系统进程中。其实动态嵌入并不少见,罗技的MouseWare驱动就挂着每一个系统进程-_-

  远程线程技术就是通过在另一个进程中创建远程线程(RemoteThread)的方法进入那个进程的内存地址空间。在DLL木马的范畴里,这个技术也叫做“注入”,当载体在那个被注入的进程里创建了远程线程并命令它加载DLL时,木马就挂上去执行了,没有新进程产生,要想让木马停止惟有让挂接这个木马DLL的进程退出运行。但是,很多时候我们只能束手无策——它和Explorer.exe挂在一起了,你确定要关闭Windows吗?

  3.木马的启动

  有人也许会迫不及待的说,直接把这个DLL加入系统启动项目不就可以了。答案是NO,前面说过,DLL不能独立运行,所以无法在启动项目里直接启动它。要想让木马跑起来,就需要一个EXE使用动态嵌入技术让DLL搭上其他正常进程的车,让被嵌入的进程调用这个DLL的DllMain函数,激发木马运行,最后启动木马的EXE结束运行,木马启动完毕。

  启动DLL木马的EXE是个重要角色,它被称为Loader,如果没有Loader,DLL木马就是破烂一堆,因此,一个算得上成熟的DLL木马会想办法保护它的Loader不会那么容易被毁灭。记得狼狈为奸的故事吗?DLL木马就是爬在狼Loader上的狈。

  Loader可以是多种多样的,Windows的rundll32.exe也被一些DLL木马用来做了Loader,这种木马一般不带动态嵌入技术,它直接挂着rundll32进程运行,用rundll32的方法(rundll32.exe [DLL名],[函数] [参数])像调用API一样去引用这个DLL的启动函数激发木马模块开始执行,即使你杀了rundll32,木马本体还是在的,一个最常见的例子就是 3721中文实名,虽然它不是木马。(图3--启动项)

  注册表的AppInit_DLLs键也被一些木马用来启动自己,如求职信病毒。利用注册表启动,就是让系统执行DllMain来达到启动木马的目的。因为它是kernel调入的,对这个DLL的稳定性有很大要求,稍有错误就会导致系统崩溃,所以很少看到这种木马。

  有一些更复杂点的DLL木马通过svchost.exe启动,这种DLL木马必须写成NT-Service,入口函数是ServiceMain,一般很少见,但是这种木马的隐蔽性也不错,而且Loader有保障。

  4.其它

  到这里大家也应该对DLL木马有个了解了,是不是很想写一个?别急,不知道大家想过没有,既然DLL木马这么好,为什么到现在能找到的DLL 木马寥寥无几?现在让我来泼冷水,最重要的原因只有一个:由于DLL木马挂着系统进程运行,如果它本身写得不好,例如没有防止运行错误的代码或者没有严格规范用户的输入,DLL就会出错崩溃。别紧张,一般的EXE也是这样完蛋的,但是DLL崩溃会导致它挂着的程序跟着遭殃,别忘记它挂接的是系统进程哦,结局就是……惨不忍睹。所以写一个能公布的DLL木马,在排错检查方面做的工作要比一般的EXE木马多,写得多了自己都烦躁……

  DLL木马的发现和查杀

  经常看看启动项有没有多出莫名其妙的项目,这是Loader的所在,只要杀了狼,狈就不能再狂了。而DLL木马本体比较难发现,需要你有一定编程知识和分析能力,在Loader里查找DLL名称,或者从进程里看多挂接了什么陌生的DLL,可是对新手来说……总之就是比较难啊比较难,所以,最简单的方法:杀毒软件和防火墙(不是万能药,切忌长期服用)。

  DLL木马检测与清除实例

  守护者(NOIR—QUEEN)是一个典型的DLL木马程序,其服务端以DLL文件的形式插入到系统的Lsass.exe进程中。Lsass.exe进程是一个本地的安全授权服务,并且它会为使用Winlogon服务的授权用户生成一个进程,如果授权是成功的,Lsass就会产生用户的进入令牌。由于Lsass.exe是系统的关键进程,不能被终止,那么我们该如何清除这样的木马呢?

  守护者木马入侵系统后,会在服务中添加一项名为“QoSserver”的服务,并将“QoSserver.dll”文件插入到Lsass进程中,使其可以隐藏进程并自动启动。我们利用“进程猎手”这样的工具查看Lsass进程所调用的DLL文件,并与木马入侵前的信息比较,可以发现Lsass 进程中增加了“QoSserver.dll”文件。记录下该文件的具体位置,本例中为“C:\Windows\system32\ QoSserver.dll”。

  打开WindowsXP任务管理器,切换到“进程”选项卡中,结束“QoSserver.exe”进程,同时将系统目录下的 “QoSserver.exe”文件删除。然后运行Regedit,在注册表编辑器中依次展开[HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\Services\QoSserver],直接删除“QoSserver”项,重启计算机。重启之后,再将系统目录下的“QoSserver.dll”文件删除。需要注意的是,如果前面未删除“QoSserver.exe”文件,而只删除了QoSserver服务并重启之后,插入到Lsass进程当中的“QoSserver.dll”又会生成另外一个名为“AppCPI”的服务。这时再次打开注册表编辑器,展开 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AppCPI],删除AppCPI项。如果QoSserver服务同时复活,则要将该服务的启动类型改为“禁用”。重新启动计算机后,再删除系统目录下的木马文件。

  防范DLL木马

  1.安装木马查杀工具。对于多数人而言,要想通过手工查杀DLL木马是不太现实的,因此安装一款可以查杀此类木马的反病毒软件,是非常有必要的。这里还要提醒读者的是,应及时升级病毒数据库,这样才能保证有效地查杀绝大部分木马病毒。当然,我们也可以在计算机中安装那些专门针对木马的查杀工具,例如木马克星。

  2.查看是否有不明端口开放以及对端口通信进行监控。只要木马进行连接,接受/发送数据则必然会打开端口,DLL木马也不例外,我们可以通过 “Netstat-ano”命令来查看TCP/UDP端口的连接,以及开放端口的进程标识符,也可以直接使用进程端口查看工具Fport.exe来查看与端口对应的进程,以发现是否有不明的连接和端口开放。另外,有些DLL木马通过端口劫持或者端口重用的方法来进行通信,所以仅是查看端口还是不够的,有必要的话,我们可使用嗅探器来了解打开的端口到底在传输些什么数据。

  3.检查系统目录下是否有可疑的DLL文件。安装好系统和所有应用程序之后,可对系统目录下System32文件夹中的EXE和DLL文件作一记录:在命令提示符下执行“dir*.exe>bak1.txt&dir*.dll>bak2.txt”,将所有的EXE和DLL文件信息导出成TXT文件保存。当日后发现异常时,可以使用相同的命令再次备份,并使用FC命令比较两次的EXE文件和DLL文件。通过这种方法,我们可以发现可疑的EXE和DLL文件,同时通过文件的大小、创建时间来判断是否为DLL木马。

  4.查看系统进程调用的DLL文件。当我们怀疑有DLL木马插入到系统进程,可以使用一些第三方进程工具来查看进程所调用的DLL文件,然后进一步确认是否中了DLL木马。此类查看工具有进程猎手、进程间谍等等。另外,我们也可以使用XP系统自带的命令行工具TaskList,来显示进程调用的DLL文件,并将这些信息导出成TXT文件保存,以便随时进行比较。

  但我们就要利用这种木马 因为他比较难查杀 所以~~~~~~~~~~~~~

  DLL注入木马如是说

  DLL库链接文件,是Windows系统中许多驱动和程序运行时必需的文件。一般来说,这类文件无法单独运行,必须通过某个EXE文件调用该 DLL文件,从而执行相应的功能。同时,当该EXE文件正在执行时,调用的DLL文件无法被删除。正因为由于DLL文件具有隐蔽性,并且很难删除,因此目前许多流行的木马程序都采用了DLL文件方式进行安装,将木马DLL文件加载到某个正常的系统进程中,从而达到隐藏木马进程和保护木马文件的目的——这就是所谓的DLL注入式木马。

  木马是如何将DLL文件进行加载的呢?这里我们以一个黑客常用的DLL木马“上兴远程控制木马”为例进行讲解。

  运行“上兴木马”后,点击界面中“配置服务端”按钮,打开服务端生成程序。在“DNS域名解析更新IP”中输入自己的IP地址或者动态DNS 域名,在安装名称中输入生成的服务端DLL文件名。木马运行后,该DLL文件将被注入到下面“宿主进程名”中指定的系统进程中,默认为 “explorer.exe”。最后点击生成按钮,即可生成木马文件“rejoice_06.exe”。

  将生成的木马文件传播,当其他用户运行后,就可以通过上兴木马远控客户端进行控制了。

  警报,病毒无法清除

  如果系统中被植入了DLL木马,将会出现什么情况呢?

  首先,系统被黑客远程控制,出现数据丢失等情况;其次,杀毒软件会报警系统中有病毒,但是却无法进行清除。例如,在电脑中运行了上面制作的上兴远控木马后,笔者电脑上安装的杀毒软件提示发现病毒,但是在删除DLL病毒文件时却失败了。即使我们手工删除病毒文件,也会因为DLL文件正在使用中,所以也无法彻底删除。即使进入安全模式,得到的也是同样的结果。

  另外,由于DLL木马是插入到系统进程中的,因此通过任务管理器等进程工具,也无法发现任何木马进程,这给木马的清除带来了很大的困难!

  无法删除病毒文件,无法查找到木马进程,那么到底该如何清除DLL注入式木马呢?

  无所遁形,揪出木马藏身之所

  虽然木马没有自己的进程,但是有一个宿主进程,只要结束宿主进程,停止DLL文件的调用,就可以删除DLL文件,进而清除木马。因此,清除DLL木马的第一步,就是找到木马注入的宿主进程。那么,如何才能找到木马注入的宿主进程呢?且让我们细细看来。

  以清除“上兴远控木马”为例,从杀毒软件的报警提示中已经知道木马DLL文件名为“rejoice.dll”。因此,就可以通过一些查看进程调用DLL文件的进程管理工具,找到该文件的宿主进程,此类工具很多,比如大名鼎鼎的ICESword。

  运行IceSword后,点击左侧边栏“查看→进程”,就可以在其右侧窗口中看到所有进程列表。右键点击某进程,在弹出菜单中选择“模块信息”命令,即可看到该进程调用的所有DLL文件。

  提示:DLL注入式木马通常是将DLL文件,加载到explorer.exe、svchost.exe、winlogon.exe、 iexplore.exe等系统进程中的。因此在查找DLL宿主文件时,可以关闭其它无关的程序,然后依次检查这几个进程中的DLL文件。

  不过一个一个的检查系统进程,确实有些麻烦,如何才能快速的定位木马的宿主进程呢?可以使用一款名为“procexp”的进程管理工具。运行 procexp后,在程序界面中间显示的是树状进程关系列表,下方是每个进程的详细信息。点击菜单“Find→Find DLL”命令,打开DLL文件查找对话框,在“DLL Substring”中输入要查找的关键词,这里输入刚才杀毒软件扫描出的DLL文件名“rejoice.dll”。然后点击“Search”按钮,在下方的列表中就可以看到该DLL文件是被哪个进程调用的了。

  牛刀小试,清除普通进程DLL注入木马

  对于大部分DLL注入木马,其注入到“iexplore.exe”和“explorer.exe”这两个进程。对于这类普通进程的DLL木马,清除将是非常方便的。

  如果DLL文件是注入到“iexplore.exe”进程中,由于此进程就是IE浏览器进程,因此就需要先关掉所有IE窗口和相关程序,然后直接找到DLL文件进行删除就可以了。

  如果DLL文件是注入到“explorer.exe”进程中,那么就略显麻烦一些。由于此进程用于显示桌面和资源管理器,因此,当通过任务管理器结束掉“explorer.exe”进程时,桌面无法看到,桌面上所有图标消失掉,"我的电脑"、"网上邻居"等所有图标都不见了,同时,也无法打开资源管理器找到木马文件进行删除。怎么办呢?

  实际上,解决的方法也很简单。在任务管理器中点击菜单“文件→新任务运行”,打开“创建新任务”对话框,点击“浏览”按钮,通过浏览对话框就可以打开DLL文件所在的路径(如图4)。然后选择“文件类型”为“所有文件”,即可显示并删除DLL文件了。

  在浏览对话框中删除DLL文件

  除恶务尽,清除特殊DLL注入木马

  除了以上所说的注入普通进程的DLL木马之外,还有许多木马注入到系统里关键进程中,比如svchost.exe、smss.exe、 winlogon.exe进程。这些进程使用普通方式无法结束,使用特殊工具结束掉进程后,却又很可能造成系统崩溃无法正常运行的情况。对于这些木马,我们可以通过以下两种方法进行清除。

  1.使用IceSword卸载DLL文件

  IceSword的功能十分强大,我们曾在以前作过介绍,在这里,就可以利用它卸载掉已经插入到正在运行的系统进程中的DLL文件。在 IceSword的进程列表显示窗口中,右键点击DLL木马宿主进程,选择弹出命令“模块信息”。在进程模块信息对话框中找到DLL木马文件,选择文件后点击“强制解除”命令,即可将系统进程中的DLL木马文件卸载掉了

  卸载系统进程中的DLL木马

  2.SSM终结所有DLL木马

  使用IceSword可以卸载大部分的DLL木马文件,但还有某些特殊木马在卸载时,却会造成系统崩溃重启。例如一款著名的木马PCShare采用了注入 “winlogon.exe”进程的方式运行,由于该进程是掌握Windows登录的,因此在使用IceSword卸载时,系统将会立即异常重启,根本来不及清除掉DLL文件,在重启后DLL木马又被再次加载。对于这类DLL木马,必须在进程运行之前阻止DLL文件的加载。接下来,我们又要用到一款用于阻止DLL文件加载的安全工具——“System Safety Monitor”(简称SSM)。

  提示:SSM是一款俄罗斯出品的系统监控软件,通过监视系统特定的文件(如注册表等)及应用程序,达到保护系统安全的目的。这款软件功能非常强大,可以辅助防火墙和杀毒软件更好的保护系统安全。

  运行SSM,在程序界面中选择“规则”选项卡,右键点击中间规则列表空白处,选择“新增”命令,弹出文件浏览窗口,选择浏览文件类型为 “DLL files”,在其中选择指定文件路径“C:\Windows\system32\rejoice.dll”。点击“确定”按钮后,即可把 “rejoice.dll”文件添加到规则列表中,然后在界面下方的“规则”下拉列表中选择“阻止(F2)”。完成添加规则设置后,点击“应用设置”按钮,后重启系统。

  阻止DLL文件加载到进程

  提示:在重启系统前请检查SSM的设置,确保SSM随系统启动而加载运行。

  当系统重启时,SSM就会自动阻止相关进程调用“rejoice.dll”木马文件。这样,该木马文件便不会被任何程序使用,在硬盘中找到它,直接删除即可。

  雁过无声,清除木马残留垃圾

   DLL注入型木马并不会感染其它文件,只要结束木马进程并删除掉病毒文件木马,木马就没有任何危害性了。剩下的工作就是清除掉木马在注册表和其它启动文件中留下的项目。方法很简单,点击“开始→运行”,输入“regedit”命令,就会打开“注册表编辑器”,利用搜索功能,便可以清除木马在注册表中留下的垃圾;输入“mscnofig”命令,就可以打开系统配置实用程序,清除木马在启动文件中的踪影。

  编后:木马选择注入的系统进程也不尽相同。在碰到此类木马时,我们可以首先考虑用procexp之类的工具,查找出DLL文件的宿主进程。找到宿主进程后,如果是注入到普通可结束的进程中,可以直接将宿主进程终止后删除DLL木马文件即可。如果DLL文件是注入到系统关键进程中的话,可以考虑用IceSword卸载DLL文件;如若失败,那么直接用SSM建立规则,阻止DLL文件的加载就可以了。

7Zip:SaY Goodbye to WinRAR

[不指定 2006/08/10 10:05 | by ipaddr ]
由于需要在US的服务器上安装ZIP软件,国外的服务器不能装盗版软件,商用软件一般收费,在尽量使用免费实用软件的原则下,发现了7zip,以下是转载。

Philip Katz为世界贡献了一个伟大的Zip压缩算法,而他自己却几乎没有从中获得任何好处!最后却因贫困潦倒死在汽车中。在WinRAR近些年的崛起让很多人忘却了当初98系统中的Winzip.秉承着”自由之神”Richard Stallman伟大的GNU计划,历时近5年的沉淀,一款压缩软件进入我的视野——7-Zip!

首先,软件是OPEN SOURCE and FREE,说实话,如果在功能大概差不多的情况下,我可不愿意偷偷摸摸的去用什么共享软件。接着我们来看7-Zip的主要特征:

a.更新了算法来加大 7z 格式 的压缩比
b.7-Zip 是基于 GNU LGPL 之下发布的软件
c.支持格式:7z、ZIP、CAB、RAR、ARJ、GZIP、BZIP2、TAR、CPIO、RPM 和 DEB
e.对于 ZIP 及 GZIP 格式,7-Zip 能提供比使用 PKZip 及 WinZip 高 2-10% 的压缩比
f.7z 格式支持创建自释放(SFX)压缩档案
g.集成 Windows 外壳扩展
h.强大的的文件管理
i.强大的命令行版本
j.支持 FAR 管理器
k.共有 46 种界面语言
l.关于7Z格式的详细情况请点击上面7z的链接了解详细情况,好像Winrar也能支持该格式。

有这些就够了,就我自己使用来说,99%的时间是解压一些压缩包,顶多自己压点小软件传送给别人,从来没压过大玩意儿,也就是说如果7-ZIP能完成WINRAR能完成的事情,那么将WINRAR请出系统对我来说是顺理成章的事儿了。

7zip下载站点:
http://sourceforge.net/projects/sevenzip

破解XP的超级管理员密码

[不指定 2006/08/09 09:56 | by ipaddr ]
最强破解XP,2000,2003登入密码的方法!(破解超级管理员密码) 经常见到有人遗忘了系统的管理员密码来求助的,而网上针对此类的答案可谓五花八门,但经实践发现其中绝大多数都是没有用的,有些以讹传讹的方法(例如在winxp系统下删除sam文件等等)还会造成系统的彻底崩溃。
  相比之下,利用ERD2003(2005)强行修改系统管理员密码的方法简单、易于操作,且对2000/xp/2003系统均有效。下面就具体介绍一下这个软件的用法。
1,当然是下载ERD2003(或者2005),解压后,将其刻录成镜像光盘。
2,光盘启动,进入介面(很像winxp的启动画面)
3,进入“系统”后,ERD2003会针对系统的网络等硬件设备进行一些设置,总之遇到要你选择时一概选“yes”即可
4,在网卡的配置时,系统提示说没有经过xp的认证,不管它,一概选yes
5,接下来ERD2003会在你的硬盘里搜索所有已安装的系统,再让你选择要修改的系统,这里我选择win2003进行修改。按确定!
6,正式进入ERD2003桌面了,很象xp
7,接下来是最关键的一步:按开始-修改密码(或英文start—administrative tools—locksmith),进入强行修改密码的界面,随后弹出的对话框会让你选择要修改密码的用户名(一般是选择超级管理员Administrator),选择后即可强行修改密码而不用输入原始密码,然后点击NEXT
8,完成了,点击finish之后就重启吧,然后试试你修改的密码,是不是进去了?原来xp/2003貌似严密的密码保护也不过如此而已啊,一张小小的erd2003光盘就全破解了……
关闭XP系统主题在IE中的显示
如果开发环境是XP系统,IE中的input标签会和XP系统主题相符合,影响了外观的统一,采用下列方法可以关闭.
添加下列 META 标记,可以选择使得您的 HTML 内容对于某些元素(如按钮和滚动条)不采用与该操作系统相同的外观:

[code]<META HTTP-EQUIV="MSThemeCompatible" Content="No">[/code]

关闭IE的图像工具栏
IE的图像工具栏有时候很讨厌,在MSDN上无意中发现了关闭方法
图像工具栏可以通过 meta 标记 <META HTTP-EQUIV="imagetoolbar" CONTENT="no"> 来禁用,也可以通过对 IMG 标记元素设置属性 GALLERYIMG="no" 来禁用。

[code]<META HTTP-EQUIV="imagetoolbar" CONTENT="no">[/code]

如何使用基于KEY的SSH

[不指定 2006/08/08 13:39 | by ipaddr ]
假设你需要使用KEYFILE的方式从主机ipaddr登录到主机bcomcn,可以下如操作:
(不需要使用密码,直接使用KEYFILE方式来登录)
1.在ipaddr主机(ssh客户端),
通过ssh-keygen在建立SSH keys
# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
将在ipaddr主机的当前用户HOME目录下的.ssh目录,生成id_rsa.pub和id_rsa,其中,id_rsa是密匙,id_rsa.pub是公匙,你需要将id_rsa.pub上传(sftp,ftp...)到bcomcn(ssh服务端)

2. 在bcomcn(ssh服务端)上安装客户端的密匙
a.Windows的WINSSHD直接在对应用户里导入公匙就OK了,
b.Nix下,需要将id_rsa.pub放到服务端需要登录的用户的主目录下的authorized_keys文件中,如下操作
cd ~/.ssh
cat DIR/id_rsa.pub >> authorized_keys
(将公匙追加到这个文件中)

3.完成以上操作后,你就可以不需要密码从ipaddr访问bcomcn了.
SSH登录:
ssh root@www.eit.name
ssh -l root www.eit.name
ssh -i USERHOME/.ssh/id_rsa -l username www.eit.name

scp文件:
scp -i $KEYFILE $SOURCEFILE username@www.eit.name:/DIR

Eclipse下的CVS忽略

[不指定 2006/08/08 13:25 | by ipaddr ]
Eclipse内置对CVS的集成.
通常情况下,一个Project可能会有部分文件不需要由CVS管理,比如,BIN,uploadfiles之类的文件.
正常方式是在share project时使用addto cvs.ignore忽略不需要CVS管理的文件或文件夹,
但偶尔也会误操作,导致一些不需要的文件进入CVS,这里,你可以如下解决:
假设你的网站根目录有/uploadfiles/不需要提交到CVS
1.在不需要提交进CVS的文件或文件夹的所在目录(/),建立一个.cvsignore文件,将不需要提交到CVS的文件或文件夹在这个文件里列出来,每行一个文件
2.每个目录都会有一个CVS工作目录,进入/uploadfiles/下面,将所有的CVS目录删除
3.进入根目录的/CVS下面,打开Entries文件,将uploadfiles行删除
再用Eclipse进行CVS操作时,该目录会被忽略.

另外,如果CVS服务端修改了module名,客户端需要对应module目录下所有子目录上的CVS里的Repository文件.

这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:

问题一:
使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?

我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢?

问题二:
最近在网上看到一个ConvertUTF.c,实现了UTF-32、UTF-16和UTF-8这三种编码方式的相互转换。对于Unicode(UCS2)、GBK、UTF-8这些编码方式,我原来就了解。但这个程序让我有些糊涂,想不起来UTF-16和UCS2有什么关系。
查了查相关资料,总算将这些问题弄清楚了,顺带也了解了一些Unicode的细节。写成一篇文章,送给有过类似疑问的朋友。本文在写作时尽量做到通俗易懂,但要求读者知道什么是字节,什么是十六进制。

0、big endian和little endian
big endian和little endian是CPU处理多字节数的不同方式。例如“汉”字的Unicode编码是6C49。那么写到文件里时,究竟是将6C写在前面,还是将49写在前面?如果将6C写在前面,就是big endian。还是将49写在前面,就是little endian。

“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。

我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。

1、字符编码、内码,顺带介绍汉字编码
字符必须编码后才能被计算机处理。计算机使用的缺省编码方式就是计算机的内码。早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5。

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

这里还有一些细节:

GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。

在DBCS中,GB内码的存储格式始终是big endian,即高位在前。

GB2312的两个字节的最高位都是1。但符合这个条件的码位只有128*128=16384个。所以GBK和GB18030的低字节最高位都可能不是1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。

2、Unicode、UCS和UTF
前面提到从ASCII、GB2312、GBK到GB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如“汉”字的Unicode编码是6C49,而GB码是BABA。

Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。

根据维基百科全书(http://zh.wikipedia.org/wiki/)的记载:历史上存在两个试图独立设计Unicode的组织,即国际标准化组织(ISO)和一个软件制造商的协会(unicode.org)。ISO开发了ISO 10646项目,Unicode协会开发了Unicode项目。

在1991年前后,双方都认识到世界不需要两个不兼容的字符集。于是它们开始合并双方的工作成果,并为创立一个单一编码表而协同工作。从Unicode2.0开始,Unicode项目采用了与ISO 10646-1相同的字库和字码。

目前两个项目仍都存在,并独立地公布各自的标准。Unicode协会现在的最新版本是2005年的Unicode 4.1.0。ISO的最新标准是10646-3:2003。

UCS规定了怎么用多个字节表示各种文字。怎样传输这些编码,是由UTF(UCS Transformation Format)规范规定的,常见的UTF规范包括UTF-8、UTF-7、UTF-16。

IETF的RFC2781和RFC3629以RFC的一贯风格,清晰、明快又不失严谨地描述了UTF-16和UTF-8的编码方法。我总是记不得IETF是Internet Engineering Task Force的缩写。但IETF负责维护的RFC是Internet上一切规范的基础。

3、UCS-2、UCS-4、BMP

UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。下面让我们做一些简单的数学游戏:

UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。

UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个plane。每个plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。

group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。

将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。

4、UTF编码

UTF-8就是以8位为单元对UCS进行编码。从UCS-2到UTF-8的编码方式如下:

UCS-2编码(16进制) UTF-8 字节流(二进制)
0000 - 007F 0xxxxxxx
0080 - 07FF 110xxxxx 10xxxxxx
0800 - FFFF 1110xxxx 10xxxxxx 10xxxxxx

例如“汉”字的Unicode编码是6C49。6C49在0800-FFFF之间,所以肯定要用3字节模板了:1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是:0110 110001 001001, 用这个比特流依次代替模板中的x,得到:11100110 10110001 10001001,即E6 B1 89。

读者可以用记事本测试一下我们的编码是否正确。

UTF-16以16位为单元对UCS进行编码。对于小于0x10000的UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000的UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4的BMP必然小于0x10000,所以就目前而言,可以认为UTF-16和UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。

5、UTF的字节序和BOM
UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:

在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。

6、进一步的参考资料
本文主要参考的资料是 "Short overview of ISO-IEC 10646 and Unicode" (http://www.nada.kth.se/i18n/ucs/unicode-iso10646-oview.html)。

我还找了两篇看上去不错的资料,不过因为我开始的疑问都找到了答案,所以就没有看
Apache+PHP+Mysql中的mysql_pconnect研究

mysql_pconnect --  PHP打开一个到 MySQL 服务器的持久连接

通常情况下,使用pconnect代替connect,会带一定的性能提升,详情请参考我写的PHP-JPS性能不完全测试(http://www.eit.name/other/phpjsp.htm)
一直漂(ipaddr,bcomcn)原创,转载请注明

但使用Pconnect会经常的导致Mysql连接失败,提示连接太多,原因在于pconnect后,Apache不会自动关闭mysql的连接.
先来看看APACHE的工作模式
Windows下,Apache使用一个主进程,加一个辅进程,再由辅进程派生N个线程的方式来提供服务,线程的数量可以在httpd.conf里配置:ThreadsPerChild 500,如果指定为500线程,则apache一启动时就会启动500个线程,但最多也只使用500个线程,如果同时连接数量超过500个(可能300个用户访问就有500个连接,判断当前连接的方法,可以使用netstat -na|grep 80|grep EST|wc -l或者使用apache的status module),那么,多余的连接将会在等待或者连接失败.(所以,Windows下Apache的主要配置参数应该是ThreadsPerChild,先根据当前的连接数,再看看有没有必要调大一些,一般PC服务器设置为1000算是比较大了.)
Nix下,Apache使用进程的方式来运行,原理相同,需要调整进程数量的参数有几个,比如ServerLimit.

再来看看Apache+PHP+Mysql_pconnect的工作方式
每当客户端向服务端发送一个连接请求(包括图片,HTML,PHP等),apache将会用一个线程来接受这个请求,如果是请求的是一个PHP文件,且PHP文件里使用了PConnect,则当前线程会判断当前线程有没有打开过pconnect,如果有打开过,则使用原来的mysql connect,如果没有打开过,则新建一个connect,并且,连接断开后,线程仍在运行,而且保持Mysql connect.按这种方式运行一段时间后,完全有可能所有apache的线程都打开过有Pconnect的Php页面,所以,如果apache的ThreadsPerChild=500的话,则500个线程都找开了mysql连接,并且没有关闭,则就要求,mysql的连接数必须大于或等于500,如果小于这个值,将会导致PHP页面提示数据库连接失败.

所以,得出结论,Apache+PHP+Mysql下使用pconnect时,mysql的max_connect必须大于或等于apache的最大线程(进程)数.在一个访问量很大的站点,使用pconnect可能不太现实,最好的办法是,尽可能的将数据库内容生成为静态文件,而不需要每个页面都连接数据库,并且使用mysql_connect(即使将绝大多数页面生成为静态文件,但仍有mysql_pconnect时,同样要求mysql的max_connect大于apache的线程数,所以这种情况下使用pconnect非常不可取).

How to Email2SMS

[不指定 2006/08/07 15:29 | by ipaddr ]
How to Email2SMS

一.如何将Email转换成SMS
在做系统维护时,经常需要监控一些服务是否工作正常,通常发生异常的时候,是发送邮件通知管理员的,但管理员不

可能一天24小时守着邮箱.
国外有的服务商提供从邮箱到短信的服务,国内的没有明确提供这种服务的SP,但通常我们可以换种方式去实现.当前,基本上所有的邮箱服务提供商都提供短信到达SMS通知的功能,每月收取一些费用,我们可以使用这功能来实现Email2SMS.
比如,我们使用163.com的随身邮功能,每月10元,送300条短信通知,呵呵,可以说非常划算的.
假设我们ipaddr(at)163.com开通了随身邮,则所有的系统通知邮件,可以发送一份到企业内部的邮箱,再抄送一份到ipaddr(at ) 163.com,这样,任何时候的系统故障,都可以第一时间通知到管理员手机上.
一直漂原创,转载请注明.
分页: 41/57 第一页 上页 36 37 38 39 40 41 42 43 44 45 下页 最后页 [ 显示模式: 摘要 | 列表 ]