首页 > 解决方案 > 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

标签: javaandroidvmwareairwatch

解决方案


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。


推荐阅读