Goo*_*KSL 5 c macos mono mach-o dynamic-linking
考虑 mono/domain.c 中的以下代码:
static MonoDomain *mono_root_domain = NULL;
...
MonoDomain* mono_get_root_domain (void)
{
return mono_root_domain;
}
Run Code Online (Sandbox Code Playgroud)
我的任务是在运行时从另一个进程读取 mono_root_domain 指针指向的结构数据。(从这个其他进程附加、读取、定位dylib等已经解决)
查看生成的 libmono dylib 我可以找到相应的符号:
该符号指向本地重定位段(__DATA,__bss)中0x2621A8的地址:
它指向0x1A7690的地址(__TEXT,__symbol_stub):

所以0x1A7DF8(__TEXT,__stub_helper):

此时我完全不知道如何检索指向 MonoDomain 结构的实际指针。任何帮助表示赞赏。
出于安全原因并防止缓冲区溢出攻击和其他漏洞利用,您无法知道这一点,因为有一种称为 PIE 或 ASLR(地址空间布局随机化)的安全措施。但是,出于调试目的可以禁用此功能。LLDB 和 GDB 这样做是为了调试可执行文件。使用 CLI 应用程序完成此操作的方法如下:
cd转到可执行文件所在的位置chmod +x ./change_mach_o_flags.py使脚本可执行./change_mach_o_flags.py --no-pie ./YourExecutable现在,您的可执行文件的地址不应再被随机化。因此,计算静态/全局变量的地址是可能的。为此,请在终端中执行以下操作(我假设您使用的是 64 位计算机):
otool -v -l ./YourExecutable | open -f(这将生成一个文件文本,其中包含可执行文件中的命令,说明如何在内存中布局数据、文本等)
寻找您感兴趣的部分。查看该addr领域。如果它包含,0x0000000100001020那么变量将被准确地放置在那里,并且禁用 ASLR。
我不确定这是否适用于 dylibs,但你可以尝试一下。现在我没时间了,但我可以在家尝试一下,看看这是否可以用 dylibs 实现。
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |