今天在做一个unidbg模拟的实验,下载了大师傅提供的老版nike app

在断网的情况下可以绕过版本检测,正常使用app

如果联网的话就弹出更新的activity

所以猜想进行绕过呢?

定位

1、搜索字符串

没有数据

2、activity记录窗口

找到 com.nike.mynike.ui.UpdateAppRequiredActivity

jadx定位分析:

发现没啥东西,关键是引用



function hook_navigate() {
    Java.perform(function () {
        let Companion = Java.use("com.nike.mynike.ui.UpdateAppRequiredActivity$Companion");
        Companion["navigate"].implementation = function (activity) {
            console.log(`Companion.navigate is called: activity=${activity}`);
           // this["navigate"](activity);
         
        };
    });
}

setImmediate(hook_navigate);

hook发现被调用

app直接闪退,说明了这个app到这个窗口的结果就是退出。

继续向上hook

直接nop看看

成功绕过,但是好像不能登录。

这样方法简单粗暴

关键还是这个函数

发现没什么用

继续分析

打印调用堆栈

分析发现

正常来说hook

nikeConfigurationData2.isAppVersionLowerThanMin("22.27.5", Build.VERSION.SDK_INT)

让其返回false就完成啦

但是这个app直接hook,发现没效果,没触发。

关键是if里面的东西hook就可以触发,离谱

后来我发现,这是个接口,应该hook其实现的,我Hook错地方了

终于找到了方法

完整代码:

function hook_navigate() {
    Java.perform(function () {

        let MainActivity = Java.use("com.nike.mynike.ui.MainActivity");
        MainActivity["setupCurrentFragment"].implementation = function (isTabEnabled, fragmentToShow) {
            console.log(`MainActivity.setupCurrentFragment is called: isTabEnabled=${isTabEnabled}, fragmentToShow=${fragmentToShow}`);
            this["setupCurrentFragment"](true, fragmentToShow);
  
        
         
        };

        let NikeConfigurationDataImpl = Java.use("com.nike.mynike.configuration.NikeConfigurationDataImpl");
        NikeConfigurationDataImpl["isAppVersionLowerThanMin"].implementation = function (currentVersion, currentAosSdkVersionCode) {
            console.log(`NikeConfigurationDataImpl.isAppVersionLowerThanMin is called: currentVersion=${currentVersion}, currentAosSdkVersionCode=${currentAosSdkVersionCode}`);
            let result = this["isAppVersionLowerThanMin"](currentVersion, currentAosSdkVersionCode);
            console.log(`NikeConfigurationDataImpl.isAppVersionLowerThanMin result=${result}`);
            return false;
        };


    });
}

setImmediate(hook_navigate);

这个时候就成功了