gpt4 book ai didi

java - 是否可以使用 java.awt.Robot 单击 Windows UAC 对话框?

转载 作者:行者123 更新时间:2023-11-30 09:02:24 24 4
gpt4 key购买 nike

我正在使用 Windows 7 上的 java.awt.Robot 使用 Java 开发自定义远程桌面。除了以管理员身份运行命令提示符之外,这一切都有效。 UAC 对话框出现,但是使用 mousePress()/mouseRelease() 不接受在 Yes 按钮上的按钮点击,也不接受使用 keyPress()< 的按键/keyRelease()。该应用程序通过 launch4j 启动启动器在启动器中而不是包装模式。

我目前所做的事情

为 UAC 禁用安全桌面。这允许应用程序的屏幕抓取器部分至少“看到”提示

已关注 Security Considerations for Assistive Technologies - 这允许远程桌面在启动后与命令提示符交互,但不允许按"is"按钮。

  • 向 launch4j 添加了一个 list ,指定 uiaccess=true
  • 使用由 makecert.exe 生成的自签名证书使用 signtool.exe 对 .exe 进行签名
  • 将证书安装为受信任的根证书
  • 通过右键单击属性、数字签名验证 .exe 是否被标记为受信任
  • 确保 .exe 位于受信任的位置,在本例中为 c:\Program Files (x86)\。
  • 尝试以管理员身份将应用程序的一部分作为服务运行 - 但我无法获得以管理员身份运行并允许访问桌面的 Windows 服务 - 似乎只有 LocalSystem 可以做到这一点......?

问题

  • 这最终可能吗?
  • 作为 launch4j 包装器的子进程的 javaw.exe 是否有影响?我已经通读了 Windows Integrity Mechanism Design但是我不知道这对 launch4j 有何影响。

Launch4j list 文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="asInvoker" uiAccess="true" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

最佳答案

简短的回答,是的。

理解问题

  • 可执行 list 中的 uiAccess 标志似乎仅适用于该 exe 而不是任何子执行,即如果 foo-launcher.exe 启用了 uiAccess 并启动了 javaw.exe,这并不意味着 javaw.exe 启用了 uiAccess。<
  • 我看到以管理员身份运行 foo-launcher.exe 时工作正常的唯一原因是 foo-launcher.exe 还以管理员身份启动 javaw.exe,这使其具有足够的完整性,不需要 uiAccess 检查。
  • javaw.exe 有自己的内部 list ,其中包含 uiAccess true
  • 内部 list 优于外部 list - 参见 UAC: Manifest file is ignored
  • 存在一个注册表项来切换优先使用内部 list 而不是外部 list 的行为 -见How to prevent embedded manifest from being used?
  • Lau​​nch4j 生成的可执行文件使用 CreateProcess,这意味着可执行文件在没有 list 数据的情况下启动,显然应该改用 ShellExecuteEx - 参见 How can I run a child process that requires elevation and wait?

解决问题

  • 从 javaw.exe 中提取内部 list ,并与文件名 javaw.exe.manifest 放在同一目录中 - 这可以手动完成,因为它是纯文本 - 我使用的是 Notepad++ 。如果您需要自动化,可以使用各种第 3 方工具。
  • 将 list 编辑为 uiAccess="true"
  • 应用注册表修复注册表修复

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide]"PreferExternalManifest"=dword:00000001

  • 触摸 javaw.exe 以更新修改时间戳 - 否则不会获取更改 - 这可以通过“copy/b javaw.exe +,”来完成,参见 Windows equivalent of the Linux command 'touch'?

  • 仔细检查 javaw.exe 安装在 C:\Program Files、C:\Program Files (x86) 或其他一些受信任的位置
  • 仔细检查 javaw.exe 是否使用受信任的证书签名。
  • 不要使用 launch4j 生成的可执行文件——它们根本不支持在启用 uiAccess 的情况下启动 javaw.exe,请使用快捷方式文件 (.lnk) 或基于 ShellExecuteEx 构建的其他方法

关于java - 是否可以使用 java.awt.Robot 单击 Windows UAC 对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25982041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com