5

走进计算机病毒-基础知识

 2 years ago
source link: https://blog.csdn.net/ookami6497/article/details/123301146
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

目录

进程与线程的关系

动态链接库

服务

注册表

病毒对注册表的利用

1.和Run键相关的项

(1)Run键是病毒最青睐的自启动之处,该键的位置有两处

 (2)RunOnce

(3)RunServicesOnce

(4)RunServices

(5)RunOnceEx

2.Run相关以外的自启动项

(1)UserInit

 (2)load键

查看注册表自启动项的工具 Autoruns.exe

利用注册表改变文本文件所关联的程序

通常解决病毒修改文件关联的问题可以用以下方法,以.txt为例子

1.直接改注册表

2.利用文件夹选项对话框

 利用注册表禁止某些程序的运行

说明:

解决办法


进程与线程的关系

线程是执行任务,完成功能的基本单位,而进程则为线程提供了生存空间和线程所需要的其他资源,程序则是包含资源分配管理代码以及线程执行调度代码的一个静态计算机代码集合

动态链接库

动态链接库DLL,它是Dynamic Link Library的缩写形式。动态链接库(DLL)是作为共享函数库的可执行文件(这里所谓的DLL是可执行程序,也是PE格式的文件,但是它不能够独立运行,只能够通过其他课运行的程序加载到内存中执行功能)。动态链接库提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。

虽然动态链接库不能运行,但是同一个动态链接库可以同时被多个进程加载到内存中,并且执行DLL中的功能。计算机病毒通常将病毒代码写到一个DLL文件中,然后想尽一切办法将此病毒代码加载到系统的某个进程中,如Explorer.exe桌面进程,这样Explorer.exe就会运行病毒代码了。这也是通常所说的病毒注入技术。

windows 系统的许多功能都是通过服务来实现的。简单来讲可以将服务理解为在后台完成系统任务的程序,比如自动获取更新或者管理打印服务等。服务与系统的核心相关并拥有各种权限,因此一旦被不法分子掌握,很可能导致操作系统崩溃。比如2003年8月发作的冲击波(Worm.Blaster)病毒,它利用了RPC(Remote Procedure Call,远程过程调用)服务的漏洞,而RPC则是Windows XP必须运行的服务之一,该病毒发作时,你的计算机将会在60秒内自动关闭。

注册表

注册表指在Windows中使用的中央分层数据库,用于存储一个或多个用户、应用程序和硬件设备配置系统所必须的信息。注册表包含Windows在运行期间不断引用的信息,例如,每个用户的配置文件、计算机上安装的应用程序可以创建的文档类型、正在使用哪些端口以及包含了有关计算机如何运行的信息。

启动方法 Win + R -> regedit  

 HKEY_USERS保存着默认用户信息和当前登录用户信息。当一个域成员计算机启动并且被一个用户登录,域控制器自动将信息发送到HKEY_CURRENT_USER里,而且这个信息被映射到系统内存中。其他用户的信息并不发送到系统,而是记录在域控制器里。

病毒对注册表的利用

(注:最好在虚拟机中实验)打开注册表,点开如下路径,右键->新建字符串,可以自由取名,然后双击编辑,在数值数据中填入记事本程序所在路径。

重新启动虚拟机,记事本就会自动运行起来了

 实际上除了注册表中的Run项,能够实现程序自启动的注册表项非常多

1.和Run键相关的项

(1)Run键是病毒最青睐的自启动之处,该键的位置有两处

可以看到这里是虚拟机工具的自启位置 

 位于这两个键下的所有程序在每次启动登录时都会按顺序自动执行。

还有一个不被注意的Run键,位于注册表如下两个键位置

[HKEY_CURRENT_USER\Software\Mircrosoft\Windows\CurrentVersion\Policies\Explorer\Run]

[HKEY_LOCAL_MACHINE\SOFTWARE\Mircrosoft\Windows\CurrentVersion\Policies\Explorer\Run]

但是我看了下我的win7虚拟机,没有这两个键,应该是Windows版本不同的问题

 (2)RunOnce

[HKEY_CURRENT_USER\Software\Mircrosoft\Windows\CurrentVersion\RunOnce]

[HKEY_LOCAL_MACHINE\SOFTWARE\Mircrosoft\Windows\CurrentVersion\RunOnce]

这两个键下的程序也可以自启动,但是与Run键不同的是,RunOnce下的程序仅会被自启动一次

(3)RunServicesOnce

[HKEY_CURRENT_USER\Software\Mircrosoft\Windows\CurrentVersion\RunServicesOnce]

[HKEY_LOCAL_MACHINE\SOFTWARE\Mircrosoft\Windows\CurrentVersion\RunServicesOnce]

这两个键下的程序会在系统加载时自动启动,并且仅仅执行一次

(4)RunServices

[HKEY_CURRENT_USER\Software\Mircrosoft\Windows\CurrentVersion\RunServices]

[HKEY_LOCAL_MACHINE\SOFTWARE\Mircrosoft\Windows\CurrentVersion\RunServices]

RunServices是继RunServicesOnce之后启动的程序

(5)RunOnceEx

[HKEY_CURRENT_USER\Software\Mircrosoft\Windows\CurrentVersion\RunOnceEx]

[HKEY_LOCAL_MACHINE\SOFTWARE\Mircrosoft\Windows\CurrentVersion\RunOnceEx]

该键是windows xp/2003 特有的自启动注册表项

2.Run相关以外的自启动项

(1)UserInit

这个的修改和前面的不太一样,需要点开Userinit编辑,然后在后面加上你的程序,比如记事本程序

 (2)load键

[HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows\load]

这个win7也没有找到

查看注册表自启动项的工具 Autoruns.exe

该工具可列举所有能够实现程序自启动的注册表项,并且进行分类,还可以修改各个启动项的值使其直接在注册表中生效,同时可以通过右键菜单的jump to功能定位到注册表中相应的位置

利用注册表改变文本文件所关联的程序

各种类型的文件都要关联一个程序,从而使其可以被直接打开。当我们双击某种类型的文件时,如txt文件,操作系统将自动启动notepa.exe这个程序,并将此文本文件作为参数类型传递给记事本,从而使文本文件被打开。每种类型的文件实际上是通过windows注册表与相应的程序建立关联的。

  在windows注册表的以下路径:HKEY_CLASSES_ROOT(或者HKEY_LOCAL_MACHINE\Software\CLASSES ,这两个路径效果是一样的) 下存储了所有类型文件所关联的程序。

 比如上图的.txt类型的文件,展开后右边有一串默认的字符@%SystemRoot%\system32\notepad.exe,-470   如果将这个关联启动的程序替换成其他程序,那么双击.txt文件后就会运行我们所更改的程序。

注意:扩展名为.exe类型的文件是可执行的程序文件,它并不关联任何程序,双击这种类型的文件就会直接运行起来

通常解决病毒修改文件关联的问题可以用以下方法,以.txt为例子

1.直接改注册表

它改了,你就直接改回来就行

2.利用文件夹选项对话框

 利用注册表禁止某些程序的运行

计算机病毒出来利用注册表运行程序之外,还可以利用注册表禁止某些程序运行。当然被注册的程序就是对病毒生存构成威胁的程序了,如杀毒软件、防火墙等等。

提示:利用注册表禁止某个程序运行,通常将这种技术叫做镜像劫持。也就是通过注册表项的设置达到禁止某些程序启动的目的

 在上图路径下,新建一项,该项目的名字一定要注意,这个名字就是你将要禁止运行的程序的名字。例如禁用notepad.exe程序,就需要新建一个项目,名字为notepad.exe,然后再点开这个项,新建一个字符串,名称为Debugger,数值为“abc”(这是个无意义的字符,输别的也行,只要不是一个合法程序的完整路径就行)

注册表中Image File Execution Options项下的子项是一些可执行的程序,这些程序下如果建立了一个Debugger的字符串项,表示当这些程序运行之前要首先启动Debugger键值所标识的程序。其实微软公司设计这项的目的是为了调试程序,Debugger就是调试器的意思,键值字符串应该是一个调试器的绝对路径。当这里设置好后我们每次运行被拦截的程序时,操作系统会用调试的方式启动这个程序,也就是说首先启动调试器,然后用调试器去加载被拦截的程序。然而我们当时输入的是不是一个程序的有效路径。当运行记事本程序是,操作系统首先要起送abc这个调试器,可是这是一个不存在的程序路径,是非法的,系统无法找到这个调试器,于是就会弹出上图的错误提示。

当然我们不止能禁用记事本,还可以用这个方法来禁用注册表,只要将notepad.exe 换成 regedit.exe就行了

其实被截止的并不是记事本或者注册表程序,而是所有文件名为notepad.exe和regedit.exe的程序。如果我们把word.exe改名为notepad.exe,同样它也无法运行了。知道这个原理只需要将记事本换一个名字就行,比如改成book.exe,这样记事本就可以运行了。同理,只要将注册表程序regedit.exe改成a.exe,然后运行a.exe,将被劫持的regedit.exe项目删除,再将a.exe改回regedit.exe就行了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK