
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
第一版:
public static boolean isOhos() {
boolean isOhos = false;
try {
Class.forName("ohos.aafwk.ability.Ability");
isOhos = true;
} catch (ClassNotFoundException ignored) {
}
return isOhos;
}
第二版,2021-05-11更新:
如评论区的朋友说,Ability类可以被伪造。那么,也简单,咱们再判断一下它的ClassLoader必须是BootClassLoader就可以了。
只要系统没被root,这样应该没有漏洞了吧?
public static boolean isOhos() {
boolean isOhos = false;
try {
Class<?> abilityClass = Class.forName("ohos.aafwk.ability.Ability");
ClassLoader classLoader = abilityClass.getClassLoader();
//如果Ability为系统提供的,其classloader为BootClassLoader
//如果Ability为伪造的,其classloader一般为PathClassLoader
System.out.println("abilityClassLoader: " + classLoader);
//BootClassLoader的parent为null
if (classLoader != null && classLoader.getParent() == null) {
isOhos = true;
}
} catch (ClassNotFoundException ignored) {
}
return isOhos;
}
第三版,2021-06-27更新:
评论区的朋友说,“EMU11.x 不是鸿蒙也会被判定为鸿蒙”。
参考:京东APP鸿蒙版上架实践,可以用如下代码进行判断。再次欢迎测试。
private static final String HARMONY_OS = "harmony";
public static boolean isHarmonyOS() {
try {
Class clz = Class.forName("com.huawei.system.BuildEx");
Method method = clz.getMethod("getOsBrand");
ClassLoader classLoader = clz.getClassLoader();
//如果BuildEx为系统提供的,其classloader为BootClassLoader
//如果BuildEx为伪造的,其classloader一般为PathClassLoader
System.out.println("classLoader: " + classLoader);
//BootClassLoader的parent为null
if (classLoader != null && classLoader.getParent() == null) {
return HARMONY_OS.equals(method.invoke(clz));
}
} catch (ClassNotFoundException e) {
} catch (NoSuchMethodException e) {
} catch (Exception e) {
}
return false;
}