标题：冰河（木马）
简介
该软件主要用于远程监控，具体功能包括: 
1．自动跟踪目标机屏幕变化，同时可以完全模拟键盘及鼠标输入，即在同步被控端屏幕变化的同时，监控端的一切键盘及鼠标操作将反映在被控端屏幕（局域网适用）； 
2．记录各种口令信息：包括开机口令、屏保口令、各种共享资源口令及绝大多数在对话框中出现过的口令信息； 
3．获取系统信息：包括计算机名、注册公司、当前用户、系统路径、操作系统版本、当前显示分辨率、物理及逻辑磁盘信息等多项系统数据； 
4．限制系统功能：包括远程关机、远程重启计算机、锁定鼠标、锁定系统热键及锁定注册表等多项功能限制； 
5．远程文件操作：包括创建、上传、下载、复制、删除文件或目录、文件压缩、快速浏览文本文件、远程打开文件（提供了四中不同的打开方式——正常方式、最大化、最小化和隐藏方式）等多项文件操作功能； 
6．注册表操作：包括对主键的浏览、增删、复制、重命名和对键值的读写等所有注册表操作功能； 
7．发送信息：以四种常用图标向被控端发送简短信息； 
8．点对点通讯：以聊天室形式同被控端进行在线交谈。
虽然许多杀毒软件可以查杀它，但国内仍有几十万中冰河的电脑存在！作为木马，冰河创造了最多人使用、最多人中弹的奇迹！现在网上又出现了许多的冰河变种程序，我们这里介绍的是其标准版，掌握了如何清除标准版，再来对付变种冰河就很容易了。
冰河的服务器端程序为G-server.exe，客户端程序为G-client.exe，默认连接端口为7626。一旦运行G-server，那么该程序就会在C:/Windows/system目录下生成Kernel32.exe和sysexplr.exe，并删除自身。Kernel32.exe在系统启动时自动加载运行，sysexplr.exe和TXT文件关联。即使你删除了Kernel32.exe，但只要你打开TXT文件，sysexplr.exe就会被激活，它将再次生成Kernel32.exe，于是冰河又回来了！这就是冰河屡删不止的原因。
清除方法
1、删除C:Windowssystem下的Kernel32.exe和Sysexplr.exe文件。
2、冰河会在注册表HKEY_LOCAL_MACHINE/software/microsoft/windows/ CurrentVersion 
Run下扎根，键值为C:/windows/system/Kernel32.exe，删除它。
3、在注册表的HKEY_LOCAL_MACHINE/software/microsoft/windows/ CurrentVersion/Runservices下，还有键值为C:/windows/system/Kernel32.exe的，也要删除。
4、最后，改注册表HKEY_CLASSES_ROOT/txtfile/shell/open/command下的默认值，由中木马后的C:/windows/system/Sysexplr.exe %1改为正常情况下的C:/windows/notepad.exe %1，即可恢复TXT文件关联功能。
如何识别木马
先来说一下木马是如何通过网页进入你的电脑的，相信大家都知道，现在有很多图片木马，EML和EXE木马，其中的图片木马其实很简单，就是把木马exe文件的文件头换成bmp文件的文件头，然后欺骗IE浏览器自动打开该文件，然后利用网页里的一段JAVASCRIPT小程序调用DEBUG把临时文件里的bmp文件还原成木马exe文件并拷贝到启动项里，接下来的事情很简单，你下次启动电脑的时候就是你噩梦的开始了，EML木马更是传播方便，把木马文件伪装成audio/x-wav声音文件，这样你接收到这封邮件的时候只要浏览一下，不需要你点任何连接，windows就会为你代劳自动播放这个他认为是wav的音乐文件，木马就这样轻松的进入你的电脑，这种木马还可以frame到网页里，只要打开网页，木马就会自动运行，另外还有一种方法，就是把木马exe编译到.JS文件里，然后在网页里调用，同样也可以无声无息的入侵你的电脑，这只是些简单的办法，还有远程控制和共享等等漏洞可以钻，知道这些，相信你已经对网页木马已经有了大概了解，
简单防治的方法
开始-设置-控制面版-添加删除程序-windows安装程序-把附件里的windows scripting host去掉，然后打开Internet Explorer浏览器，点工具-Internet选项-安全-自定义级别，把里面的脚本的3个选项全部禁用，然后把“在中加载程序和文件”禁用，当然这只是简单的防治方法，不过可能影响一些网页的动态java效果，不过为了安全就牺牲一点啦，这样还可以预防一些恶意的网页炸弹和病毒，如果条件允许的话可以加装防火墙，再到微软的网站打些补丁，反正我所知道的网吧用的都是原始安装的windows，很不安全哦，还有尽量少在一些小网站下载一些程序，尤其是一些号称黑客工具的软件，小心盗不着别人自己先被盗了，当然，如果你执意要用的话，号被盗了也应该付出这个代价吧。还有，不要以为装了还原精灵就很安全，据我所知，一般网吧的还原精灵都只还原c：盘即系统区，所以只要木马直接感染你安装在别的盘里的游戏执行文件，你照样逃不掉的。
冰河木马原理
木马冰河是用C++Builder写的，为了便于大家理解，我将用相对比较简单的VB来说明它，其中涉及到一些WinSock编程和Windows API的知识，如果你不是很了解的话，请去查阅相关的资料。
基础篇
无论大家把木马看得多神秘，也无论木马能实现多么强大的功能，木马，其实质只是一个网络客户/服务程序。那么，就让我们从网络客户/服务程序的编写开始。1.基本概念：网络客户/服务模式的原理是一台主机提供服务（服务器），另一台主机接受服务（客户机）。作为服务器的主机一般会打开一个默认的端口并进行监听（Listen），如果有客户机向服务器的这一端口提出连接请求（Connect Request），服务器上的相应程序就会自动运行，来应答客户机的请求，这个程序我们称为守护进程（UNⅨ的术语，不过已经被移植到了MS系统上）。对于冰河，被控制端就成为一台服务器，控制端则是一台客户机，G_server.exe是守护进程，G_client是客户端应用程序。（这一点经常有人混淆，而且往往会给自己种了木马！）2.程序实现：在VB中，可以使用Winsock控件来编写网络客户/服务程序，实现方法如下（其中，G_Server和G_Client均为Winsock控件）：
服务端：
G_Server.LocalPort=7626（冰河的默认端口，可以改为别的值）
G_Server.Listen（等待连接）
客户端：
G_Client.RemoteHost=ServerIP（设远端地址为服务器地址）
G_Client.RemotePort=7626　（设远程端口为冰河的默认端口，呵呵，知道吗?这是冰河的生日哦）
（在这里可以分配一个本地端口给G_Client，如果不分配，计算机将会自动分配一个，建议让计算机自动分配）
G_Client.Connect　（调用Winsock控件的连接方法）
一旦服务端接到客户端的连接请求ConnectionRequest，就接受连接
Private Sub G_Server_ConnectionRequest(ByVal requestID As Long)
G_Server.Accept requestID
End Sub
客户机端用G_Client.SendData发送命令，而服务器在G_Server_DateArrive事件中接受并执行命令（几乎所有的木马功能都在这个事件处理程序中实现）
如果客户断开连接，则关闭连接并重新监听端口　
Private Sub G_Server_Close()
G_Server.Close　 （关闭连接）
G_Server.Listen　（再次监听）
End Sub
其他的部分可以用命令传递来进行，客户端上传一个命令，服务端解释并执行命令......
控制篇
由于Win98开放了所有的权限给用户，因此，以用户权限运行的木马程序几乎可以控制一切，让我们来看看冰河究竟能做些什么（看了后，你会认同我的观点：称冰河为木马是不恰当的，冰河实现的功能之多，足以成为一个成功的远程控制软件)
因为冰河实现的功能实在太多，我不可能在这里一一详细地说明，所以下面仅对冰河的主要功能进行简单的概述，主要是使用Windows API函数，如果你想知道这些函数的具体定义和参数，请查询WinAPI手册。1.远程监控keybd_event　模拟一个键盘动作（这个函数支持屏幕截图哦）。
mouse_event　模拟一次鼠标事件（这个函数的参数太复杂，我要全写在这里会被编辑骂死的，只能写一点主要的，其他的自己查WinAPI吧）
mouse_event(dwFlags,dx,dy,cButtons,dwExtraInfo)
dwFlags：　
MOUSEEVENTF_ABSOLUTE 指定鼠标坐标系统中的一个绝对位置。
MOUSEEVENTF_MOVE 移动鼠标
MOUSEEVENTF_LEFTDOWN 模拟鼠标左键按下
MOUSEEVENTF_LEFTUP 模拟鼠标左键抬起
MOUSEEVENTF_RIGHTDOWN 模拟鼠标右键按下
MOUSEEVENTF_RIGHTUP 模拟鼠标右键按下
MOUSEEVENTF_MIDDLEDOWN 模拟鼠标中键按下
MOUSEEVENTF_MIDDLEUP 模拟鼠标中键按下
dx,dy：　MOUSEEVENTF_ABSOLUTE中的鼠标坐标2.记录各种口令信息（作者注：出于安全角度考虑，本文不探讨这方面的问题，也请不要给我来信询问）3.获取系统信息a.取得计算机名　 GetComputerName
b.更改计算机名　 SetComputerName
c.当前用户　 GetUserName函数
d.系统路径　
Set FileSystem0bject = CreateObject("Scripting.FileSystemObject")　 （建立文件系统对象）
Set SystemDir = FileSystem0bject.getspecialfolder⑴
（取系统目录）
Set SystemDir = FileSystem0bject.getspecialfolder(0)
（取Windows安装目录）
（友情提醒： FileSystemObject是一个很有用的对象，你可以用它来完成很多有用的文件操作）
e.取得系统版本　 GetVersionEx（还有一个GetVersion，不过在32位windows下可能会有问题，所以建议用GetVersionEx
f.当前显示分辨率
Width = screen.Width　\ screen.TwipsPerPixelX
Height= screen.Height \ screen.TwipsPerPixelY
其实如果不用Windows API我们也能很容易的取到系统的各类信息，那就是Windows的"垃圾站"-注册表
比如计算机名和计算机标识吧：HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VNETSUP中的Comment,ComputerName和WorkGroup
注册公司和用户名：HKEY_USERS\.DEFAULT\Software\Microsoft\MS Setup (ACME)\UserInfo至于如何取得注册表键值请看第6部分。4.限制系统功能a.远程关机或重启计算机，使用WinAPI中的如下函数可以实现：
ExitWindowsEx(ByVal uFlags,0)
当uFlags=0 EWX_LOGOFF　中止进程，然后注销
当uFlags=1 EWX_SHUTDOWN 　 关掉系统电源
当uFlags=2 EWX_REBOOT　 　 重新引导系统
当uFlags=4 EWX_FORCE　 强迫中止没有响应的进程
b.锁定鼠标
ClipCursor(lpRect As RECT）可以将指针限制到指定区域，或者用ShowCursor(FALSE）把鼠标隐藏起来也可以
注：RECT是一个矩形，定义如下：
Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End　Type
c.锁定系统　这个有太多的办法了，嘿嘿，想Windows不死机都困难呀，比如，搞个死循环吧，当然，要想系统彻底崩溃还需要一点技巧，比如设备漏洞或者耗尽资源什么的......
d.让对方掉线 RasHangUp......
e.终止进程　 ExitProcess......
f.关闭窗口　利用FindWindow函数找到窗口并利用SendMessage函数关闭窗口5.远程文件操作无论在哪种编程语言里，文件操作功能都是比较简单的，在此就不赘述了，你也可以用上面提到的FileSystemObject对象来实现6.注册表操作在VB中只要Set RegEdit=CreateObject（"WScript.Shell")
就可以使用以下的注册表功能：
删除键值：RegEdit.RegDelete RegKey
增加键值：RegEdit.Write　 RegKey,RegValue
获取键值：RegEdit.RegRead　（Value)
记住，注册表的键值要写全路径，否则会出错的。7.发送信息很简单，只是一个弹出式消息框而已，VB中用MsgBox("")就可以实现，其他程序也不太难的。8.点对点通讯呵呵，这个嘛随便去看看什么聊天软件就行了（因为比较简单但是比较烦，所以我就不写了，呵呵。又：我始终没有搞懂冰河为什么要在木马里搞这个东东，困惑......)9.换墙纸CallSystemParametersInfo(20,0,"BMP路径名称",&H1)
值得注意的是，如果使用了ActiveDesktop，换墙纸有可能会失败，遇到这种问题，请不要找冰河和我，去找Bill吧。
潜行篇
木马并不是合法的网络服务程序，因此，它必须想尽一切办法隐藏自己，好在，Windows是一个捉迷藏的大森林！1、隐藏自己这是最基本的了，如果连这个都做不到......（想象一下，如果Windows的任务栏里出现一个国际象棋中木马的图标...@#!#@...也太嚣张了吧！）
在VB中，只要把form的Visible属性设为False,ShowInTaskBar设为False，程序就不会出现在任务栏中了。2、管理器中隐形在任务管理器中隐形，就是按下Ctrl+Alt+Del时看不见那个名字叫做“木马”的进程，这个有点难度，不过还是难不倒我们，将程序设为“系统服务”可以很轻松的伪装成比尔盖子的嫡系部队（Windows，我们和你是一家的，不要告诉别人我藏在哪儿...）。
在VB中如下的代码可以实现这一功能：
Public Declare Function RegisterServiceProcess Lib "kernel32" (ByVal ProcessID As Long,ByVal ServiceFlags As Long) As Long
Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
（以上为声明）
Private Sub Form_Load()
RegisterServiceProcess GetCurrentProcessId,1 （注册系统服务）
End Sub
Private Sub Form_Unload()
RegisterServiceProcess GetCurrentProcessId,0 （取消系统服务）
End Sub3、如何启动你当然不会指望用户每次启动后点击木马图标来运行服务端，木马要做到的第二重要的事就是如何在每次用户启动时自动装载服务端（第一重要的是如何让对方中木马，嘿嘿，这部分的内容将在后面提到）
Windows支持多种在系统启动时自动加载应用程序的方法（简直就像是为木马特别定做的）启动组、win.ini、system.ini、注册表等等都是木马藏身的好地方。冰河采用了多种方法确保你不能摆脱它。首先，冰河会在注册表的HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run和RUNSERⅥCE键值中加上了\kernl32.exe（是系统目录），其次如果你删除了这个键值，自以为得意地喝著茶的时候，冰河又阴魂不散地出现了...怎么回事?原来冰河的服务端会在c:\windows（这个会随你windows的安装目录变化而变化）下生成一个叫sysexplr.exe文件（太象超级解霸了，好毒呀，冰河！），这个文件是与文本文件相关联的，只要你打开文本（哪天不打开几次文本?),sysexplr.exe文件就会重新生成krnel32.exe，然后你还是被冰河控制著。（冰河就是这样长期霸占著穷苦劳动人民宝贵的系统资源的，555555)4、端口木马都会很注意自己的端口（你呢?你关心你的6万多个端口吗?），如果你留意的话，你就会发现，木马端口一般都在1000以上，而且呈越来越大的趋势（netspy是1243....）这是因为，1000以下的端口是常用端口，占用这些端口可能会造成系统不正常，这样木马就会很容易暴露;而由于端口扫描是需要时间的（一个很快的端口扫描器在远程也需要大约二十分钟才能扫完所有的端口），故而使用诸如54321的端口会让你很难发现它。在文章的末尾我给大家转贴了一个常见木马的端口表，你就对著这个表去查吧（不过，值得提醒的是，冰河及很多比较新的木马都提供端口修改功能，所以，实际上木马能以任意端口出现）5.最新的隐身技术目前，除了冰河使用的隐身技术外，更新、更隐蔽的方法已经出现，那就是-驱动程序及动态链接库技术（冰河3.0会采用这种方法吗?）。
驱动程序及动态链接库技术和一般的木马不同，它基本上摆脱了原有的木马模式-监听端口，而采用替代系统功能的方法（改写驱动程序或动态链接库）。这样做的结果是：系统中没有增加新的文件（所以不能用扫描的方法查杀）、不需要打开新的端口（所以不能用端口监视的方法查杀）、没有新的进程（所以使用进程查看的方法发现不了它，也不能用kill进程的方法终止它的运行）。在正常运行时木马几乎没有任何的症状，而一旦木马的控制端向被控端发出特定的信息后，隐藏的程序就立即开始运作......
事实上，我已经看到过几个这样类型的木马，其中就有通过改写vxd文件建立隐藏共享的木马...（江湖上又将掀起新的波浪）
破解篇
本文主要是探讨木马的基本原理，木马的破解并非是本文的重点（也不是我的长处），具体的破解请大家期待yagami的《特洛伊木马看过来》（我都期待一年了，大家和我一起继续期待吧，嘿嘿），本文只是对通用的木马防御、卸载方法做一个小小的总结：1.端口扫描端口扫描是检查远程机器有无木马的最好办法，端口扫描的原理非常简单，扫描程序尝试连接某个端口，如果成功，则说明端口开放，如果失败或超过某个特定的时间（超时），则说明端口关闭。（关于端口扫描，Oliver有一篇关于“半连接扫描”的文章，很精彩，那种扫描的原理不太一样，不过不在本文讨论的范围之中）
但是值得说明的是，对于驱动程序/动态链接木马，扫描端口是不起作用的。2.查看连接查看连接和端口扫描的原理基本相同，不过是在本地机上通过netstat-a（或某个第三方的程序）查看所有的TCP/UDP连接，查看连接要比端口扫描快，缺点同样是无法查出驱动程序/动态链接木马，而且仅仅能在本地使用。3.检查注册表上面在讨论木马的启动方式时已经提到，木马可以通过注册表启动（好像现在大部分的木马都是通过注册表启动的，至少也把注册表作为一个自我保护的方式），那么，我们同样可以通过检查注册表来发现"马蹄印",冰河在注册表里留下的痕迹请参照《潜行篇》。4.查找文件查找木马特定的文件也是一个常用的方法（这个我知道，冰河的特征文件是G_Server.exe吧? 笨蛋！哪会这么简单，冰河是狡猾狡猾的......）冰河的一个特征文件是kernl32.exe（靠，伪装成Windows的内核呀），另一个更隐蔽，是sysexlpr.exe（什么什么，不是超级解霸吗?）对！冰河之所以给这两个文件取这样的名字就是为了更好的伪装自己，只要删除了这两个文件，冰河就已经不起作用了。其他的木马也是一样（废话，Server端程序都没了，还能干嘛？）
如果你只是删除了sysexlpr.exe而没有做扫尾工作的话，可能会遇到一些麻烦-就是你的文本文件打不开了，因为前面说了，sysexplr.exe是和文本文件关联的，你还必须把文本文件跟notepad关联上，方法有三种：
a.更改注册表（我就不说了，有能力自己改的想来也不要我说，否则还是不要乱动的好）
b.在<我的电脑>-查看-文件夹选项-文件类型中编辑
c.按住SHIFT键的同时鼠标右击任何一个TXT文件，选择打开方式，选中<；始终用该程序打开......>；，然后找到notepad，点一下就OK了。（这个最简单，推荐使用）
提醒一下，对于木马这种狡猾的东西，一定要小心又小心，冰河是和txt文件关联的，txt打不开没什么大不了，如果木马是和exe文件关联而你贸然地删了它......你苦了！连regedit都不能运行了！5.杀病毒软件之所以把杀病毒软件放在最后是因为它实在没有太大的用，包括一些号称专杀木马的软件也同样是如此，不过对于过时的木马以及菜鸟安装的木马（没有配置服务端）还是有点用处的，值得一提的是最近新出来的ip armor在这一方面可以称得上是比较领先的，它采用了监视动态链接库的技术，可以监视所有调用Winsock的程序，并可以动态杀除进程，是一个个人防御的好工具（虽然我对传说中“该软件可以查杀未来十年木马”的说法表示怀疑，嘿嘿，两年后的事都说不清，谁知道十年后木马会“进化”到什么程度？甚至十年后的操作系统是什么样的我都想象不出来）
另外，对于驱动程序/动态链接库木马，有一种方法可以试试，使用Windows的"系统文件检查器"，通过"开始菜单"-"程序"-"附件"-"系统工具"-"系统信息"-"工具"可以运行"系统文件检查器"(这么详细，不会找不到吧? 什么，你找不到！ 吐血! 找一张98安装盘补装一下吧），用“系统文件检查器”可检测操作系统文件的完整性，如果这些文件损坏，检查器可以将其还原，检查器还可以从安装盘中解压缩已压缩的文件（如驱动程序）。如果你的驱动程序或动态链接库在你没有升级它们的情况下被改动了，就有可能是木马（或者损坏了），提取改动过的文件可以保证你的系统安全和稳定。（注意，这个操作需要熟悉系统的操作者完成，由于安装某些程序可能会自动升级驱动程序或动态链接库,在这种情况下恢复"损坏的"文件可能会导致系统崩溃或程序不可用！）
狡诈篇
只要你有一点点的疏忽，就有可能被人安装了木马，知道一些给人种植木马的常见伎俩对于保证自己的安全不无裨益。1. 木马种植伎俩网上“帮”人种植木马的伎俩主要有以下的几条
a.软哄硬骗法
这个方法很多啦，而且跟技术无关的，有的是装成大虾，有的是装成PLMM，有的态度谦恭，有的......反正目的都一样，就是让你去运行一个木马的服务端。
b.组装合成法
就是所谓的221(Two To One二合一）把一个合法的程序和一个木马绑定，合法程序的功能不受影响，但当你运行合法程序时，木马就自动加载了，同时，由于绑定后程序的代码发生了变化，根据特征码扫描的杀毒软件很难查找出来。
c.改名换姓法
这个方法出现的比较晚，不过现在很流行，对于不熟练的windows操作者，很容易上当。具体方法是把可执行文件伪装成图片或文本----在程序中把图标改成Windows的默认图片图标，再把文件名改为*.jpg *.exe，由于Win98默认设置是"不显示已知的文件后缀名",文件将会显示为*.jpg，不注意的人一点这个图标就中木马了（如果你在程序中嵌一张图片就更完美了）
d.愿者上钩法
木马的主人在网页上放置恶意代码，引诱用户点击，用户点击的结果不言而喻：开门揖盗；奉劝：不要随便点击网页上的链接，除非你了解它，信任它，为它死了也愿意...2． 注意事项a．不要随便从网站上下载软件，要下也要到比较有名、比较有信誉的站点，这些站点一般都有专人杀马杀毒；
b．不要过于相信别人，不能随便运行别人给的软件；
（特别是认识的，不要以为认识了就安全了，就是认识的人才会给你装木马，哈哈，挑拨离间......）
c．经常检查自己的系统文件、注册表、端口什么的，经常去安全站点查看最新的木马公告；
d.改掉windows关于隐藏文件后缀名的默认设置（我是只有看见文件的后缀名才会放心地点它的）
e．如果上网时发现莫名其妙地硬盘乱响或猫上的数据灯乱闪，要小心；