Board logo

标题: [系统相关] 使用命令提示符创建一个具有管理员权限的快捷方式 [打印本页]

作者: keccak    时间: 2024-11-9 19:34     标题: 使用命令提示符创建一个具有管理员权限的快捷方式

如何使用命令提示符创建一个具有管理员权限的快捷方式
作者: Batcher    时间: 2024-11-9 20:36

回复 1# keccak


    快捷方式指向的是某个exe吗?
作者: keccak    时间: 2024-11-13 23:09     标题: RE: 使用命令提示符创建一个具有管理员权限的快捷方式

本帖最后由 keccak 于 2024-11-13 23:13 编辑

不太会使用这个编辑器,格式全部打乱了,代码见下面回复的内容
作者: keccak    时间: 2024-11-13 23:12

本帖最后由 keccak 于 2024-11-13 23:20 编辑

回复 2# Batcher


    是指向一个 EXE 程序,另外抱歉我似乎在上面的回复的代码格式好像有点异常,没有按预期的正确格式化显示

我搜索过论坛关于快捷方式的帖子,也看了创建快捷方式的集合整理讨论贴,也查过国内外的资料,具体缘由、图文我写到博客这里:https://www.0z.gs/win/shortcutAsAdmin.html
这些脚本环境都没提供直接的实现接口,最后还是在国外论坛看到有人逆向了快捷方式的二进制数据才知道这个办法
实现是实现了,也算是正招吧
想知道还有没有什么别的方法,因为这个实现方法调用了 BAT,VBS,PowerShell
或者说还有没有什么思路,比如对快捷方式的源程序进行设置管理员权限,可惜我这方面搜到的资料都不是很多

@echo off
:: 设置快捷方式路径
set shortcutPath=%userprofile%\Desktop\Example.lnk

:: 使用当前目录(安装目录)设置路径,自行替换 `%cd%` 后面部分为你的实际路径
set "targetPath=%cd%\Example\114514\Example.exe"
set "workingDirectory=%cd%\Example\114514"

:: 调用 VBS 创建快捷方式
echo Set WshShell = CreateObject("WScript.Shell") > createShortcut.vbs
echo Set Shortcut = WshShell.CreateShortcut("%shortcutPath%") >> createShortcut.vbs
echo Shortcut.TargetPath = "%targetPath%" >> createShortcut.vbs
echo Shortcut.WorkingDirectory = "%workingDirectory%" >> createShortcut.vbs
echo Shortcut.IconLocation = "%targetPath%, 0" >> createShortcut.vbs
echo Shortcut.WindowStyle= 3 >> createShortcut.vbs
echo Shortcut.Save >> createShortcut.vbs
cscript //nologo createShortcut.vbs
del createShortcut.vbs

:: 调用 PowerShell 设置管理员权限运行标志位,设置 `0x15`(十六进制) 字节偏移量位置的数据的第 6 位设置为 `1`(0x20),其余位保持不变
powershell -Command "& { $bytes = [System.IO.File]::ReadAllBytes('%shortcutPath%'); $bytes[0x15] = $bytes[0x15] -bor 0x20; [System.IO.File]::WriteAllBytes('%shortcutPath%', $bytes) }"
作者: aloha20200628    时间: 2024-11-14 20:14

本帖最后由 aloha20200628 于 2024-11-14 20:19 编辑

回复 4# keccak

批处确实没有直接创建快捷方式并加持管理员权限的功能,但调用 vbs/jscript/powershell/python 等脚本功能均可实现,且每个脚本都能一贯到底,前三者已被系统内置,直接可用,但相比较还是 powershell 代码最为简洁,就是启速稍慢,以下是一个批处套壳 powershell 代码的版本(存为 test.bat 运行),先创建快捷方式,再修改其提权标识位...
代码中假设目标执行文件路径为 C:\xyz\abc.exe(可自定义,在第5行),创建的桌面快捷方式名称为 abc.lnk(可自定义,在第二行)
  1. <# ::
  2. @echo off & powershell "$v='%userprofile%\desktop\abc.lnk'; iex(${%~f0}|out-string)" &pause&exit/b
  3. #>
  4. $ws=new-object -comobject wscript.shell; $sc=$ws.createShortcut($v)
  5. $sc.targetPath='C:\xyz\abc.exe'; $sc.save()
  6. $b=[io.file]::readallbytes($v); $b[21]=0x20; [io.file]::writeallbytes($v, $b); exit
复制代码
若要将已有的桌面快捷方式提权,可用以下代码(存为 "提权.bat"),将某个桌面快捷方式直接托给它运行即可...
  1. @echo off &if "%~1"=="" exit/b
  2. powershell "$b=[io.file]::readallbytes('%~1'); $b[21]=0x20; [io.file]::writeallbytes('%~1', $b)"
  3. pause&exit/b
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2