栏目

首页 首页 黑客木马查看内容

黑客对木马的开发和剖析

最近更新| 发布者: 站长-黑杰克| 查看: |

黑客们对系统成功入侵后。为了方便下次登录被入侵的计算机,通常会留下一个后门,或者是木马,。国产著名的木马有冰河、广外女生、灰鸽子、上兴, PeShare........这些木马对每个黑客来说都已经很熟悉了,那么接下来就介绍下它们的共性。不管是哪种木马,它们都要依靠网络来进行客户端与服务器端的通信,也就是说,不管木马有多么复杂的功能,其基  .础都是建立在网络的通信上。

网络通信基础

一台计算机和另一台计算机通信,只需要知道两个内容就可以了,即IP地址和端口号。这两个名词想必大家不但通过,而且已经有了感性上的认识而来,我们在扫描网络主机的时候,会在扫描器中填写扫描主机的IP地址,然后扫描器会逐个扫描IP地址,并且把指定的IP的所有开放端口全部列出来,那么IP地址是什么?端口号是什么?下面简单介绍一下两者的作用。

IP地址的作用与分类

IP地址的全称是网际协议地址,互联网上的每个主机和路由器都有IP地址,没有两个机器有相同的IP地址,因此它是用来标识一台网络主机的,所有的IP地址都是32位长,其用点分十进制法来表示,比如“10.10.30.12”IP地址指定的不是主机,而是网络接口接口设备。

因此,一个主机有两个网络接口,那么就会有两个IP地址,通常情况下,一台主机只有一个IP地址。

IP地址被分别5类,分别是A类、B类、.......E类,每一类IP地址的范围如表2-1所示。

黑客对木马的开发和剖析 黑客技术 第1张

上面的ip地址划分是照搬了其他参考书里面给出的IP地址的划分方式,笔者把这些lP地址重新进行了归类。共分为4类,一类是环回ip地址(表示本机IP地址).一类是内网lP地址,一类是公网lP地址,一类是其他。下面分别进行简短的介绍。

1.环回lP地址。

A类网络号为127就是为环回地址预留的。通常情况下是12 7,0,0,1这个地址,或者是loc,athost,该IP地址不管机主是否联网,对这个IP地址的通信都是可以连通的,因为它就表示本地主机。ping -下环回地址试试,在命令行下输入:ping 127.1.不论是否联网这个地址都是通的。

2.内网IP地址。

用于局域网内,比如网吧、企业、政府、学校的内部。它主要负责局域网的通信。内网地址开头都是10、192……一些地址。

3.公网IP地址。

是ISP(网络服务供应商),比如网通、电信、铁通……提供的这些地址都是由动态ISP分配的,这个地址是真正在互联网上进行通信的lP地址。

4.其他IP地址。

是TCPf/lP中保留的用来做实验的一些lP地址,就比如D类和E类这些基本我们普通用户用不到的iP地址。

端口的作用与分类

lP地址可以在互联网上唯一地标识一台主机,那么端口号有什么用呢?两台计算机通信,其实是两台计算机}:的不同进程间的通信。也就是说,本马的客户端和术马的服务端都是操作系统下的一个进程。Windows操作系统下是多进程的,即使ip地址可以标识一台主机,却无法得知是和哪个进程在通信,因为打开的网络软件实在太多了,比如QQ、IE.....…因此,端口号就是用来标识进程的。

端口号是I6位的.范围在0~6553F5之间。端口号根据传输层的传输协议的不同分为两种,一种是TCP端口。另一种是UDP端口团。用扫描端口的软件可以区分出TCP和-UDP端日,TCP和UDP是两种不同的协议,TCP协议用于可靠传输中,而UDP协议用于不可靠传输中。TCP的端口在通信过程中始终保持连接,直到通信结束,而UDP的通信是不需要连接的。两种协议各有优缺点,视具体情况而定。

网络编程基础知识

上面对两台计算机之间如何进行通信有了一个大概的了解,现在开始真正学习Windows下网络编程的相关知识。

通信模型

既然是通信,必然要遵循一个通信模型,常见的通信模型有C/S模型(即客户端/服务端模型)、B/S模型(即浏览器/服务端模型)。常见的木马是C/S模式的,不过也有木马是B/S模式的,只不过这种模式比较少见,接下来主要介绍C/S模型的开发。

C/S模型的开发,就是在服务端上绑定一个IP地址和一个端口号,然后进行监听,等待客户端的连接,而客户端则是向服务器端指向的IP地址和端口号发起连接,服务器接收客户端的连接后,双方可以进行通信,这是基于ICP协议的通信,而基于UDP协议就简单多了,服务器只要绑定IP地址和端口号就可以了,客户端不需要进行连接直接就可以和服务器进行通信,从基于TCP和机遇UDP的服务器可以看出,TCP比UDP要可靠,而UDP要比TCP效率高。

Winsock

Windows下的网络应用开发大部分是通过Winsock完成的,Winsock有两种开发模式,一种是阻塞模式,另一种是非阻塞模式,阻塞模式是基于同步的开发方式,非阻塞模式是基于异步的开发方式,非阻塞模式结合了Windows的消息机制,更符合Windows下的开发,在我们的学习过程中主要讨论非阻塞模式的开发。

下面开始讲解Windows下网络开发所需要了解的APL函数,在介绍这些函数的时候,笔者只重点介绍部分参数,详细的参数介绍不是本文章的重点,但是很多函数都有其固定的参数,大家会用即可。

Winsock的相关函数

每个需要使用Winsock进行网络开发的Windows应用程序都必须包含Winsock2.h,除了这个头文件以外,还有一个静态库ws2_32.lib。在使用它们的时候需要对这个库进行一次初始化,使用完毕后要对该库进行释放,下面分别介绍这两个函数。

首先来看初始化ws2_32.dll动态链接库的函数:

黑客对木马的开发和剖析 黑客技术 第2张

这个函数是用来初始化WS2_32.dll动态链接库的,这个动态链接库是所有网络应用程序会加载的动态链接库,在使用这个动态链接库时候就需要用WSAStartup()函数进行初始化,如果不初始化这个动态链接库,其余相关的基本这个动态链接库的网络函数的调用都会失败。参数说明如下:

黑客对木马的开发和剖析 黑客技术 第3张

这个函数是结束这个动态链接库的。一般在程序退出时候使用。
创建套接字。

黑客对木马的开发和剖析 黑客技术 第4张

参数说明如下。

(1)AF:指定应用程序使用的通信协议族,对于TCP/IP协议族,该参数始终为PF_INET。有的教材里这个参数使用的AF_INET。AF_INET是地址族,虽然使用这个没错,但是还是建议使用PF_INET。

(2)type:指定要创建的套接字的类型,流套接字类型为SOCK_STREAM,数据包套接字类型为SOCK_DGRAM,前者通常是TCP协议使用,后者通常是UDP协议使用。

(3)protocal:指定应用程序所使用的通信协议,该参数根据第二个参数的不同而不同,第二个参数为SOCK_STREAM,该参数为IPPROTO_TCP,如果第二个参数为SOCK_DGRAM,那么该参数为IPPROTO_DUP。

该函数的返回值是一个新创建的类型为SOCKET的套接字的描述符。

关闭套接字。

黑客对木马的开发和剖析 黑客技术 第5张

程序结束的时候要对Socket创建的套接字进行关闭,完成资源的释放。

参数说明如下。

S:socket()函数创建的套接字描述符。

当创建了一个Socket后,服务器程序必要要绑定一个IP地址和特定的端口号,客户端程序不需要绑定端口和IP地址,因为Socket会选择合适IP地址及端口来使用。

绑定IP地址和端口号:

黑客对木马的开发和剖析 黑客技术 第6张

参数说明如下。

(1)S:指定待绑定的Socket描述符。

(2)name:指定一个SOCKaddr结构,该结构的定义如下。

黑客对木马的开发和剖析 黑客技术 第7张

函数中提供的参数类型是Sockaddr,在实际使用的过程中,结构体是scokadr_in,该结伽偶的定义如下:

黑客对木马的开发和剖析 黑客技术 第8张

成员变量sin_family设置为PF_inet:sin_port设置为端口号:sin_addr结构体中只包含一个公用体,in_addr的定义如下:

黑客对木马的开发和剖析 黑客技术 第9张

黑客对木马的开发和剖析 黑客技术 第10张

该成员变量是一个整数,一般用函数inet_addr0把字符串形式的lP地址转换成unsigned

long整型的整数值。

namelen:指定name缓冲区的长度。

inet addr函数的原型如下:

黑客对木马的开发和剖析 黑客技术 第11张

参数cp为一个点分多进制的IP地址。

inet addr函数的逆函数如下:

黑客对木马的开发和剖析 黑客技术 第12张

参数为一个addr_in类型的变量。

监听端口:

黑客对木马的开发和剖析 黑客技术 第13张

参数说明如下。

(1)s:使流套接字s处于监听状态。

(2) backlog;为处于监听状态的流套接字s维护一个客户连接请求队列。

接受请求:

黑客对木马的开发和剖析 黑客技术 第14张

服务端程序调用该函数从处于监听状态的流套接字的客户端请求队列中取出第一个请求,并创建一个新的套接字与客户端进行连接通信。

参数说明如下。

(1)s:指定处于监听状态的套接字。

(2)addr:用来返回新创建的套接字的地址。

(3)addrlen:用来返回新创建套接字的地址结构的长度。

接函数如下:

黑客对木马的开发和剖析 黑客技术 第15张

客户端程序调用该函数来完成与远程服务器的连接。

参数说明如下。

(1)s:客户端创建的套接字。

(2)name:该结构中保安了要服务器端中的IP地址和端口号。

(3)namelen:指定name缓冲区的长度。

具体进行通信的函数分为两类,一类是基于TCP协议的。另一类是基于UDP协议的,数据的通信主要体现在数据的手法上,分别看一下这两种协议的手法数据的函数定义。

基于TCP的发送函数:

黑客对木马的开发和剖析 黑客技术 第16张

参数说明如下。

(1)s:指定发送端套接字描述符。

(2) buf:指明一个存放应用程序要发送数据的缓冲区。

(3) len:指明实际要发送到数据的字节数。

(4) flaga:一般设置为0。

基于TCP的接收函数;

黑客对木马的开发和剖析 黑客技术 第17张

参数说明如下。

(1)s:指定接收端套接字描述符。

(2)buf:指定一个缓冲区,用来存放接收到的数据。

(3) len:指定缓冲区的长度。

(4) flags:一般设置为0。

基于UDP的发送函数:

黑客对木马的开发和剖析 黑客技术 第18张

基于UDP的接收函数:

黑客对木马的开发和剖析 黑客技术 第19张

字节顺序

数据在存储器中是按一定方式的,根据不同的CPU架构,其存储方式也不相同。比如Intc:l x86CPU架构使用小尾顺序,即高位存放高字节,低位存放低字节。例如Ox12345678,在内存里的表示方式为78 56 34 12。

还有一种是大尾方式,即技网络字节顺序,也就是说所有的网络中传输的数据使用的均是大尾方式。大尾方式是高位存放低字节,低位存放高字节。例如Ox12345678.在内存里的表示方式为12 34 56 78.如图2-1所示。

黑客对木马的开发和剖析 黑客技术 第20张

本地字节顺序根据CPU架构的不同可能是小尾方式,也可能是大尾方式,但是对于嘲络字节顺序来说,一定是大尾方式。Winsock提供了一些用来处理本地的字节顺序和网络的字节顺序的转换函数。这些函数如下:

本地字节顺序转换为网络字节顺序:

黑客对木马的开发和剖析 黑客技术 第21张

网络字节顺序转换为本地字节顺序:

黑客对木马的开发和剖析 黑客技术 第22张

当我们在调试软件的时候,经常会在内存中查找某一个数据,但是怎么也找不到,在这个时候就应该想到字节顺序的问题。在做破解和外挂的时候,不了解这些基本概念的话经常会感到困惑,请大家一定要注意这个细小的问题。

简单的通信程序

网络通信方面的基础函数我们已经了解了一些,把这些知识都连起来,就可以编写一个网络程序了。我们分别来写一个基于TCP协议和基于UDP协泌的小程序。这是一个非常经典的程序,就是在编程界举世闻名的输出“Hello World !!的程序,只不过是Winsock版本。

基于TCP协议的“Hello World!”

服务器端的代码编写流程如下:

黑客对木马的开发和剖析 黑客技术 第23张

只要把这些函数依次写完,服务器端的代码就写完了。

服务器端代码如下:

黑客对木马的开发和剖析 黑客技术 第24张

黑客对木马的开发和剖析 黑客技术 第25张

客户端的代码编写流程如下:

黑客对木马的开发和剖析 黑客技术 第26张

客户端的流程比服务器端的流程要更少一些,主要是省去了绑定IP和端口、监听等一些步骤。

客户端代码如下:

黑客对木马的开发和剖析 黑客技术 第27张

在上面的代码中,我们只是简单地把所有的API函数都串起来写了一遍,就能实现想要的功能。但是请注意,大家在写的时候一定要把所有函数的返回值加以判断,形成一个好的习惯。

基于UDP协议的“Hello World!”

UDP客户端与服务器端的编写方法与TCP的相似,只要注意其中的差别就可以了。服务端代码如下:

黑客对木马的开发和剖析 黑客技术 第28张

客户端代码如下:

黑客对木马的开发和剖析 黑客技术 第29张

黑客对木马的开发和剖析 黑客技术 第30张

实现一个C/S模式的简单木马

C/S模式的木马的工作方式和网上聊天的工作方式没什么差别,都是基于TCP/IP协议的通信,都是在传递信息,不同的是,木马的客户端向服务器端发送的内容是控制命令,服务器端受到控制命令执行相应的功能,并将执行结果反馈给客户端,这就是远程控制,如果客户端加一些隐藏进程,复制自身到系统目录,然后自动启动........那么服务端就是一个木马了。

这个木马主要实现以下几个简单的功能:

(1)完成帮助命令的发送。

(2)可以查看远程主机的相关信息,以及把自身复制到可执行目录中。

(3)打开光驱和关闭光驱。

4)交换鼠标左右键和恢复鼠标左右键功能。

木马服务器端的实现

这里,由于有一些内容还没有学到,所以暂时不去实现,在后面的章节里,在把木马的内容充实起来,不过这仅仅是学习,要开发一个专业的木马并不是一件容易的事情,最关键的是,我们做的一切都是为了学习编程,为了学习计算机安全,而不是为了搞破坏,希望大家谨记在新。

我们的木马是命令行下的木马,所以当实现功能多了以后很多命令就会忘记。为了方便使用,在木马中加入帮助系统,也就是在输入指定的命令后,客户端会把命令发给我们,把相关定义的命令定义成宏,方便我们修改,定义如下:

 

黑客对木马的开发和剖析 黑客技术 第31张

这里有个问题,这命令是定义在客户端好,还是定义在服务器端好?定义在客户端当我们查看命令字的时候,省去了一次网络的通信传输,速度相对较快,但是,我们的木马客户端只是简单的发送命令,服务器端根据不同的命令开完成相对应的功能,从这样的角度来看。可能客户端基本上定下来以后就不在变了,而有变化的就是服务器端了,当连接了木马的服务器端以后,要确定当前连接的木马提供多少种功能,为了确定木马能执行哪些功能,因此笔者认为帮助定义在服务器端较好。

我们的木马主体形式是接受命令,其实就是让recv()函数接收字符串,根据接收的字符串进行匹配从而完成相应的动作,代码的大体形式如下:

黑客对木马的开发和剖析 黑客技术 第32张

以上代码是用来进行循环接收命令的,分发命令的部分就是一些判断和比较了,如下:

黑客对木马的开发和剖析 黑客技术 第33张

根据前面列举的那些功能我们逐个实现。

首先是完成帮助命令的发送,这个非常简单,只要调用send()就可以完成了,代码如下。

黑客对木马的开发和剖析 黑客技术 第34张

对于复制到系统目录这个功能大家请参考别的文章,但是对于获得系统的信息,就需要修改一下了,不能直接输出,而是需要定义一下结构体保存获取到的信息,以便发送给客户端,结构体如下:

黑客对木马的开发和剖析 黑客技术 第35张

把获取到的信息保存在该结构体中,发送给客户端就可以了,客户端的显示与别的文章中介绍的类似,发送代码如下:

黑客对木马的开发和剖析 黑客技术 第36张

对于光驱的打开与关闭,交换与恢复鼠标左右键功能的实现也非常简单,函数原型如下:

黑客对木马的开发和剖析 黑客技术 第37张

不过这两个函数进行介绍了,直接看代码吧。

黑客对木马的开发和剖析 黑客技术 第38张

黑客对木马的开发和剖析 黑客技术 第39张

以上就是木马服务器端的全部代码了,我们只是把一些简单的知识连贯起来使用,就是一个木马了。

木马客户端的实现

木马客户端的代码就是完成字符串的发送,代码非常简单,直接看完整的源代码。

黑客对木马的开发和剖析 黑客技术 第40张

黑客对木马的开发和剖析 黑客技术 第41张

上面是一个最简单C/S模式的木马,是不是很简单啊?感觉我们的小马很瘦是吧?不足以日行千里吧?有奢求,有欲望是好的,在后面的章节当中大家可以慢慢的不足这匹马儿的功能,在此提醒,本文章的目的是和大家学习黑客编程,旨在通过黑客编程学习系统知识和安全知识,并非拿来做坏事的。

总结

本章的内容简单易学,不会因为过多的复杂难懂的代码而让大家失去了学习的热情,也许你觉得意犹未尽,也许觉得不够深入,我呢吧的学习目标就是通过简单的知识,完成实现特定功能的程序,在后面的学习过程中,我们仍然以这种方式进行学习,也会随着这种学习方式逐步的深入了解编程知识。



文章由天启科技原创,抄袭必究,转载请注明:
本文地址:http://www.goodgoodhack.com/a/heikemuma/2423.html
文章由天启科技站长黑杰克原创,免费学习黑客技术,业务联系站长QQ9326665

最新视频