硕士生
 
- 金币
- 2165
- 好评
- 30
- 信誉
- 101
|
本帖最后由 绿里 于 2026-1-21 00:52 编辑
软件来自论坛求助贴
首先简单分享一下思路吧,Blutter跑出来需要的dart文件,通过抓包可以获取关键词:
- {"code":200,"msg":"操作成功","data":{"isVip":0,"isPermanent":0,"vipType":null,"startTime":null,"nextTime":null,"endTime":null}}
复制代码
正常的话去dart文件中搜索isVip/isPermanent/vipType都会比较多结果,肯定是几个关键词都在同一个类或者函数里准没错了,可以定位到user_cache_util.dart类下的一个闭包函数async_op,反汇编肯定晦涩难懂,直接丢给AI写成伪c,我精简一下能用上的:
- class UsercacheUtil {
- Future<void> async_op() async {
- // 1. 获取用户信息
- var userInfo = await httpPersonalInfoGetUserInfo();
- setUserName(userInfo.nickName);
- setUserAvatar(userInfo.avatar);
-
- // 2. 获取VIP信息
- var vipInfo = await httpVipGetVipInfo();
- setIsVip(vipInfo.data.isVip); // 从服务器获取
- setIsPermanent(vipInfo.data.isPermanent); // 从服务器获取
- setVipType(vipInfo.data.vipType); // 从服务器获取
- setStartTime(vipInfo.data.startTime); // 从服务器获取
- setEndTime(vipInfo.data.endTime); // 从服务器获取
-
- // 3. 获取续订列表
- var renewalList = await httpAutomaticRenewalList();
- setRenewalList(renewalList.data);
- }
- }
复制代码
可以看到好几个set函数对字段进行赋值操作,那么理想的破解肯定是赋值为1,抓包尝试也会成功,那么就需要找到这几个set函数对应的反汇编了,通过观察分析可以发现>位置1:isVip 字段 (0x97adc0-0x97adc8),位置2:isPermanent 字段 (0x97ae74-0x97ae7c),位置3:vipType 字段 (0x97af94-0x97af9c)都有相同模式代码:
- 0x97adbc: ldur x0, [x29, #-0x58] ; 从栈加载isVip对象
- 0x97adc0: sbfx x1, x0, #1, #0x1f ; Smi值提取:x1 = x0 >> 1,这里往右移一位是用了Smi概念存储小整数这里结果为1。
- 0x97adc4: tbz w0, #0, #0x97adcc ; 检查类型:是Smi吗?
- 0x97adc8: ldur x1, [x0, #7] ; 从对象加载值
- # 步骤2:调用set函数
- 0x97add0: stp x1, x16, [x15, #-0x10]! ; 压栈参数
- 0x97add4: bl #0x47cc70 ; 47cc70应该就是set函数了
复制代码
那么问题来了,怎么改?其实可以看到如0x97adc8是把值给到x1再给到stp参数准备的,那么我们直接赋值x1=1,修改反汇编的时候记住三大准则1. 最小化修改:只改必要的指令
2. 保持兼容:不破坏原有代码结构
3. 跳过复杂逻辑:避免处理Dart运行时细节
那么就应该考虑到修改sbfx x1, x0, #1, #0x1f为mov x1, #1往后会tbz w0, #0, #0x97adcc类型检查,ldur x1, [x0, #7]对象提取,那么我是这样处理的:
- 0x97adc0: sbfx x1, x0, #1, #0x1f ;
- 0x97adc4: tbz w0, #0, #0x97adcc ;
- 0x97adc8: ldur x1, [x0, #7] ;
- 改为:
- 0x97adc0: mov x1, #1 ;
- 0x97adc4: nop ;
- 0x97adc8: nop ;
复制代码
分析到这里请参照修改isPermanent和vipType,看过@hiicome 求助贴的会好奇没修改endTime能行吗?我这里也是看到了isPermanent推测已经是永久会员了,你们自己可以本地patch一个字符串是有些复杂但可行的,找一个空区域,要么用现成的。
不够深度的逆向分析成果,肯定有不完善或错误的地方,请见谅!
最后提供一下修改好的libapp.so
密码回复可见!
密码:9euo
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
查看全部评分
总评分:金币 +2
|