我正在开发一个关于Android安全性的拼贴项目。该项目的一部分尝试捕获并记录所选APK调用的所有API函数。这不能通过外部程序完成,所以在项目中我们正在使用Android源代码来修改ROM。
目前我们只有两种可能的解决方案:
DVM JNI Bridge
API是Java代码,因此很明显,Dalvik虚拟机需要一个桥来执行JNI代码。处理所有情况的函数是dvmCallJNIMethod(const u4 * args,JValue * pResult,const Method * method,Thread * self)。在这个函数中,我们可以得到被调用函数的名称和类。
此函数可以记录所有执行的JNI代码,包括API调用。但是在私有调用和API调用之间没有简单的方法可以区分。而且,如果我们想要根据执行的API调用的风险执行一些代码,我们将不得不创建一个巨大且低效的交换机。
API Framework
另一个解决方案要记录所有API调用,请为框架创建一个新接口。使用新的日志记录类和简单的继承应该很容易记录所有调用并添加风险参数。但这意味着要改变很多代码。此外,Java代码的性能最差,因此它可能不是最有效的方式。
此外,我们想问你几个关于Android DVM和API的问题。
1. DVM和API之间的呼叫流程究竟是什么? 2. DVM显示器可以记录通话吗? 3.在这一切中,哪个角色拥有共享库? 4.所有API调用都是Java代码吗?
感谢您的时间。