首页 > 解决方案 > 如何将代码注入 macOS 中的 arm64e 进程?

问题描述

我编写了一个实用程序mach_inject,它通过使用旧方法将已编译的代码(以 dylib 的形式)注入 Dock 来修改系统行为。但是,mach_inject现在几年没有更新,并且不适用于 Apple Silicon mac。

我可以使用另一种方法将代码从 dylib 注入并执行到 arm64e 进程中吗?mach_inject在目标进程中创建一个线程并在该线程中执行有效负载,所以我需要它来做类似的事情。

我一直认为frida是一种可能的替代方案,但它似乎是为了通过 javascript 运行时与目标进程进行交互,而不是将已经编译的代码注入到进程中。我无法弄清楚它是否可以满足我的需求。

标签: macoscode-injectionarm64apple-silicon

解决方案


Frida 有一个名为 Frida-core 的组件,其中包含一个用于将代码注入进程的 C API。可以在此处找到演示其使用的示例:frida-core-example-unix.c

它可用于使用 javascript 注入 dylib,如下所示:

var RTLD_NOW = 0x02;
var _dlopen = new NativeFunction(Module.findExportByName(null, "dlopen"), 'pointer', ['pointer', 'int']);
var path = Memory.allocUtf8String("/path/to/dylib");
_dlopen(path, RTLD_NOW);

不幸的是,它是一个非常重的库,导致生成的二进制文件大小约为 50 MB,通用二进制文件大小为 100 MB,但到目前为止,它是我发现的唯一一个有效的!


推荐阅读