第一次使用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赛高!
frida -U xxx -l xxx.js
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)