当前位置:文档之家› 木马课程设计 孙明杨

木马课程设计 孙明杨

木马课程设计     孙明杨
木马课程设计     孙明杨

计算机病毒与防治课程设计

题目:木马制作原理分析

姓名:孙明杨

学号:201230210223

班级:1232102

专业:信息工程(安全方向)

指导老师:韩梅

2014年10月

目录

第一章引言 (3)

1.1研究背景 (3)

1.2发展的现状 (3)

第二章木马技术基础 (4)

2.1系统结构 (4)

2.2基本特征 (5)

2.3功能 (5)

2.4分类 (6)

第三章远程控制木马的设计 (8)

3.1功能分析 (8)

3.2系统总体设计 (8)

3.3系统实现的关键技术 (9)

3.4 系统的开发工具 (9)

3.5 代码实现 (10)

第四章远程控制木马的实现 (12)

4.1服务端程序的实现 (12)

4.1.1服务端的自启动 (12)

4.1.2 通信模块的实现 (13)

4.1.3服务端管理模块 (11)

4.2客户端的实现 (12)

4.2.1远程文件控制 (13)

4.2.2系统控制 (14)

4.2.3冰河信使 (17)

第五章结束语 (18)

参考文献 (18)

第一章引言

1.1研究背景

木马的全称是“特洛伊木马”(Trojan horse),来源于希腊神话。古希腊围攻特洛伊城多年无法攻下,于是有人献出木马计策,让士兵藏匿于巨大的木马中,然后佯作退兵,城中得知解围的消息后,将“木马”作为战利品拖入城内,匿于木马中的将士出来开启城门,与城外部队里应外合攻下特洛伊城,后世称这只大木马为“特洛伊木马”。

随着网络的快速发展,Internet深入到社会的每个角落,人们充分享受到了其给工作和生活带来的巨大便利,人类社会对计算机系统和信息网络的依赖性也越来越大。工业和信息化部统计数据显示,2009年中国网民规模已达3.84亿;预计2010中国网民规模突破4亿[1]。由于计算机系统和信息网络系统本身固有的脆弱性,网络入侵工具(如蠕虫、木马等)不断涌现,社会、企业和个人也因此蒙受了越来越大的损失。木马由于它的隐蔽性、远程可植入性和可控制性等技术特点,已成为黑客攻击或不法分子入侵网络的重要工具,目前,不断发生的互联网安全事故中,大部分都有木马的身影。

木马程序不仅可能侵害到个人乃至某些公司的利益和权力,更可能危及整个社会和国家的利益和安全。如果公安部用于采集处理人们身份证信息的计算机被安装了木马,那么这些信息就可能被木马以有线或无线的方式通过网络泄露出去,后果不堪设想。木马是受控的,它能分清敌我,所以与分不清敌我的其它病毒和攻击技术相比,具有更大的危险性和破坏性。

1.2发展的现状

自从世界上出现第一个木马程序(1986年的PC-Write木马)到今天,木马的发展已经历了五代[4][5]:

第一代木马出现在网络发展的早期,是以窃取网络密码为主要任务,即简单的密码窃取、发送等,在隐藏和通信方面均无特别之处。

第二代木马在技术上有很大的进步,使用标准的C/S架构,提供远程文件管理、屏幕监视等功能。但是由于植入木马的服务端程序会打开连接端口等候客户端连接,比较容易被发现。如:“冰河”、“Qmitis”。

第三代木马在功能上与第二代木马没有太大差异,它的改变主要在网络连接方式上,它的特征是不打开连接端口进行侦听,而是使用ICMP通信协议进行通信或使用反向连接技术让服务器端主动连接客户端,以突破防火墙的拦截。在数据传递技术上也做了不小的改进,出现了ICMP等类型的木马,利用畸形报文传递数据,增加了查杀的难度。如:网络神偷、Peep201等。

第四代木马在进程隐藏方面,做了大改动,采用了内核插入式的嵌入方式,利用远程插入线程技术,嵌入DLL线程,或者挂接PSAPI[6],实现木马的隐藏。前三代木马,大多都有独立的木马,因此用户可以根据启动项目中的描述内容,很快找到木马,并删除它。但是,第四代木马选择注册表的方式,伪装成DLL文件形式加载到正常的启动程序上,无法通过“任务管理器”查看到正在执行的木马。不过在连接方式上,依然使用第三代木马或第二代木马的连接方式。如:Beast木马。

第五代木马实现了与病毒紧密结合,利用操作系统漏洞,直接实现感染传播的目的,而不必象以前的木马那样需要欺骗用户主动激活。例如类似冲击波病毒的木马——噩梦II。

特洛伊木马程序发展到今天已经相当完善了,但随着计算机技术的发展,木马仍会继续演变并运用一些新的技术和方法使其更具有攻击性和破坏性。从现在的趋势来看,木马将在隐藏性、代码的模块化设计、及时通知、跨平台、底层通信以及和蠕虫病毒技术融合等方面有所提升和发展。

第二章木马技术基础

在计算机领域中特洛伊木马程序是一种未经授权的程序,它包含在一段正常的程序当中,这个未经授权的程序提供了一些用户不知道的功能,其目的是不需要管理员的准许就可获得系统使用权。它可以控制用户计算机系统,造成用户资料的泄漏,甚至造成整个计算机系统崩溃等。特洛伊木马和病毒的区别是它不能自行传播,而要依靠宿主以其它假象出现,冒充一个正常的程序,如Bo、Happy99、sub7、网络神偷、冰河等就是典型的特洛伊木马程序。本章详细论述了木马的分类、特征、功能、工作原理和攻击手段等。

木马的全称是“特洛伊木马”,是一种新型的计算机网络病毒程序。在RFC1244安全手册中给出的:“特洛伊木马是这样一种程序,它提供了一些有用的,或仅仅是有意思的功能。但是通常要做一些用户不希望的事,诸如在你不了解的情况下拷贝文件或窃取你的密码”。它利用自身所具有的植入功能,依附其它具有传播能力病毒,或者通过入侵后植入等多种途径,进驻目标机器,搜集其中各种敏感信息,并通过网络与外界通信,发回所搜集到的各种敏感信息,接受植入者指令,完成其它各种操作,如修改指定文件、格式化硬盘等。

2.1木马系统结构

一个完整的木马系统由硬件部分、软件部分和具体的连接部分组成[7]。

1、硬件部分,建立木马连接所必须的硬件实体,分为控制端,服务端和Internet。

控制端是对服务进行远程控制的一方;服务端是被控制端远程控制的一方;Internet是控制段对服务端进行远程控制,数据传输的网络载体。

2、软件部分,实现远程控制所必须的软件程序。

控制端程序,控制端用以远程控制服务端的程序。木马程序,潜入服务端内部,获取其操作权限的程序。木马配置程序,设置木马的端口号,触发条件,木马名称等,并使其在服务端隐藏的更隐蔽的程序。

3、具体连接部分,通过Internet在服务端和控制端之间建立一条木马通道所必

须的一条元素。

控制端IP和服务端IP,即控制端和服务端的网络地址,也是木马进行数据传输的目的地。控制端端口和木马端口,即控制端和服务端的数据入口,通过这个端口,数据可以直达控制端程序或木马程序。

2.2木马的基本特征

综合现在流行的木马程序,它们都具有以下基本特征:

1、隐蔽性

木马必须有能力长期潜伏于目标机器中而不被发现。一个隐蔽性的木马往往会很容易暴露自己,进而被杀毒(或杀马)软件,甚至用户手工检查来,这样将使得这类木马变得毫无价值。因此可以说隐蔽性是木马的生命。

2、自动运行性

木马程序是一个系统启动即自动运行的程序,所以它可能嵌入在启动配置文件(如win.ini、system.ini、winstart.bat等)、启动组或注册表中。

3、欺骗性

木马程序要达到长期隐藏的母的,就必须借助系统中已有的文件以防被发现。木马经常类似以常见的文件名或扩展名的名字(如dll、win、sys),或者仿制一些不易被人区分的文件名(如字母“i”和数字“1”,字母“o”和数字“0”),或者伪装成常见的文件图标。以骗取用户的信任。

4、顽固性

木马顽固性就是指有效清除木马的易程度。若一个木马在检查出来之后,仍然无法将其一次性有效清除,那么该马就具有较强的顽固性。很多木马程序中的功能模块已不再是单一的文件组成,而是将文件分别存储在不同的位置。这些分散的文件可以相互恢复,因此难以清除。

5、易植入性

任何木马必须首先能够进入目标机器(植入操作),因此易入性就成为木马有效性的先决条件。欺骗性是自木马诞生起最常见的植入手段因此各种好用的小功能软件就成为木马常用的栖息地。利用系统漏洞进行木马入也是木马入侵的一类重要途径。目前木马技术与蠕虫技术的结合使得木马具类似蠕虫的传播性,这也就极大提高了木马的易植入性。

2.3木马的功能

只要在本地计算机上能操作的功能,目前的木马基本上都能实现。木马的控制端可以像本地用户一样操作远程计算机。木马的功能可以概括为以下内容[8]:

1、窃取数据

以窃取数据为目的,本身不破坏计算机的文件和数据,不妨碍系统的正常工作,它以系统使用者难以察觉的方式向外传送数据。

2、接受非法授权操作的指令

当网络中的木马被激活后,它可以获取网络服务器系统管理员的权限,随心所欲地窃取密码和各类数据,逃避追踪,同时不会留下任何痕迹。

3、篡改文件和数据

对系统文件和数据有选择地进行篡改,使计算机处理的数据产生错误的结果,导致作出错误的决策。有时也对数据进行加密。

4、删除文件和数据

将系统中的文件和数据有选择地删除或者全部删除。

5、施放病毒

将原先埋伏在系统中但出于休眠状态的病毒激活,或从外界将病毒导入计算机系统,使其感染并实施破坏。

6、使系统自毁

包括改变时钟频率、使芯片热崩溃而损坏、造成系统瘫痪等。

2.4木马的分类

木马的分类多种多样,根据不同的分类标准,木马的种类也有所不同。

(一)根据木马程序对计算机的具体动作方式,可以把现在的木马程序分为以下几类:

1、远程控制型:远程控制型木马是现今最广泛的特洛伊木马.这种木马起着

程监控的功能,使用简单,只要被控制主机联入网络,并与控制端客户程序建立网络连接,控制者就能任意访问被控制的计算机。这种木马在控制端的控制下可以在被控主机上做任意的事情,比如键盘记录,文件上传/下载,截取屏幕,远程执行等。

这种类型的木马比较著名的有BO(Back Orifice)和国产的冰河等。

2、密码发送型:密码发送型木马的目的是找到所有的隐藏密码,并且在受害者不知道的情况下把它们发送到指定的信箱。大多数这类木马程序不会在每次Windows系统重启时都自动加载,它们大多数使用25端口发送电子邮件。

3、键盘记录型:键盘记录型木马非常简单,它们只做一种事情,就是记录受害者的键盘敲击,并且在LOG文件里进行完整的记录。这种木马程序随着Windows 系统的启动而自动加载,并能感知受害主机在线,且记录每一个用户事件,然后通过邮件或其他方式发送给控制者。

4、毁坏型:大部分木马程序只是窃取信息,不做破坏性的事件,但毁坏型木马却以毁坏并且删除文件为己任。它们可以自动删除受控主机上所有的.ini或.exe 文件,甚至远程格式化受害者硬盘,使得受控主机上的所有信息都受到破坏。总而言之,该类木马目标只有一个就是尽可能的毁坏受感染系统,致使其瘫痪。

5、FTP型:FTP型木马打开被控主机系统的21号端口使每一个人都可以用一个FTP客户端程序来不要密码连接到受控制主机系统,并且可以进行最高权限的文件上传和下载,窃取受害系统中的机密文件。

(二)根据木马的网络连接方向,可以分为两类:

1、正向连接型:发起通信的方向为控制端向被控制端发起,这种技术被早期的木马广泛采用,其缺点是不能透过防火墙发起连接。

2、反向连接型:发起通信的方向为被控制端向控制端发起,其出现主要是为了解决从内向外不能发起连接的情况的通信要求,已经被较新的木马广泛采用。

(三)根据木马使用的架构,可以分为四类:

1、C/S架构:这种为普通的服务器、客户端的传统架构,一般我们都是采用客户端作控制端,服务器端作被控制端。在编程实现的时候,如果采用反向连接的技术,那么客户端(也就是控制端)要采用Socket编程的服务器端的方法,而服务端(也就是被控制端)采用Socket编程的客户端的方法。

2、B/S架构:这种架构为普通的网页木马所采用的方式。通常在B/S架构下,Server端被上传了网页木马,控制端可以使用浏览器来访问相应的网页,达到对Server 端进行控制的目的。

3、C/P/S架构:这里的P是Proxy的意思,也就是在这种架构中使用了代理。当然,为了实现正常的通信代理也要由木马作者编程实现,才能够实现一个转换通信。这种架构的出现,主要是为了适应一个内部网络对另外一个内部网络的控制。但是,这种架构的木马目前还没有发现。

4、B/S/B架构:这种架构的出现,也是为了适应内部网络对另外的内部网络的控制。当被控制端与控制端都打开浏览器浏览这个Server上的网页的时候,一端就变成了控制端,而另外一端就变成了被控制端,这种架构的木马已经在国外出现了。

第三章远程控制木马的设计

在目前发现的所有木马当中,以远程控制木马数量最多,危害最大,同时知名度也最高的一种木马,它可以让攻击者完全控制被感染的计算机,攻击者可以利用它完成一些甚至连计算机主人本身都不能顺利进行的操作,其危害之大实在不容小觑。由于要达到远程控制的目的,所以,该种类的木马往往集成了其他种类木马的功能。使其在被感染的机器上为所欲为,可以任意访问文件,得到机主的私人信息甚至包括信用卡,银行账号等至关重要的信息。

远程控制木马一般采用C/S构架,包括客户端和服务端。客户端运行在被控制端,执行服务端发送的各种命令。服务端运行在控制端,用于向客户端发送操作命令,并接受客户端发送的信息。

3.1功能分析

由于要实现的是远程控制木马程序,因此需要实现的功能如下:

(1)被控制端上网后自动通知:当己植入服务器端程序的计算机上网后,程序自动连接信息中转系统,获得客户端所在主机的IP,然后通知客户端。

(2)获取被控制端主机硬盘资料信息:利用本系统可列举被控计算机所有硬盘上的所有目录和文件信息,具体信息包括目录名、文件名、目录或文件属性、大小、修改时间等。

(3)远程文件操作:远程修改文件、文件夹,下载、上传文件,删除、新建文件等。

(4)远程系统控制:该功能可实现对被控制端主机的重启、关机、注销,鼠标、键盘的锁定和解锁。

(5)获取目标机的系统信息:包括计算机名、当前用户名、当前运行的软件和计算机安装了那些软件。

(6)进程管理:管理被控制的进程,包括查看当前运行的进程信息,终止进程等。

(7)被控制端的伪装、隐藏、自启动等功能。

3.2系统总体设计

本系统采用Client/Server工作模式,由服务端程序、客户端程序和中转服务器三部分构成。

客户端(控制端)程序运行在本地主机系统上,这些程序主要负责向被控端程

序发送控制指令,并对被控端返回的取证结果进行证据处理,以友好的图形界面形式显示给控制者。

服务端(被控端)程序是安装在被控的计算机上,主要负责接收并处理客户端程序发来的各种控制命令、完成服务端程序的加载,完成服务端启动、隐藏和进程的隐藏,并返回结果。

中转服务器是拥有固定的IP地址,它在整个木马系统中充当中转功能,为服务端提供最新的客户端IP地址和端口信息,不管客户端的地址如何变化,都能使服务端正确连接到客户端。

中转服务器作为整个木马系统的中转关键环节,提供一定空间用来更新存储客户端的信息。

3.3系统实现的关键技术

所谓隐蔽通信就是在用户毫无感知的情况下完成木马客户端与服务器端的数据交互。首先明确用户在什么情况下可以察觉与外界的异常数据交流,用户感知到非正常数据流通的征兆无非通过以下几种途径[27]:

(1)利用Netstat查看连接,并有异常连接处于ESTABLISHED状态。

(2)当安装有防火墙时,防火墙有异常连接警报。

(3)用网络嗅探器(如:TCPDUMP,Sniffer)分析数据流的时候,有异常数据流

通过。

3.4系统的开发工具

随着计算机应用的发展,开发工具的种类越来越多,功能也越来越强大。不同的开发工具在开发应用中有不同的优点和侧重点。选择一种最适合的开发工具,既能更好地实现系统功能,也能大大减轻开发难度,减少开发工作量,加速开发进程。选择开发工具,要根据应用程序的实际开发需求进行选择。应用程序的开发发展到今天,良好的用户界面是一个应用程序开发好坏的基础和最直观的条件。网络监控系统的实现不可避免会涉及到用户界面的开发操作,友好的用户界面可以使系统操作简单直观,增加其应用度。现在的程序设计方法已由过去的结构化程序设计发展为面向对象的程序设计。在面向对象的程序设计开发中,可以很轻易方便地实现用户界面的开发,获得良好的用户界面。

当前流行的各种开发工具,如Visual Basic,Visual C#,Delphi,Java,PowerBuilder 等等开发软件都是面向对象的开发工具,都可以很容易完成用户界面开发的工作。从用户界面的开发方面来考虑,可以选择当前常用的面向对象的开发工具中的任何一种。开发者可根据自己的喜好选择自己最熟悉的开发工具。

本木马程序要实现对目标主机的控制,就需要服务端与客户端之间不断进行交互;系统管理员需要通过目标监控子系统获得目标主机的信息并对其进行控制,这都是通过网络编程来实现的。在当前较流行的各种开发工具中,支持网络编程、提供较好的Winsock支持的主要有Visual C#和Java两种。Visual C#具有强大的功能实现体系,并且具有和Windows操作系统良好的兼容性,因此选择Visual C#进行系统的网络编程。

3.5代码实现

void CPeeperSetDlg::OnOK() { GetDlgItemText(IDC_EDIT_IP, m_strIP); m_uPo rt = GetDlgItemInt(IDC_EDIT_PORT); m_nBits = GetDlgItemInt(IDC_EDIT_BITS); m_nSpeed = GetDlgItemInt(IDC_EDIT_SPEED); CDialog::OnOK(); } BOOL CPeeperSetDlg::OnInitDialog() { CDialog::OnInitDialog(); SetDlgItemT ext(IDC_EDIT_IP, _T("127.0.0.1")); SetDlgItemInt(IDC_EDIT_PORT, PL_PEEPER_P ORT); SetDlgItemText(IDC_EDIT_BITS, _T("4")); SetDlgItemInt(IDC_EDIT_SPEED , 1000); ((CEdit *)GetDlgItem(IDC_EDIT_SPEED))->SetLimitText(6); ((CEdit *)Get DlgItem(IDC_EDIT_BITS))->SetLimitText(2); return TRUE; }

{ ::PostMessage(m_pPeeperWnd->GetSafeHwnd(), PL_GET_DIB_MESSAGE, (WPARAM)PL_GET_DIB_MESSAGE, (LPARAM)ztZip); } } } TRACE(_T("Get d ata times:%d(ms).\nGet data sizes:%d(bytes).\n"), ::GetTickCount() - d1, ::GlobalSize( m_pPeeperWnd->m_hDib)); return nRet;

void CPeeperWnd::SetNotifyWnd(CWnd *pNotifyWnd) { m_pNotifyWnd = pNoti fyWnd; }

void CPeeperWnd::SetBits(int nBits) { m_nBits = nBits; SendDIBBits(); }

void CPeeperWnd::SetUpdateSpeed(UINT nTimer) { m_nSpeed = nTimer; KillTi mer(m_nTimerID); SetTimer(m_nTimerID, m_nSpeed, NULL); }

(五)Client端发送和读取数据

int CPeeperWnd::SendData(BYTE *chData, int nLen, BYTE chFlag) { int nRet = I NV ALID_SOCKET; if(m_sckClient[0] != INV ALID_SOCKET) { nRet = ::PL_SendS ocketData(m_sckClient[0], chData, nLen, chFlag); } return nRet; }

int CPeeperWnd::ReadData(BYTE *chData, int nLen, BYTE *chFlag) { int nRet = INV ALID_SOCKET;

if(m_sckClient[0] != INV ALID_SOCKET) { nRet = ::PL_ReadSocketData(m_sc kClient[0], chData, nLen, chFlag); } return nRet; }

(六)得到鼠标位置

POINT CPeeperWnd::GetMousePoint(BYTE *chData) { POINT pt1, pt2, point; :: GetCursorPos(&pt1); pt2 = GetOffsetPos(); pt1.x = pt1.x + pt2.x; pt1.y = pt1.y + pt2.y ; CDC *pDC = GetDC(); GetDCOrgEx(pDC->GetSafeHdc(), &pt2); point.x = pt1.x - pt2.x; point.y = pt1.y - pt2.y; if(AfxIsValidAddress(chData, 12)) { int cx = point.x; i nt cy = point.y; ZeroMemory(chData, 12); memcpy(chData, &cx, sizeof(int)); memc py(chData+sizeof(int), &cy, sizeof(int)); } return point; }

CPoint CPeeperWnd::GetOffsetPos(BOOL bScroll) { CPoint pt = GetScrollPositio n(); CPoint point = CPoint(0, 0); CRect rect; GetClientRect(&rect); if(rect.Width() > m_szScreen.cx) { point.x = ((rect.Width() - m_szScreen.cx)/2); } if(rect.Height() > m _szScreen.cy)

{ point.y = ((rect.Height() - m_szScreen.cy)/2); } if(bScroll) { pt.x -= point.x; pt.y -= point.y; } else { pt = point; } return pt; }

int CPeeperWnd::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CScrollVie w::OnCreate(lpCreateStruct) == -1) return -1; m_hPeeperThread.m_pPeeperWnd = th is; m_hPeeperThread.CreateThread();#else //不使用Doc类时,可以在这里增加参数的设置 #endif if(!m_strIP.IsEmpty()) { ConnectServer(); } }

void CPeeperWnd::OnDraw(CDC* pDC) { CRect rect; GetClientRect(&rect); if(( m_memDC.m_hDC == NULL) || (rect.right > m_szScreen.cx || rect.bottom > m_szScre en.cy)) { rect.right = max(rect.right, m_szScreen.cx); rect.bottom = max(rect.bottom, m_szScreen.cy); pDC->FillSolidRect(rect, RGB(0, 100, 150)); } if(m_memDC.m_hD C != NULL) { CPoint pt = GetOffsetPos(FALSE); pDC->BitBlt(pt.x, pt.y, m_szScree n.cx, m_szScreen.cy, &m_memDC, 0, 0, SRCCOPY); } else { CFont font; font.Crea tePointFont(120, _T("宋体

")); CFont *old = pDC->SelectObject(&font); CRect rc; GetClientRect(&rc); pDC->SetTextColor(RGB(255, 255, 255)); pDC->DrawText(m_strState, rc, DT_SINGLELI NE | DT_VCENTER | DT_CENTER); pDC->SelectObject(old); } }

(七)发送鼠标操做信息

void CPeeperWnd::DrawDIB() {

if(m_hDib && ::IsWindow(m_hWnd)) { CClientDC dc(this); if(m_hPeeperThread.m

_szScreen.cx != m_szScreen.cx || m_hPeeperThread.m_szScreen.cy != m_szScreen.cy) { m_szScreen.cx = m_hPeeperThread.m_szScreen.cx; m_szScreen.cy = m_hPeeper Thread.m_szScreen.cy; if(m_memDC.m_hDC) { m_memDC.DeleteDC(); } m _memDC.CreateCompatibleDC(NULL); CBitmap bmp; bmp.CreateCompatibleBitm ap(&dc, m_szScreen.cx, m_szScreen.cy); m_memDC.SelectObject(&bmp); SetScroll Sizes(MM_TEXT, CSize(m_szScreen.cx, m_szScreen.cy)); Invalidate(); UpdateWin dow(); } else { if(!m_memDC.m_hDC) { m_memDC.CreateCompatibleDC(N ULL); CBitmap bmp; CClientDC dc(this); bmp.CreateCompatibleBitmap(&dc,

m_szScreen.cx, m_szScreen.cy); m_memDC.SelectObject(&bmp); SetScrollSizes( MM_TEXT, CSize(m_szScreen.cx, m_szScreen.cy)); } } ::PL_DrawDIB(m_memD C.m_hDC, NULL, m_hDib, NULL, NULL); m_memDC.Draw3dRect(CRect(0, 0, m_s zScreen.cx, m_szScreen.cy), RGB(255, 255, 255), RGB(80, 80, 80));

#ifdef USE_DOC //设置文件标题 CString str; str.Format(_T("偷窥者窗口

--[IP/Name:%s Port:%d, Refresh Time:%.3f(S/T)]"), m_strIP, m_uPort, ((float)(::GetT ickCount() - m_nLastUpdateTime))/1000.0f); if(m_pDocument) { m_pDocument->S etTitle(str);

} #endif CPoint pt = GetOffsetPos(); dc.BitBlt(-pt.x, -pt.y, m_szScreen.cx, m_szScre en.cy, &m_memDC, 0, 0, SRCCOPY); m_strState = _T("连接完毕

"); } m_bIsDoing = FALSE; m_nLastUpdateTime = ::GetTickCount(); } BOOL CPeeperWnd::PreTranslateMessage(MSG* pMsg) { return CScrollView::P reTranslateMessage(pMsg); }

void CPeeperWnd::OnLButtonDblClk(UINT nFlags, CPoint point) { if(CanSend() && GetEnableFlag(PL_ENABLE_MOUSE_LDBLCLK)) { BYTE chData[20]; Get MousePoint(chData); BOOL bMouseMove = GetEnableFlag(PL_ENABLE_MOUSE_ MOVE); bMouseMove = !bMouseMove; memcpy(chData+sizeof(int)*2, &bM

第四章远程控制木马的实现

本章将详细介绍远程控制木马的主要实现过程,包括客户端和服务端的实现;通信模块的实现;程序的界面和功能的测试等。

4.1服务端程序的实现

4.1.1服务端的自启动

本模块通过修改注册表来实现目标监控子系统的自启动。在Windows系统中,不论是Windows 9X操作系统,还是Windows 2000/XP/NT操作系统,其注册表的结构大体上

是基本相同的,都是一种层叠式结构的复杂数据库,由键、子键、分支、值项和缺省值几部分组成。

4.1.2 通信模块的实现

在服务端的功能模块之中,对于通信模块的性能要求比较高。要实现对目标主机的监控和管理,必须以可靠、稳定的数据通信为前提。服务端与客户端之间采用TCP/IP协议进行通信,为了躲避防火墙采用了基于反弹端口机制的C/S(客户机/服务器)模型:由服务器主动向客户机发出连接请求。

通信模块的开发采用Winsock API,建立基于阻塞模式的流式Sockets套接字,数据的接收和发送除了与通用流式套接字编程模型相同外,还增加了对数据的处理功能。

通信过程的实现,主要包括C/S模型的实现,数据接收和发送,文件的接收和发送和通信阻塞模式。

1、基于反弹端口机制的C/S(客户机/服务器)模型

基于反弹端口机制的C/S模型的通信方式与一般C/S模型的区别仅在于建立连接时的方式不同,基于反弹端口机制的C/S模型建立连接时是由服务器主动向客户机发起连接请求。

客户端首先初始化套接字,然后创建监听Socket,绑定地址端口,调用函数Listen(),开始监听。服务端则在创建监听套接字后,发起连接请求。客户端接收到连接请求后,再进行后续处理。

2、接收数据流程

接收数据的函数定义为:

4.1.3服务端管理模块

管理模块是服务端的主模块,它将各个功能模块融合在一起,实现对目标主机的监控和管理。它主要负责接收监控系统的命令,对其命令进行识别解释,并调用各个功能模块,执行管理器命令。因此它和其它模块都有接口,它自身包含的函数主要有文件管理(查看、上传、下载、删除等)、抓取屏幕等。管理模块的设计思想并不复杂,它的主要任务就是与监控系统建立连接,接收判断监控系统发出的操作命令并有效执行。

图5.1管理模块过程图

管理模块的流程如图5.1所示。模块初始化主要包括变量初始化和建立互斥体两个过程:在建立连接和发送目标主机基本信息后,管理模块即进入等待命令—判断命令—执行命令一回应信息的命令循环状态,若在此循环中出错(如网络不通,应答出错)时,程序将会退回到建立连接的状态。

4.2客户端的实现

客户端是运行在控制端主机上,用来远程控制被控制端的信息和操作。运行客户端程序,出现客户端程序界面(如图5.2)。

图5.2 客户端程序主界面

客户端运行后,修改中间服务器上的客户端信息,包括客户机IP,开放的端口和链接密码。修改成功后,等待远程主机的上线。如果有远程主机上线,则可以完成的操作有文件控制、系统控制和文件传输。下面将分别介绍。

4.2.1远程文件控制

操作远程主机的文件,完成所需要的目的,包括文件的新建、删除,上传和下载。如图5.3,目前有一台主机上线。

图5.3 文件操作界面

下面对监控被控端的文件操作进行说明:

(1)选择被控端及路径:在左边一览表中选择一个在线的、可控的被控端,用鼠标左键单击后,右边框中将显示当前所选中的被控端C盘目录下的所有文件及文件夹。可以通过改变“驱动器”或直接在当前目录处输入要查看的D、E等目录。

(2)查看文件夹内容:如果要查看其中某文件夹中的文件可选中该文件夹,然后单击右键弹出菜单,选择“打开”菜单项(或双击打开),此时将该文件夹中的文件或子文件夹显示在右框中。

(3)下载被控端文件:如果要将被控端中的某一文件下载的控制端计算机中,可单击选中该文件,然后右击选择弹出菜单中的“下载到”菜单项,此时出现要存放下载文件的路径,单击保存按钮。系统将提示是否要打开下载的文件,如果想查看内容,则单击“是”,否则单击“否”。

(4)删除被控端文件:如果要想删除被控端中的某一文件,则单击选中,右击选择弹出菜单中的“删除”菜单项,即可删除被控端中的该文件。

(5)刷新被控端文件夹内容:在右框中右击选择弹出菜单中的“刷新”菜单项,

可对显示的文件及子文件夹刷新显示。

(6)上传选定文件到被控端:选择被控端,指定要上传的位置,在右边框中单击右键选择弹出菜单中的“上传文件到?”菜单项,等待文件上传,上传完毕后系统给予提示。

4.2.2系统控制

作为木马的破坏功能,系统控制中包括了远程关机、重启、注销、鼠标屏幕控制等功能。选择需要控制的主机,然后点击相应的按钮,即可完成操作。如图5.4。

图5.4系统控制界面

进程管理、网络连接、启动项和系统信息,在设计时也作为系统控制的一部分,其相应的功能和操作如下:

1、文件管理,实现了对远程主机进程的操作。可以查看当前运行的进程ID,进程名和文件来源。如图5.5所示,单击“刷新”按钮,则刷新当前的进程列表;选择所需进程,然后点击“结束进程”则可结束该进程。

图5.5 进程管理界面

4.2.3冰河信使

我们还可以通过冰河信使功能和服务器方进行聊天,当主控端发起信使通信之后,受控端也可以向主控端发送消息了。

图5.6 冰河信使

查杀木马:当我们发现机器无故经常重启、密码信息泄露、桌面不正常时,可能就是中了木马程序,需要进行杀毒。

判断是否存在木马:一般病毒都需要修改注册表,我们可以在注册表中查看到木马的痕迹。在“开始”--->“运行”,输入“regedit”,这样就进入了注册表编辑器,依次打开子键目录

“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windwos\CurrentVersion\

Run”。

图5.7 注册表中的Run子键

在目录中我们发现第一项的数据“C:\WINDOWS\system32\Kernel32.exe”,Kernel32.exe就是冰河木马程序在注册表中加入的键值,将该项删除。然后再打开“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windwos\CurrentVersion\RunS ervices”如图5.8所示。

图5.8 注册表中的RunServices子键

在目录中也发现了一个键值“C:\WINDOWS\system32\Kernel32.exe”将其删除。Run和RunServices中存放的键值是系统启动是启动启动的程序,一般的病毒、木马、后门等都是存放在这些子键目录下,所以要经常检查这些子键目录下的程序,如有不明程序,则要认真检查。

删掉其在注册表中的启动项后,再删除病毒原文件。打开“C:\WINDWOS\system32”,找到kernel32.exe将其删除,如图5.9所示。

图5.9 C:\WINDWOS\system32中kernel32.exe的搜索结果

如图5.10所示,打开“C:\WINDWOS\system32”,找到sysexplr.exe将其删除。

图5.10 \WINDWOS\system32中sysexplr.exe的搜索结果

之后重启之后,冰河木马就彻底被删除掉了。

第五章结束语

这次课设根据网络上下载的源码进行修改,使之可以免杀并将原木马未实现的Server端上线后自动发送本机IP到Client端的功能得以实现。通过查找资料实现了开机启动不被360报警,360免杀。原代码是作者01年用VC5.0所写,屏幕监事和控制做得不是很好,压缩处理后图像不够清晰,而且在屏幕上直接开机启动,隐藏进程,绑定文件,木马加壳、脱壳,木马加密、解密等都进行了很多试验,虽然有很多最后没有应用到本次的木马上,但是对于木马的工作原理和免杀以及木马的查杀都有了很深刻的认识,同时在制作木马的过程中在老师给的资料里学到了很多知识,学会了很多工具的使用,很大程度的开阔了眼界,对木马产生了浓厚的兴趣,如果不是时间紧一定可以做出更加完美的木马。

参考文献

[1] 中国互联网络信息中心(CNNIC).第 25 次中国互联网络发展状况统计报告.

[EB/OL].https://www.doczj.com/doc/1c1200779.html,/html/Dir/2010/01/15/5767.htm.2010

[2]金山.2009年中国电脑病毒疫情及互联网安全报告.

[EB/OL].https://www.doczj.com/doc/1c1200779.html,/html/news/17/176984.shtml.2010.1

[3]刘峰.互联网进入“木马”经济时代[N].中国企业报,2007年7月9日,第8版.

[4]徐宇茹,李志勇,肖国军.嵌入式计算机木马设计[J].海军航空工程学院学报,2004,19(05):578—579.

[5]杨瑾.基于远程线程插入DLL技术的嵌套式木马设计[J].计算机与信息技术,2007,(04):78—80.

[6]徐宇茹,李志勇,肖国军.嵌入式计算机木马设计[J].海军航空工程学院学报,2004,19(05):578—579.

相关主题
文本预览
相关文档 最新文档