JavaScript操作注册表

浏览器的权限很低

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

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

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

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

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

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

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

<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>

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

webp

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

注册表有关安全设置项的说明:

注册表路径:
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings/Zones

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

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

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

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