原理
病毒就是一般程序,在入侵别人计算机后,如果不运行,就没有任何意义。为了能让病毒程序能够随计算机开机启动,今天就来介绍一下通过注册表实现开机启动任意程序。首先,介绍一下注册表。
注册表就像windows系统中的一个数据库,保存着系统的各种配置。比如:开机的启动方式,各种后缀名文件的默认图标显示,禁用USB端口等,这些功能的实现都可以通过注册表实现设置。
有关注册表的介绍可以参见以下教程:
https://www.freebuf.com/articles/system/256130.html
https://www.freebuf.com/articles/es/198440.html
本文的重点来了,利用注册表启动的原理:windows提供了专门的开机自启动注册表。在每次开机完成后,计算机会自动遍历自启动注册表下的键值,获取键值中的程序路径,并创建进程启动程序。所以,要想修改注册表实现开机自启动,就需要在这个注册表键值下写入我们想要启动的程序的所在路径。
有两个比较常用的实现开机自启动的注册表键值如下:
HKEY_CURRENT_USER\Software\Mircosoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
主要就是根键不相同。当然了,还有一个不常用的:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
如果在这个键值下写入程序路径,系统会在下次开机后自启动一次。
我们可以通过API编程在以上三个注册表键下写入要启动的程序路径即可实现开机自启动。
还有一种比较隐蔽的启动方式,实现思路是通过程序启动时加载调试器,而调试器的加载可以通过设置注册表实现,其实质就是在键值下写入调试器的所在路径,而我们可以在这里写入任何程序的路径,已实现启动目的。而这个键就是:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
如需要调试notepad.exe,就可以在Image File Execution Options创建子健notepad.exe,在该子健下创建名为“Debugger”的键名,键值为要启动的程序路径名(可以为调试器也可以为任意程序)。
身为萌新,在实验这个方法时第一次并没有成功。失败原因就是键名必须为“Debugger”,不能自定义名称。而且在网上查资料才发现这个方法有一个高大上的名字叫做映像劫持。
相关API介绍
小例子
开机启动计算器
使用映像劫持的方法在启动记事本,记事本不会启动而是启动的计算器
注意
最后注意一点,在成功编写好程序后,发现注册表没有写入对应的项不要奇怪,可以刷新一下注册表或者关闭后重新打开,可能就有了。或者可能就是注册表重定位问题。
在使用映像劫持的代码时,运行后杀毒软件会弹框。
领取专属 10元无门槛券
私享最新 技术干货