如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件 (OSX)

2023-11-21

我正在寻找用一些代码修补一个废弃软件。

该软件是基于碳的,所以我不能使用InputManager(至少,我不认为我可以)。我的想法是向 mach-o 标头添加 dylib 引用,并在调用初始化例程时启动一个新线程。

我使用十六进制编辑器修改了 mach-o 标头来添加适当的加载命令(LC_ LOAD_DYLIB)。

otool 报告了我期望看到的内容,因此我相当有信心该文件的格式正确。



Load command 63
          cmd LC_LOAD_DYLIB
      cmdsize 60
         name @executable_path/libAltInput.dylib (offset 24)
   time stamp 1183743291 Fri Jul  6 19:34:51 2007
      current version 0.0.0
compatibility version 0.0.0
  

但是,启动二进制文件会出现以下错误



dyld: bad external relocation length
  

我能猜到这意味着我需要修改 LC_ SYMTAB 或 LC_ DYNSYMTAB 部分......

有人有主意吗?


我不完全确定您要完成什么,但最简单的方法可能是在 mach 任务启动后将线程注入到该任务中。可以在这里找到有关执行此操作(以及运行代码来执行此操作)的重要信息来源:http://rentzsch.com/mach_inject/.

您应该注意的一些注意事项:

  1. 获取任务的 mach 端口所需的 mach task_for_pid() 调用现在已获得特权,并且需要授权才能调用。这样做的原因是不言而喻的,但如果您计划发布带有注入代码的东西,您应该意识到这一点。
  2. 您的代码将在与原始应用程序相同的进程空间中运行,但在单独的线程上运行。因此,您将拥有对应用程序的完全访问权限,但是,如果它不是线程感知的,那么在使用和操作注入代码外部的数据时要非常小心。显然,所有多线程问题都会在这里被放大,因为原始代码从未意识到您的添加。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件 (OSX) 的相关文章

随机推荐