Android LD_PRELOAD 等效

标签 android ld-preload

我有一个用 C 编写的客户端和一个服务器。为了保护我实现的连接:

  • 我自己连接并接受 Diffie-Hellman key 。
  • 我自己发送和接收,以便使用 AES 加密流量。 基本上,我用数据加密缓冲区并调用原始发送 在加密缓冲区上。解密也一样。

当我运行我使用的程序时:

  • LD_PRELOAD:my_socket.so ./client
  • LD_PRELOAD:my_socket.so ./server
  • 客户端和服务器可以是任何使用套接字的程序。

稍后编辑:LD_PRELOAD 强制加载程序使用我自己的接受、连接、发送和接收版本加载我的库:http://www.catonmat.net/blog/simple-ld-preload-tutorial/

现在,我想在 Android 上移动我的图书馆。我如何模拟 LD_PRELOAD 的行为,以便我的库对 Android 客户端尽可能透明?

谢谢, 多鲁

最佳答案

Android 中没有 LD_PRELOAD 的精确等价物。但是 Xposed framework 提供了一个 API 来改变应用程序的行为而无需修改它们。它专门用于填补缺少 LD_PRELOAD 功能的空白。

Xposed installer用修改后的版本替换 /system/bin/app_process,这将加载 JAR“插件”,这些插件可以覆盖任何类中的任何方法,即使在 Android Zygote 级别也是如此。交互式应用程序有助于管理插件。更多详细信息,请参阅 Xposed Development Tutorial .

(请注意,替换 /system 中的文件需要 root 权限。如果您的应用程序依赖于 Xposed 框架,您的所有用户都需要 root 设备。)

备选方案:以上应该有望回答您有关 LD_PRELOAD 功能的问题。但是我认为你的情况有一个替代方案,它不需要 root 权限。 Android 提供了 VpnService 类允许开发人员实现他们自己的 VPN 解决方案。这使您可以开发 Android 应用程序,这些应用程序可以请求用户授予拦截和处理所有网络流量的权限。

关于Android LD_PRELOAD 等效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23823035/

相关文章:

linux - 带有 setuid 二进制文件的 LD_PRELOAD

Android:如何在 xml 中平衡 GridLayout

android - 如何在右侧显示android复选框?

java - 将 bytes[] 更改为字符串

c - 无法使用通过 LD_PRELOAD 加载的动态库中的函数

c - `__attribute__((destructor))` 在某些情况下无法运行?

c - 如何使用 LD_PRELOAD 包装可变参数函数?

java - 我可以删除 xml 文件吗?安卓

android - 如何解决android中的 "Conversion to Dalvik format failed with error 1"

android - Android 上的 LD_PRELOADING dlopen