allenymt / PrivacySentry

Android隐私合规整改检测工具,注解+Asm修改字节码的检测方案
MIT License
2.05k stars 262 forks source link

ContentProvider的生命周期在attachBaseContext之前,初始化内容检测不到 #51

Closed c4jeff closed 2 years ago

c4jeff commented 2 years ago

ContentProvider 的初始化内容检测不到,生命周期在attachBaseContext之前。OPPO检测出应用自身通过系统API获取设备应用安 装列表 2次,显示是WorkManager的调用信息,有什么好的解决方案吗?以下是OPPO的堆栈信息:

{
    "stackTrace":[
        {
            "className":"libcore.util.Janus",
            "level":0,
            "fileName":"Janus.java",
            "methodName":"getData",
            "lineNumber":826
        },
        {
            "className":"android.app.ApplicationPackageManager",
            "level":0,
            "fileName":"ApplicationPackageManager.java",
            "methodName":"queryIntentActivitiesAsUser",
            "lineNumber":1010
        },
        {
            "className":"android.app.ApplicationPackageManager",
            "level":0,
            "fileName":"ApplicationPackageManager.java",
            "methodName":"queryIntentActivities",
            "lineNumber":992
        },
        {
            "className":"android.app.ApplicationPackageManager",
            "level":0,
            "fileName":"ApplicationPackageManager.java",
            "methodName":"getLaunchIntentForPackage",
            "lineNumber":217
        },
        {
            "className":"android.app.ApplicationPackageManager",
            "level":0,
            "fileName":"ApplicationPackageManager.java",
            "methodName":"setComponentEnabledSetting",
            "lineNumber":2416
        },
        {
            "className":"androidx.work.impl.utils.PackageManagerHelper",
            "level":0,
            "fileName":"PackageManagerHelper.java",
            "methodName":"setComponentEnabled",
            "lineNumber":3
        },
        {
            "className":"androidx.work.impl.Schedulers",
            "level":0,
            "fileName":"Schedulers.java",
            "methodName":"createBestAvailableBackgroundScheduler",
            "lineNumber":3
        },
        {
            "className":"androidx.work.impl.WorkManagerImpl",
            "level":0,
            "fileName":"WorkManagerImpl.java",
            "methodName":"createSchedulers",
            "lineNumber":1
        },
        {
            "className":"androidx.work.impl.WorkManagerImpl",
            "level":0,
            "fileName":"WorkManagerImpl.java",
            "methodName":"<init>",
            "lineNumber":10
        },
        {
            "className":"androidx.work.impl.WorkManagerImpl",
            "level":0,
            "fileName":"WorkManagerImpl.java",
            "methodName":"<init>",
            "lineNumber":6
        },
        {
            "className":"androidx.work.impl.WorkManagerImpl",
            "level":0,
            "fileName":"WorkManagerImpl.java",
            "methodName":"<init>",
            "lineNumber":2
        },
        {
            "className":"androidx.work.impl.WorkManagerImpl",
            "level":0,
            "fileName":"WorkManagerImpl.java",
            "methodName":"initialize",
            "lineNumber":7
        },
        {
            "className":"androidx.work.WorkManager",
            "level":0,
            "fileName":"WorkManager.java",
            "methodName":"initialize",
            "lineNumber":1
        },
        {
            "className":"androidx.work.impl.WorkManagerInitializer",
            "level":0,
            "fileName":"WorkManagerInitializer.java",
            "methodName":"onCreate",
            "lineNumber":1
        },
        {
            "className":"android.content.ContentProvider",
            "level":0,
            "fileName":"ContentProvider.java",
            "methodName":"attachInfo",
            "lineNumber":1920
        },
        {
            "className":"android.content.ContentProvider",
            "level":0,
            "fileName":"ContentProvider.java",
            "methodName":"attachInfo",
            "lineNumber":1895
        },
        {
            "className":"android.app.ActivityThread",
            "level":0,
            "fileName":"ActivityThread.java",
            "methodName":"installProvider",
            "lineNumber":6476
        },
        {
            "className":"android.app.ActivityThread",
            "level":0,
            "fileName":"ActivityThread.java",
            "methodName":"installContentProviders",
            "lineNumber":6023
        },
        {
            "className":"android.app.ActivityThread",
            "level":0,
            "fileName":"ActivityThread.java",
            "methodName":"handleBindApplication",
            "lineNumber":5938
        },
        {
            "className":"android.app.ActivityThread",
            "level":0,
            "fileName":"ActivityThread.java",
            "methodName":"access$1100",
            "lineNumber":203
        },
        {
            "className":"android.app.ActivityThread$H",
            "level":0,
            "fileName":"ActivityThread.java",
            "methodName":"handleMessage",
            "lineNumber":1659
        },
        {
            "className":"android.os.Handler",
            "level":0,
            "fileName":"Handler.java",
            "methodName":"dispatchMessage",
            "lineNumber":106
        },
        {
            "className":"android.os.Looper",
            "level":0,
            "fileName":"Looper.java",
            "methodName":"loop",
            "lineNumber":193
        },
        {
            "className":"android.app.ActivityThread",
            "level":0,
            "fileName":"ActivityThread.java",
            "methodName":"main",
            "lineNumber":6754
        },
        {
            "className":"java.lang.reflect.Method",
            "level":0,
            "fileName":"Method.java",
            "methodName":"invoke",
            "lineNumber":-2
        },
        {
            "className":"com.android.internal.os.RuntimeInit$MethodAndArgsCaller",
            "level":0,
            "fileName":"RuntimeInit.java",
            "methodName":"run",
            "lineNumber":506
        },
        {
            "className":"com.android.internal.os.ZygoteInit",
            "level":0,
            "fileName":"ZygoteInit.java",
            "methodName":"main",
            "lineNumber":863
        }
    ],
    "permisson_group":"",
    "permisson":"",
    "params":{
        "intent":"Intent { act=android.intent.action.MAIN cat=[android.intent.category.INFO] pkg=com.xxx.xxx }",
        "flags":0,
        "userId":0
    },
    "result":{
        "List":"[]"
    },
    "stack_txt":3,
    "permisson_level":""
}
allenymt commented 2 years ago

WorkManager是系统类,强制拦截了,会对功能造成什么影响吗?

allenymt commented 2 years ago

看了下源码,强制拦截应该会对workmanager造成影响的,这部分堆栈完全是系统的堆栈

allenymt commented 2 years ago

强制拦截也有方法,你新建一个类,把queryIntentActivities方法配置拷到新类里,利用游客模式的开关判断是否拦截就行了,但这样可能会对workmanager的功能造成影响的。

建议和oppo申述下,这完全是Android系统库自己读的

c4jeff commented 2 years ago

已经把WorkManager延迟初始化处理了

allenymt commented 2 years ago

看你发的堆栈,延迟应该没用吧

c4jeff commented 2 years ago

按需初始化按这个配置后目前是通过了OPPO这部分的自动化检测