基本概念
我们知道,注册表是一个集中管理硬件、软件配置信息的数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及应用程序的运行,并记录了各种硬件和软件的配置信息。注册表注入,顾名思义,就是将我们的想要进行的操作写入到注册表的配置信息里,通过系统加载我们的动态库完成注入。
注入原理
当应用程序被加载时,会将User32.dll映射到进程空间内,这时会触发User32动态库的DllMain函数中的DLL_PROCESS_ATTACH,进而查看注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows目录下的AppInit_DLLs是否存在需要加载的动态库路径,同时查看LoadAppInit_DLLs的值是否为1。如果为1,那么将根据路径加载所有的动态库。至此,就完成了注册表的注入。
实现过程
①调用RegOpenKeyEx函数,传入主键HKEY_LOCAL_MACHINE和子键的路径,打开注册表。
LSTATUS APIENTRY RegOpenKeyExW(
_In_ HKEY hKey, //主键
_In_opt_ LPCWSTR lpSubKey, //子键
_In_opt_ DWORD ulOptions, //选项
_In_ REGSAM samDesired, //权限
_Out_ PHKEY phkResult //返回值句柄
);
②调用RegSetValueEx设置AppInit_DLLs的值为我们的动态库路径,LoadAppInit_DLLs的值为1,表示我们希望在User32.dll被加载时加载我们的动态库。
LSTATUS APIENTRY RegSetValueExW(
_In_ HKEY hKey, //返回的句柄值
_In_opt_ LPCWSTR lpValueName, //键名
_Reserved_ DWORD Reserved,
_In_ DWORD dwType,

最低0.47元/天 解锁文章
1004

被折叠的 条评论
为什么被折叠?



