黑客编程入门(二)

来源:互联网 发布:布依族 知乎 编辑:程序博客网 时间:2024/05/01 23:02

黑客编程入门(二)

注册表下的操作是windows下的黑客不可或缺的东西,今天我们就来用代码操作下注册表

什么是注册表?

注册表是windows下的一个数据库,用于记录我们的系统和应用程序的各项配置信息。比如它控制着我们的开机就运行的程序,我们的浏览器的主页。

我们主要用到以下几个API函数:

LONG RegOpenKey(HKEY hkey,   //父键句柄LPCTSTR lpSubKey, //要打开的子键名称PHKEY phkResult //返回的子键句柄); //打开注册表函数LONG RegCloseKey(HKEY hkey //关闭注册表的句柄); //关闭注册表函数LONG RegQueryValueEx(HKEY hkey, //打开的注册表的句柄LPCTSTR lpValueName, //要查询的键值名称LPDWORD lpReserved, //保留 使用时直接用NULLLPDWORD lpType, //返回要查询的值的类型LPBYTE lpData, //要查询数据的缓冲区LPDWORD lpcbData //缓冲区的长度); //注册表键值查询函数LONG RegSetValueEx(HKEY hkey, //打开的注册表的句柄LPCTSTR lpValueName, //被写入的键值名称DWORD Reserved, //保留 使用时直接用NULLDWORD dwType, //要写入的键值得类型CONST BYTE *lpData, //写入的键值的缓冲区DWORD cbData //写入键值缓冲区的长度); //注册表创建函数LONG RegEnumValue(HKEY hkey, //打开的注册表的句柄DWORD dwIndex, //查询的索引值LPCTSTR lpValueName, //键名的缓冲区LPDWORD lpcValueName, //键名缓冲区的长度LPDWORD lpReserved, //保留 使用时直接用NULLLPDWORD lpType, //返回要查询的值的类型LPBYTE lpData, //要查询数据的缓冲区LPDWORD lpcbData //缓冲区的长度); //注册表枚举函数LONG RegDeleteValue(HEKY heky, //打开的注册表的句柄LPCTSTR lpValueName, //要删除的键值项的名称); //注册表删除函数

这里不一一举例,下面的代码只是打印出启动项:

(使用了上面的3个API函数,打开/关闭注册表以及枚举函数 )

#include<stdio.h>#include<windows.h>#define REG_RUN "Software\\Microsoft\\Windows\\CurrentVersion\\Run"void ShowRunlist(){HKEY hkey = NULL;LONG lRet = RegOpenKey(HKEY_LOCAL_MACHINE,REG_RUN,&hkey);if (lRet != ERROR_SUCCESS){printf("打开注册表失败!\n");return ;}printf("打开注册表成功!\n");int i = 1;char szValueName[MAXBYTE] = {0};DWORD dwBufferSize = MAXBYTE;DWORD dwType = MAXBYTE;char szValueKey[MAXBYTE] = {0};DWORD dwKeySize = MAXBYTE;printf("Number\t键 名\t\t键 值\n");while(true){lRet = RegEnumValue(hkey,i,szValueName,&dwBufferSize,NULL,&dwType,(unsigned char *)szValueKey,&dwKeySize);if(lRet == ERROR_NO_MORE_ITEMS){break;}printf("%d\t%s\t%s\t\n",i,szValueName,szValueKey);i++;ZeroMemory(szValueName,MAXBYTE);ZeroMemory(szValueKey,MAXBYTE);}RegCloseKey(hkey);}int main(){ShowRunlist();return 0;}


程序运行结果图:


 

0 0
原创粉丝点击