oasisfeng/condom

能否拦截第三方 SDK 访问敏感信息

Closed this issue · 11 comments

冯老师好~
是这样的,小米推送SDK有一个很恶心的 ManifestChecker,会自动检查你是否按要求申请了 READ_PHONE_STATEACCESS_NETWORK_STATEACCESS_WIFI_STATEGET_TASKSVIBRATEINTERNET等权限,不在 Manifest 申请够就不给初始化,特别恶心
比如手机权限,很敏感,涉及用户隐私。
能否拦截访问 TelephonyManager 等系统服务,返回空值等操作,不让SDK拿到这些数据?
同时,高德等阿里系SDK还会向 SD 卡的 .DataStorage .UTSystemConfig 写入广告垃圾文件,导致应用背锅,能否使用安全套解决?谢谢老师
PS:我知道这个可能有点偏离 防止唤醒 这个主题,但是觉得这是很必要的。

参见 dev 分支。已经实现 IMEI 权限拦截。

CondomKit 是一个开放机制,你也可以自己添加类似 NullDeviceIdKit 的其它 Kit。

@oasisfeng 嗯 好的
多问两句,Android ID 之类的设置可能拦截吗..

@oasisfeng
还有个事,小米推送SDK如果拦截了访问 com.android.settings Provider 会崩(NullPointerException),猜测是不是返回了 Null 之类的值(看 NullDeviceIdKit 得出),如果是的话能不能返回非空无效值,防止崩溃呢?

Settings 之类的 Provider 访问是可以拦截的。参见测试用例中的
CondomContextBlockingTest.testContentProvider()。

我这里目前暂时没有条件测试小米推送SDK,可否帮助调试一下具体导致NPE的原因?NullDeviceKit 会对 IMEI 访问返回 null,这是 API 的正常返回值,在没有基带的设备上(比如平板)。

好的,我把 NPE Stacktrace 给您。

@oasisfeng NPE stacktrace: (虽然这次没有 Crash,不过也 not work 了..

java.lang.NullPointerException: Attempt to invoke interface method 'android.os.Bundle android.content.IContentProvider.call(java.lang.String, java.lang.String, java.lang.String, android.os.Bundle)' on a null object reference
    at android.provider.Settings$NameValueCache.getStringForUser(Settings.java:1669) ~[na:0.0]
    at android.provider.Settings$Secure.getStringForUser(Settings.java:4463) ~[na:0.0]
    at android.provider.Settings$Secure.getString(Settings.java:4420) ~[na:0.0]
    at com.xiaomi.channel.commonutils.android.e.b(Unknown Source) ~[na:0.0]
    at com.xiaomi.channel.commonutils.android.e.h(Unknown Source) ~[na:0.0]
    at com.xiaomi.push.service.q.a(Unknown Source) ~[na:0.0]
    at com.xiaomi.push.service.XMPushService.onCreate(Unknown Source) ~[na:0.0]
    at android.app.ActivityThread.handleCreateService(ActivityThread.java:3216) ~[na:0.0]
    at android.app.ActivityThread.-wrap5(ActivityThread.java) ~[na:0.0]
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1586) ~[na:0.0]
    at android.os.Handler.dispatchMessage(Handler.java:102) ~[na:0.0]
    at android.os.Looper.loop(Looper.java:154) ~[na:0.0]
    at android.app.ActivityThread.main(ActivityThread.java:6186) ~[na:0.0]
    at java.lang.reflect.Method.invoke(Native Method) ~[na:0.0]
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) ~[na:0.0]
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) ~[na:0.0]

@Trumeet 能否给出能重现上述问题的最小代码片段?需要包含 Condom 的初始化部分。

@Trumeet dev 分支上合入了一个针对上述 NPE 问题可能的修复,请验证。

Condom Kit 已在 2.0.0 版本中正式发布。