.
九九重阳了,再发篇文章,意思意思..........
木马编程DIY之注册表管理 文/图 冷风
九九重阳了,再发篇文章,意思意思..........
前几期分别讨论了,系统服务,文件传输,网络文本语音和其它方面的内容,现在我们来讨论在木马中注册表的实现,就我自己感觉在木马中对注册表的使用并不多,写其它程序时反倒用的不少.不过注册表还是比较重要的学会它不会吃亏呵呵,我们自己实现的效果如图所示
一些基础
开始前先了解一些基础知识,对后面的工作会方便不少,其码不会出现散晕的现像,对注册表的历史也就不再说了有兴趣可以
查查新华字典呵呵.注册表的组织方式跟文件目录比较相似,主要分为 跟键,子键,键值项 三部分跟文件目录对应的话就是
跟目录,子目录,和文件.分别介绍一下,跟键为分5个分别为HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE
HKEY_USERS,HKEY_CURRENT_CONFIG把它们理解成磁盘的五个分区可以了,子键可以有多个子键和键值项,就像一个目录中可
以有多个子目录和多个文件一样,而键值项可以理解为文件它由三部分组成,分别为 名称,类型,数据. 类型又分为多种主要
包括如下:
REG_BINARY 二进制数据
REG_DWORD 32位双字节数据
REG_SZ 以0结尾的字符串
REG_DWORD_BIG_ENDIAN 高位排在底位的双字
REG_EXPAND_SZ 扩展字符串,可以加入变量如 % PATH %
REG_LINK UNICODE 符号链接
REG_RESOURCE_LIST 设备驱动程序资源列表
REG_MULTI_SZ 多字符串
注册表数据项的数据类型有8种但最常用的主要是前3种而以,有了这些基础下面我们讨论如何编程实现对注册表的操作
打开 / 关闭注册表句柄
在对注册表操作前应该先打开指定的键,然后通过键的句柄进行操作,打开键句柄可以用API RegOpenKeyEx来实现其原形如下
RegOpenKeyEx(
hKey, // 父键句柄
lpSubKey, // 子键句柄
dwOptions, // 系统保留,指定为0
samDesired, // 打开权限
phkResult, // 返回打开句柄
)
其中打开权限有多种 想方便的话可以指定为KEY_ALL_ACCESS 这样什么权限都有了,当函数执行成功时返回ERROR_SUCCESS
其实例代码如下:
HKEY key;
LPCTSTR data = " SOFTWARE/Microsoft/Windows/CurrentVersion/Run " ;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,data, 0 ,KEY_ALL_ACCESS, & key) == ERROR_SUCCESS)
{
/*需要执行的操作...*/
}
::RegCloseKey(key);
要注意的是在使用后应该调用RegCloseKey();函数为关闭句柄.
木马编程DIY之注册表管理 文 / 图 冷风
获取子键 / 键值信息
在现实的编程操作中我们常常需要获取 子键 / 键值的信息比如:子键 / 键值的数量,长度,以及数据的最大长度等等这些信息可以
通过RegQueryInfoKey函数来获取
它的原型如下:
RegQueryInfoKey(
hkey, // 要获取信息的句柄
lpClass, // 接受创建健时的Class字符串
lpcbClass, // lpClass的长度
lpReserved, // 系统保留,指定为0
lpcSubKeys, // 子键数量
lpcbMaxSubKeyLen, // 子键中最长名称的长度
lpcbMaxClassLen, // 子键中最长Class字符串长度
lpcVlaues, // 键值数量
lpcbMaxValueNameLen, // 键值项中最长名称的长度
lpcbMaxValueLen, // 键值项数据最大长度
lpcbSecurityDescriptor, // 安全描述符长度
lpftLastWriteTime, // FILETIME结构,最后修改时间
)
哈哈是不是挺吓人的 ? 其实看实际情况接受自己需要的就好了,不需要的可以放个NULL就OK了,还有一点需要注意就是它所返回
的长度都不包括结尾的0字符,所以在使用时应该用长度 + 1
其实例代码如下
开始前先了解一些基础知识,对后面的工作会方便不少,其码不会出现散晕的现像,对注册表的历史也就不再说了有兴趣可以
查查新华字典呵呵.注册表的组织方式跟文件目录比较相似,主要分为 跟键,子键,键值项 三部分跟文件目录对应的话就是
跟目录,子目录,和文件.分别介绍一下,跟键为分5个分别为HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE
HKEY_USERS,HKEY_CURRENT_CONFIG把它们理解成磁盘的五个分区可以了,子键可以有多个子键和键值项,就像一个目录中可
以有多个子目录和多个文件一样,而键值项可以理解为文件它由三部分组成,分别为 名称,类型,数据. 类型又分为多种主要
包括如下:
REG_BINARY 二进制数据
REG_DWORD 32位双字节数据
REG_SZ 以0结尾的字符串
REG_DWORD_BIG_ENDIAN 高位排在底位的双字
REG_EXPAND_SZ 扩展字符串,可以加入变量如 % PATH %
REG_LINK UNICODE 符号链接
REG_RESOURCE_LIST 设备驱动程序资源列表
REG_MULTI_SZ 多字符串
注册表数据项的数据类型有8种但最常用的主要是前3种而以,有了这些基础下面我们讨论如何编程实现对注册表的操作
打开 / 关闭注册表句柄
在对注册表操作前应该先打开指定的键,然后通过键的句柄进行操作,打开键句柄可以用API RegOpenKeyEx来实现其原形如下
RegOpenKeyEx(
hKey, // 父键句柄
lpSubKey, // 子键句柄
dwOptions, // 系统保留,指定为0
samDesired, // 打开权限
phkResult, // 返回打开句柄
)
其中打开权限有多种 想方便的话可以指定为KEY_ALL_ACCESS 这样什么权限都有了,当函数执行成功时返回ERROR_SUCCESS
其实例代码如下:
HKEY key;
LPCTSTR data = " SOFTWARE/Microsoft/Windows/CurrentVersion/Run " ;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,data, 0 ,KEY_ALL_ACCESS, & key) == ERROR_SUCCESS)
{
/*需要执行的操作...*/
}
::RegCloseKey(key);
要注意的是在使用后应该调用RegCloseKey();函数为关闭句柄.
木马编程DIY之注册表管理 文 / 图 冷风
获取子键 / 键值信息
在现实的编程操作中我们常常需要获取 子键 / 键值的信息比如:子键 / 键值的数量,长度,以及数据的最大长度等等这些信息可以
通过RegQueryInfoKey函数来获取
它的原型如下:
RegQueryInfoKey(
hkey, // 要获取信息的句柄
lpClass, // 接受创建健时的Class字符串
lpcbClass, // lpClass的长度
lpReserved, // 系统保留,指定为0
lpcSubKeys, // 子键数量
lpcbMaxSubKeyLen, // 子键中最长名称的长度
lpcbMaxClassLen, // 子键中最长Class字符串长度
lpcVlaues, // 键值数量
lpcbMaxValueNameLen, // 键值项中最长名称的长度
lpcbMaxValueLen, // 键值项数据最大长度
lpcbSecurityDescriptor, // 安全描述符长度
lpftLastWriteTime, // FILETIME结构,最后修改时间
)
哈哈是不是挺吓人的 ? 其实看实际情况接受自己需要的就好了,不需要的可以放个NULL就OK了,还有一点需要注意就是它所返回
的长度都不包括结尾的0字符,所以在使用时应该用长度 + 1
其实例代码如下