文章作者:风泽[EST]
创作时间:2004-9-2
如果你是一个对安全很重视的网络管理员,如果你管理的计算机网络装的是WINDOWS 2000系统的话,相信对系统的安全设置时做重复的动作会使你感到郁闷,有没有想到让程序来帮你完成这些重复的工作呢?其实对系统进行设置大多数都是在操作注册表,所以用程序很容易就可以实现了,简简单单的一个程序就可以让你轻松许多。今天我就来简单的实现一个安全设置程序。
操作系统:WINDOWS 2000 PRO
实验目的:优化操作系统
大体思路:通过API函数对系统的注册表进行操作,调用SYSTEM()函数执行一些系统命令。
先介绍几个函数:
NO.1
system(char *command)
说明:
发出一个DOS命令
NO.2
LONG RegOpenKeyEx (HKEY hkey,
LPCTSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult)
说明
打开一个现有的项。在win32下推荐使用这个函数
hKey 一个已打开项的句柄,或指定一个标准项名
lpSubKey 欲打开注册表项的名字
ulOptions 未用,设为零
samDesired 带有前缀KEY_??的一个或多个常数。它们的组合描述了允许对这个项进行哪些操作
phkResult 用于装载打开项的名字的一个变量
NO.3
LONG RegSetValueEx(HEKY hkey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
CONST BYTE *lpData,
DWORD cbData)
说明
设置指定项的值
hKey 一个已打开项的句柄,或指定一个标准项名
lpValueName 要设置值的名字
Reserved 未用,设为零
dwType 要设置的数量类型
lpData 包含数据的缓冲区中的第一个字节
cbData 缓冲区的长度
NO.4
RegCloseKey (HKEY hKey)
说明
关闭系统注册表中的一个项(或键)
hKey 要关闭的项
好了,仔细看了上面的函数相信你有个大概的了解了吧,我们来具体看看如何编写这个程序吧。首先我们要关闭系统的默认共享,利用system函数执行系统命令,当然这个方法比较笨,但实现起来比较简单啊,觉得适合我们编程菜鸟。
void delshare()
{
system("@net share c$ /del");
system("@net share d$ /del"); /* 多数计算机是4个分区,如果你管理的计算机有很多分区的话
system("@net share e$ /del"); 可以自己添加,如果你愿意可以把a-z都写上去:P */
system("@net share f$ /del");
system("@net share admin$ /del");
}
如果你还有什么需要执行的命令就加上去吧,比如关闭服务啊,建立用户什么的。
什么是注册表呢?
简单的说注册表是一个庞大的数据库,用来存储计算机软硬件的各种配置数据。
修改注册表就等于修改计算机的配置,所以很多安全设置都是对注册表进行操作,我们来具体看看操作注册表的函数吧。
bool regset()
{
HKEY hkresult1;
HKEY hkresult2;
DWORD cbdata=4;
char lpdA[4];
char lpdB[4];
LPCTSTR data1="SYSTEM//CurrentControlSet//Services//NetBT//Parameters"; //设置要打开的位置
LPCTSTR data2="SYSTEM//CurrentControlSet//Control//Lsa";
RegOpenKeyEx( HKEY_LOCAL_MACHINE, //打开注册表[HKEY_LOCAL_MACHINE/ data1, SYSTEM/CurrentControlSet/Services/NetBT/Parameters]
0,
KEY_ALL_ACCESS,
&hkresult1 );
RegOpenKeyEx( HKEY_LOCAL_MACHINE, //打开注册表[HKEY_LOCAL_MACHINE/
data2, SYSTEM/CurrentControlSet/Control/Lsa]
0,
KEY_ALL_ACCESS,
&hkresult2 );
lpdA[0]=1;lpdA[1]=0;lpdA[2]=0;lpdA[3]=0; //定义修改的值
lpdB[0]=0;lpdB[1]=0;lpdB[2]=0;lpdB[3]=0;
RegSetValueEx( hkresult1,
"SMBDeviceEnabled", //对注册表进行设置,此设置为关闭445端口
0,
REG_DWORD,
(const unsigned char *)lpdB,
cbdata);
RegSetValueEx( hkresult1,
"restrictanonymous", //此设置为禁止IPC$空连接
0,
REG_DWORD,
(const unsigned char *)lpdA,
cbdata);
RegCloseKey(hkresult1); //关闭注册表
RegCloseKey(hkresult2);
}
这个函数我们就实现了2个设置,如果你还需要更多一点的设置的话可以自己添加,或者调用RegCreateKeyEx来创建一个新的项, 是不是很简单?以后要设置几百台机器或者更多机器的话,就不会觉得太累了吧。如果以上代码看懂了,我想你自己写一个修复恶意网页非法修改注册表的工具应该很容易了。
后语:API函数中对注册表操作的函数还有很多,如果你有兴趣的话可以自己多研究研究,写出强大的注册表操作软件,到时候别忘了扔一个给我玩玩
创作时间:2004-9-2
如果你是一个对安全很重视的网络管理员,如果你管理的计算机网络装的是WINDOWS 2000系统的话,相信对系统的安全设置时做重复的动作会使你感到郁闷,有没有想到让程序来帮你完成这些重复的工作呢?其实对系统进行设置大多数都是在操作注册表,所以用程序很容易就可以实现了,简简单单的一个程序就可以让你轻松许多。今天我就来简单的实现一个安全设置程序。
操作系统:WINDOWS 2000 PRO
实验目的:优化操作系统
大体思路:通过API函数对系统的注册表进行操作,调用SYSTEM()函数执行一些系统命令。
先介绍几个函数:
NO.1
system(char *command)
说明:
发出一个DOS命令
NO.2
LONG RegOpenKeyEx (HKEY hkey,
LPCTSTR lpSubKey,
DWORD ulOptions,
REGSAM samDesired,
PHKEY phkResult)
说明
打开一个现有的项。在win32下推荐使用这个函数
hKey 一个已打开项的句柄,或指定一个标准项名
lpSubKey 欲打开注册表项的名字
ulOptions 未用,设为零
samDesired 带有前缀KEY_??的一个或多个常数。它们的组合描述了允许对这个项进行哪些操作
phkResult 用于装载打开项的名字的一个变量
NO.3
LONG RegSetValueEx(HEKY hkey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
CONST BYTE *lpData,
DWORD cbData)
说明
设置指定项的值
hKey 一个已打开项的句柄,或指定一个标准项名
lpValueName 要设置值的名字
Reserved 未用,设为零
dwType 要设置的数量类型
lpData 包含数据的缓冲区中的第一个字节
cbData 缓冲区的长度
NO.4
RegCloseKey (HKEY hKey)
说明
关闭系统注册表中的一个项(或键)
hKey 要关闭的项
好了,仔细看了上面的函数相信你有个大概的了解了吧,我们来具体看看如何编写这个程序吧。首先我们要关闭系统的默认共享,利用system函数执行系统命令,当然这个方法比较笨,但实现起来比较简单啊,觉得适合我们编程菜鸟。
void delshare()
{
system("@net share c$ /del");
system("@net share d$ /del"); /* 多数计算机是4个分区,如果你管理的计算机有很多分区的话
system("@net share e$ /del"); 可以自己添加,如果你愿意可以把a-z都写上去:P */
system("@net share f$ /del");
system("@net share admin$ /del");
}
如果你还有什么需要执行的命令就加上去吧,比如关闭服务啊,建立用户什么的。
什么是注册表呢?
简单的说注册表是一个庞大的数据库,用来存储计算机软硬件的各种配置数据。
修改注册表就等于修改计算机的配置,所以很多安全设置都是对注册表进行操作,我们来具体看看操作注册表的函数吧。
bool regset()
{
HKEY hkresult1;
HKEY hkresult2;
DWORD cbdata=4;
char lpdA[4];
char lpdB[4];
LPCTSTR data1="SYSTEM//CurrentControlSet//Services//NetBT//Parameters"; //设置要打开的位置
LPCTSTR data2="SYSTEM//CurrentControlSet//Control//Lsa";
RegOpenKeyEx( HKEY_LOCAL_MACHINE, //打开注册表[HKEY_LOCAL_MACHINE/ data1, SYSTEM/CurrentControlSet/Services/NetBT/Parameters]
0,
KEY_ALL_ACCESS,
&hkresult1 );
RegOpenKeyEx( HKEY_LOCAL_MACHINE, //打开注册表[HKEY_LOCAL_MACHINE/
data2, SYSTEM/CurrentControlSet/Control/Lsa]
0,
KEY_ALL_ACCESS,
&hkresult2 );
lpdA[0]=1;lpdA[1]=0;lpdA[2]=0;lpdA[3]=0; //定义修改的值
lpdB[0]=0;lpdB[1]=0;lpdB[2]=0;lpdB[3]=0;
RegSetValueEx( hkresult1,
"SMBDeviceEnabled", //对注册表进行设置,此设置为关闭445端口
0,
REG_DWORD,
(const unsigned char *)lpdB,
cbdata);
RegSetValueEx( hkresult1,
"restrictanonymous", //此设置为禁止IPC$空连接
0,
REG_DWORD,
(const unsigned char *)lpdA,
cbdata);
RegCloseKey(hkresult1); //关闭注册表
RegCloseKey(hkresult2);
}
这个函数我们就实现了2个设置,如果你还需要更多一点的设置的话可以自己添加,或者调用RegCreateKeyEx来创建一个新的项, 是不是很简单?以后要设置几百台机器或者更多机器的话,就不会觉得太累了吧。如果以上代码看懂了,我想你自己写一个修复恶意网页非法修改注册表的工具应该很容易了。
后语:API函数中对注册表操作的函数还有很多,如果你有兴趣的话可以自己多研究研究,写出强大的注册表操作软件,到时候别忘了扔一个给我玩玩