三、实验方法与步骤
步骤1“冰河”的原理与功能
“冰河”木马开发于1999年,在设计之初,开发者的本意是编写一个功能强大的远程控制软件。但一经推出,就依靠其强大的功能成为了黑客们发动入侵的工具,并结束了国外木马一统天下的局面,成为国产木马的标志和代名词。
在2006年之前,冰河在国内一直是不可动摇的领军木马,在国内没用过冰河的人等于没用过木马,由此可见冰河木马在国内的影响力之巨大。
“冰河”木马有如下功能。
(1)自动跟踪目标机屏幕变化,同时可以完全模拟键盘及鼠标输入,即在同步被控端屏幕变化的同时,监控端的一切键盘及鼠标操作将反映在被控端屏幕(局域网适用)。
(2)记录各种口令信息:包括开机口令、屏保口令、各种共享资源口令及绝大多数在对话框中出现过的口令信息。
(3)获取系统信息:包括计算机名、注册公司、当前用户、系统路径、操作系统版本、当前显示分辨率、物理及逻辑磁盘信息等多项系统数据。
(4)限制系统功能:包括远程关机、远程重启计算机、锁定鼠标、锁定系统热键及锁定注册表等多项功能限制。
(5)远程文件操作:包括创建、上传、下载、 复制、删除文件或目录、文件压缩、快速浏览文本文件、远程打开文件(提供了四中不同的打开方式、正常、最大化、最小化和隐藏)等多项文件操作功能。
(6)注册表操作:包括对主键的浏览、增删、复制、重命名和对键值的读写等所有注册表操作功能。
(7)发送信息:以四种常用图标向被控端发送简短信息。
(8)点对点通信:以聊天室形式同被控端进行在线交谈。
从一定程度上可以说“冰河”是最有名的木马,就连刚接触计算机的用户也可能听说过它。虽然许多杀毒软件可以查杀它,但国内仍有几十万中“冰河”的计算机存在!作为木马,“冰河”创造了最多人使用、最多人中弹的奇迹!
步骤2“冰河”木马的文本文件关联
采用“冰河”将自己与文本文件的打开方式相关联的方法实现植入“冰河”。关联的方法是使用注册表“HKEY_ CLASSES_ _ROOT" 主键下的“txtfile\shellopenlcommand" 键。程序要实现的功能是:当用户双击打开一个文本文件,先启动要驻留的程序,然后再启动记事本打开这个文本文件。这包括两方面内容,一是编程修改注册表,二是编程实现程序自动驻留。
在种木马之前,我们在受控端计算机中打开注册表,查看打开 txtfile 的应用程序注册项:
将编译好的可执行文件改名为“IceRiver.exe”,并把“IceRiver.exe”拷贝到虚拟机操作系统的“C:\IceRiver\Debug\”目录中,之后打开任一后缀为.txt的文本文件,通过任务管理器中进程的变化,可以发现打开txt文件的同时,除了添加NOTEPAD.exe进程外还添加了IceRiver.exe进程。
第三步:查杀“冰河”木马
查杀“冰河”木马程序源代码如下:
#include <stdio.h>
#include <windows.h>
#include <string.h>
//常量字符指针RegValue指向字符串"%SystemRoot%\system32\NOTEPAD.EXE %1",
const char *RegValue = “%SystemRoot%\system32\NOTEPAD.EXE %1”;
//声明有效路径获取函数GetValidPath
char *GetValidPath(char *GetPath);
//声明删除关联函数DeleteConnection
void DeleteConnection(char *DelPath);
//声明注册表恢复函数RecoverReg
void RecoverReg(HKEY Key, LONG RetCode);
int main(void) {
//获取注册表HKEY_CLASSES_ROOT,\txtfile\shell\open\command健值
HKEY hKEY;
LPCTSTR data_Set = “txtfile\shell\open\command”;
long ret0 = (RegOpenKeyEx(HKEY_CLASSES_ROOT,
data_Set, 0, KEY_READ,&hKEY));
//如果无法打开hKEY,则终止程序的执行
if(ret0 != ERROR_SUCCESS) {
return 0;
}
//如没被修改时为://“%SystemRoot%\system32\NOTEPAD.EXE %1”
LPBYTE owner_Get = new BYTE[80];
DWORD type_1 = REG_EXPAND_SZ ;
DWORD cbData_1 = 80;
long ret1=RegQueryValueEx(hKEY, NULL, NULL,
&type_1, owner_Get, &cbData_1);
if(ret1!=ERROR_SUCCESS) {
return 0;
}
//判断对应健值是否被修改,即判断是否中了冰河
if(strcmp((const char *)owner_Get,RegValue) == 0)
printf(“没有中冰河\n”);
else{
printf(“可能中了冰河\n”);
char *path = (char *)owner_Get;
path = GetValidPath(path);
DeleteConnection(path);
RecoverReg(hKEY,ret1);
}
}
//获取注册表HKEY_CLASSES_ROOT\txtfile\shell\open\command
//健值表示的有效路径。如若键值为//“%SystemRoot%\system32\NOTEPAD.EXE %1”,
//则函数返回的指针指向"%SystemRoot%\system32\NOTEPAD.EXE"
char *GetValidPath(char *GetPath){
int len = strlen(GetPath);
printf(“path value: %s\nlen: %d\n”, GetPath, len);
//由于键值的最后三个字符为" %1"导致键值不是有效路径,因此,将倒数第三个
//字符(空格)赋值为字符结束标志’\0’
*(GetPath + (len-3)*sizeof(char)) = ‘\0’;
printf(“%s\n”,GetPath);
return GetPath;
}
void DeleteConnection(char DelPath){
if (DeleteFile(DelPath) != 0)
printf(“DeleteFile succeeded! Please examine in time!\n”);
else {
printf(“DeleteFile Failed!\n”);
printf(“LastError: %d\n”,GetLastError());
}
}
//恢复注册表,将对应健值赋为"%SystemRoot%\system32\NOTEPAD.EXE %1"
void RecoverReg(HKEY Key, LONG RetCode){
LPCTSTR data_Set = “txtfile\shell\open\command”;
long ret0 = (RegOpenKeyEx(HKEY_CLASSES_ROOT,
data_Set, 0, KEY_WRITE,&Key));
RetCode = RegSetValueEx (Key,
“”, 0, REG_EXPAND_SZ,
(byte)RegValue, 50);
if (RetCode != ERROR_SUCCESS)
printf(“注册表恢复失败!\n”);
else
printf(“注册表恢复成功!\n”);
}
四、实验结果与分析
冰河木马界面如图1-1所示
图1-1冰河木马界面
在受控端计算机中打开注册表,查看打开 txtfile 的应用程序注册项:
图1-2通过注册表判断未中“冰河”
可以看到打开.txt 文件默认值是 c:\winnt\system32\notepad.exe%1,编译运行程序后,对应位置注册表健值被修改,如图1-3所示。
图1-3植入“冰河”后注册表被修改
双击txt文件后后台运行的命令,如图1-4所示。
图1-4双击txt文件时提示后台命令
程序运行结果如图1-4所示,可以看出删除关联文件前后其所在文件夹的变化。
如图1-6所示。另外,有一点必须说明的是,在运行此程序前,请保证进程IceRiver.exe已关闭,否则会出现无法删除关联文件的情况,因为此时文件正在运行,拒绝访问。
如图1-7所示。可以通过任务管理器窗口关闭该进程,或者通过编程实现,在此使用第一种方法。
图1-5修复“冰河”带来的系统变化
图1-6注册表恢复
图1-7无法删除关联文件
五、实验总结与体会
实验开始前,准备相应的实验平台,安装虚拟系统和第一次安装windows2000操作系统的过程中遇到了许多问题,但是上网查找相关资料都得到解决,后续的实验能顺利进行下去。
通过这些实验,我学习到了程序内存驻留和木马原型的相关知识和技术,包括内存数据库的使用、程序的远程控制和命令执行等。同时,我也了解到了这些技术可能会被恶意软件利用,从而对计算机安全造成风险。