Android LD_PRELOAD相当于

时间:2014-05-23 07:07:01

标签: android ld-preload

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

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

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

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

稍后编辑:LD_PRELOAD强制加载程序使用我自己的accept,connect,send和receive版本加载我的库:http://www.catonmat.net/blog/simple-ld-preload-tutorial/

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

谢谢你, 多鲁

1 个答案:

答案 0 :(得分:1)

Android中没有与LD_PRELOAD完全等效的内容。但是, Xposed framework 提供了一个API,可以在不修改应用程序的情况下更改应用程序的行为。它专门用于填补缺少LD_PRELOAD功能的空白。

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

中找到

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

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