java - Android 设备 Udid 与 AirWatch Udid
问题描述
我以编程方式获得的 android 设备 UDID 与同一设备的 AirWatch Udid 不同。是否有另一种获取设备 Udid 的方法?
我使用 Secure.ANDROID_ID 来获取 udid,但它仍然与 AirWatch 获取的 UDID 不同。
Secure.getString(getContentResolver(), Secure.ANDROID_ID);
AirWatch UDID 的长度如下:
ak26fs007bf8S786f2fr281d22c6996d
我期望相同的输出,但我从上面的代码中得到的 Udid 是:
63a34441u6ajj2ed
解决方案
air watch UDID 是通过对设备的多个方面进行哈希处理生成的,其中 Secure.ANDROID_ID 只是其中一个 - ro.serialno 可能是另一个,但重点是它们将它们放在一起,使用 128 位哈希,这就是你得到什么。
如果您绝对必须匹配他们的计算,那并不难——找到他们的 APK .dex ,他们在类方法中执行计算,然后通过反编译自己查看代码。
他们的代码自然是被混淆的,但你可以从
com.airwatch.core.AirWatchDevice.isDeviceUDIDInitialized()
从一个或两个位置调用,并且 - 如果它返回 false - 他们调用 UDID 方法(实际的完整方法名称在这里没有用,因为它被混淆了,沿着“dap0.d0.g0.c”的行每次构建,但 isDeviceUDIDInitialized() 仍然可见)。
另一种方法是寻找他们在哪里钓鱼 ro.serialno,
通过 java.lang.Class.getMethod("android.os.SystemProperties", "get", ..)
其中他们还寻找 android.os.Build.MANUFACTURER 和一堆其他属性。
此外,在某些版本中,formatDeviceUid 作为一种方法 - 直接应用 MD5。
推荐阅读
- laravel - 如何在laravel中保存路由中传递的id
- python - 代码正在运行,但现在突然无法运行 - 数据框问题
- python-3.x - 结果导致文件未找到错误 GZIP HASH-LIB
- c# - 为什么后台工作人员可以启动额外的工作线程来处理 ProgressChangedEvent?
- python - 安装 Python 包以供系统广泛使用
- javascript - 代码镜像。替换文本的简单方法?
- mongodb - MongoDB 更新查询嵌套数组
- angular - Angular:RxStomp 监视、配置、激活方法
- angular - 角反应形式 - 添加组控件数组
- ruby - Ruby,不能舍入浮点数