【安卓逆向】MotionNinja会员功能的解锁分析

这次的要分析的软件是😃

无壳,mt管理一键去除签名就行🤩

先来看看这款应用

这里有很多实用的功能

但是要会员!!!😂

这里导入jadx分析一下,还是先搜索一下isvip

这两个方法名根据我的经验,一眼是假的,点进去看看

空方法,果然没什么用,这里还搜索了"会员”,“vip"等等资源,等等资源id,均未找到突破点,没办法,只能从头分析一下,先打开mt管理器的activity记录

jadx定位到HomeActivity看看,看看有没有实现会员功能的初始化

这段代码引起我的注意,主要是这里有几个字段名比较值得怀疑

 if (!(BillingManager.m1758m() || BillingManager.m1770a("motionninja_vip_forever_96e9aa37bd91974b") || BillingManager.m1770a("motionninja_vip_year_418ebd67183cbcd8") 

看代码逻辑这里是调用BillingManager.m1770a方法进行了一通判断,具体其实我们还不知道是要干嘛,可以使用frida hook一下该方法,看看实现了什么功能

function hook(){
    let BillingManager = Java.use("vb.o");
    BillingManager["a"].implementation = function (str) {
        console.log(`BillingManager.m1770a is called: str=${str}`);
        let result = this["a"](str);
        console.log(`BillingManager.m1770a result=${result}`);
        return result;
    };
}

function main(){
    Java.perform(function(){
        hook();
    })
}

setImmediate(main)

 frida -U -f com.accarunit.motionvideoeditor.cn -l .\hook.js 启动应用

可以发现这个方法确实被调用了好多次,用于判断会员的情况(猜测的),且返回值是false,那如果我们试试将返回值改成true的话,结果会怎样呢?

function hook(){
    let BillingManager = Java.use("vb.o");
    BillingManager["a"].implementation = function (str) {
        console.log(`BillingManager.m1770a is called: str=${str}`);
        let result = this["a"](str);
        console.log(`BillingManager.m1770a result=${result}`);
        result = true;
        console.log(`BillingManager.m1770a result changed to ${result}`);
        return result;
    };
}

function main(){
    Java.perform(function(){
        hook();
    })
}

setImmediate(main)

我们再次来启动应用看看

返回值成功修改成了true了

实测会员功能已经解锁,且可以正常使用😀😝,现在关键方法已经找到,我们回到mt管理器,直接找到该方法处,修改返回值就行




posted @ 2024-05-03 23:37  GGBomb  阅读(19)  评论(0编辑  收藏  举报