这次的要分析的软件是😃
无壳,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管理器,直接找到该方法处,修改返回值就行