Stay注入动态链接库体验开心版

iOS平台有一个叫Stay的软件,类似于油猴插件,可以使用现有的油猴🐒脚本,Stay是开源软件,订阅付费相关的部分没有开源,本文仅限交流学习,如需使用Stay高级功能,请订阅支持原作者。

image-20230417上午113237517

相关链接

逆向思路

按照以往的经验,首先使用Hopper打开二进制执行文件,搜索licenseisPropurchase等相关字符串,看起来幸运值有点偏低,没有搜到相关的方法和字符串,但根据UI界面上的升级按钮,搜索upgrade找到了相关的字符串,相关逻辑如下,反汇编后可能看不到相关的字符串,可以查看汇编代码,确定此处是实现点击升级按钮相关的动作

image-20230417上午110355723

跳转到相关调用处,发现有下述调用关系

image-20230417上午110829761

注意看红框处的代码,此处的代码已经反汇编过了,其中r0的值如下

image-20230417上午111213982

r22则是调用了FCStore- (id)getPlan:(bool)v1方法,

image-20230417上午110917923

该方法会返回一个FCPlan实例,判定是否为高级用户就是判断是否和None这个共享实例相等,因此破解的方法很简单,只需要hook这个函数即可,反射构造一个FCPlan实例,就会命中高级用户判断逻辑

1
2
3
4
5
6
7
8
9
10
11
%hook FCStore
- (id)getPlan:(bool)v1 {
id<FCPlan> plan = [NSClassFromString(@"FCPlan") new];
[plan setLocalizedTitle:@"Lifetime Support by ourfor"];
return plan;
}

- (bool)subscribed:(id)v1 {
return YES;
}
%end

另外由于Stay在Safari中还有一个前端界面,断点调试js代码,可以知道判断逻辑是通过和native程序通信获取订阅状态

Screen-20230411@2x

变量名有些奇怪,具体调用的是哪个native方法的排查过程我忘了,调用的native方法是-[UserDefaultsExRO pro]

1
2
3
4
5
%hook UserDefaultsExRO
- (bool)pro {
return YES;
}
%end

关于如何查看类相关方法定义可以使用Hopper导出Objective-C头文件的功能

C126518D-1C9A-40AC-979F-74D5F06B8247

7AFD42E9-11C8-4A3D-A434-628D688EDFEB

未完待续