几个月没登过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