NSudo 实战上手:4 个高频场景搞定 TrustedInstaller 高权限运行(附避坑清单)
【免费下载链接】NSudo[Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools项目地址: https://gitcode.com/gh_mirrors/ns/NSudo
NSudo 是 M2Team 开发的开源 Windows 系统管理工具集,能以 TrustedInstaller、System 等高级身份运行程序,也能让开发者绕过文件和注册表的权限检查。如果你曾对着"访问被拒绝"的弹窗束手无策,或想给自家工具加上一键提权的能力,这篇文章会用 4 个真实场景带你从零上手,最后附上一份新手避坑清单。
先说一个前提:NSudo 不是单一的"绿色小工具",而是一整套工具集。它由三块拼图组成——面向普通用户的NSudo Launcher(图形界面 + 命令行)、面向开发者的NSudo Devil Mode(权限绕过库)和NSudo Shared Library(可嵌入第三方程序的 API)。理解了这个划分,后面四个场景就顺理成章了。
第 1 个场景:提示"访问被拒绝"的文件,到底怎么删
这是绝大多数人第一次接触 NSudo 的动机:某个文件删不掉、某个目录进不去、hosts 改不了。你明明已经是管理员,为什么还是不行?
为什么管理员账号也会吃闭门羹
Windows 的权限模型里,"管理员"远不是权限天花板。系统文件的所有者是TrustedInstaller(Windows 模块安装服务账户),其次是SYSTEM账户。普通管理员对这些资源只有"读取"级别的访问权,自然删不动、改不了。
NSudo 的核心思路很直接:借令牌。它把 TrustedInstaller 或 SYSTEM 的访问令牌"借"出来,用来启动你指定的程序,让这个程序拥有系统级权限。你的账号不需要是 TrustedInstaller,程序照样能拿到它的权限。
认识 NSudo Launcher 的图形界面
NSudo Launcher 的图形版(NSudoLG.exe)界面非常简洁,核心控件只有四个:用户身份下拉框、特权选项、程序路径输入框和运行按钮。所有操作一目了然,几乎没有学习成本。
在"用户"下拉框中,你可以选择 TrustedInstaller、System、当前用户(提权)等身份;勾选"启用全部特权"后,程序会以最大化特权运行;下面的"打开"输入框支持手动输入路径,也可以点"浏览"选择文件。值得一提的是,界面右上角支持七种语言切换,英文版长这样:
3 步用 TrustedInstaller 身份启动命令提示符
- 解压下载的压缩包,进入与 CPU 架构对应的目录(Intel/AMD 64 位设备选 x64),双击
NSudoLG.exe; - 用户下拉框选择TrustedInstaller,勾选启用全部特权,在"打开"里输入
cmd或直接输入要运行的软件路径; - 点击运行,此时弹出的命令提示符就拥有了 TrustedInstaller 权限,再对之前删不掉的文件执行
del或takeown即可。
小提示:官方还附带了一个
NSudo.bat启动脚本,它会自动检测 CPU 架构并启动对应版本的图形界面,懒得手动进目录时可以直接用它。
如果你经常要打开某个程序,可以在配置目录的NSudo.json里维护"常用任务列表",把"命令提示符": "cmd"这样的条目加进去,下次在下拉菜单里一键选中即可。
第 2 个场景:批量脚本想提权,命令行怎么用才高效
删文件是一次性需求,但如果你要写批处理、定时任务,或者想把提权操作塞进自己的脚本里,每次都手动点界面就太慢了。这时候请出命令行版NSudoLC.exe。
-U、-P、-M 三个核心参数一表看懂
命令行参数设计的思路和 GUI 完全对应,最有用的三个参数分别是用户身份、特权级别和完整性级别:
| 参数 | 含义 | 可选值 |
|---|---|---|
-U: | 以哪个用户身份创建进程(必选) | TTrustedInstaller、SSystem、C当前用户、E当前用户(提权)、P当前进程、D当前进程(降权) |
-P: | 特权设置 | E启用全部特权、D禁用所有特权 |
-M: | 完整性级别 | S系统、H高、M中、L低 |
除此之外还有-Priority:(进程优先级)、-ShowWindowMode:(窗口显示模式)、-Wait(等待进程结束)、-CurrentDirectory:(工作目录)、-UseCurrentConsole(复用当前控制台)等选项,都可以按需叠加。
3 条可以照抄的命令
- 以 TrustedInstaller 身份、启用全部特权打开命令提示符:
NSudoL -U:T -P:E cmd- 以 System 身份、系统完整性级别启动 PowerShell,适合处理服务相关操作:
NSudoL -U:S -P:E -M:S powershell- 以 TrustedInstaller 身份直接用记事本打开 hosts 文件(带等待与工作目录设置):
NSudoL -U:T -P:E -Wait -CurrentDirectory:C:\Windows notepad C:\Windows\System32\Drivers\etc\hosts容易被忽略的语法细节
- 参数不区分大小写,
-U:T和-u:t等价; - 支持多种书写风格:可以用
/或--代替-,用=代替:,比如/U:T和-U=T完全等价; -U是必选参数,其他参数省略时使用默认值;- 从 5.0 版本起,命令行支持嵌套引号,例如
NSudo -U:T cmd /c "dir "C:\Program Files" & pause",带空格的路径也能正确处理。
完整的参数说明在源码里也有备份,可以直接查阅 命令行帮助文档。
第 3 个场景:开发者想让程序"无视"权限检查,怎么办
如果你只是系统维护用户,看到这里就够了;但如果你是个开发者,接下来才是 NSudo 最有意思的部分。
Devil Mode 是什么,和 Launcher 有何不同
Launcher 的思路是"换一个更高权限的令牌重新启动进程",而NSudo Devil Mode(NSudo 恶魔模式)的思路完全不同:它不动进程,而是在进程内部拦截系统调用,让现有代码几乎不用修改,就能绕过文件和注册表的访问权限检查。它是 Dism++ 中"春哥附体"功能的后续版本,由作者在 NSudo 中重新实现并增强。
两行代码启用、一行代码验证
使用方式简单到令人意外:加载 DLL 即启用,卸载 DLL 即关闭。前提是你的程序以管理员权限运行。
下面是一个 C# 验证用例的骨架。它尝试遍历C:\System Volume Information目录——这个目录平时连管理员都无法直接访问:
IntPtr handle = LoadLibrary(@"...\NSudoDevilMode.dll"); // 启用 foreach (var file in new DirectoryInfo(@"C:\System Volume Information").GetFiles()) Console.WriteLine(file.FullName); // 能正常列出 FreeLibrary(handle); // 关闭 foreach (var file in new DirectoryInfo(@"C:\System Volume Information").GetFiles()) Console.WriteLine(file.FullName); // 抛出"拒绝访问"加载前后,同一个进程、同一段代码,行为完全不同。NSudo 的官方文档中还包含完整的可运行示例,见 Devil Mode 文档。
它到底绕过了什么:被挂钩的系统调用一览
Devil Mode 基于 Microsoft Detours 库,对 ntdll.dll 中前缀为Nt的系统调用做 Inline Hook。其核心逻辑是:当当前进程令牌具备备份与还原特权时,自动为文件/注册表句柄的创建传入对应选项,从而跳过访问检查。具体挂钩了以下 API:
| 类别 | 被挂钩的系统调用 |
|---|---|
| 注册表 | NtCreateKey、NtCreateKeyTransacted、NtOpenKey、NtOpenKeyTransacted、NtOpenKeyEx、NtOpenKeyTransactedEx |
| 文件 | NtCreateFile、NtOpenFile |
对普通用户而言,这意味着很多"必须借 TrustedInstaller 令牌"才能做的事,现在一个管理员进程就能完成;对开发者而言,它避免了把整套权限逻辑重写进业务代码的麻烦。源码在 Source/Native/NSudoDevilMode/,感兴趣的话可以直接阅读实现。
第 4 个场景:把提权能力写进自己的工具
Devil Mode 解决的是"现有代码不改"的需求,但如果你开发的是一个全新工具,希望把"以 TrustedInstaller 身份创建进程"变成自己程序的一个功能,就该用到第三块拼图了。
NSudo Shared Library 提供了什么
NSudo Shared Library(NSudoSDK)同时提供C/C++ 接口和.NET 互操作支持。C 接口的核心是一个NSudoCreateProcess函数,通过五个枚举参数分别指定用户模式、特权模式、完整性级别、进程优先级和窗口显示模式;.NET 端则封装为M2.NSudo程序集,用法同样直观。
5 行 C# 代码创建 TrustedInstaller 进程
NSudoInstance instance = new NSudoInstance(); instance.CreateProcess( NSUDO_USER_MODE_TYPE.TRUSTED_INSTALLER, NSUDO_PRIVILEGES_MODE_TYPE.ENABLE_ALL_PRIVILEGES, NSUDO_MANDATORY_LABEL_TYPE.SYSTEM, NSUDO_PROCESS_PRIORITY_CLASS_TYPE.NORMAL, NSUDO_SHOW_WINDOW_MODE_TYPE.DEFAULT, 0, true, "cmd", null);与 Devil Mode 相比,这套 API 的优势是完全受控:以什么身份、开多少权限、什么窗口模式都由你显式指定,行为可预期。C 接口的完整声明见 NSudoAPI.h,.NET 实现见 Source/MSIL/M2.NSudo/,官方还附带了一个可直接运行的 Demo 项目。
谁已经在用 NSudo
NSudo 的能力早已被验证过:知名系统工具MSMG Toolkit、Dism++、Sledgehammer(WUMT 封装脚本)都直接或间接使用了它。如果你在做系统维护类工具,把 NSudo 作为提权层是一个经过实战检验的选择。
动手前必读:5 个常见误区与避坑点
功能聊完了,下面是新手最容易翻车的五个地方,建议收藏。
误区一:把它当成"万能清理器"
NSudo 提供的是权限,不是清理能力。它不会帮你判断哪些文件该删、哪些注册表项该动。权限到手后做了什么,责任完全在你。操作前务必备份,尤其是涉及系统分区和注册表时。
误区二:选错用户身份,操作"看似成功实则无效"
六个用户模式对应的权限各不相同:TrustedInstaller 适合动系统文件,System 适合管理服务,当前用户(提权)只比管理员多一点特权。如果不确定,优先选TrustedInstaller + 启用全部特权,这是覆盖面最广的组合。
误区三:架构版本没选对
发行包按架构分目录,64 位系统用 x64、ARM64 设备用 ARM64,别在 64 位系统上强行运行 32 位版本,部分系统目录的重定向会让你找不到"目标文件"。
误区四:把 Devil Mode 当成命令行工具
Devil Mode 是一个DLL 库,不是独立运行的 exe。它的启用方式是加载进目标进程,这决定了它主要面向开发者;普通用户想要提权运行程序,请用 NSudo Launcher。
误区五:项目停止维护了?——关于 NanaRun
说句实话:NSudo 目前已被标记为Deprecated(弃用维护状态),作者 MouriNaruto 正在开发新项目NanaRun作为替代(仍在开发中)。这不意味着 NSudo 不能用了——它功能稳定、开源免费,现有版本依然可以放心使用——但新功能不会再有更新。想跟进下一代方案的话,可以留意 NanaRun 的进展。
结语:从今天的一次"删不掉"开始
回到文章开头的那个问题:下次再遇到"访问被拒绝",你可以这样处理——先想想这是不是权限问题,如果是,用 NSudo Launcher 以 TrustedInstaller 身份启动命令提示符,精准处理后再退出,不要长期挂在高权限环境下。
如果你想动手试试,获取方式很简单:NSudo 无需安装,解压即用;也可以直接用包管理器安装(如choco install nsudo)。想从源码编译的话,克隆仓库:
git clone https://gitcode.com/gh_mirrors/ns/NSudo用 Visual Studio 2017 及更高版本打开Source/Native/NSudo.sln即可构建,仓库里还提供了BuildAllTargets一键编译脚本。更完整的特性列表和发行日志可以阅读 用户手册。
最后送你一句使用心得:权限越大,责任越大。NSudo 把 Windows 的权限天花板掀开了一条缝,而决定掀开多少的,始终是你自己。
【免费下载链接】NSudo[Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools项目地址: https://gitcode.com/gh_mirrors/ns/NSudo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考