请输入关键字
Windows信息安全
Alin|2019-5-30

以下内容来自作者甘迪文所写。

对于一个病毒木马来说,重要的不仅是如何进行破坏,还有如何执行。正如一件事,重要的不仅是如何做好,还有如何开头。病毒木马只有加载到内存中开始运行,才能够真正体现出它的破坏力。否则,它只是一个普通的磁盘文件,对于计算机用户的数据、隐私构不成任何威胁。

即使成功植入模块并启动攻击模块,依然不能解决永久驻留的问题。解决永久驻留的第一步便是如何实现伴随系统启动而启动的问题,即开机自启动。这样,即使用户关机重启,病毒木马也能随着系统的启动,而由系统加载到内存中运行,从而窃取用户数据和隐私。因此,开机自启动技术是病毒木马至关重要的技术,也是杀软重点监测的技术。对于杀软来说,只要把守住自启动的入口,就可以把病毒木马扼杀在摇篮之中。

 

 利用注册表实现开机自启动 

 

为方便用户使用,无论是恶意程序还是正常的应用软件,都不用人为地去运行程序,程序都会提供开机自启动功能,这样就可以伴随系统启动而自己运行起来。由于开机自启动功能的特殊性,它一直都是杀软和病毒木马重点博弈的地方。

实现开机自启动的途径和方式有很多种,其中修改注册表方式应用最为广泛。注册表相当是操作系统的数据库,记录着系统中方方面面的数据,其中也不乏直接或间接导致开机自启动的数据。本节介绍向Run注册表中添加程序路径的方式,以实现开机自启动。

 函数介绍 

1.RegOpenKeyEx函数:打开一个指定的注册表键。

2.RegSetValueEx函数:在注册表项下设置指定值的数据和类型。

 实现原理 

理解修改注册表实现开机自启动功能的一个重要前提就是,Windows提供了专门的开机自启动注册表。在每次开机完成后,它都会在这个注册表键下遍历键值,以获取键值中的程序路径,并创建进程启动程序。所以,要想修改注册表实现开机自启动,只需要在这个注册表键下添加想要设置自启动程序的程序路径就可以了。

本节介绍两种修改注册表的方式,它们的主要区别在于注册表键路径。本节介绍其中常见的两个路径,分别是:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

以及

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

这两个路径之间的区别仅是主键不同,一个是HKEY_CURRENT_USER,另一个是HKEY_LOCAL_MACHINE。但是,二者功能是相似的,它们都可以实现开机自启动。

了解上述知识点后,你应该知道,程序实现的原理就是对上面两个注册表键设置一个新的键值,写入自启动程序的路径。

其中,需要注意的是,修改注册表的权限问题。在编程实现上,要修改HKEY_LOCAL_ MACHINE主键的注册表,这要求程序要有管理员权限。而修改HKEY_CURRENT_USER主键的注册表,只需要用户默认权限就可以实现。

如果程序运行在64位Windows系统上,则需要注意注册表重定位的问题。在64位Windows系统中,为了兼容32位程序的正常执行,64位的Windows系统采用重定向机制。系统为关键的文件夹和关键注册表创建了两个副本,使得32位程序在 64位系统上不仅能操作关键文件夹和关键注册表,还可以避免与64位程序冲突。

 编码实现 

 
BOOLReg_CurrentUser(char *lpszFileName, char *lpszValueName){    //默认权限    HKEYhKey;    //打开注册表键    if(ERROR_SUCCESS != ::RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\ CurrentVersion\\Run", 0, KEY_WRITE, &hKey))    {        ShowError("RegOpenKeyEx");        returnFALSE;    }    //修改注册表值,实现开机自启动    if(ERROR_SUCCESS != ::RegSetValueEx(hKey, lpszValueName, 0, REG_SZ, (BYTE*)lpszFileName, (1 + ::lstrlen(lpszFileName))))    {        ::RegCloseKey(hKey);        ShowError("RegSetValueEx");        returnFALSE;    }    //关闭注册表键    ::RegCloseKey(hKey);     returnTRUE;}

测试 

在64位系统上运行程序,分别向注册表

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

以及

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

 中添加“520”键值,并输入数据。程序执行完毕后,直接打开系统注册表编辑工具Regedit.exe查看对应注册表路径下的键值信息。

查看HKEY_CURRENT_USER可知对应注册表路径中存在“520”键值,如图5-1所示,说明向HKEY_CURRENT_USER中添加成功。

 

图5-1  HKEY_CURRENT_USER中的“520”键值

而观察HKEY_LOCAL_MACHINE可知,在对应注册表路径下并不存在“520”键值。难道程序出错了吗?其实,程序并没有问题,而是在64位系统中关键的注册表被重定位了。重定位后的路径是:

HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run

 到重定位后的路径查看可知存在键值“520”,如图5-2所示,说明程序添加成功。

 

图5-2  注册表重定位后的“520”键值

关机重启计算机,对应路径的程序成功实现开机自启动。

小结 

对于上面的程序,需要注意以下两点:

一是权限问题:在编程实现上,要想修改HKEY_LOCAL_MACHINE主键的注册表,要求程序拥有管理员权限。而修改HKEY_CURRENT_USER主键的注册表,只需要用户默认权限就可以实现。

二是注册表重定位问题:在 64 位系统上,系统注册表会有注册表重定位的问题。

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

会重定位到

HKEY_LOCAL_MACHINE\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run

 在程序中,可以打开RegOpenKeyEx函数设置KEY_WOW64_64KEY访问标志,从而避免重定位的影响,直接访问指定的注册表路径。

 安全小贴士 

直接枚举上述开机自启动注册表键中的键值,可以获取开机启动项的信息。

 

作者介绍

甘迪文,北京邮电大学网络空间安全学院在读研究生,2019 年秋季即将步入清华大学攻读软件工程专业的博士学位,Write-Bug 技术共享平台(www.write-bug.com)创始人。对信息安全领域兴趣颇深,常利用课余时间自学和钻研安全开发技术。擅长 Windows 系统安全程序开发,熟悉 Windows 内核编程,闲来无事之时喜欢开发功能各异的小软件。

曾荣获异步社区“2018年异步社区优秀作者奖”,异步社区是依托于人民邮电出版社20余年IT专业优质出版资源和编辑策划团队的国内领先IT专业图书社区。

内容介绍

近年来,全球大规模爆发勒索病毒和挖矿病毒,让沉寂许久的黑客技术,又重新回到了人们的视野中。Windows操作系统市场占有率高达90%以上,所以面对勒索病毒、挖矿病毒,Windows用户首当其冲。为了揭开病毒木马的神秘面纱,更好地服务于信息安全,《Windows黑客编程技术详解》总结并剖析了常见的Windows黑客编程技术,用通俗易懂的语言介绍了用户层下的Windows编程和内核层下的Rootkit编程。 

赞一下18||已浏览1804

本站版本归木之林解释所有 copyright(C)2010-2025www.mzlin.net 备案/许可证编号为:粤ICP备15050036号