前言
随着应用合规性要求的日趋严格和Android应用市场审核上架要求的规则调整。获取用户手机的信息越来越严格,在用户获取个人信息时需要先让用户手动确认使用协议和服务条款,并且要用户手动同意授权后才能够真正获取到权限。如果在没有权限、或者是用户没有手动同意服务协议的情况下进行相关信息的获取将会被应用市场驳回应用发版甚至下架应用。
然而,受到第三方SDK或者一些陈旧业务逻辑等等多种因素的影响,EC应用中存在着为数不少的容易被忽略或者无法有效排查的地方容易导致卡应用市场审核迟迟无法上架。当遇到这样的问题时,暂时的做法是话花费大量人力和时间做代码检查(包括我们自己的代码和一些第三方开源库的代码,面对闭源的第三方SDK只能找到可疑的SDK尝试更新版本。重新提交审核尝试是否能通过)或者是提交我们的应用给到第三方机构检测是否存在敏感信息提前获取(但是监测耗时较长效率低且成本高)。因此一个能快速有效的检测并跟踪隐私调用的方法将能为次剩下大量时间、人力和金钱成本。
经过预研,发现了可以以应用逆向的思路来解决这个问题,结合 Frida 这款热门的应用逆向框架,可以很好的实现我们的需求。
Frida 是什么
Frida 是一个开源的动态代码注入和脱壳工具,主要用于移动应用和操作系统的逆向工程和安全分析。它支持多种平台,包括 Android、iOS、Windows、macOS 等。通过 Frida,用户可以实时地修改应用程序的运行时行为,例如动态调试、修改内存数据、拦截函数调用等。这使得 Frida 在应用程序逆向工程、安全审计、漏洞分析等方面非常有用。其特点包括易于使用的 Python API 和强大的脚本支持,使得开发者和安全研究人员能够快速地进行应用程序的深入分析和测试
解决方案以及实现原理
目前Android系统获取敏感数据不可避免的都会调用到系统相关的API。我们只需要在一些特定的系统API插桩,当探测到有API调用时进行记录调用堆栈和调用来源,结合实际的权限授予情况和服务协议同意状态,即可得知调用来源的相关信息。结合调用来源的堆栈信息和报名,我们即可分析出调用精确的调用位置以及调用来源是我们的代码还是第三方类库或者SDK。进而更快一步的采取措施。而做到这一步只需要准备一台Root的手机或者把Frida服务打包进APK中随着应用启动同时运行,成本开销极低。
最终效果
最终效果,结合插桩记录和已知的一些第三方服务的包名,我们能够快速定位具体的调用来源和时机。在对安全审计、权限检测复查方面起到了重要作用。并且,结合Python强大的第三方库,我们能生成和第三方检测机构类似的检测报告,为公司节省大量人力和财力。