程序员冒死揭露黑产系列之:通道劫持与动态注入
360“又”被小米下架了,孰是孰非这里暂且不表,不过在看到小米的声明中指控360“在用户并不知情的情况下静默执行Root刷机行为,篡改MIUI系统签名,植入非官方的系统应用”后,不禁感慨,终于还是有人突破了底线。
说到Root,使用过安卓手机的朋友们一定是耳熟能详,肯定也有不少应用程序在大家的手中被赋予了Root权限。虽然我们使用Root权限的目的可能只是为了卸载内置应用、apk自动安装、管理后台进程或者限制后台流量,然而你不知道的是,在你点击“授权”的一瞬间,你可能已经开启了“裸奔”模式,下面请同学们继续拿出小板凳坐好,听我来简单介绍下这个“裸奔”模式的开启原理。
一个App,无论复杂如微信还是简单如图片查看器,他们都需要遵循系统对应的“开发框架”,获取系统提供的能力,来完成自己产品对应的功能。如启动,获取用户的操作,发送网络数据等。“开发框架”定义了一些app获取系统能力的“通道”,app通过这些“通道”就可以很方便的使用系统对应的能力。在这里,应用程序和操作系统之间的关系可以抽象成下图:
我们发送的每一条信息,输入的每一个密码,分享的每一条说说,拍摄的每一张照片都需要经过这个“通道”,由操作系统处理后才能完成。
很明显,“通道”是实现功能的“必经之路”,如果“通道”被劫持、篡改,我们的敏感信息就很有可能被暴露。然而很不幸的是,这种劫持、篡改通道的技术已经很成熟了,一般我们都称它为“动态注入”。在被注入后,应用程序与操作系统间的“通道”就会变成下图:
也就是说所有的数据都会被某个“其他应用”“窥视”一遍,然后才会到达系统。
如果你的手机可以获得Root权限,并且手机上安装了某个具有“动态注入”能力的“其他应用”A,那么,当你使用应用程序时,应用程序的启动和运行可能会经历下面的过程:
应用程序启动后,A会使用“动态注入”技术,将自己的“窥视”代码注入到应用程序的进程中。
“窥视”代码被注入后,会针对性的拦截应用程序到系统的“通道”。
当应用程序使用“通道”时,数据会先被A应用“窥视”后,才会交给操作系统。
监控应用程序的行为,只需如此“简单”的三步,并不比“把大象放冰箱里”复杂。
最后,引用一下“技术本身并不可耻”的名言,“动态注入”如果能够合理利用,可以通过获取用户的使用习惯来做一些针对性的体验优化,还可以控制一些软件的自启动和流量使用。然而,相信在这个浮躁的社会里,并不是每个人都像我一样单纯、善良。
对了,再补充一句:该技术不仅仅适用于安卓系统。
#专栏作家#
给产品经理讲技术,微信公众号(pm_teacher),人人都是产品经理专栏作家。资深程序猿,专注客户端开发若干年,对前端、后台技术略懂,热衷于对新的科技领域的探索。
本文原创发布于人人都是产品经理,未经许可,不得转载。