论坛首页 逆向工程技术区 阅读主题

[原创]某box App逆向分析(启动检测绕过+广告跳过)

478 浏览 0 回复
#1 楼主 2026-06-01 21:08:48
目标应用:com.secret.prettyhezi
核心目标:
        1)启动检测绕过
        2)广告绕过 
主要方法:
       jadx 静态分析
        Frida Java / native hook     请求与响应明文关联分析 
反编译工具:
    jadx
    IDA pro 运行时工具:
    Frida
 具体分析流程:1. 启动阶段安全检测绕过
用已经被root以及安装了Magisk的实验机打开APP,发现打开一直白屏,对于正常手机来说是可以直接进入APP的,现在就要怀疑是不是有一些启动检测手段

用MT打开安装包查看一下:没有加壳,直接用jadx打开

第一步:手动搜索root有关代码/system/bin/su
/system/xbin/su
/sbin/su
/vendor/bin/su
/data/adb/magisk
/data/adb/modules
/system/app/Superuser.apk发现检测代码段,我们跟踪一下经典的root检测手段

我们看一下函数调用链追到了一个onCreate函数

onCreate() 是 Android 里非常核心的生命周期回调方法,意思是:某个组件第一次被创建时,系统会调用它的 onCreate(),让你做初始化工作

对逆向分析来说,它是寻找启动逻辑、检测逻辑、跳转逻辑的重要位置。  可以发现我们之前追到的root检测方法:p0.e.b().d()

整个onCreate()还有提示“破解要小心”的字符串,说明整个逻辑可能更偏向于APP的启动检测

接下来我们仔细分析一下每个调用的函数会不会是检测函数

看到很多都调用m0(),分析一下具体作用是调用system.exit()函数 public void m0() {
        for (int size = f8217n.size() - 1; size >= 0; size--) {
            ((Yclh4J3zF) f8217n.get(size)).finish();
        f8217n.clear();
        System.exit(0);
    }追一下调用m0()的条件函数// 模拟器 / 虚拟机环境检测
if (p0.d.b().d(this, null)) {
            m0();
            return;

// p0.d.b().d() 代码
//这段代码是一个模拟器 / 虚拟机环境检测函数
//1. 基带版本是否异常
//2. build flavor 是否包含 vbox / sdk_gphone
//3. product board 是否包含 android / goldfish
//4. board platform 是否异常
//5. hardware 是否包含 ttvm / nox
//6. 是否支持闪光灯
//7. 传感器数量是否太少
//8. 用户安装 App 数量是否太少
//9. /proc/self/cgroup 是否可读取
//10. 把检测信息通过 cVar 回调输出
//通过多个设备特征打分,i6 分数大于 3,就认为当前运行环境像模拟器。
public boolean d(Context context, c cVar) {
        if (context == null) {
            throw new IllegalArgumentException("context must not be null");
        String strA = a("gsm.version.baseband");
        int i6 = (strA == null || strA.contains("1.0.0.0")) ? 1 : 0;
        String strA2 = a("ro.build.flavor");
        if (strA2 != null && (strA2.contains("vbox") || strA2.contains("sdk_gphone"))) {
            i6++;
        String strA3 = a("ro.product.board");
        if (strA3 != null && (strA3.contains("android") | strA3.contains("goldfish"))) {
            i6++;
        String strA4 = a("ro.board.platform");
        if (strA4 == null || strA4.contains("android")) {
            i6++;
        String strA5 = a("ro.hardware");
        if (strA5 == null) {
            i6++;
        } else if (strA5.toLowerCase().contains("ttvm") || strA5.toLowerCase().contains("nox")) {
            i6 += 10;
        boolean zHasSystemFeature = context.getPackageManager().hasSystemFeature("android.hardware.camera.flash");
        if (!zHasSystemFeature) {
            i6++;
        String str = zHasSystemFeature ? "support CameraFlash" : "unsupport CameraFlash";
        int size = ((SensorManager) context.getSystemService("sensor")).getSensorList(-1).size();
        if (size < 7) {
            i6++;
        String str2 = "sensorNum" + size;
        int iC = c(p0.b.c().a("pm list package -3"));
        if (iC < 5) {
            i6++;

...(已截断)

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-290983.htm

暂无回复,快来抢沙发吧!

请登录后参与讨论

立即登录 注册账号