我有一个用 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/