标签: library-interposition

如何在Linux上动态插入Python的C函数(没有LD_PRELOAD)?

我如何在运行时(否LD_PRELOAD)拦截/挂钩C函数,就像fopen()在Linux上一样,对于Windows来说是一个很好的选择?我想从Python中做到这一点(因此,我假设该程序已经在运行CPython VM)并且还要重新路由到Python代码.我只是挂钩共享库函数.我也想这样做而不必改变程序的运行方式.

一个想法是基于ptrace()或重写dlsym()PLT中或在PLT中找到的代码以及目标ctypes生成的C可调用函数来推送我自己的工具,但我想我先问这里.谢谢.

python linux library-interposition

11
推荐指数
1
解决办法
2141
查看次数

如何挂钩我的Android应用程序的系统调用(非root设备)

我试图拦截我的Android应用程序在非root设备上进行的所有系统调用.

因此,每次我的应用程序写入/读取文件时,我都会拦截系统调用并加密/解密流以用于安全目的.加密部分没问题,但我如何拦截系统调用?

由于应用程序的某些部分是由第三方提供商开发的模块,我无法更改源代码,因此没有其他方法可以确保数据安全存储.

由于我没有root访问权限,因此无法访问此处所述的系统调用表的地址,我也无法通过LKM模块执行此操作.

我要感谢任何建议,谢谢.

编辑:

好的,我现在可以使用Simone Margaritelli的代码链接了!我的代码一直崩溃的原因是因为我必须设置正确的内存访问权限:

uint32_t page_size = getpagesize();
uint32_t entry_page_start = reloc& (~(page_size - 1));
mprotect((uint32_t *)entry_page_start, page_size, PROT_READ | PROT_WRITE);
Run Code Online (Sandbox Code Playgroud)

hook android system-calls library-interposition function-interposition

9
推荐指数
1
解决办法
1万
查看次数

LD_PRELOAD用于C++类方法

我需要在C++程序中插入一个方法调用(该类驻留在一个单独的共享库中).我以为我可以使用LD_PRELOAD,但我不确定这是如何工作的(我只找到C函数的例子):有没有办法为单个方法设置插入而不从插入的类实现复制任何代码?

c++ methods library-interposition

7
推荐指数
2
解决办法
4088
查看次数

插入OS X系统调用

我需要插入(调用我的函数而不是原始函数)一些OS X系统调用来克服一个闭源软件中的缺陷.

最好,得到的解决方案可以在10.5(Leopard)和更新的情况下工作,但如果论证足够强大,我可能需要10.6(Snow Leopard).

最好,得到的解决方案是可执行的,但我可能会选择一个脚本.

优选地,即使在目标应用程序运行之后,所得到的解决方案也能够插入("窃取向量"),但是我可以解决在应用程序加载时必须注入其自身的技术.

优选地,所得到的解决方案将用C或C++开发,但我可以解决Objective-C或其他问题.

到目前为止,我已经尝试过:

1)DTrace脚本,它教会了我很多,但D语言的局限性(有限的流量控制等)使它成为我正在做的事情的主要痛苦,更不用说结果将是一个脚本,这不像我正在拍摄的那样整洁和自足.

2)DYLD_INSERT_LIBRARIES插入,在很多方面很流行,但可能是由于命名空间扁平化(我不会假装深刻理解这意味着什么),它可以很好地对付更简单的可执行文件,但是使我的目标应用程序阻塞,即使我构建一个没有实际插入任何调用的无用库.

我的最新想法是尝试使用mach_star(https://github.com/rentzsch/mach_star),但我先停在这里,要求Stack Overflow社区,它总是比我更了解...

......我接下来除了马赫星之外还应该看一些东西吗?

macos dtrace library-interposition function-interposition interposing

5
推荐指数
0
解决办法
1114
查看次数

C中的内存映射文件

我正在使用C中的内存映射文件,并想知道是否有办法透明地用fopen替换FOLD*和内存映射文件.

例:

FILE * fp = g_fopen(...);

//Program does things to this fp.

fclose();
Run Code Online (Sandbox Code Playgroud)

但相反,是否有可能有FILE*fp = my_fopen(...)

我自己的函数会在磁盘mmap上打开一个文件,也许更改内容然后传回FILE*,而程序看不到除了新的my_fopen()和my_fclose()之外的任何不同.

这是否可以不必重写程序中的操作方式?

c memory file-io transparency library-interposition

3
推荐指数
1
解决办法
5090
查看次数