[转贴]关于木马
安全知识:活剥木马
作者: Administrator
2005-08-30
如今的黑客已经开始越来越背离技术本身,甚至那些只会针对Windows 98老掉牙的共享漏洞,使用最简单的木马工具去攻击别人的人也开始宣称自己是黑客。黑客真的贬值了,它从一个代表网络技术的高贵名词变成了一个小偷都可以挂在头上的低级绰号。黑客的真正含义开始被人逐渐的淡忘……
今天我希望透过介绍编写木马的思路帮你推开黑客技术的大门,带你进入一个全新的黑客世界!
马要跑还要做
使用那些在网络中已经流传甚广的木马并不是一件什么光彩的事情,至少在我看来那不是一种值得炫耀的技术,当然也就更谈不上是黑客技术了。如果你真的很钟爱木马这种技术,那么至少也要会编写木马才能够称之为“初级黑客”。否则在不了解Internet运行机制的情况下,仅仅一味使用现成的工具,然后照猫画虎的操作一番,对你的网络技能不会很有很大的提高。
很多菜鸟在学会使用黑客工具之后也希望能够编写出自己的工具,而木马往往是他们最希望编写的。在这些渴望编写黑客程序的新手中,有90%的人问我的第一个问题是学习什么语言或者使用什么编程工具来编写木马。对于他们来说,在众多语言中选择一门合适的语言是迈向成功的关键。虽然我本身使用C++,但是对于新手,推荐的编程语言却往往是Delphi。
原因很简单,Delphi强大的控件功能会让编程者像使用VB一样方便。举一个例子,如果你打算组装一部汽车,那么C++可能是一台车床,它能够帮你制作出汽车的所有部件,不过你至少需要了解每一个部件的原理。而Delphi和VB则像是一个大的杂货箱,你只需要在箱子里找到适合的发动机、轮胎、车壳,就完全可以根据你的设想来组装汽车了。当然这样说可能有些偏见,不过我认为Delphi的控件功能的确会让很多人事半功倍,而且Delphi可控制的东西非常多,并且它能够和C++ Builder完美的结合。
最后需要说的是,如果你想编写木马,就最好不要选择VB作为编写工具。曾经有位菜鸟执着于VB,当然或许因为VB简单易懂。苦练一年后他成功编写出了一款VB木马发给我,我毫不犹豫地执行了,不过很不幸,他没有控制我,因为我的计算机中没有VB6的动态链接库,而且每一次重新启动计算机时系统会提醒我,一个在注册表启动组的程序强烈要求我安装VB库,这的确很搞笑。当然我并不是否定VB,至少在我看来,VB能够开发出相当不错的扫描软件和一些简单的端口蜜罐之类的准黑客程序。如果将VB作为你进入编程世界的入门程序来学,也是不错的选择。
窗户纸后的技术
语言和工具固然重要,但是如果想开发自己的黑客程序,了解有关网络通讯和网络编程方面的技术才是真正的核心。在把语言的基础打牢固之后,你就要了解例如编写Winsock应用程序的基本方法了。Winsock是一种标准API(application programming interface,应用程序编程接口),主要用于网络中的数据通信,它允许两个或者多个应用程序、进程在同一台计算机上通过网络互相通信。通过了解Winsock,你可以了解有关木马的客户端和服务端的API函数,还有流编程等有关知识。
在你懂得Winsock的设计原理之后,网络协议也是你编写优秀木马所需要的必要知识。其实在你实际编写木马的过程中,你会发现木马的编写与编写一个远程通讯工具没有太多本质的区别,所用到的原理很多是一样的,而选择Delphi编写木马会更加简单一些。ClentSocket和ServerSocket这两个控件对应着木马的客户端和服务器端,你只要在这两个控件上添加一些简单的命令,将你所需要实现的想法描绘进去,Delphi自然会将木马呈现在你面前。
网络中流传着许多远程控制软件的源代码,阅读理解那些源代码也是一种很好的学习方式。特别是老牌的如BO2000之类的经典代码,它会给你很多木马编写的思路。但是在编写自己的第一个远程控制程序时,我并不希望你将这个木马做得很完善,你只需要做一个上传、下载、远程执行的命令就完全可以了。
伪装的手段
在掌握初步的木马制作手段之后,你需要完善的就只剩下扩充木马的具体功能了,例如截获网络程序的密码等等。许多网络游戏木马,就是以截取网络游戏的用户名和密码为目的。我看了看,多数的程序都写得非常简单,它们都会跟踪Windows GUI,或者直接让木马使用API跟踪游戏的窗口,然后再用木马将密码截获。截获后通过SMTP的邮件将密码和用户名发送到指定的邮箱中。这些木马或许现在在你看来非常的神秘,但是其实这些东西没有任何技术可言,它们使用的手段都是Windows编程的基本知识,你可以直接在网络中找到很多相关教程。
很多人将木马程序做到这一步时都会对DLL或者对Win32的钩子感兴趣,其实钩子仅仅是一个处理消息的程序段,通过系统调用,把它自身挂入系统,每当有特定的消息发出时,没有到达窗口前,钩子程序就先截获该消息。钩子是制作木马程序的关键,因为不同的钩子可以截获不同的信息,处理不同的任务。例如键盘钩子可以截获键盘记录,而鼠标钩子可以截获鼠标的运动消息,外壳钩子是截获启动和关闭应用程序消息的关键,而日志钩子则可以监视和记录所有的输入事件。
杀死进程对木马来说也很重要,特别是当你决定利用自己的小木马将一些有杀伤力的木马植入对方计算机的时候,杀死进程就显得尤为重要了。其实系统进程的关闭很简单,因为Windows操作系统本身就包含有一个进程链表,用来保存当前运行的所有进程的信息。在VC++中,通过程序调用函数CreateToolhelp32Snapshot就可以获得进程链表的句柄,然后调用函数Process32First和Process32Netxt可以获得进程的结构Processntry32,对方计算机的进程信息和可以执行文件名与进程ID号都会包含其中。调用OpenProcess函数就可以直接获得指定函数的句柄,然后调用TerminateProcess函数消灭掉指定的进程,就是如此的简单。
编后:其实木马编写非常简单,等你理解了语言,理解了网络通信的过程,再了解一些如何伪装程序的方法,那时编写木马就如同搭积木一样简单。掌握好正确的接口、函数和方法手段,相信用不了多长时间,你就可以拼凑出自己的木马程序了。当然,我希望此时的你已经有了更高的目标,而不需要再紧盯住木马这个东西不放了。
最近更新 ( 2005-08-30 )