击溃 360 手机卫士的三大防护
图/文 非虫
360 作为国内专业的安全公司,在安全界的水平是有目共睹的,我们抛开它在经营与病毒防治上的一些极端
措施,就其产品技术性而言,是广大安全爱好者应该学习的。今天我与大家探讨下在 Android 平台上 360 手机卫
士这款产品其本身的安全性,并将自己研究时的一点小成果拿出来与大家分享。Android 手持设备的私密性注定
了这是一个敏感话题,在开始本文前,我郑重声明:本文的宗旨是让大家看到 Android 平台的可能的攻击方式,
仅供技术学习交流,任何个人与组织不得用文中提到的技术手段对其它人或组织进行非法攻击,由此带来的一切
法律责任本人概不负责。
测试环境
360 手机卫士不支持在模拟器上使用,我使用 ROOT 过的(本文所有研究测试条件建立在手机已获得 ROOT
权限的情况下)国行 MOTO XT615 进行安装测试,而 360 的版本选择了最新的“360 手机卫士贺岁版 2.5.1”,APK
的反编译工具由于方便而选择了 ApkTool_GUI,Smali 代码的查看与分析选择了 Editplus(IDA PRO6.1 也可以,
只是对包名的显示不太友好,自己写插件的话也行,不过不在讨论范围),另外 ApkTool_GUI 有个 dex2jar 功能,
也可以做辅助分析(只是生成的代码不是很准确,对于 synthetic 类型的方法不生成代码)。编写与调试代码用到
了 Eclipse,调试信息的查看与 XML 文件的导出用到了 DDMS。准备好调试环境后,正确安装 360 手机卫士,开
始 360 保护功能的艰苦分析之旅吧!
短信拦截
360 手机卫士第一个强大的功能就是垃圾短信与电话的拦截,它的实现方式主要通过创建广播对信息与电话
进行拦截,然后将其阻断。
打开“AndroidManifest.xml”文件,会发现里面有一个名为“com.qihoo360.mobilesafeguard”的 provider,然
后是 N 多的 service 与 receiver,短信的拦截就用到了下面这个 receiver:
<receiver android:name=".mms.receiver.MmsReceiver">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data android:mimeType="application/vnd.wap.sic" />
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data android:mimeType="application/vnd.wap.slc" />
</intent-filter>
</receiver>
Android 的广播有无序广播与有序广播两种,静态注册的广播属于有序广播,通过设置“priority”来设置广
播优先级。系统默认设置范围是-1000~1000 之间,但 SDK 中可能没有明确的数值限定,可以看到 360 将 priority
设置为了 2147483647,也就是 32 位有符号数的最大值。也就是试图设置最高响应优先级。Android 系统会首先
响应优先级高的广播,然后响应优先级低的,另外动态注册的广播又比静态注册的广播优先级高,如果优先级相
同就响应最早安装的程序,而优先级是“adb install”高于“adb push 后安装”方式。