首页
社区
课程
招聘
[原创]聊聊大厂设备指纹获取和对抗&设备指纹看着一篇就够了!
发表于: 2022-7-21 16:36 89547

[原创]聊聊大厂设备指纹获取和对抗&设备指纹看着一篇就够了!

2022-7-21 16:36
89547
收藏
免费 63
支持
分享
打赏 + 61.00雪花
打赏次数 7 雪花 + 61.00
收起 
赞赏  寒夜看xue   +20.00 2022/09/24 好文,厉害nb
赞赏  wx_花卷   +10.00 2022/08/09
赞赏  orz1ruo   +5.00 2022/07/22 助人为乐~
赞赏  zpsemo   +10.00 2022/07/22 我珍惜牛逼
赞赏  Forgo7ten   +1.00 2022/07/21 珍惜大佬nb
赞赏  wx_白熊   +10.00 2022/07/21
赞赏  菱志漪   +5.00 2022/07/21
最新回复 (75)
雪    币: 2056
活跃值: (2278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
51
珍惜Any 1,cat底层走的也是openat ,你在svc做了openat的处理这个也会进行处理的 。 2,第二个我用的fuse自己伪造的系统文件 。
比如我想重定向 boot_id  这个文件, cd 到目录再 cat , openat 只能拿到 "boot_id" 这个字符串, 如果使用正则匹配这个值, 那误杀范围可能有点大, 如果可以拿到当前执行路径就好了, 例如终端下的pwd, 不知道svc能不能做到
2022-12-19 16:08
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
52
全都是HOOK 比如我想重定向 boot_id 这个文件, cd 到目录再 cat , openat 只能拿到 "boot_id" 这个字符串, 如果使用正则匹配这个值, 那误杀范围可能有点大, ...
可以包名我的课程,我讲了如何IO重定向,包括如何创建sandbox,如何根据路径进行匹配,如何模糊匹配路径。包括文件夹的重定向,文件重定向 。这些都可以 
2022-12-20 11:04
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
53
请教一下大佬,为什么ams可以获得签名信息呢?包类信息不应该是在pms厉害获得吗?
2023-3-2 16:27
0
雪    币: 197
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
54
2023-3-2 21:33
0
雪    币: 136
活跃值: (1227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
55
mark
2023-6-1 18:47
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
56
mb_chbazerq 请教一下大佬,为什么ams可以获得签名信息呢?包类信息不应该是在pms厉害获得吗?
可以看看我后续的文章哈
2023-6-25 10:41
0
雪    币: 12
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
57
顶,学习到了
2023-6-26 15:00
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
58
大佬 ,请教下Hunter里面的JavaDeviceFingerprint和NativeDeviceFingerprint 获取方法?
2024-2-20 11:14
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
59
mb_omoiqpnh 大佬 ,请教下Hunter里面的JavaDeviceFingerprint和NativeDeviceFingerprint 获取方法?
课程讲了,嘿嘿嘿
2024-2-21 10:06
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
60
mb_omoiqpnh 大佬 ,请教下Hunter里面的JavaDeviceFingerprint和NativeDeviceFingerprint 获取方法?
JavaDeviceFingerprint有a 和 b 两个,a会变,但b一直不会变,NativeDeviceFingerprint 也一直没变,能不能稍为指点一下?
2024-2-21 11:50
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
61
mb_omoiqpnh JavaDeviceFingerprint有a 和 b 两个,a会变,但b一直不会变,NativeDeviceFingerprint 也一直没变,能不能稍为指点一下?
反编译看看吧 ,不如我说了,没啥意思了。
2024-2-21 17:36
0
雪    币: 297
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
62
希望楼主能出一篇iOS相关的文章
2024-5-9 10:42
0
雪    币: 1750
活跃值: (1656)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
63
Java层设备指纹与Native层设备指纹。如何理解呢,Java API信息采集,Native信息采集么
2024-5-25 11:13
0
雪    币: 218
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
64
内容有点厚,学习一下
2024-7-2 18:00
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
65
盖伦爸爸 希望楼主能出一篇iOS相关的文章
ios俺也不会,嘤嘤嘤
2024-7-3 14:38
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
66
Payne-Wu Java层设备指纹与Native层设备指纹。如何理解呢,Java API信息采集,Native信息采集么
就是一个指纹可以多种获取方式,举个例子,比如getprop这种,java可以直接调用api获取,native里面也可以直接调用api进行获取。
2024-7-3 14:40
0
雪    币: 342
活跃值: (389)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
67
什么版本的android,可以”调用putStringForUser 往里面强制赋值“,最后SettingsProvider都会检测WRITE_SECURE_SETTINGS权限的吧
2025-4-7 16:34
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
68
hasking 什么版本的android,可以”调用putStringForUser 往里面强制赋值“,最后SettingsProvider都会检测WRITE_SECURE_SETTINGS权限的吧
为啥要通过这种方式修改,WRITE_SECURE_SETTINGS这个好像是系统App才有权限,直接在系统服务里面修改是最好的。
2025-4-7 16:37
0
雪    币: 342
活跃值: (389)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
69
珍惜Any 为啥要通过这种方式修改,WRITE_SECURE_SETTINGS这个好像是系统App才有权限,直接在系统服务里面修改是最好的。
我是看到文章里写的 “sNameValueCache修改的话可以调用API putStringForUser  往里面强制赋值”,难道是我理解错了?
2025-4-7 16:45
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
70
hasking 我是看到文章里写的 “sNameValueCache修改的话可以调用API putStringForUser 往里面强制赋值”,难道是我理解错了?
这个是缓存,用于判断android id是否被修改的。而不是直接set的,一般会用这个cache去获取和正常的获取看结果是否相同。这个api是在系统服务里面调用的,和android版本没关系。android id就是通过系统服务设置进去的。
2025-4-7 17:35
0
雪    币: 342
活跃值: (389)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
71
珍惜Any 这个是缓存,用于判断android id是否被修改的。而不是直接set的,一般会用这个cache去获取和正常的获取看结果是否相同。这个api是在系统服务里面调用的,和android版本没关系。andr ...
哦哦 不好意思 应该是我理解错了,我以为是 untrusted app去调用 putStringForUser。 
2025-4-7 18:27
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
72
hasking 哦哦 不好意思 应该是我理解错了,我以为是 untrusted app去调用 putStringForUser。
很久之前的文章,是我没表达清楚,最好直接在系统服务里面改,最保险。
```
 Class<?> SettingsProviderClazz = RuntimeManagerService.findclass(
                    "com.android.providers.settings.SettingsProvider");
            if (SettingsProviderClazz == null) {
                CLog.e("ServiceBaseInfoProcessor mockAndroidId ContentProviderProxyClazz == null");
                return;
            }
            //public Bundle call(String method, String name, Bundle args) {
            hook_set.add(RposedHelpers.findAndHookMethod(SettingsProviderClazz,
                    "call", String.class,
                    String.class, Bundle.class, new RC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            //GET_secure/android_id/Bundle[mParcelledData.dataSize=48]
                            var thisOjb = (ContentProvider) param.thisObject;
                            if (thisOjb == null) return;
                            //if(!FPServiceProcessManager.isMatchCallPackageInfo(thisOjb.getCallingPackage())) return;

                            String key = (String) param.args[1];
                            if (StringUtils.isEmpty(key)) {
                                return;
                            }
                            //args bundle
                            //Bundle bundle = (Bundle) param.args[2];
                            //result
                            Bundle result = (Bundle) param.getResult();
                            if (result == null) return;

                            String orig_value = result.getString("value");
                            if (StringUtils.isEmpty(orig_value)) {
                                //CLog.e("[" + key + "] orig_value == null orig -> "+orig_value+" " + thisOjb.getCallingPackage());
                                return;
                            }
                            String mock_value = getMockValueDistribution(orig_value, key, thisOjb.getCallingPackage());
                            if (StringUtils.isEmpty(mock_value)) {
                                CLog.e("[" + key + "] mock_value == null orig -> " + orig_value + " " + thisOjb.getCallingPackage());
                                return;
                            }
                            //不相等情况进行set
                            if (mock_value.equals(orig_value)) {
                                return;
                            }
                            Bundle temp_result = new Bundle();
                            temp_result.putString("value", mock_value);
                            param.setResult(temp_result);
//                            CLog.i("[" + key + "] system_service orig value [" + orig_value + "] mock value -> ["
//                                    + mock_value + "] call package -> " + thisOjb.getCallingPackage());
                        }
                    }));
```

系统服务里面hook这个
2025-4-7 19:17
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
73
能私聊?
2小时前
0
雪    币: 4841
活跃值: (14753)
能力值: ( LV9,RANK:230 )
在线值:
发帖
回帖
粉丝
74
mb_ivbzbqot 能私聊?
私聊啥,有问题帖子里面问就行了。
1小时前
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
75
有源码吗
1小时前
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册