我想反编译一个 .exe 并将代码更改为不需要管理员运行。我知道它做了一些事情:
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"
/>
</requestedPrivileges>
但是我不确定我需要改变什么(我正在使用 Resource Hacker)。
我想反编译一个 .exe 并将代码更改为不需要管理员运行。我知道它做了一些事情:
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"
/>
</requestedPrivileges>
但是我不确定我需要改变什么(我正在使用 Resource Hacker)。
实际上,这与反编译无关,与逆向工程无关。
您需要做的是更改level="requireAdministrator"为level="asInvoker":
<requestedPrivileges>
<requestedExecutionLevel
level="asInvoker"
uiAccess="false"
/>
</requestedPrivileges>
使用 ResourceHacker 你应该能够做到这一点。然而,规范的方法是使用清单工具 (mt.exe),它(取决于版本)包含在 SDK、WDK 或 Visual C++/Studio 中。
另一种方法是剥离资源并在 .exe 旁边放置一个清单,名称相同,但附加了 .manifest。即,如果您的 .exe 被命名,foobar.exe那么清单将是foobar.exe.manifest.
实际上,考虑一下,这甚至可以在不剥离现有清单资源的情况下工作(也许试一试?)。即提取现有的清单资源,将其放在 .exe 旁边,如上所述,并修改(外部)清单。然后尝试启动 .exe ...
但是,请注意:如果您的 .exe 已被签名,您的篡改将使签名无效。如果软件已准备好进行完整性检查或某些其他情况适用(软件限制策略,AppLocker),这可能会导致软件无法运行。
如果您想在不修改清单资源的情况下实现这一点,您可以查看这里。此答案详细说明了如何通过使用特殊的环境变量集调用软件来启用无需提升的软件。
应用此注册表文件将创建一个Run without admin rights (UAC)在上下文菜单中命名的条目,它允许您使用该功能:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run without admin rights (UAC)"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""