某知名手柄映射软件——永久VIP会员获取

查看 81|回复 10
作者:scllqk   
1.还是和往常一样,先看看加固了没。


Snipaste_2025-01-23_10-08-42.png (312.16 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

2.发现没加固,那省事了,直接拖进jadx里看看,确实没加固。


Snipaste_2025-01-23_10-09-27.png (184.77 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

3.还是和之前一样,上算法助手,看看情况。


Snipaste_2025-01-23_10-10-24.png (120.25 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传



Snipaste_2025-01-23_10-11-20.png (386.02 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

4.找到了一个地方,jadx看看,没发现啥。


Snipaste_2025-01-23_10-12-32.png (584.97 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

5.使用查找用例,看看啥地方还用了它,跳转过去一看,没反编译出来。


Snipaste_2025-01-23_10-13-34.png (186.92 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传



Snipaste_2025-01-23_10-14-28.png (451.38 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

6.上JEB看看,这边是啥逻辑。


Snipaste_2025-01-23_10-15-29.png (194.05 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

7.看到个isVip,跳转过去看看,发现几个vip相关的东西。


Snipaste_2025-01-23_10-16-15.png (217.41 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

8.到jadx上搜一下这个isVip,我们去hook它一下
[JavaScript] 纯文本查看 复制代码function main() {
  Java.perform(function () {
    console.log("启动");
    let Membership = Java.use("com.xxxx.xxxx.xxxx.data.Membership");
    Membership["isVip"].implementation = function () {
      console.log(`Membership.isVip is called`);
      let result = this["isVip"]();
      console.log(`Membership.isVip result=${result}`);
      return result;
    };
    Membership["getVipExpireDate"].implementation = function () {
      console.log(`Membership.getVipExpireDate is called`);
      let result = this["getVipExpireDate"]();
      console.log(`Membership.getVipExpireDate result=${result}`);
      return result;
    };
    Membership["getVipLevel"].implementation = function () {
      console.log(`Membership.getVipLevel is called`);
      let result = this["getVipLevel"]();
      console.log(`Membership.getVipLevel result=${result}`);
      return result;
    };
    Membership["getMaxLoginNum"].implementation = function () {
      console.log(`Membership.getMaxLoginNum is called`);
      let result = this["getMaxLoginNum"]();
      console.log(`Membership.getMaxLoginNum result=${result}`);
      return result;
    };
    Membership["getChannel"].implementation = function () {
      console.log(`Membership.getChannel is called`);
      let result = this["getChannel"]();
      console.log(`Membership.getChannel result=${result}`);
      return result;
    };
    Membership["isBeta"].implementation = function () {
      console.log(`Membership.isBeta is called`);
      let result = this["isBeta"]();
      console.log(`Membership.isBeta result=${result}`);
      return result;
    };
  });
}
setTimeout(main, 500);


Snipaste_2025-01-23_10-17-17.png (570.07 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

9.根据返回的值,对脚本进行修改,返回false的改成true,返回数值的修改成大值等,还有个返回一串数字,经过观察怀疑是时间戳,拿去转换一下看看值,发现正好和VIP到期日期对上了。


Snipaste_2025-01-23_10-17-44.png (187.55 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传



Snipaste_2025-01-23_10-18-01.png (98.78 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

10.所以,我们对脚本进行修改,修改后的脚本如下:
[JavaScript] 纯文本查看 复制代码function main() {
    Java.perform(function () {
        console.log("启动");
        let Membership = Java.use("com.xxxx.xxxx.xxxx.data.Membership");
        Membership["isVip"].implementation = function () {
            console.log(`Membership.isVip is called`);
            let result = this["isVip"]();
            console.log(`Membership.isVip result=${result}`);
            return true;
        };
        Membership["getVipExpireDate"].implementation = function () {
            console.log(`Membership.getVipExpireDate is called`);
            let result = this["getVipExpireDate"]();
            console.log(`Membership.getVipExpireDate result=${result}`);
            return 17694248497;
        };
        Membership["getVipLevel"].implementation = function () {
            console.log(`Membership.getVipLevel is called`);
            let result = this["getVipLevel"]();
            console.log(`Membership.getVipLevel result=${result}`);
            return 5;
        };
        Membership["getMaxLoginNum"].implementation = function () {
            console.log(`Membership.getMaxLoginNum is called`);
            let result = this["getMaxLoginNum"]();
            console.log(`Membership.getMaxLoginNum result=${result}`);
            return 10;
        };
        Membership["getChannel"].implementation = function () {
            console.log(`Membership.getChannel is called`);
            let result = this["getChannel"]();
            console.log(`Membership.getChannel result=${result}`);
            return result;
        };
        Membership["isBeta"].implementation = function () {
            console.log(`Membership.isBeta is called`);
            let result = this["isBeta"]();
            console.log(`Membership.isBeta result=${result}`);
            return result;
        };
    });
}
setTimeout(main, 1000);
11.hook修改完成后,发现我们获得了永久VIP。


Snipaste_2025-01-23_10-18-33.png (160.27 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

12.接下来我们还是去做持久化,还是使用xposed写插件,关键代码如下:
[Java] 纯文本查看 复制代码        if (loadPackageParam.packageName.equals("com.xxxx.xxxx"))
            Log.d(tag, "xxxx已選中");
        XposedHelpers.findAndHookMethod("com.xxxx.xxxx.xxxx.data.Membership", loadPackageParam.classLoader, "isVip", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                param.setResult(true);
            }
        });
        XposedHelpers.findAndHookMethod("com.xxxx.xxxx.xxxx.data.Membership", loadPackageParam.classLoader, "getVipLevel", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                param.setResult(5);
            }
        });
        XposedHelpers.findAndHookMethod("com.xxxx.xxxx.xxxx.data.Membership", loadPackageParam.classLoader, "getMaxLoginNum", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                param.setResult(10);
            }
        });
        XposedHelpers.findAndHookMethod("com.xxxx.xxxx.xxxx.data.Membership", loadPackageParam.classLoader, "getVipExpireDate", new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                param.setResult(Long.valueOf(17694248497L));
            }
        });
13.突然想起来,它没加固,那我们直接给它去签名校验,修改包里的内容,重新打包不就好了,说干就干,先用apktool解包


Snipaste_2025-01-23_11-16-10.png (274.38 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

14.然后在文件夹中搜索这些参数,第一个我们搜索修改isVip这个值。


Snipaste_2025-01-23_10-20-56.png (1.58 MB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

修改前


Snipaste_2025-01-23_10-21-27.png (392.44 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

修改后


Snipaste_2025-01-23_10-22-03.png (304.59 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

15.修改第二个值


Snipaste_2025-01-23_10-22-44.png (182.25 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

修改前


Snipaste_2025-01-23_10-23-11.png (242.97 KB, 下载次数: 0)
下载附件
2025-1-23 11:51 上传

修改后


Snipaste_2025-01-23_10-23-32.png (183.5 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

16.修改第三个值


Snipaste_2025-01-23_10-24-09.png (166.13 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

修改前


Snipaste_2025-01-23_10-24-32.png (196.86 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

修改后


Snipaste_2025-01-23_10-24-50.png (167.87 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

17.修改第四个值


Snipaste_2025-01-23_10-25-35.png (355.82 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

修改前


Snipaste_2025-01-23_10-25-56.png (164.27 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

修改后


Snipaste_2025-01-23_10-26-09.png (149.19 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

18.这里的值0x8500aa31,是怎么来的呢?先用实际时间转换出一个时间戳,再把这个时间戳转换为16进制


Snipaste_2025-01-23_10-26-26.png (196.32 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传



Snipaste_2025-01-23_10-26-38.png (151.61 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

19.改完之后,进行重打包即可,若遇到下面报错,说明你太贪心了时间戳改太大了


Snipaste_2025-01-23_10-27-19.png (336.15 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

20.重打包,重签名之后,进行安装即可使用。


Snipaste_2025-01-23_10-28-29.png (456.9 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

21.打出包之后自己随意注册个账号,就能用,若出现负值,则是改的太大了,我这里用的2030年的不会出现这个问题


Snipaste_2025-01-23_10-28-56.png (128.15 KB, 下载次数: 0)
下载附件
2025-1-23 11:52 上传

下载次数, 下载附件

liuhai7435   

软件名可以发一下吗
一人孤看夜空   


liuhai7435 发表于 2025-1-23 12:21
软件名可以发一下吗

给杂牌手柄用的软件 名字叫“八爪鱼” 就叫八爪鱼 跟飞智的八爪鱼手柄没关系 飞智的手柄叫飞智空间站
wanou   

学习学习
quboyu3125   

学习学习
Pojielove   

可以,感谢
Open   

手柄我只知道北通和小鸡,不知道知名不知名
zay1983   

谢谢分享。
Sydyanlei0   

学习一下
王成   

看着很厉害的样子,但是我是小白,支持一下!
您需要登录后才可以回帖 登录 | 立即注册

返回顶部