<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[wolf_elite]]></title>
<link>http://blog.pfan.cn/wolfelite</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[句柄与ID的区别〔转〕]]></title>
		<link>http://blog.pfan.cn/wolfelite/26927.html</link>
		<description><![CDATA[&nbsp;
在Windows程序设计中，句柄是无法精确定义的术语。随便找一个高手，让他给你讲讲句柄是什么，恐怕他都很难给你一个具体的定义来。在Windows程序设计中，句柄无所不在，窗口有窗口的句柄HWND，线程和进程也有句柄HANDLE，甚至有人把套接字也称为句柄（我就是这样的）。句柄在英文中是handle，作为动词讲是处理的意思。简而言之，句柄是处理对象的一个接口，对于程序中所涉及的对象，你可以通过句柄去操作他。你不应该试图去回答句柄是什么，而应该从务虚的角度去理解他，知道他干什么即可。有人说，因为handle的定义是void *，因此他是一个指针。有些熟悉内核的人说这是一个索引。这些说法都是不准确的。需要注意的是，微软并没有精确定义句柄的含义，也许在某个特殊的操作系统中，他使用了一种内部含义，但是在其他版本中，就不保证这样了。任何对句柄的内在假设都可能导致灾难性的后果。API是接口，句柄是接口，两者有什么区别？API是一个通用的函数族，他处理所有的对象，而句柄是和某个具体对象相关联的数据结构。只有借助句柄，API才知道处理哪个对象。有些对象有ID。句柄表示特殊的对象，ID也表示某个对象，为什么要两个东西来表示？首先，句柄不能唯一表示对象。一个对象可以有多个句柄。例如：假设我们用CreateProcess创建一个进程，该进程的第一个线程的句柄会返回给调用CreateProcess的进程。同时，在新创建的进程中，该线程也会有一个句柄。这样，这个线程就有两个句柄。我们也可以用DuplicateHandle复制一个句柄，这个句柄和原来句柄是不一样的，但是他们都表示同一个对象。而每个有ID的对象，在系统范围内，ID肯定是唯一的。其次，句柄所能实现的功能ID不能实现。毕竟ID只是一个数字，他不能记录很多信息。而句柄可能在其内部结构中记录了很多信息（如权限、有无信号等）。总之，如果试图解释他到底是什么，学习句柄就会误入歧途。从虚的角度去理解，对于新手是难一点，但是这也许是唯一正确的办法。
&nbsp;
引用地址：http://blog.vckbase.com/arong/archive/2005/03/19/3732.aspx]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-06-19 22:49:00</pubDate>
		</item>
				<item>
		<title><![CDATA[SQL注入[转]]]></title>
		<link>http://blog.pfan.cn/wolfelite/25084.html</link>
		<description><![CDATA[随着B/S模式应用开发的发展，使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高，程序员的水平及经验也参差不齐，相当大一部分程序员在编写代码的时候，没有对用户输入数据的合法性进行判断，使应用程序存在安全隐患。用户可以提交一段数据库查询代码，根据程序返回的结果，获得某些他想得知的数据，这就是所谓的SQL Injection，即ＳＱＬ注入。 
ＳＱＬ注入是从正常的WWW端口访问，而且表面看起来跟一般的Web页面访问没什么区别，所以目前市面的防火墙都不会对ＳＱＬ注入发出警报，如果管理员没查看IIS日志的习惯，可能被入侵很长时间都不会发觉。　 但是，ＳＱＬ注入的手法相当灵活，在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析，构造巧妙的SQL语句，从而成功获取想要的数据，是高手与“菜鸟”的根本区别。　 根据国情，国内的网站用ASP+Access或SQLServer的占70%以上，PHP+MySQ占L20%，其他的不足10%。在本文，我们从分入门、进阶至高级讲解一下ASP注入的方法及技巧，PHP注入的文章由NB联盟的另一位朋友zwell撰写，希望对安全工作者和程序员都有用处。了解ASP注入的朋友也请不要跳过入门篇，因为部分人对注入的基本判断方法还存在误区。大家准备好了吗？Let's Go... 入门篇　　 如果你以前没试过ＳＱＬ注入的话，那么第一步先把IE菜单=&gt;工具=&gt;Internet选项=&gt;高级=&gt;显示友好 HTTP 错误信息前面的勾去掉。否则，不论服务器返回什么错误，IE都只显示为HTTP 500服务器错误，不能获得更多的提示信息。 一、ＳＱＬ注入原理 以下我们从一个网站www.19cn.com开始（注：本文发表前已征得该站站长同意，大部分都是真实数据）。 在网站首页上，有名为“IE不能打开新窗口的多种解决方法”的链接，地址为：http://www.19cn.com/showdetail.asp?id=49，我们在这个地址后面加上单引号’，服务器会返回下面的错误提示： Microsoft JET Database Engine 错误 '80040e14' 字符串的语法错误 在查询表达式 'ID=49'' 中。 /showdetail.asp，行8 从这个错误提示我们能看出下面几点： 1.网站使用的是Access]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-04-21 17:04:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Ipc$默认发生在win&nbsp;NT/2000环境下，win98将不在此次讨论之列。]]></title>
		<link>http://blog.pfan.cn/wolfelite/24465.html</link>
		<description><![CDATA[IPC$(Internet Process Connection)是共享"命名管道"的资源，它是为了让进程间通信而开放的命名管道，通过提供可信任的用户名和口令，连接双方可以建立安全的通道并以此通道进行加密数据的交换，从而实现对远程计算机的访问。IPC$是NT/2000的一项新功能，它有一个特点，即在同一时间内，两个IP之间只允许建立一个连接。NT/2000在提供了ipc$功能的同时，在初次安装系统时还打开了默认共享，即所有的逻辑共享(c$,d$,e$……)和系统目录winnt或windows(admin$)共享。所有的这些，微软的初衷都是为了方便管理员的管理，但在有意无意中，导致了系统安全性的降低。 平时我们总能听到有人在说ipc$漏洞，ipc$漏洞，其实ipc$并不是一个真正意义上的漏洞,我想之所以有人这么说，一定是指微软自己安置的那个‘后门’：空会话（Null session）。
三&nbsp;什么是空会话在介绍空会话之前，我们有必要了解一下一个安全会话是如何建立的。在Windows&nbsp;NT&nbsp;4.0中是使用挑战响应协议与远程机器建立一个会话的，建立成功的会话将成为一个安全隧道，建立双方通过它互通信息，这个过程的大致顺序如下：&nbsp;1）会话请求者（客户）向会话接收者（服务器）传送一个数据包，请求安全隧道的建&nbsp;立；&nbsp;2）服务器产生一个随机的64位数（实现挑战）传送回客户；&nbsp;3）客户取得这个由服务器产生的64位数，用试图建立会话的帐号的口令打乱它，将结&nbsp;果返回到服务器（实现响应）；&nbsp;4）服务器接受响应后发送给本地安全验证（LSA），LSA通过使用该用户正确的口令来核实响应以便确认请求者身份。如果请求者的帐号是服务器的本地帐号，核实本地发生；如果请求的帐号是一个域的帐号，响应传送到域控制器去核实。当对挑战的响应核实为正确后，一个访问令牌产生，然后传送给客户。客户使用这个访问令牌连接到服务器上的资源直到建议的会话被终止。以上是一个安全会话建立的大致过程，那么空会话又如何呢？空会话是在没有信任的情况下与服务器建立的会话（即未提供用户名与密码），但根据WIN2000的访问控制模型，空会话的建立同样需要提供一个令牌，可是空会话在建立过程中并没有经过用户信息的认证，所以这个令牌中不包含用户信息，因此，这个]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-04-01 12:49:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C++的随机函数Srand()]]></title>
		<link>http://blog.pfan.cn/wolfelite/24274.html</link>
		<description><![CDATA[C++/c语言里,是没有办法得到一个真正的随机数序列的.想要等到一个真正的随机数序列,必须使用特定的随机数硬件发生器.也就是说,软件是没有办法产生真正的随机数.因为软件必须按照一定的逻辑来编写.既然是按照特定的逻辑(也就是说算法)来编写 ,那么产生的运算结果就是一定的.这一点,就是软件天生的特性.想想看,如果一个软件,同样的代码喝条件下,每次运行的结果不一样,那还有谁会用?
所以,在C++/C语言中,就有了"伪随机数"的概念.意思也就是说,通过一个特定的算法,产生一个假的随机数序列.那么,程序员又希望这个随机数序列跟接近真正的随机数序列,也就是希望得到的序列的不一样,所以有了一个"播种"的概念.
srand(unsgined int seed);
这个函数就是用来"播种"的.通过一个"种子"(SEED),来控制随机数的序列不一样.只要种子不一样,那么通过rand()得到的随机数序列就不一样.反过来说,如果种子一样,那么通过srand()得到的随机数就是一样的.
srand(0);for( int i = 0; i &lt; 10; i++){cout&lt;&lt;rand()&lt;&lt;' ';}你试着将这个程序执行两次，你会发现两次的结果一样。那是因为，一旦“种子”确定了，那么这个随机数序列就确定了。软件天生的“行为可重复性”决定了这一点。
所以,一般在播种的时候,喜欢用一个随机的种子.在绝大多数的情况下,会使用当前的系统时间.这个数字在每次程序运行的时候都不一样.除非你手动的改系统时间.
----------------------------------------------------------------------------------]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-25 19:33:00</pubDate>
		</item>
				<item>
		<title><![CDATA[熊猫烧香原代码]]></title>
		<link>http://blog.pfan.cn/wolfelite/24024.html</link>
		<description><![CDATA[program&nbsp;Japussy;usesWindows,&nbsp;SysUtils,&nbsp;Classes,&nbsp;Graphics,&nbsp;ShellAPI{,&nbsp;Registry};constHeaderSize&nbsp;=&nbsp;82432;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//病毒体的大小IconOffset&nbsp;=&nbsp;$12EB8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PE文件主图标的偏移量//在我的Delphi5&nbsp;SP1上面编译得到的大小，其它版本的Delphi可能不同//查找2800000020的十六进制字符串可以找到主图标的偏移量&nbsp;{HeaderSize&nbsp;=&nbsp;38912;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Upx压缩过病毒体的大小IconOffset&nbsp;=&nbsp;$92BC;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Upx压缩过PE文件主图标的偏移量//Upx&nbsp;1.24W&nbsp;用法:&nbsp;upx&nbsp;-9&nbsp;--8086&nbsp;Japussy.exe}IconSize&nbsp;&nbsp;&nbsp;=&nbsp;$2E8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//PE文件主图标的大小--744字节IconTail&nbsp;&nbsp;&nbsp;=&nbsp;IconOffset&nbsp;+&nbsp;IconSize;&nbsp;//PE文件主图标的尾部ID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-17 09:14:00</pubDate>
		</item>
				<item>
		<title><![CDATA[解决Sql&nbsp;Server2000程序安装被挂起的问题]]></title>
		<link>http://blog.pfan.cn/wolfelite/23996.html</link>
		<description><![CDATA[有时安装SqlServer2000时，安装程序报告已经有挂起的安装程序，需要重启后再安装，这时需要重新启动计算机，但是，有时重新启动计算机后再安装时仍然出现此提示，致使无法继续安装。这时可以采用下列的办法完成系统安装。进入注册表编辑器 REGEDIT 依次找到HKEY_LOCAL_MACHINE -&gt;SYSTEM -&gt;CurrentControlSet -&gt;Control -&gt;Session Manager键值，在右边找到并双击“PendingFileRenameOperations”，删除其中的内容。 确定，取出注册表编辑器。 也可以把一下几行内容粘贴到记事本后，保存成“删除挂起.REG”后双击此文件即可。REGEDIT4[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager]"PendingFileRenameOperations"=hex(7):00,00
原因分析：造成这个问题的主要原因是在以前安装SQL&nbsp;Server&nbsp;2000或者其他软件的安装也可能会造成（不过主要是微软的软件）的过程中，中断了安装过程，于是就在系统中保留了安装信息，造成无法继续安装的问题。]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-16 10:18:00</pubDate>
		</item>
				<item>
		<title><![CDATA[aspx和asp有什么区别]]></title>
		<link>http://blog.pfan.cn/wolfelite/23991.html</link>
		<description><![CDATA[&nbsp;服务器支持ASP,但是并一定就支持ASPX.ASPX可以说是ASP的升级版,其符合MIcrosoft公司最新的.NET战略及内部结构.具有开放式的特点.
另外.ASP页面只能使用JavaScript或者vbscript进行编写,而ASPX则没有这个限制,其理论上是支持使用任意评议进行编写,比如VC,VB
所以,服务器支持ASP,但是不一定就支持ASPX,而且对于IIS来讲,要支持ASPX也需要单独安装程序.IIS默认是不支持ASPX的.]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-15 23:06:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Linux开发中的常用命令]]></title>
		<link>http://blog.pfan.cn/wolfelite/23907.html</link>
		<description><![CDATA[Linux开发中的常用命令
&nbsp;ls #以默认方式显示当前目录文件列表 
ls –a #显示所有文件包括隐藏文件 
ls –l #显示文件属性，包括大小，日期，符号连接，是否可读写及是否可执行
&nbsp;ls --color=never *.so &gt; obj #不显示文字颜色,将所有so文件记录到obj文件中
&nbsp;cd dir #切换到当前目录下的dir目录 cd / #切换到根目录 cd .. #切换到到上一级目录 cd ../.. #切换到上二级目录 cd ~ #切换到用户目录，比如是root用户，则切换到/root下 rm file #删除某一个文件 rm -fr dir #删除当前目录下叫dir的整个目录 cp source target #将文件source 复制为 target cp /root/source . #将/root下的文件source复制到当前目录 cp –av soure_dir target_dir #将整个目录复制，两目录完全一样 cp –fr source_dir target_dir #将整个目录复制，并且是以非链接方式复制，当source目录带有符号链接时，两个目录不相同 mv source target #将文件source更名为target diff dir1 dir2 #比较目录1与目录2的文件列表是否相同，但不比较文件的实际内容，不同则列出 diff file1 file2 #比较文件1与文件2的内容是否相同，如果是文本格式的文件，则将不相同的内容显示，如果是二进制代码则只表示两个文件是不同的 comm file1 file2 #比较文件，显示两个文件不相同的内容 echo message #显示一串字符 echo "message message2" #显示不连续的字符串 cat: cat file #显示文件的内容，和DOS的type相同 cat file | more #显示文件的内容并传输到more程序实现分页显示，使用命令less file可实现相同的功能 more #分页命令，一般通过管道将内容传给它，如ls | more export LC_ALL=zh_CN.GB2312 #将环境变量LC_ALL的值设为zh_CN.GB2312 export DISPLAY=0:0 #通]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-13 10:29:00</pubDate>
		</item>
				<item>
		<title><![CDATA[SQL语句]]></title>
		<link>http://blog.pfan.cn/wolfelite/23868.html</link>
		<description><![CDATA[为了大家更容易理解我举出的SQL语句，本文假定已经建立了一个学生成绩管理数据库，全文均以学生成绩的管理为例来描述。 　　1.在查询结果中显示列名：
　　a.用as关键字：select name as '姓名' from students order by age
　　b.直接表示：select name '姓名' from students order by age
　　2.精确查找:
　　a.用in限定范围：select * from students where native in ('湖南', '四川') 
　　b.between...and：select * from students where age between 20 and 30
　　c.“=”：select * from students where name = '李山' 
　　d.like:select * from students where name like '李%' (注意查询条件中有“%”，则说明是部分匹配，而且还有先后信息在里面，即查找以“李”开头的匹配项。所以若查询有“李”的所有对象，应该命令：'%李%';若是第二个字为李，则应为'_李%'或'_李'或'_李_'。)
　　e.[]匹配检查符：select * from courses where cno like '[AC]%' (表示或的关系，与"in(...)"类似，而且"[]"可以表示范围，如：select * from courses where cno like '[A-C]%')
　　3.对于时间类型变量的处理
　　a.smalldatetime：直接按照字符串处理的方式进行处理，例如：select * from students where birth &gt; = '1980-1-1' and birth &lt;= '1980-12-31' 
　　4.集函数
　　a.count()求和，如：select count(*) from students (求学生总人数)
　　b.avg(列)求平均，如：select avg(mark) from grades where cno=’B2’
　　c.max(列)和min(列)，求最大与最小
　　5.分组group
　　常用于统计时，如]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-12 14:51:00</pubDate>
		</item>
				<item>
		<title><![CDATA[浅淡批处理文件.]]></title>
		<link>http://blog.pfan.cn/wolfelite/23834.html</link>
		<description><![CDATA[扩展名是bat(在NT/2000/XP/2003下也可以是CMD)的文件就是批处理文件.&nbsp;&nbsp; 首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令一样),你可以使用DOS下的EDIT或者WINDOWS的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件.&nbsp;&nbsp; 其次,批处理文件是一种简单的程序,可以通过条件语句(IF)和流程控制语句(goto)来控制命令行的流程,在批处理中也可以使用循环语句(FOR)来循环执行一条命令.当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的.批处理的程序语句就是一条条的DOS命令(包括内部和外部命令),而批处理的能力主要取决于你所使用的命令.&nbsp;&nbsp; 第三,每个编写的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(PATH)中来使得它可以在任意位置运行.一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序.&nbsp;&nbsp; 第四,在DOS和W.X/ME系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等.下面一个运行于Windows 98r autoexec.bat的示例:&nbsp; @echo off&nbsp; path c:\windows;c:\windows\command;c:\batch&nbsp; SET TEMP=D:\TEMP&nbsp; SET TMP=D:\TEMP
批处理的作用&nbsp;&nbsp;&nbsp; 简单的说,批处理的作用就是自动的连续执行多条命令.&nbsp;&nbsp;&nbsp; 如启动WPS软件时,每次都必须执行(&gt;前面内容表示DOS提示符):&nbsp;&nbsp;&nbsp; C:\cd wps&nbsp;&nbsp;&nbsp; c:\wps&gt]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-10 20:47:00</pubDate>
		</item>
				<item>
		<title><![CDATA[怎样开启端口]]></title>
		<link>http://blog.pfan.cn/wolfelite/23790.html</link>
		<description><![CDATA[要手动打开端口，请按照下列步骤操作： 1. 单击开始，然后单击网上邻居。 2. 在网络任务下，单击查看网络连接。（或者，右键单击桌面上的网上邻居，然后单击属性。） 3. 右键单击用于 Internet 的连接，然后单击属性。 4. 单击高级选项卡，然后单击设置。 注意：如果设置按钮不可用，则此连接上未启用 Windows 防火墙，您无需打开任何端口（因为它们已经全部打开）。 5. 单击添加打开新端口。 6. 在说明框中，键入一个易记的名称。例如，键入文件共享：端口 188。 7. 在“您的网络上提供此服务的计算机名或 IP 地址”框中，键入 127.0.0.1。 注意：您可以指定内部计算机的 IP 地址。但通常情况下，请使用 127.0.0.1。 8. 在“外部端口”和“内部端口”框中，键入端口号。通常，此号码是相同的。 9. 单击 TCP 或 UDP，然后单击确定。 10. 为每个要打开的端口重复步骤 1 到步骤 9。]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-09 18:02:00</pubDate>
		</item>
				<item>
		<title><![CDATA[扩展名]]></title>
		<link>http://blog.pfan.cn/wolfelite/23782.html</link>
		<description><![CDATA[扩展名是bat(在NT/2000/XP/2003下也可以是CMD)的文件就是批处理文件.&nbsp;&nbsp; 首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好像我们在DOS提示符下执行的命令一样),你可以使用DOS下的EDIT或者WINDOWS的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件.&nbsp;&nbsp; 其次,批处理文件是一种简单的程序,可以通过条件语句(IF)和流程控制语句(goto)来控制命令行的流程,在批处理中也可以使用循环语句(FOR)来循环执行一条命令.当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的.批处理的程序语句就是一条条的DOS命令(包括内部和外部命令),而批处理的能力主要取决于你所使用的命令.&nbsp;&nbsp; 第三,每个编写的批处理文件都相当于一个DOS的外部命令,你可以把它所在的目录放到你的DOS搜索路径(PATH)中来使得它可以在任意位置运行.一个良好的习惯是在硬盘上建立一个bat或者batch目录(例如C:\BATCH),然后将所有你编写的批处理文件放到该目录中,这样只要在path中设置上c:\batch,你就可以在任意位置运行所有你编写的批处理程序.&nbsp;&nbsp; 第四,在DOS和W.X/ME系统下,C:盘根目录下的AUTOEXEC.BAT批处理文件是自动运行批处理文件,每次系统启动时会自动运行该文件,你可以将系统每次启动时都要运行的命令放入该文件中,例如设置搜索路径,调入鼠标驱动和磁盘缓存,设置系统环境变量等.下面一个运行于Windows 98r autoexec.bat的示例:&nbsp; @echo off&nbsp; path c:\windows;c:\windows\command;c:\batch&nbsp; SET TEMP=D:\TEMP&nbsp; SET TMP=D:\TEMP
批处理的作用&nbsp;&nbsp;&nbsp; 简单的说,批处理的作用就是自动的连续执行多条命令.&nbsp;&nbsp;&nbsp; 如启动WPS软件时,每次都必须执行(&gt;前面内容表示DOS提示符):&nbsp;&nbsp;&nbsp; C:\cd wps&nbsp;&nbsp;&nbsp; c:\wps&gt]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-09 11:40:00</pubDate>
		</item>
				<item>
		<title><![CDATA[--&nbsp;&nbsp;批处理教程&nbsp;]]></title>
		<link>http://blog.pfan.cn/wolfelite/23781.html</link>
		<description><![CDATA[--&nbsp;&nbsp;批处理教程最近对于批处理技术的探讨比较热，也有不少好的批处理程序发布，但是如果没有一定的相关知识恐怕不容易看懂和理解这些批处理文件，也就更谈不上自己动手编写了，古语云：“授人以鱼，不如授人以渔。”因为网上好像并没有一个比较完整的教材,所以抽一点时间写了这片&lt;&lt;简明批处理教程&gt;&gt;给新手朋友们.也献给所有为实现网络的自由与共享而努力的朋友们.批处理文件是无格式的文本文件，它包含一条或多条命令。它的文件扩展名为 .bat 或 .cmd。在命令提示下键入批处理文件的名称，或者双击该批处理文件，系统就会调用Cmd.exe按照该文件中各个命令出现的顺序来逐个运行它们。使用批处理文件（也被称为批处理程序或脚本），可以简化日常或重复性任务。当然我们的这个版本的主要内容是介绍批处理在入侵中一些实际运用，例如我们后面要提到的用批处理文件来给系统打补丁、批量植入后门程序等。下面就开始我们批处理学习之旅吧。一.简单批处理内部命令简介1.Echo 命令打开回显或关闭请求回显功能，或显示消息。如果没有任何参数，echo 命令将显示当前回显设置。语法echo [{on|off}] [message]Sample：@echo off / echo hello world在实际应用中我们会把这条命令和重定向符号（也称为管道符号，一般用&gt; &gt;&gt; ^）结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来。2.@ 命令表示不显示@后面的命令，在入侵过程中（例如使用批处理来格式化敌人的硬盘）自然不能让对方看到你使用的命令啦。Sample：@echo off@echo Now initializing the program,please wait a minite...@format X: /q/u/autoset (format 这个命令是不可以使用/y这个参数的，可喜的是微软留了个autoset这个参数给我们，效果和/y是一样的。)3.Goto 命令指定跳转到标签，找到标签后，程序将处理从下一行开始的命令。语法：goto label （label是参数，指定所要转向的批处理程序中的行。） Sample：if {%1}=={} goto noparmsif {%2}=={} goto noparms（如果这里]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-09 11:02:00</pubDate>
		</item>
				<item>
		<title><![CDATA[怎样知道一个DSN是系统DSN还是用户DSN]]></title>
		<link>http://blog.pfan.cn/wolfelite/23755.html</link>
		<description><![CDATA[我从INI文件中读到一个DSN，怎样判断这个DSN是一个系统DSN还是一个用户DSN?我知道的一个方法：查注册表，如在[HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\ODBC Data Sources]中找到键名为你的DSN，键值非空（字符型）则你的DSN为系统DSN如在[HKEY_LOCAL_USER\Software\ODBC\ODBC.INI\ODBC Data Sources]中找到键名为你的DSN，键值非空（字符型）则你的DSN为用户DSN如两者都找到（在系统DSN、是用户DSN同名情况下就会出现这样情况），我不能确定ODBC系统会使用 系统DSN 还是 用户DSN。。。^-^，来晚了。不过还是说说吧：
在注册表里它们的位置不同。
系统的在 HKEY_LOCAL_MACHINE\Software\ODBC\ODBC.INI\
用户的在 HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-08 11:27:00</pubDate>
		</item>
				<item>
		<title><![CDATA[ODBC中的用户DSN,文件DSN,系统DSN有什么不一样]]></title>
		<link>http://blog.pfan.cn/wolfelite/23754.html</link>
		<description><![CDATA[用户DSN:该数据源只能对建立数据源的用户可见.ODBC用户数据源存贮了如何与指定数据库提供者连接的信息.只对当前用户可见,而且只能用于当前机器上.这里的当前机器是只这个配置只对当前的机器有效,而不是说只能配置本机上的数据库.它可以配置局域网中另一台机器上的数据库的.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
系统DSN:该数据源对当前机器上所有的用户可见.ODBC系统数据源存贮了如何指定数据库提供者连接的信息系统数据对当前机器上的所有用户都是可见的,包括NT服务.也就是说在这里配置的数据源,只要是这台机器的用户都可以访问
.文件DSN:该数据源对安装了相同驱动的用户可见
用户DSN只被用户直接使用,它只能用于当前机器中,ASP不能使用它.系统DSN允许所有的用户登陆到特定服务器上去访问数据库,任何具有权限有用户都可以访问系统DSN.在WEB应用程序中访问数据库时,通常都是建立系统DSN.
文件DSN将信息存储在后缀为.dsn的文本文件中,优点古玩便于移动.




用户DSN只是针对当前用户或者特定用户；系统DSN是底层的，针对全部用户。一般没有特殊情况时，建议使用使用系统DSN，通用性好
&nbsp;]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-08 11:19:00</pubDate>
		</item>
				<item>
		<title><![CDATA[关于Ubuntu一词]]></title>
		<link>http://blog.pfan.cn/wolfelite/23698.html</link>
		<description><![CDATA[关于Ubuntu一词 
Ubuntu 是一个南非的民族观念，着眼于人们之间的忠诚和联系。该词来自于祖鲁语和科萨语。Ubuntu（发音"oo-BOON-too"--“乌班图”）被视为非洲人的传统理念，也是建立新南非共和国的基本原则之一，与非洲复兴的理想密切相关。 Ubuntu 精神的大意是“人道待人”（对他人仁慈）。另一种翻译可以是：“天下共享的信念，连接起每个人”。 “具有 ubuntu 精神的人心胸开阔，乐于助人，见贤思齐而不忌妒贤能，因为他/她拥有适度的自信，而这源自如下认识：自己乃是属于一个更大的整体，当他人受到伤害或死去时，当他人受到折磨或压迫时，这个整体就会消失。”
&nbsp;大主教 Desmond Tutu As a platform based on Linux, the Ubuntu operating system brings the spirit of ubuntu to the software world. 何谓 Linux？ The Linux kernel, pronounced 'lee-nucks' is the heart of the Ubuntu operating system. A kernel is an important part of any operating system, providing the communication bridge between hardware and software. 
Linux 诞生于1991年，由芬兰学生 Linus Torvalds 发起。那时，它只能运行在 i386 系统上，实质上是个独立编写的 UNIX 内核之克隆，旨在充分利用当时全新的 i386 架构。 现如今 Linux 几乎能运行在所有现代架构之上，这要归功于来自世界各地的人们所付出的大量开发工作。 Linux内核不仅在技术上占有一席之地，还在意识上占有重要位置。有一整个社群的人相信自由软件的理念，并花费大量时间帮助开源技术，使之臻于完美。 正是这个社群里的人们促使了Ubuntu的出现，促成了标准委员会，它引领着互联网的发展，促成了一些组织如Mozilla基金会的出现，它负责创建了Mozilla Firefox，还促成了无数其它软件项目，想必您一直以来就受益匪浅。 开放源码的精神，这通常归因于 Li]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-06 11:24:00</pubDate>
		</item>
				<item>
		<title><![CDATA[Ethernet]]></title>
		<link>http://blog.pfan.cn/wolfelite/23678.html</link>
		<description><![CDATA[Frame format
Address format
Broadcast address
CSMA/CD
&nbsp;
&nbsp;]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-05 11:32:00</pubDate>
		</item>
				<item>
		<title><![CDATA[IP&nbsp;Module&nbsp;Routing&nbsp;Rules]]></title>
		<link>http://blog.pfan.cn/wolfelite/23671.html</link>
		<description><![CDATA[For an outgoing IP packet,entering IP from an upper layer,IP must decide whether to send the IP packet directly or indirectly,and IP must choose a lower network interface.These choices are made byconsulting the route table.
对一个IP发送包,IP必须决定是否直接或间接发送这个包,
并且选择一个下面的网关.这些选择是由路由表来决定的.
For an incoming IP packet ,entering IP from a lower interface,IPmust decide whether to forward the IP packet or pass it to an upper layer.If the IP packet is being forwarded,it is treated as an outgoing IP packet.
Where an incoming IP packet arrives it is never forwarded&nbsp; backout through the same network interface.]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-05 11:03:00</pubDate>
		</item>
				<item>
		<title><![CDATA[电脑运行速度慢优化电脑]]></title>
		<link>http://blog.pfan.cn/wolfelite/23633.html</link>
		<description><![CDATA[在确认没有病毒和流氓软件的前提下，建议优化电脑： 1、禁用闲置的IDE通道 右键点击“我的电脑－属性”，然后点击“硬件”接着点击“设备管理器”，在其中打开“IDE ATA/PATA控制器”然后分别进入主要和次要IDE通道，选择“高级设置”，在这里找到“当前传送模式”为“不适用”的一项，将此项的“设备类型”设置为“无”。 2、优化视觉效果，关闭“视觉效果”中不需要的效果 右键单击“我的电脑”，点击属性，点击“高级”，在“性能”一栏中，点击“设置”，点击“视觉效果”，在这里把所有特殊的外观设置都关闭掉，我们就可以省下“一大笔”内存。 3、优化启动和故障恢复 右键单击"我的电脑"--"属性"--"高级"--"启动和故障修复"中点击“设置”，去掉"将事件写入系统日志"，"发送管理警报"，"自动重新启动"选项;将"写入调试信息"设置为"无"；点击"编辑"，在弹出记事本文件中: [Operating Systems] timeout=30 把 30 秒改为 0 秒。 4、禁用错误报告 右键单击"我的电脑"--"属性”--"高级”--"错误报告”，点选“禁用错误汇报”，勾选"但在发生严重错误时通知我”--确定。 5、关闭系统还原 右键单击“我的电脑”，点击“属性”，会弹出来系统属性对话框，点击“系统还原”，在“在所有驱动器上关闭系统还原”选项上打勾。 6、关闭自动更新 右键单击“我的电脑”--“属性”--“自动更新”，在“通知设置”一栏选择“关闭自动更新。选出“我将手动更新计算机”一项。 7、关闭远程桌面 右键单击“我的电脑”--“属性”--“远程”，把“远程桌面”里的“允许用户远程连接到这台计算机”勾去掉。 8、禁用休眠功能 单击“开始”--“控制面板”--“电源管理”--“休眠”，将“启用休眠”前的勾去掉。 9、关闭“Internet时间同步”功能 依次单击“开始”--“控制面板”--“日期、时间、语言和区域选项”，然后单击“Internet时间”，取消“自动与Internet时间服务同步”前的勾。 10、关闭磁盘索引 打开我的电脑 ，右击驱动器，选“属性”，取消“使用索引以便快速查找文件”前面的勾。 11、禁用多余的服务组件 右键单击“我的电脑”--“管理”--“服务和应用程序”--“服务”，在右窗格将不需要的服务设为禁用或手动。 12、关闭华生医生Dr.Watson 单击]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-03 20:05:00</pubDate>
		</item>
				<item>
		<title><![CDATA[如何利用FindWindow()函数查找程序]]></title>
		<link>http://blog.pfan.cn/wolfelite/23614.html</link>
		<description><![CDATA[假设我想运行的外部程序是ABC.EXE,在VB中应如何利用FindWindow()函数查找该程序是否仍在运行?
要使用API,评选建立一个.BAS模块,然后从winapi32.txtk 中Copy如下的FIndWindow()函数的声明:
Declare Function FindWindow Lib "user32" Alias "FindWindowA"(ByVal LpClassName as String,Byval lpWindowName as Stirng ) as Long
这个函数有两个基本点参数,第一个是要找的窗口的类,第二个是要找的窗口的标题.在搜索的时候一定两者都知道,但至少要知道其中的一个.有的窗口的标题的比较容易得到的,如"计算器":,所以搜索时就使用标题进行搜索.但有的软件的标题不是固定的,如"记事本",如果打开的文件不同,窗口标题也不同,这时使用窗口类搜索就比较方便.如果找到了满足条件的窗口,这个函数返回该窗口的句柄,否则返回0.
前面提到的VB的FindWindow()函数的声明将两个基本点参数都定义为String类型,而在实际使用过程中,如果我们忽略某个参数就将该参数的定义又As StriNG书库As Any.这里的As Any 相当于C语言中的强制类型转换.例如,如果我们忽略窗口的类,就将定义修改如下:
Declare Function FIndWindow lib "user32" alias "findwoindowA"(ByVal lpClassName as Any,ByVal lpWIndowName as String) as Long
然后,在调用使用如下语句:
:hwndCalc=FindWIndow(0&amp;,"计算器")
这里的0&amp;就表示忽略类名.需要注意的是FindWindow(0&amp;,"计算器"),和FindWindow("","计算器")在两种完全不同的含义前者表示忽略窗口的类,后者表示窗口的类是个空串.类似的,我们也可以忽略标题而搜索指定的类.
从上面的讨论中可以看出,如果说要搜索的外部程序的窗口标题比较容易的话,怎么问题是比较简单的.可如果窗口的标题不固定的或者根本就没有标题,怎么得到窗口的类吧?如果你安装了Visual C++,你可以攻玉使用其中之一的Spy++]]></description>
		<author><![CDATA[zmmoonhead]]></author>
		<pubDate>2007-03-03 11:03:00</pubDate>
		</item>
		</channel>
</rss>