allenymt / PrivacySentry

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

自定义hook的问题 #64

Closed OhPeterPan closed 2 years ago

OhPeterPan commented 2 years ago

不引入 privacy-proxy 这个aar,之后然后自己实现hook方法之后,项目就会闪退,日志如下(看着很像项目以来的广告sdk出现问题): java.lang.NoClassDefFoundError: Failed resolution of: Lcom/yl/lib/privacy_proxy/ProxyProxyField; at com.win.opensdk.t1.a(:18) at com.win.opensdk.c1.run(:2) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) at java.lang.Thread.run(Thread.java:920) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.yl.lib.privacy_proxy.ProxyProxyField" on path: DexPathList[[zip file "/data/app/q2h4DQoOQJrg-9EW2bOtgg==/com.mywallpaper.customizechanger-2qfrGhLFeu0izP4yWCxlUA==/base.apk"],nativeLibraryDirectories=[/data/app/q2h4DQoOQJrg-9EW2bOtgg==/com.mywallpaper.customizechanger-2qfrGhLFeu0izP4yWCxlUA==/lib/arm64, /data/app/~~q2h4DQoOQJrg-9EW2bOtgg==/com.mywallpaper.customizechanger-2qfrGhLFeu0izP4yWCxlUA==/base.apk!/lib/arm64-v8a, /system/lib64, /system_ext/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:218) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at com.win.opensdk.t1.a(:18)  at com.win.opensdk.c1.run(:2)  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)  at java.lang.Thread.run(Thread.java:920) 

OhPeterPan commented 2 years ago

还有就是用 oppo扫描之后发现有些android_id还是无法hook. oppo自动化检测报告.xlsx . 使用步骤: 1、依赖 def privacyVersion = “1.0.9” implementation "com.github.allenymt.PrivacySentry:hook-sentry:$privacyVersion" implementation "com.github.allenymt.PrivacySentry:privacy-annotation:$privacyVersion" //如果不想使用库中本身的代理方法,可以不引入这个aar,自己实现 implementation "com.github.allenymt.PrivacySentry:privacy-proxy:$privacyVersion" 2、初始化

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    //完成功能的初始化
    PrivacySentryBuilder builder = new PrivacySentryBuilder()
            // 自定义文件结果的输出名
            .configResultFileName("buyer_privacy")
            // 配置游客模式,true打开游客模式,false关闭游客模式
            .configVisitorModel(false)
            // 配置写入文件日志 , 线上包这个开关不要打开!!!!,true打开文件输入,false关闭文件输入
            .enableFileResult(false)
            .syncDebug(BuildConfig.DEBUG)
            // 持续写入文件30分钟
            .configWatchTime(30 * 60 * 1000)
            // 文件输出后的回调
            .configResultCallBack(new PrivacyResultCallBack() {

                @Override
                public void onResultCallBack(@NonNull String s) {

                }
            });
    // 添加默认结果输出,包含log输出和文件输出
    PrivacySentry.Privacy.INSTANCE.init(this, builder);
}
同意隐私协议之后   PrivacySentry.Privacy.INSTANCE.updatePrivacyShow();
allenymt commented 2 years ago

Lcom/yl/lib/privacy_proxy/ProxyProxyField 这个aar是必须依赖的

allenymt commented 2 years ago

还有就是用 oppo扫描之后发现有些android_id还是无法hook.

android_id,sdk只是保证进程内只被读取一次,你的问题是定时上传,这个需要你自己处理

OhPeterPan commented 2 years ago

还有就是用 oppo扫描之后发现有些android_id还是无法hook.

android_id,sdk只是保证进程内只被读取一次,你的问题是定时上传,这个需要你自己处理

Lcom/yl/lib/privacy_proxy/ProxyProxyField 这个aar是必须依赖的

这个依赖似乎在privacy-proxy里面,依赖后,如果我想自定以getstring hook的话,会不会执行PrivacyProxyCall里面的拦截代码?