1

我使用 osxinj 项目连接了系统调用 open、read、write、lstat 等。将其注入苹果提供的 TextEdit 应用程序中,一切正常。当我使用 textedit 打开新文件时,会调用 opencallback 并将消息记录在 system.log 文件中。

typedef int (*open_type)(const char *, int, mode_t);
open_type open_func = 0;
int opencallback(const char* path, int oflag, mode_t mode)
{
    syslog(LOG_ALERT, "In open...");

    int returnVal = open_func(path, oflag, mode);
    syslog(LOG_ALERT,"Open, ends\n");
    return returnVal;
 }

注入 Excel 并尝试使用以下代码覆盖打开的系统调用:

void* func_ptr =  dlsym( RTLD_NEXT, "open");
if (func_ptr)
{ 
    open_func = (open_type)func_ptr;
    mach_error_t me = mach_override_ptr( func_ptr,
                           (void*)&opencallback,
                           (void**)&open_func);
}

注入到 TextEdit 时会调用 opencallback,但注入 Microsoft Excel 时不会调用它。但是,当注入 Excel 时,为其他系统调用 read、write、lstat 在同一行上编写的代码会被插入。

关于为什么 open 在注入 Excel 时没有被插入的任何想法。

4

1 回答 1

0

最后,我的代码运行起来了。我正在发布答案,希望它可以帮助某人。我钩住了 __open,它是 open 的别名,它适用于像 excel 这样的 i386 应用程序。

于 2016-05-06T13:47:28.303 回答