在安卓app中判断当前系统是ohos还是android? 原创

没用的喵叔
发布于 2021-5-10 16:12
浏览
2收藏

第一版:

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;
}

 

 

 

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2021-6-28 10:06:47修改
3
收藏 2
回复
举报
4条回复
按时间正序
/
按时间倒序
zhushangyuan_
zhushangyuan_

这样是不是比较容易仿冒 搞个同名类就行了?

回复
2021-5-10 20:36:18
没用的喵叔
没用的喵叔 回复了 zhushangyuan_
这样是不是比较容易仿冒 搞个同名类就行了?

上午更新一版新方法,欢迎再来查找漏洞

回复
2021-5-11 03:41:52
mb60d5ab14ac4ef
mb60d5ab14ac4ef 回复了 没用的喵叔
上午更新一版新方法,欢迎再来查找漏洞

EMU11.x 不是鸿蒙也会被判定为鸿蒙

回复
2021-6-25 18:09:11
没用的喵叔
没用的喵叔 回复了 mb60d5ab14ac4ef
EMU11.x 不是鸿蒙也会被判定为鸿蒙

已更新,EMU11.x 上的bug修复了

2
回复
2021-6-27 10:49:46
回复
    相关推荐