首页 > 系统相关 >绕过安全限制,通过cmd执行PowerShell脚本

绕过安全限制,通过cmd执行PowerShell脚本

时间:2024-01-11 10:44:07浏览次数:21  
标签:脚本 slmgr Windows cmd Server 绕过 PowerShell

我的初衷是写一个自动激活系统的cmd脚本给身边的朋友使用,它需要判断当前运行的系统版本,需要记住大量的与具体的版本对应的key。

开始动手后我发现没法往下写。cmd本质上不支持“结构化编程”,这意味着它没有“函数”这个东西。它只能定义 label,用 label 来模拟函数。过去,当看到 Pascal 对自己开创的“结构化编程”很自豪时我并不是很理解,现在我理解了,原来非“结构化”的编程长这样。

写了一半后我放弃了。

听说 PowerShell 是新的Windows系统脚本语言,要不用 PowerShell 试试?

不懂语法没关系,边查边写,很快就搞定了。但是当我把脚本拷贝到别的机器运行时,duang! 脚本没法运行 - ”在此系统上禁止运行脚本“。运行 Set-ExecutionPolicy修改了安全策略以后再次运行,duang! duang! 还是没法运行,因为没有数字签名。拜托,我只想写一个给朋友用的脚本,我的朋友们不懂得如何运行命令。难道就此放弃?如果换用其它成熟的编程语言去干这个事其实很轻松,比如 Python。但是在发布时必须附带上庞大的运行时环境。我感觉没必要。

灵光一现,可不可以通过cmd去调用powershell呢?于是,下面的方案就出现了:

所有的 PowerShell 脚本代码保存在 ps.txt 中

$pkeys = @{
    'Windows Server 2022 Standard' = 'VDYBN-27WPP-V4HQT-9VMD4-VMK7H';
    'Windows Server 2022 Datacenter' = 'WX4NM-KYWYW-QJJR4-XV3QB-6VM33';

    'Windows Server 2019 Datacenter' = 'WMDGN-G9PQG-XVVXX-R3X43-63DFG';
    'Windows Server 2019 Standard' = 'N69G4-B89J2-4G8F4-WWYCC-J464C';
    'Windows Server 2019 Essentials' = 'WVDHN-86M7X-466P6-VHXV7-YY726';

    'Windows Server 2016 Datacenter' = 'CB7KF-BWN84-R7R2Y-793K2-8XDDG';
    'Windows Server 2016 Standard' = 'WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY';
    'Windows Server 2016 Essentials' = 'JCKRF-N37P4-C2D82-9YXRT-4M63B';

    'Windows 11 Pro' = 'W269N-WFGWX-YVC9B-4J6C9-T83GX';
    'Windows 11 Pro Education' = '6TP4R-GNPTD-KYYHQ-7B7DP-J447Y';
    'Windows 11 Education' = 'NW6C2-QMPVW-D7KKK-3GKT6-VCFB2';
    'Windows 11 Enterprise' = 'NPPR9-FWDCX-D2C8J-H872K-2YT43';

    'Windows 10 Pro' = 'W269N-WFGWX-YVC9B-4J6C9-T83GX';
    'Windows 10 Enterprise' = 'NPPR9-FWDCX-D2C8J-H872K-2YT43';
    'Windows 10 Education' = 'NW6C2-QMPVW-D7KKK-3GKT6-VCFB2';

    'Windows 8.1 Professional' = 'GCRJD-8NW9H-F2CDX-CCM8D-9D6T9';
    'Windows 8.1 Enterprise' = 'MHF9N-XY6XB-WVXMC-BTDCT-MKKG7';

    'Windows 7 Professional' = 'FJ82H-XT6CR-J8D7P-XQJJ2-GPDD4';
    'Windows 7 Enterprise' = '33PXH-7Y6KF-2VJC9-XBBR8-HVTHH';
};

$product = (Get-ItemProperty -Path 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion' -Name ProductName).ProductName;
echo $product;

if($pkeys.ContainsKey($product)){
    $key = $pkeys[$product];
    $slmgr = 'C:\Windows\System32\slmgr.vbs';
    cscript $slmgr //nologo /upk;
    cscript $slmgr //nologo /ipk $key;
    cscript $slmgr //nologo /skms kms.bitsoc.cn;
    cscript $slmgr //nologo /ato;
}

上面的代码和通常的 ps 脚本有什么区别呢?区别就是每一条语句后面都有分号。通过下面的 bat 一行一行地读入,拼接成一行,再调用 powershell -command 去执行。完美绕过限制。

main.bat

@echo off

set src=
setlocal enableDelayedExpansion
for /f "tokens=* delims=" %%a in (%~dp0\ps.txt) do (
    set "line=%%a"
    set "src=!src!!line!"
)

powershell -NoLogo -command "%src%" 

pause
echo on

标签:脚本,slmgr,Windows,cmd,Server,绕过,PowerShell
From: https://www.cnblogs.com/zh-geek/p/17958049

相关文章

  • 【Powershell】检索事件日志
    免费课程:https://edu.51cto.com/course/35511.html适合人群:适合对Powershell和Windows运维感兴趣的学员你将会学到:利用Powershell检索日志,筛选日志的方法。课程简介:利用Powershell检索日志,筛选日志的方法。适合对Powershell和Windows运维感兴趣的学员。本章有三个脚本,注意在筛选时......
  • 管理员cmd ipconfig/flushdns 解决 git push
    这个问题可能是由于你在PowerShell中执行了`ipconfig/flushdns`命令,而不是在命令提示符(CMD)中执行。你可以尝试以下步骤来解决这个问题:1.**使用命令提示符(CMD)**²:右键点击系统桌面左下角的【开始】,在开始的右键菜单中点击【命令提示符(管理员)】或者点击开始菜单后输入cmd,右键选......
  • 【Powershell】Powershell管理计划任务
    欢迎购买我的课程:https://edu.51cto.com/course/35509.html前半部分免费,后半部分收费。适合人群:对Powershell和域有一定知识的运维和爱好者。你将会学到:利用Powershell创建管理计划任务和计划任务的监控及邮件报警课程简介:利用Powershell创建管理计划任务和计划任务的监控及邮件报......
  • 【AD】Powershell创建林
    欢迎购买我的课程:https://edu.51cto.com/course/35495.html适合人群:适合对域控和Powershell有一定基础的运维。帮助他们更快部署新林新域的时间,减少人工操作,提升效率。你将会学到:利用Powershell一键创建林、域内的所有DC和卸载所有DC课程简介:通过强大的Powershell,一键创建林、域......
  • 【解决方案】关闭PowerShell更新提示
    ✨PowerShell更新提示从PowerShell7.0开始,PowerShell使用更新通知提醒用户是否存在PowerShell更新。PowerShell每天查询一次联机服务,以确定是否提供较新版本。✨管理通知行为可以通过设置POWERSHELL_UPDATECHECK环境变量来更改更新通知的行为。支持以下值:Off......
  • 在IDEA中配置使用DOC(cmd)命令行窗口
    在IDEA中配置使用DOC(cmd)命令行窗口一、基本设置步骤①中文设置->工具->终端->修改shell路径为C:\Windows\System32\cmd.exe(cmd.exe路径)。②英文Settings...->Tools->Terminal->将Shellpath修改为C:\Windows\System32\cmd.exe(cmd.exe路径)。二、设置演......
  • 【Application Insights】使用Powershell命令向Application Insgihts发送测试数据
    问题描述在昨天的文章中,介绍了“【ApplicationInsights】使用CURL命令向ApplicationInsgihts发送测试数据 ”,今天则继续实验通过PowerShell命令来发送测试数据到ApplicationInsights 问题解答从参考文档中复制出Powershell脚本,然后只需要修改ApplicationInsights的Connect......
  • python如何通过cmd创建虚拟环境
    Python是一种十分流行的编程语言,它具有易于学习、开发效率高、强大的库支持等优点。在Python开发过程中,虚拟环境是一种非常重要的概念。通过虚拟环境,我们可以在同一台机器上同时运行多个Python项目,并且这些项目之间互不干扰。本文将介绍如何使用cmd命令行工具创建Python虚......
  • Windows 11 绕过 TPM 方法总结,通用免 TPM 镜像下载 (2023 年 7 月更新)
    Windows11绕过TPM方法总结,通用免TPM镜像下载(2023年7月更新)在虚拟机、Mac电脑和TPM不符合要求的旧电脑上安装Windows11的通用方法总结作者主页:sysin.org本文要解决的问题:如何安装Windows11虚拟机绕过TPM检测,Windows11ISO虚机直装镜像下载。如何在没有TPM......
  • Microsoft 365 开发:如何通过PnP Powershell批量删除文件夹或文件等
    51CTOBlog地址:https://blog.51cto.com/u_13969817通常删除文件夹可以在UI界面操作比较方面,但是如果想快速的删除文件夹以及其childfolder,该如何操作呢?解决方案:本文将介绍如何使用PnPPowerShell脚本删除SharePoint文档库中的文件夹:第一步是通过运行cmdlet:ConnectPnPOnline来......