从破解运动世界校园学习模拟器检测与Xposed检测

本文介绍了如何绕过运动世界校园应用的模拟器检测,包括JAVA层的模拟器文件检测,JNI层的模拟器特征检测,以及Xposed和Cydia的检测。通过反编译和HOOK技术,可以成功避开这些检测机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

几个月没登过csdn 期间对于安卓逆向自然是多学习了一些 

本次研究学习运动世界校园的程度应该会比以前深一点

(以前发的那篇算个什么东西 简直是羞耻 留着就当激励自己了)

这次对360加固进行脱壳 拿到真实DEX以后就没什么难度了 只是练一个阅读代码的学习能力而已 脱壳方法多种多样 与主题无关暂不详述

 1 检测模拟器文件 JAVA层

前文提到的检测模拟器特征文件的函数仍然存在  只是没有用File.exists()的方法了 先放出反编译后的代码

private static List<String> m(Context object) {
    Object object2;
    try {
        object2 = (String)aj.b((Context)object, b.ac, "[]");
        object = a.a().b((String)object2, object.getString(2131296410));//这个String为SWCampus2017DDY_ 用于解密加密后的Json Json内容为检测文件列表 我是根据这个字符串在strings.xml里的名字为emulator_key跟进来的
        object = (List)w.a().fromJson((String)object, new TypeToken<List<String>>(){}.getType());
        if (object == null) return Arrays.asList((Object[])com.zjwh.android_wh_physicalfitness.b.a.u);
        object2 = object;
    }
    catch (Exception exception) {
        object = null;
        object2.printStackTrace();
        if (object == null) return Arrays.asList((Object[])com.zjwh.android_wh_physicalfitness.b.a.u);
        object2 = object;
        if (!object.isEmpty()) return object2;
        return Arrays.asList((Object[])com.zjwh.android_wh_physicalfitness.b.a.u);
    }
    if (!object.isEmpty()) return object2;
    return Arrays.asList((Object[])com.zjwh.android_wh_physicalfitness.b.a.u);
    {
        catch (Exception exception) {}
    }
}
首先不看内部代码 直接hook 在模拟器内运行的返回值为


一看便知 只要将返回值设为空列表就可以了

param.setResult(new ArrayList());

检测模拟器文件这关就算是过了

2 检测模拟器特征  JNI层(实则JAVA层hook 也可改SO)

JNI就不提了 全都是抄别人的代码 可以在后文看看原作者的文章 有学习价值

先上检测函数的代码

首先最大的大忌就是把这么多功能都写在一个函数里 直接hook return false就可以了

public static boolean a(Context var0) {
        block26 : {
            block19 : {
                var14_6 = (String)aj.b("emulator_switch", "");//明文硬编码 大忌 一看就知道是干什么的了
                if (!TextUtils.isEmpty((CharSequence)var14_6)) {
                    var14_6 = com.zjwh.android_wh_physicalfitness.utils.a.a().b((String)var14_6, var0.getString(2131296410));
                    d.f((String)"emulatorSwitch", (String)var14_6);
                    var14_6 = (EmulatorSwitchBean)new Gson().fromJson((String)var14_6, EmulatorSwitchBean.class);
                    if (var14_6 != null) {
                        var5_7 = var14_6.isCpu();//这些我不知道是不能混淆掉吗 一看就知道是检测硬件信息
                        var6_8 = var14_6.isCpuFreq();
                        var11_9 = var14_6.isKernel();
                        var10_10 = var14_6.isGravity();
                        var9_11 = var14_6.isTemp();
                        var8_12 = var14_6.isVolt();
                        var
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值