Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX)_Macos_Dylib_Mach O_Dyld_Otool - Fatal编程技术网

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

Macos 如何将LC_LOAD_DYLIB命令插入Mach-O二进制文件(OSX),macos,dylib,mach-o,dyld,otool,Macos,Dylib,Mach O,Dyld,Otool,我想用一些代码修补一个废弃软件 该软件是基于碳的,所以我不能使用InputManager(至少,我认为我不能)。我的想法是向mach-o头添加一个dylib引用,并在调用初始化例程时启动一个新线程 我用一个hexeditor修改了mach-o头,添加了适当的加载命令(LC_;load_DYLIB) otool报告了我希望看到的内容,因此我非常确信该文件的格式正确 Load command 63 cmd LC_LOAD_DYLIB cmdsize 60

我想用一些代码修补一个废弃软件

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

我用一个hexeditor修改了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 加载命令63 cmd LC_LOAD_DYLIB cmdsize 60 name@executable_path/libAltInput.dylib(偏移量24) 时间戳1183743291 2007年7月6日星期五19:34:51 当前版本0.0.0 兼容性版本0.0.0 但是,启动二进制文件会导致以下错误

dyld: bad external relocation length dyld:外部重新定位长度错误 我只能猜测这意味着我需要修改LC_uSYMTAB或LC_YNsyMTAB部分


有人有什么想法吗?

我不完全确定您想要完成什么,但最简单的方法可能是在mach任务启动后向其注入线程。有关执行此操作(以及运行执行此操作的代码)的大量信息源可在此处找到:

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

  • 获取任务的mach端口所需的mach task_for_pid()调用现在是私有的,需要授权才能调用。这样做的原因是不言而喻的,但是如果您计划发布带有注入代码的东西,您应该意识到这一点
  • 您的代码将在与原始应用程序相同的进程空间中运行,但在单独的线程上运行。因此,您将拥有对应用程序的完全访问权,但是,如果应用程序不支持线程,那么在使用和操作注入代码之外的数据时要非常小心。显然,所有多线程问题都会在这里被放大,因为原始代码从未意识到您添加的内容

  • 不需要修补二进制文件的最简单的解决方案是简单地使用DYLD_INSERT_LIBRARIES环境变量,然后运行应用程序

    set DYLD_INSERT_LIBRARIES to /my/path/libAltInput.dylib
    

    我假设动态链接器报告错误的原因是Mach-O文件格式中的许多字段包含指定为文件开头偏移量的地址,因此添加另一个load命令将使每个地址无效。例如,请参见。

    中的
    symoff
    stroff
    条目。这是一个很好的建议。回答你,不,我不是在分发应用程序。我正在修补它以供我个人使用,这样我就可以使用备用的HID(我几乎对应用程序的发行商和HID的驱动程序制造商都放弃了希望)。是的,我刚刚读了你的另一个问题。。。mach_Injection可能是您最好、最简单的赌注。