控制第三方API对Android系统资源的访问?

Rad*_*scu 8 api proxy android android-security

当您在Android项目中导入第三方API(数据包依赖注入,生成的库,源代码等)时,您会认为它们的行为与广告一样.大多数时候代码不是开源的,它是混淆的或只是编译.

有没有办法控制此API对重要系统资源(如网络,联系人,视频和音频,位置)的访问?

最好的方法是为proxy他们提供系统资源.这将带来以下好处:

  • 可以通过在代理中提供模拟数据来执行测试
  • 如果不需要,您的应用程序将不必提供API所需的所有权限,并且代理将允许API因为通过模拟权限授予而不会中断
  • 过滤本地收集的有关用户的可能数据,并将其发送到API主页回购,用于广告或恶意

我未能找到如何实现这样的解决方案,因为用户定义的活动和服务无法控制第三方API的服务,甚至无法阻止它们直接调用任何Android公共接口.

该解决方案不应要求root访问权限,因为您不希望将此控件置于您自己的应用程序的边界之外.

这个问题的内容与几个问题相关联,这些问题解决了这个广泛问题的特殊性(内容提供者的日志数据,网络请求 - 让我在研究答案的同时考虑这个问题)

注意:简短的答案是否定的,但是一个人可以有足够的创造性(可能会针对本机级别的黑客可能会解决此问题 - idk)

Rad*_*scu 2

在名为 com.myproxies 的包中为您想要保护的所需 Android 资源构建代理类(例如 MediaRecorder、SensorManager、Camera、java.net.HTTPURLConnection)。在代理中,您需要实现该类的所有公共方法正在嘲笑,您需要实现逻辑以允许访问(转发到适当的方法)或拒绝。一个有用的步骤是检查该方法的调用者

  • 如果您计划导入源代码,请重构代码以将包更改为您的代理(proguard 可以帮助您完成此操作)。

  • 如果您使用的是库,请获取Jar Jar Links,这是一个实用程序,可以轻松地重新打包 Java 库并将它们嵌入到您自己的发行版中,并将包名称在内部更改为包中将充当代理的类的名称。

  • 如果你使用的是Maven或Gradle包依赖注入,你也可以尝试导入Jar Jar Links并在编译时进行包重构(不太确定可以做到)

不幸的是,正如我自己所经历的那样,破坏 API 是非常容易的,并且涉及大量的体力劳动。