第二代木马的研究
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
密 惠 保
需求分析及方案设计
3.1 功能要求
本系统的开发要求采用C/S结构,选用所熟悉的开发工具及开发环境进行本系统的设计与开发。
设计开发一个木马程序,本设计要求实现部分功能——目标机器(肉鸡)情况的获取和控制等,具体包括以下内容:(1)在设计与开发中,着重于解决目标机器情况的获取和控制问题;(2)在设计与开发中,既探讨能实现木马程序自启动,拷贝到system32下及文件关联的实现。
3.2 环境需求
操作系统:Windows XP
开发平台:Visual C++ 6.0
3.3 可行性研究
本程序的开发利用Visual C++作为开发工具。使用其作为程序的开发工具,是因为它采用面向对象的编程方法---把程序和数据封装起来作为一个对象,并为每个对象赋予相应的属性;事件驱动的编程机制---通过事件执行对象的操作,在设计应用程序时,不必建立具有明显的开始和结束的程序,而是编写若干个过程,通过这些过程执行指定的操作;提供完善的指令控制语句,给开发高性能的系统提供了保障,保证了代码的模块化要求。
[资料来源:THINK58.com]
3.4 第二代木马技术分析
3.4.1工作原理
第二木马即传统木马其实是一种基于C/S结构的远程控制软件。它与普通远程控制软件最大的区别就是木马具有隐蔽性和恶意破坏性,而普通远程控制软件没有。传统木马程序一般分为两部分:客户端和服务器端。客户端安装在攻击者自己的机器上,而服务器端则通过各种隐秘的手段植入目标机器中。当木马服务器端被加载运行后,会在目标机器上产生一个新的进程,打开一个约定的监听端口。如图1所示,如果攻击者想要攻击目标机器,只要在自己本地的机器上运行木马客户端,向提前约定的目标机器的监听端口发起连接请求,目标机器上的木马服务器端一旦发现该连接请求就立即响应,从而建立起一条TCP连接,这样攻击者就达到控制目标机器的目的。
图1 木马的连接
3.4.2植入技术
木马植入技术,主要是指木马利用各种途经进入目标机器的具体实现方法。传统木马的植入主要靠伪装欺骗,也就是更改木马服务器端程序文件的后缀名和图标,将其伪装成一个有用的程序、文本文件或多媒体文件等等。然后通过以下几种方式植入:①藏匿在电子邮件的附件中,并在目标机器用户受骗点击相应藏有木马程序的文件图标时自动完成木马的植入操作;②通过即时通信软件比如QQ向目标机器传送文件,并在目标机器用户受骗接收藏有木马程序的文件时自动完成木马的植入;③在一些软件下载网站放置一些诱人的实用小工具软件链接供用户下载,其实用户下载的就是伪装的木马程序,一旦用户下载并完成安装,则木马就被植入。 think58
伪装欺骗就是将木马程序同其他软件捆绑在一起以实现欺骗式植入。当用户运行执行捆绑有木马的应用程序时,木马就得以植入;这时由于原来的应用程序仍可正确执行,从而使得用户无法察觉到木马的植入行为。
3.4.3加载技术
作为一个优秀的木马,自启动功能是必不可少的,这样可以保证木马不会因为用户的关机操作而彻底失去作用。正因为该项技术如此重要,所以,很多编程人员都在不停地研究和探索新的自启动技术,并且时常有新的发现。一个典型的例子就是把木马加入到用户经常执行的程序 (例如explorer.exe)中,用户执行该程序时,则木马自动发生作用。当然,更加普遍的方法是通过修改Windows系统文件和注册表达到目的,经常用的方法主要有以下几种:
1、在Win.ini中启动
在Win.ini的[windows]字段中有启动命令"load="和"run=",在一般情况下 "="后面是空白的,如果有后跟程序,比如说是这个样子:
run=c:\windows\file.exe load=c:\windows\file.exe
要小心了,这个file.exe很可能是特洛伊木马。
2、利用注册表加载运行
注册表位置都是木马喜好的藏身加载之所。
3、在Winstart.bat中启动
Winstart.bat是一个特殊性丝毫不亚于Autoexec.bat的批处理文件,也是一个能自动被Window加载运行的文件。它多数情况下为应用程序及Windows自动生成,在执行了Windows自动生成,在执行了Win.com并加截了多数驱动程序之后开始执行 (这一点可通过启动时按F8键再选择逐步跟踪启动过程的启动方式可得知)。由于Autoexec.bat的功能可以由Winstart.bat代替完成,因此木马完全可以像在Autoexec.bat中那样被加载运行,危险由此而来。 [资料来源:http://www.THINK58.com]
4、启动组
木马们如果隐藏在启动组虽然不是十分隐蔽,但这里的确是自动加载运行的好场所,因此还是有木马选择在这里驻留的。启动组对应的文件夹为C:\Windows\start menu\programs\startup,在注册表中的位置如下:HKEY_CURRE
NT_USER\Software\Microsoft\windows\CurrentVersion\Explorer\shellFolders Startup="c:\windows\start menu\programs\startup"。
5、*.INI
即应用程序的启动配置文件,控制端利用这些文件能启动程序的特点,将制作好的带有木马启动命令的同名文件上传到服务端覆盖这同名文件,这样就可以达到启动木马的目的了。只启动一次的方式:在winint.ini.中(用于安装较多)。
6、修改文件关联
修改文件关联是木马们常用手段 (主要是国产木马,国外的木马大都没有这个功能),比方说正常情况下TXT文件的打开方式为Notepad.EXE文件,但一旦中了文件关联木马,则txt文件打开方式就会被修改为用木马程序打开,如著名的国产木马冰河就是这样干的。"冰河"就是通过修改HKEY_CLASSES_ROOT\txt
file\whell\open\command下的键值,将“C:\WINDOWS\NOTEPAD.EXE本应用Notepad打开, HKEY一CLASSES一ROOT\txtfile\shell\open\command的键值,将"C:\WINDOWS\NOTEPAD.EXE%l"改为"C:\WINDOWS\SYSTE copyright think58
[来源:http://think58.com]
M\SYSEXPLR.EXE %l",这样,一旦用户双击一个TXT文件,原本应用Notepad打开该文件,现在却变成启动木马程序了。
3.4.4隐藏技术
为确保有效性,木马必须具有较好的隐蔽性。木马的主要隐蔽技术包括:伪装、进程隐藏等。
(1)伪装
从某种意义上讲,伪装是一种很好的隐藏。木马病毒的伪装主要有文件伪装和进程伪装。前者除了将文件属性改为隐藏之外, 大多通过采用一些比较类似于系统文件的文件名来隐蔽自己;而后者则是利用用户对系统了解的不足,将自己的进程名设为与系统进程类似而达到隐藏自己的目的。
(2)进程隐藏
木马病毒进程是它驻留在系统中的最好证据, 若能够有效隐藏自己的进程, 显然将大大提高木马病毒的隐蔽性。在WINDOWS 9X系统中可以通过将自己设为系统进程来达到隐藏进程的目的。具体可通过以下代码来实现:
WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
DWORD dwVersion = GetVersion();//取得Windows的版本号
if (dwVersion >= 0x80000000) // Windows 9x隐藏任务列表
{
int (CALLBACK *rsp)(DWORD,DWORD);
HINSTANCE dll=LoadLibrary("KERNEL32.DLL");//加载kernel32.dll
rsp=(int(CALLBACK*)(DWORD,DWORD))GetProcAddress(dll,"RegisterServiceProcess");//找到RegisterServiceProcess入口地址
copyright think58
rsp(NULL,1);//将该程序注册为服务进程
FreeLibrary(dll);//释放DLL模块
}
return 0;
}
3.5 系统总体设计
如图2所示木马程序的Client端,采用VC++编写,程序名为TROY.EXE。
图2 Client端效果图
本木马一共有4个模块,分别为:远程系统信息获取模块,远程系统功能限制模块,信息发送模块,击键记录模块。
远程系统信息获取模块:
把远程主机的操作系统版本、计算机名、内存大小、当前进程等多项系统数据记录,发送并回显至Client端;
远程系统功能限制模块:
对远程主机进行远程注销、远程重启、远程关机、锁定鼠标、锁定键盘等多项功能限制,提高木马的生存性;
信息发送模块:
向Server端发送消息,可以达到善意的提醒;
击键记录模块:
记录远程主机用户的击键记录,发送并回显至Client端。 [资料来源:http://think58.com]
4 第二代木马的实现
木马的编写采用C/S结构,Client上的每一个按钮相当于向Server发送一个字母消息,在Server中会有相应的函数进行判断,根据收到的字母进行函数调用以实现功能。
4.1 远程信息获取模块
4.1.1 获取远程系统信息
该功能模块运行界面如图3所示,主要调用了四个API函数:
图3 查看远程系统信息
GetSystemInfo:返回当前系统的信息
GlobalMemoryStatus:获得当前可用的物理和虚拟内存信息
GetVersionEx:返回当前操作系统的版本信息
GetSystemMetrics:返回与windows环境有关的信息
核心代码如下:
//取得系统信息
CString DisplayString,cpu,Memory,os,osps,display;
SYSTEM_INFO SystemInfo;
::GetSystemInfo(&SystemInfo);
//获取内存信息
MEMORYSTATUS MemoryStatus;
MemoryStatus.dwLength=sizeof(MEMORYSTATUS);
::GlobalMemoryStatus(&MemoryStatus);
char buffer[20];
//返回总的物理内存大小,以字节单位
wsprintf(buffer,"%d bytes",MemoryStatus.dwTotalPhys);
//获取系统版本信息
OSVERSIONINFO versionInfo;
think58
versionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
::GetVersionEx(&versionInfo);
//获取屏幕分辨率
int cx,cy;
cx=::GetSystemMetrics(SM_CXSCREEN);
cy=::GetSystemMetrics(SM_CYSCREEN);
4.1.2 获取远程进程信息
我们为进程建立快照(snapshot),调用SHGetFileInfo获取进程的图标,再插入到列表中实现。运行界面如图4所示
图4 查看远程进程信息
核心代码如下:
HANDLE SnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 ProcessInfo;
ProcessInfo.dwSize=sizeof(ProcessInfo);
BOOL Status=Process32First(SnapShot,&ProcessInfo);
SHGetFileInfo(ProcessInfo.szExeFile,0,&shSmall,
sizeof(shSmall),SHGFI_ICON|SHGFI_SMALLICON);
4.2 远程系统功能限制模块
4.2.1 禁用任务管理器
这个功能运行界面如图5所示,是采用是通过在注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system中新建字符串值DWORD值实现。 think58
[资料来源:http://THINK58.com]
图5 禁用任务管理器
核心代码如下:
#define HKCU HKEY_CURRENT_USER
LPCTSTR KEY_DisableTaskMgr="Software\\Microsoft\\Windows
\\CurrentVersion\\Policies\\System";
LPCTSTR VAL_DisableTaskMgr="DisableTaskMgr";
HKEY hKEY;
if(RegOpenKey(HKCU,KEY_DisableTaskMgr,&hKEY)!=ERROR_
SUCCESS)
RegCreateKey(HKCU,KEY_DisableTaskMgr,&hKEY);
DWORD val=1;
RegSetValueEx(hKEY,VAL_DisableTaskMgr,NULL,
REG_DWORD,(BYTE*)&val,sizeof(val));
4.2.2 锁定鼠标和键盘
这个功能的实现方式如下:Client端点击按钮,发送消息到Server端。Server通过全局变量LockOrUnLockKey和LockOrUnLockMouse来判断是操作键盘还是鼠标,然后下相应的钩子(HOOK函数)来拦截Server端的消息来实现鼠标或键盘的锁定。
核心代码如下:
hhkLowLevelKybd2000=SetWindowsHookEx(WH_KEYBOA
RD_LL,LowLevelKeyboardProc,AfxGetApp()->m_hInstance,0);
4.2.3 远程注销、远程重启、远程关机
这三个功能都是调用ExitWindowsEx函数实现,所不同的是在WINDOWS NT以上的操作系统中,远程重启和关机需要把程序进程提权。由于注销比较简单,所以不做描述。又因远程重启和关机的实现比较类似,只是ExitWindowsEx的调用不同(重启EWX_REBOOT,关机EWX_SHUTDOWN),所以只列出了远程重启的代码。
copyright think58 [资料来源:http://www.THINK58.com]
内容来自think58 [来源:http://www.think58.com]
[资料来源:http://THINK58.com]