Loading... # 某校园运动APP逆向分析——Root分析篇-1 最近把臭名昭著的某校园运动的APP研究了一下,这里分享下采用的思路,大佬勿喷 ## 前言 当时开始校园跑时候,我还没研究透这玩意,识别到Lsposed特征就闪退,Frida也是,也是困扰了很长时间,魔改Frida可以用,但不会用,这玩意没思路,对安卓系统不了解基本无从下手,当时用AI一顿操作猛如虎,没方向AI也是没有办法的,这玩意只能做效率上的提升,指望它帮你搞定,不如踏踏实实多看文章模仿学习一下 最近偶然看到Deepseek推荐了一个学习通的项目,辅助做题的模块,带很强的反检测权限,我就顺手加上了Telegram的频道,群主挺活跃的,我于是就把我的经历讲了一下,他推荐了一个项目,顺藤摸瓜,找到了MT论坛的大佬,它顺便把某企业壳给搞定了,我估计是网易的易盾 ## 分析过程 工具(包含前述大佬的模块): Layout Inspect(Lsposed模块) :https://bbs.binmt.cc/thread-164590-1-1.html Jadx:https://github.com/skylot/jadx 前置环境条件: Root手机、Lsposed框架(最好101最新版本,大部分模块开发者开始最低要求101了,新的框架,变化很大不兼容100) 然后就是把运动世界的Dex文件提取出来,dex是安卓apk的内部文件,涵盖了软件代码的函数内容,代码都在里面,不过大多数情况你用Frida提取出来是不完整的,尤其是新的企业壳,带了抽取函数这类恶心东西,只有启动时候才会解密把对应函数内容解密出来放回原有位置,不然你是找不到的,用Layout Inspect可以很好的解决提取Dex的问题,提取出来后,就可以利用Jadx来进行反编译,查看代码 在之前使用时候,想过抓包找出上传算法,当时分析后,看出了加密,只能从包本身入手,可以看出里面有一套完整的上报机制,还有设备信息上报,因为之前我被封过,帮同学跑太多了,设备异常全部触发处罚 篇幅有限,我就挑几个重点的来讲 ### 检测分析 首先是刚启动时候要面临的检测关,通过AI的辅助,排查出,`com.geetest.mobinfo.u`是针对调试检测的,`com.zjwh.android_wh_physicalfitness.utils.DeviceInfo`是针对Root检测的 首先是Root检测,通过目录层级查询  直接贴出关键代码端 ```java public static int isRoot() { return (checkDeviceDebuggable() || checkSuperuserApk() || checkRootPathSU() || checkRootWhichSU() || checkBusybox() || checkAccessRootData()) ? 1 : 0; } ``` 从名字可以看出,第一个是安卓系统签名,正常出厂的消费端产品使用的是release-keys,不会是test-keys 它的检测代码块 ``` private static boolean checkDeviceDebuggable() { String str = Build.TAGS; return str != null && str.contains("test-keys"); } ``` 这里return判断属于**逻辑与 (&&) 短路判断** 只有str不为null且test-keys为真才算设备是测试设备,被判断为Root,如果直接使得系统签名返回为NOP(空值),就可以绕过,这个检测比较初级 第二个checkSuperuserApk不讲了,查了下,很老的Root管理工具了,那个年代2013年左右手机都基本淘汰没了,有也只能拿来打电话 第三个就是checkRootPathSU,这个含金量高点,通过遍历查找每个路径下是否存在su文件,检测是否Root ``` private static boolean checkRootPathSU() { String[] strArr = {"/system/bin/", "/system/xbin/", "/system/sbin/", "/sbin/", "/vendor/bin/"}; for (int i = 0; i < 5; i++) { try { if (new File(strArr[i] + bg.y).exists()) { return true; } } catch (Exception e) { e.printStackTrace(); } } return false; } ```  第四个类似于cmd,通过系统命令查找是否存在su文件,利用which特性来的 第五个就是busybox检测,busybox是命令行集成工具,集成了linux常用的一些命令操作,手机这类不带终端的,Root管理工具一般会附带安装这玩意扩展命令,增强功能性 最后一个是目录权限检测 ```java private static synchronized boolean checkAccessRootData() { try { } catch (Exception e) { e.printStackTrace(); return false; } return "test_ok".equals(readFile()); } ``` **return "test_ok".equals(readFile());** 进一步查看readFile ```java private static String readFile() { try { FileInputStream fileInputStream = new FileInputStream(new File("/data/su_test")); byte[] bArr = new byte[1024]; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); while (true) { int i = fileInputStream.read(bArr); if (i <= 0) { return new String(byteArrayOutputStream.toByteArray()); } byteArrayOutputStream.write(bArr, 0, i); } } catch (Exception unused) { return null; } } ``` 经过分析,这个竟然是个半成品,没有写入操作,单纯读 最后修改:2026 年 05 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏