首页
论坛
课程
招聘
[逆向分析] [HOOK注入] 使用Frida解锁某加速器会员功能
2021-2-26 17:23 5175

[逆向分析] [HOOK注入] 使用Frida解锁某加速器会员功能

2021-2-26 17:23
5175

第一次使用frIDA hook,记录一下分析流程
分析的软件没有壳,非常适合我这个萌新练手学习
首先进入软件注册登录。
因为我之前使用过,所以首页这里现在显示免费已到期,刚注册的话会有几天免费,另外新注册账户也一样显示免费到期,所以推测是以设备标识符为准而不是以账户。

拖入JEB中分析代码,搜索“免费已到期”或“免费截至”

切换为Java代码查看,可以看到他这里是从本地文件获取的一个时间来计算的

往上查看,发现了VIP的判断方法isVip()和“无限制使用”的判断方法isUnlimit()

在isVip return处下断点并动态调试测试下效果

运行到断点这里,将寄存器p1的值修改为1试试,使程序判断为Vip。

但是改了之后没有用,马上又运行到改断点处,因为他这里有一个线程会一直循环判断,所以手动改是行不通的。

想着直接改代码然后重打包的,但是考虑到可能只改这么一处行不通,每改一处都重打包显然又有点麻烦,所以先hook测试一下效果。
之前看别人提起过frida,而我之前又是做Web开发的,通过js和python写hook代码感觉超适合我鸭~赶紧趁此机会上手把玩一番。
按照示例安装、运行frida-server、编写hook代码:

 

frida -U xxx -l xxx.js运行hook代码,然后测试hook后的效果,通过输出可以看到,它每秒判断一次,主界面的“免费到期”变成了“VIP截止”,功能依然不能使用:

前面提到,还有一个isUnlimit()方法判断是否无限制使用,那我们把它也hook掉。测试发现没有用,选择节点仍然提示要开通唯爱屁:


回过去继续看判断函数那里,发现到期时间是由v0作参数,那我们看一下v0怎么来的。发现来自于endtime方法,该方法从文件读取数据并返回:

在/data/data/包名/shared_prefs/目录下,打开xml文件找到该关键词:

hook该方法,将该值加一位数返回报错,分析发现它把该值除以1000得到时间,因此位数不变,把它改大一点。现在显示VIP到期时间了,但是点击线路仍然提示需要开通唯爱屁:

猜测是服务端做了校验。搜索提示框字符,找不到,显示的应该是服务端返回的内容,所以搜索“开通VIP",有几处,但只有一处提示框内容不是默认的,那么就是他了:
就是这个了
hook这个getEnable方法,使他跳过服务端校验:

OK,现在能够选线路了,打开开关,崩溃,先到真机测试一下是模拟器的原因还是因为程序的反制机制:


真机上运行成功:

总结 Frida赛高!


[公告]春风十里不如你,看雪团队诚邀你的加入!

最后于 2021-2-27 11:52 被余雨编辑 ,原因: 打码
收藏
点赞3
打赏
分享
最新回复 (2)
雪    币: 153
活跃值: 活跃值 (230)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
feikun 活跃值 2021-3-1 12:16
2
0
好赞,希望能向您学习
雪    币: 68
活跃值: 活跃值 (64)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
工程 活跃值 2021-3-3 08:05
3
0
游客
登录 | 注册 方可回帖
返回