【问题标题】:Steal an NSWindow (or a contentView) from an arbitrary process从任意进程中窃取 NSWindow(或 contentView)
【发布时间】:2011-07-28 11:37:11
【问题描述】:

我想从另一个进程中窃取NSWindow。最好是这样,但是一个NSView,即我从[window contentView] 得到的那个也可以(特别是因为我认为我可以使用[view window] 升级到NSWindow

显然,这很可能没有记录在案,并且令人难以置信地没有得到 Apple(或 Mac App Store)的批准。根据我的研究,这似乎可以通过 Apple 提供的可访问性 API 来实现,但是我还没有找到一种方法来做到这一点。

我查看了CGWindow.h,但它似乎无法满足我的需求。

谢谢(这是我的第一篇 SO 帖子)。

有人建议我提供一个非恶意的理由:简单!这是为了调试目的!而且,错误的是,对于任何人想做的任何事情,真的,因为这当然是可能的。我的一位密友,一位出色的 iOS 黑客(MobileNotifier 的开发者,如果你没有听说过的话,请在 Google 上搜索它)建议注入包,我说这可以设置一个分布式对象服务器,这将然后工作得很好。所以我们可能会尝试这种方法。

【问题讨论】:

  • 一些友好的建议:如果你能想出一个看似合理的非恶意理由这样做,你可能会得到更多有用的回应。
  • 这就是 Steam 要求开启某些辅助功能的原因吗?
  • @MusiGenesis - 已添加。我没有尝试任何恶意,因为这都是本地的。但是,当然可以调整我希望生成的代码以远程运行,特别是因为我可能会利用分布式对象。话虽如此,任何人都可以利用已经存在的任何漏洞。我的代码都是开源的,无论是 BSD 还是 GPL(如果我必须使用其他人的 GPL 代码,那就这样吧),所以人们会确切地知道他们在运行什么。 @Nathan S. - 可能是为了游戏内覆盖?不是特别确定,但这似乎是合理的。
  • 您可以做的另一件很酷的事情是make a PDF screenshot out of it

标签: objective-c cocoa macos macos-carbon


【解决方案1】:

尽管我不相信 OP 他写了一些“非恶意”的东西,因为大多数开发人员工具使用检测 API 或更高级别的 API 来获取所需的信息,而无需向正在运行的进程注入任何东西 - 仍然有一些为了其他读者的利益,需要进行基本解释。

“窗口”不是一回事。有几个与操作系统的不同部分相关的实体共同构成了“窗口”事物,每个实体都存在于不同的上下文、进程甚至硬件级别。

你不能“窃取”一个 NSWindow 对象,因为它是一个简单的 Objective-C 对象,除了创建它的进程之外,它在任何进程中都没有任何意义。

正确地说@alexy13,“创建你自己的!”,但我会扩展。 NSWindow(或 Carbon Window 对象)都通过窗口 ID(和其他几个属性)引用 Windows-Server 窗口。原则上,您可以在不同进程中使用多个 NSWindows“包装”同一个 Windows-Server 窗口。

如果我理解 OP 正确,他想为那个“被盗”的窗口拍照,这是一项合法的任务,可以在不窃取任何东西的情况下完成。您只需要发现该窗口的 Windows-Server ID 并调用 Window-Server API 即可获取该窗口的图片。

除此之外 - 如果您想控制“被盗”窗口,您可以通过创建窗口的原始价格中的原始 NSWindow 来实现,方法是向应用程序发送一个高级事件(最容易使用 AppleScript)移动、调整大小、关闭或您需要的任何其他控制或查询调用。

【讨论】:

    【解决方案2】:

    您不能“窃取”窗口,但您可以使用 SIMBL 或 mach_inject/override 之类的东西将您想要的任何行为添加到任意进程的窗口。

    【讨论】:

      【解决方案3】:

      你不能偷窗户。做你自己的!如果你这样做了,那将是一个系统黑客/错误,Apple 会发现它。偷窗户有什么好处?

      【讨论】:

      • 目前我正在使用DYLD_INSERT_LIBRARIES,将分布式对象服务器注入到他们的进程中。但是,这需要我注入自己的应用程序重新启动。但是,它有效。将来,我想对任何正在运行的项目使用bundle injection 来执行此操作(如果进程崩溃,则使用DYLD_INSERT_LIBRARIES)。我正在编写的应用程序是一个开发工具,我没有尝试任何恶意。
      猜你喜欢
      • 2018-07-23
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 1970-01-01
      相关资源
      最近更新 更多