如何将代码注入macOS中的arm64e进程?

问题描述 投票:0回答:2

我编写了一个实用程序,它通过使用旧的

mach_inject
方法将编译代码(以 dylib 的形式)注入 Dock 来修改系统行为。但是,
mach_inject
已经好几年没有更新了,并且无法在 Apple Silicon mac 上运行。

是否有另一种方法可以用来将 dylib 中的代码注入并执行到 arm64e 进程中?

mach_inject
在目标进程中创建一个线程并在该线程中执行有效负载,因此我需要它做类似的事情。

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

macos code-injection arm64 apple-silicon
2个回答
0
投票

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,但到目前为止,这是我发现的唯一有效的!


0
投票

有两种选择

亚白

yabai
使用了mach_inject
机制并添加了arm64支持

MacForge

之后

UniversalInj.h/c
还有几次更新。我不确定
-arm64e_preview_abi
支持

© www.soinside.com 2019 - 2024. All rights reserved.