1

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

  • 我自己的连接并接受 Diffie-Hellman 密钥。
  • 我自己的发送和接收,以便使用 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 上的客户端尽可能透明?

谢谢你,多鲁

4

1 回答 1

1

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

Xposed 安装程序替换为修改后的版本,该/system/bin/app_process版本将加载可以覆盖任何类中的任何方法的 JAR“插件”,即使是在 Android Zygote 级别。交互式应用程序有助于管理插件。更多细节可以在Xposed 开发教程中找到。

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

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

于 2014-08-08T20:38:41.487 回答