<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[观夏Note]]></title> 
<link>//gm.angeldm.com/index.php</link> 
<description><![CDATA[新技术番]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[观夏Note]]></copyright>
<item>
<link>//gm.angeldm.com/post//</link>
<title><![CDATA[手动添加Windows服务]]></title> 
<author>果面 &lt;admin@yourname.com&gt;</author>
<category><![CDATA[系统&amp;软件]]></category>
<pubDate>Fri, 18 Jul 2008 23:57:25 +0000</pubDate> 
<guid>//gm.angeldm.com/post//</guid> 
<description>
<![CDATA[ 
	现在很多的木马、后门、蠕虫病毒都是通过修改注册表中的RUN键值来实现自启动。<br/><br/>但是这种自启动模式不是很隐蔽的，稍微懂点安全的人，一般发现电脑被黑，都会查看RUN键值的。<br/><br/>于是系统服务便成为了一种相对隐蔽的自启动模式。比如冲击波杀手就采用系统服务来自启动病毒程序。<br/><br/>现在添加系统服务的工具很多，最典型的就是netservice。但是我们这里讲的是手工添加系统服务，所以工具的使用不在本文的讨论范围之内。<br/><br/>WINDOWS里的很多东西都是跟注册表息息相关的，系统服务也不例外。<br/><br/>系统服务跟以下的注册表几个项目相关：<br/><br/>HKEY_LOCAL_MACHINE&#92;SYSTEM&#92;CurrentControlSet&#92;Services<br/><br/>HKEY_LOCAL_MACHINE&#92;SYSTEM&#92;ControlSet001&#92;Services<br/><br/>HKEY_LOCAL_MACHINE&#92;SYSTEM&#92;ControlSet002&#92;Services<br/>我们完全可以找到在系统服务中已注册的服务的键值来依样画葫芦。<br/><br/>在以上任何注册表列中添加一个新项：<br/><br/>名字是你想要添加系统服务的名字，比如Backdoor。<br/><br/>在BACKDOOR项下新建一个字符串,数值名称Displayname 数值数据为要添加服务的<br/><br/>名称Backdoor。<br/>下面列出一个表，会直观一些：<br/><br/>名称 类型 数据 备注<br/><br/>Displayname REG_SZ 想要添加服务的名称 想要添加服务的名称<br/>Description REG_SZ 服务的描述 服务的描述<br/>ImagePath REG EXPAND SZ 程序的路径<br/>Start REG_DWORD 0,2,3,4 2代表自动启动,3代表手动启动服务.4代表禁用服务,0代表系统对底层设备驱动(一般不需要这个)<br/>ErrorControl REG_DWORD 1<br/>Type REG_DWORD 10 or 20 一般应用程序都是10,其他的对应20<br/>ObjectName REG_SZ LocalSystem 显示本地登陆<br/><br/>注意：在XP/2003下可以完全手工来添加REG EXPAND SZ类型。在XP/2003下直接修改ImagePath 键值就可以了。但是在WIN2000下却不可以。原因我也不清楚：（。但是在WIN2000下我们写一个REG来直接注册系统服务，这样WIN2000下添加系统也能很轻松了。这里同样需要注意的是注册表文件里的ImagePath的数值类型必须是HEX（16进制）。可以拿WINHEX来把程序的绝对路径转换成16进制的。每一个数值用逗号搁开。比如我的ImagePath键值是C:&#92;winnt&#92;nukegroup.exe那就应该转换成：<br/>63，3A，5C，77，69，6E，6E，74，5C，6E，75，6B，65，2E，65，78，65（无空格）<br/><br/>打开记事本，敲入以下内容：<br/><br/>Windows Registry Editor Version 5.00<br/><br/>[HKEY_LOCAL_MACHINE&#92;SYSTEM&#92;CurrentControlSet&#92;Services&#92;SRVTEST]<br/><br/>"Type"=dword:00000010<br/><br/>"Start"=dword:00000002<br/><br/>"ErrorControl"=dword:00000001<br/><br/>"ImagePath"=hex(2):63，3A，5C，77，69，6E，6E，74，5C，6E，75，6B，65，2E，65，78，65<br/><br/>"DisplayName"="SRVTEST"<br/><br/>"ObjectName"="LocalSystem"<br/><br/>"Description"="系统服务测试"<br/><br/>把以上信息保存为addsrv.reg，我们就可以依靠命令来导入注册表，从而达到添加系统服务的目的。<br/><br/>我们在命令控制台输入regedit /s addsrv.reg，等机器重新启动，这个服务就被成功添加了。<br/><br/>但是我在真正实验的时候就遇到困难了。ImagePath的数值是乱码（图1）（图2），<br/><br/><br/><IMG alt="user posted image" border=0 src="http://darkne2s.nease.net/images/1.jpg"><br/><IMG alt="user posted image" border=0 src="http://darkne2s.nease.net/images/2.jpg"><br/><br/>怎么想也不明白。但是这时可以把乱码修改成绝对路径了。如果直接把REG信息写成这样<br/>"ImagePath"=hex(2):C:&#92;WINNT&#92;NUKEGROUP.EXE<br/><br/>其他的键值都可以添加，这个键值就不可以了？总之我们可以先添加乱码的ImagePath，然后再修改成C:&#92;winnt&#92;nukegroup.exe 这样也不是不可能的。就是在命令行下来添加就很麻烦了。(图3)<br/><br/>以上是Windows 2000手工添加系统服务的方法，对于Windows 98 注册表结构是不一样的，但是Windows 98仍然可以通过注册表来实现添加系统服务，而且还要更简单一些。<br/><br/>在项目“HKLM/SOFTWARE/Microsoft/WindowsCurrentVersion/RunServices”下添加一个新字符串数值。<br/><br/>比如，如果程序的名字叫做“BACKDOOR”，就建立一个名为“BACKDOOR”的字符串数值，然后在数据域中输入执行程序的完整路径。<br/><br/>手工添加一个系统服务就这么简单，手工删除系统也是一个道理。通过注册表来实现，这里就不多说了。
]]>
</description>
</item><item>
<link>//gm.angeldm.com/read.php?&amp;guid=0#topreply</link>
<title><![CDATA[[评论] 手动添加Windows服务]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>//gm.angeldm.com/read.php?&amp;guid=0#topreply</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>