JavaScript操作注册表

###浏览器的权限很低
在浏览器里面运行的JS脚本自然是无法操控外面卧虎藏龙的注册表

JavaScript

但是它可以操控浏览器上一个神奇的控件——ActiveX来间接操控注册表

ActiveX控件可以调用WScript.shell对象
WshShell对象:可以在本地运行程序、操纵注册表内容、创建快捷方式或访问系统文件夹。

如何创建WScript.shell呢
一行简单的代码就可以搞定

1
2
3
<script>
var shell = new ActiveXObject("WScript.Shell");
</script>

然后就可以用RegRead,RegWrite,RegDelete三个方法操作注册表了

看我下面的简单代码就可以明白了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<html>
<head>
<meta charset="UTF-8">
<meta name="Author" content="Kieran">

<script>
function regedit(flag){
//新建一个WScript.Shell对象
var shell = new ActiveXObject("WScript.Shell");

if(flag==6){ //关闭ActiveX运行提示
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\0\\1201","0","REG_DWORD")
}else if(flag==5){ //打开ActiveX运行提示
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\0\\1201","1","REG_DWORD")
}else if(flag==4){
//设置IE主页
var ieu=document.getElementById("ieurl").value;
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Internet Explorer\\Main\\Start Page",ieu);
}else if(flag==3){
//把当前页面添加进信任网站列表
var u=window.location.href;
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Ranges\\Range101\\","");
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Ranges\\Range101\\http","2","REG_DWORD");
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Ranges\\Range101\\:Range",u);
}else if(flag==2){
//删除上面的信任列表
shell.RegDelete("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\ZoneMap\\Ranges\\Range101\\");
}else if(flag==1){
//禁用任务管理器
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\system\\","");
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\system\\DisableTaskMgr","1","REG_DWORD");
}else if(flag==0){
//启用任务管理器
shell.RegWrite("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\system\\DisableTaskMgr","0","REG_DWORD");
}else{
//打开注册表编辑器
shell.Run("Regedit");
}
}
</script>
</head>
<body>

<button onclick="regedit(5)">关闭ActiveX提示</button>
<button onclick="regedit(5)">恢复ActiveX提示</button>
</br></br>
<input type="text" id="ieurl"/>
<button onclick="regedit(4)">设置IE首页</button>
</br></br>
<button onclick="regedit(3)">添加信任站点</button>
<button onclick="regedit(2)">删除信任站点</button>
</br></br>
<button onclick="regedit(1)">禁用任务管理器</button>
<button onclick="regedit(0)">启用任务管理器</button>
</br></br>
<button onclick="regedit(10)">运行注册表</button>

</body>
</html>

##运行后的样子大概是这样的:

JS

有几点需要注意的是:
因为我是在本地运行的,所以关于ActiveX的提示修改我也是只是修改了本地的
如果放网上或者别的地方需要修改一下安全区域项,具体可以看下面

###注册表有关安全设置项的说明:
注册表路径:
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones

1
2
3
4
5
6
7
8
9
10
Zones 项包含表示为计算机定义的每个安全区域的项。
默认情况下,定义以下 5个区域(编号从0到4):

值 设置
------------------------------
0 我的电脑
1 本地Internet区域
2 受信任的站点区域
3 Internet 区域
4 受限制的站点区域

说实话还是挺鸡肋的,首先运行条件必须是IE,一般用户不会修改默认设置,那么打开页面会(IE6是上面,IE11是下面)提示…是否允许运行被阻止的内容云云,一般已经一半人叉叉叉掉了,然后点按钮运行ActiveX的时候还会弹窗提醒(第一次必然有提醒,执行禁用提醒之前肯定会提醒)!这个时候还点确定运行的人估计已经快没了吧。

暂时没想到可以利用的点,欢迎各位在下面提供好思路交流交流