【安卓逆向】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管理器,直接找到该方法处,修改返回值就行
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端