本帖最后由 xuna2009 于 2024-01-27 22:44 编辑
本文章仅作技术交流使用,切勿用于商业用途,测试后自行销毁。如有违规或侵权,联系作者删除。
测试环境: 华为meta 60 pro mt管理器 车机酷狗最近更新了最新版本的V5.0.3.1版本,页面综合比之前的老版本页面好看很多,但是!多出来了好多VIP功能,车载VIP,超级VIP等。听歌就听个前奏,高潮都没了!?又不想连接蓝牙,网上也没个破解版,遂下载下来自己进行分析一波。 1.去除签名验证看下软件是否加固。 没有加固那直接习惯性去下签名验证。MT一步到位。 2.修改SVIP/VIP直接安装下APP,看下有什么关键字 APP目前这里看到了超级VIP,车载VIP。那就直接搜索VIP关键字 搜索出来有好多VIP,超级VIP,车载VIP,豪华VIP。感觉豪华VIP就是超级VIP+车载VIP。那直接先看豪华VIP,跳转到该函数 .method private j1(Lcom/kugou/ultimatetv/data/entity/User;)V .registers 24 .param p1 # Lcom/kugou/ultimatetv/data/entity/User; .annotation build Lq/m0; .end annotation .end param .annotation system Ldalvik/annotation/MethodParameters; accessFlags = { 0x0 } names = { "user" } .end annotation
move-object/from16 v0, p0
move-object/from16 v1, p1
.line 1 iget-object v2, v1, Lcom/kugou/ultimatetv/data/entity/User;->carVipEndTime:Ljava/lang/String;
invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isVip()Z
move-result v3
invoke-static {v2, v3}, Lcom/kugou/android/common/utils/i;->k(Ljava/lang/String;Z)Z
move-result v2
.line 2 iget-object v3, v1, Lcom/kugou/ultimatetv/data/entity/User;->suVipEndTime:Ljava/lang/String;
invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isSuVip()Z
move-result v4
invoke-static {v3, v4}, Lcom/kugou/android/common/utils/i;->k(Ljava/lang/String;Z)Z
move-result v3
.line 3 iget-object v4, v1, Lcom/kugou/ultimatetv/data/entity/User;->svipEndTime:Ljava/lang/String;
invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isVip()Z
move-result v5
invoke-static {v4, v5}, Lcom/kugou/android/common/utils/i;->k(Ljava/lang/String;Z)Z
move-result v4
.line 4 iget-object v5, v1, Lcom/kugou/ultimatetv/data/entity/User;->vipEndTimeForKSing:Ljava/lang/String;
iget-boolean v6, v1, Lcom/kugou/ultimatetv/data/entity/User;->isVipForKSing:Z
invoke-static {v5, v6}, Lcom/kugou/android/common/utils/i;->k(Ljava/lang/String;Z)Z
move-result v5
.line 5 iget-object v6, v1, Lcom/kugou/ultimatetv/data/entity/User;->carVipEndTime:Ljava/lang/String;
invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isVip()Z
move-result v7
invoke-static {v6, v7}, Lcom/kugou/android/common/utils/i;->b(Ljava/lang/String;Z)J
move-result-wide v6
.line 6 iget-object v8, v1, Lcom/kugou/ultimatetv/data/entity/User;->suVipEndTime:Ljava/lang/String;
invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isVip()Z
move-result v9
invoke-static {v8, v9}, Lcom/kugou/android/common/utils/i;->b(Ljava/lang/String;Z)J
move-result-wide v8
.line 7 iget-object v10, v1, Lcom/kugou/ultimatetv/data/entity/User;->svipEndTime:Ljava/lang/String;
invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isVip()Z
move-result v11
invoke-static {v10, v11}, Lcom/kugou/android/common/utils/i;->b(Ljava/lang/String;Z)J
move-result-wide v10
.line 8 iget-object v12, v1, Lcom/kugou/ultimatetv/data/entity/User;->vipEndTimeForKSing:Ljava/lang/String;
invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isVipForKSing()Z
move-result v1
invoke-static {v12, v1}, Lcom/kugou/android/common/utils/i;->b(Ljava/lang/String;Z)J
move-result-wide v12
.line 9 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->C1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
if-eqz v3, :cond_5a
const v14, 0x7f080312
goto :goto_5d
:cond_5a const v14, 0x7f0802bc
:goto_5d invoke-virtual {v1, v14}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->b(I)V
.line 10 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->C1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
const-string v14, "超级VIP"
invoke-virtual {v1, v14}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->e(Ljava/lang/String;)V
.line 11 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->C1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
const-string v14, "至%s"
const-string v15, "暂未开通"
if-eqz v3, :cond_74
invoke-static {v14}, Lcom/kugou/android/common/utils/i;->f(Ljava/lang/String;)Ljava/lang/String;
move-result-object v3
goto :goto_75
:cond_74 move-object v3, v15
:goto_75 invoke-virtual {v1, v3}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->d(Ljava/lang/String;)V
.line 12 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->C1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
const/4 v3, 0x1
const-wide/16 v16, 0x0
const/16 v18, 0x0
const-wide/16 v19, 0xf
cmp-long v21, v8, v19
if-gtz v21, :cond_8b
cmp-long v21, v8, v16
if-lez v21, :cond_8b
const/4 v8, 0x1
goto :goto_8c
:cond_8b const/4 v8, 0x0
:goto_8c invoke-virtual {v1, v8}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->c(Z)V
.line 13 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->D1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
if-eqz v4, :cond_97
const v8, 0x7f080310
goto :goto_9a
:cond_97 const v8, 0x7f0802bb
:goto_9a invoke-virtual {v1, v8}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->b(I)V
.line 14 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->D1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
const-string v8, "豪华VIP" //跳转到了这里,往上看
invoke-virtual {v1, v8}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->e(Ljava/lang/String;)V
.line 15 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->D1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
if-eqz v4, :cond_ad
invoke-static {v14}, Lcom/kugou/android/common/utils/i;->e(Ljava/lang/String;)Ljava/lang/String;
move-result-object v4
goto :goto_ae
:cond_ad move-object v4, v15
:goto_ae invoke-virtual {v1, v4}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->d(Ljava/lang/String;)V
.line 16 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->D1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
cmp-long v4, v10, v19
if-gtz v4, :cond_bd
cmp-long v4, v10, v16
if-lez v4, :cond_bd
const/4 v4, 0x1
goto :goto_be
:cond_bd const/4 v4, 0x0
:goto_be invoke-virtual {v1, v4}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->c(Z)V
.line 17 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->E1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
if-eqz v2, :cond_c9
const v4, 0x7f08030c
goto :goto_cc
:cond_c9 const v4, 0x7f0802b9
:goto_cc invoke-virtual {v1, v4}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->b(I)V
.line 18 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->E1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
const-string v4, "车载VIP"
invoke-virtual {v1, v4}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->e(Ljava/lang/String;)V
.line 19 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->E1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
if-eqz v2, :cond_df
invoke-static {v14}, Lcom/kugou/android/common/utils/i;->a(Ljava/lang/String;)Ljava/lang/String;
move-result-object v2
goto :goto_e0
:cond_df move-object v2, v15
:goto_e0 invoke-virtual {v1, v2}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->d(Ljava/lang/String;)V
.line 20 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->E1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
cmp-long v2, v6, v19
if-gtz v2, :cond_ef
cmp-long v2, v6, v16
if-lez v2, :cond_ef
const/4 v2, 0x1
goto :goto_f0
:cond_ef const/4 v2, 0x0
:goto_f0 invoke-virtual {v1, v2}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->c(Z)V
.line 21 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->F1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
if-eqz v5, :cond_fb
const v2, 0x7f08030f
goto :goto_fe
:cond_fb const v2, 0x7f0802ba
:goto_fe invoke-virtual {v1, v2}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->b(I)V
.line 22 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->F1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
const-string v2, "K歌VIP"
invoke-virtual {v1, v2}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->e(Ljava/lang/String;)V
.line 23 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->F1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
if-eqz v5, :cond_110
invoke-static {v14}, Lcom/kugou/android/common/utils/i;->d(Ljava/lang/String;)Ljava/lang/String;
move-result-object v15
:cond_110 invoke-virtual {v1, v15}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->d(Ljava/lang/String;)V
.line 24 iget-object v1, v0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->F1:Lcom/kugou/android/auto/ui/dialog/uservip/u0;
cmp-long v2, v12, v19
if-gtz v2, :cond_11e
cmp-long v2, v12, v16
if-lez v2, :cond_11e
goto :goto_11f
:cond_11e const/4 v3, 0x0
:goto_11f invoke-virtual {v1, v3}, Lcom/kugou/android/auto/ui/dialog/uservip/u0;->c(Z)V
return-void .end method
.method private k1()V .registers 5
.line 1 iget-object v0, p0, Lcom/kugou/android/auto/ui/dialog/uservip/e1;->g:Landroid/widget/TextView;
const/4 v1, 0x1
new-array v1, v1, [Ljava/lang/Object;
invoke-static {}, Lcom/kugou/a;->x()Ljava/lang/String;
move-result-object v2
const/4 v3, 0x0
aput-object v2, v1, v3
const-string v2, "酷狗ID %s"
invoke-static {v2, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V
return-void .end method
出来更多VIP了,什么K歌VIP,车载VIP,豪华VIP,超级VIP,这尼玛各种VIP得多少monery。不过根据代码,看到大部分调用了isvip()和vipEndTime()相关的相关的代码,前者判断是否位会员,后者是会员到期。那直接从函数头往下看,一个一个修改,直接全方位VIP套餐。 invoke-virtual/range {p1 .. p1}, Lcom/kugou/ultimatetv/data/entity/User;->isVip()Z
进入isVip()函数中 在当前类中出现多个与VIP有关的函数(如是否VIP,是否超级VIP,是否XXVIP,各种VIP到期时间等),那就一个一个修改。 先修改第一个isVIP(),返回boolean类型数据。结果保存在v0中,那就在return v0前添加 const v0,1(或者const v0,true) isLogin()判断是否登录,我这里也不修改它,我要的是微信扫码登录,然后都有VIP效果,这样把妹的时候,B格满满。 往上继续看,有个getVoiceBoxVipEndTime()获取语音信箱VIP的到期时间?这个好像与歌曲VIP联系不大,也不修改了。 getVipEndTimeForKSing()这个应该是获取K歌VIP的到期时间,这个酷狗支持在线K歌,车载上面K歌,五音不全这不让妹纸拉低对我的好感对,不改不改,继续往上看。 getVipEndTime()获取VIP的到期时间,改必须改,必须逼格拉满了改。返回值类型为String,我这里修改为:const-string v0,"2099-12-31",大家根据自己B格自己修改。最好修改成日期格式,我记得好像有split函数,应该是用于分割,不过MT中显示splite分割的是空白,所以这里你们修改成 const-string v0,"永久VIP"应该也没问题。 getUserId()获取用户的编号,这个不用改,登录后每个用户都有自己的编号的。让他自己获取就行。 getTvVipEndTime()获取TV的会员到期时间,这个对我没意义,你们可自行修改。 getToken()获取用户登录的token密钥,不用管。 getSvipEndTime()获取超级会员结束时间,改它,和上面一样。const-string v0,"2099-12-31" getSuVipEndTime()这个应该是豪华VIP的到期时间,改它 上面好几个函数,是注册时间,这个都不用管,在上面还有一个getCarVipEndTime()获取车载VIP的到期时间,修改它! 修改完之后,往上拉有个add函数 这个函数中含有大量的VIP判断。第34行,就有一个isVIP判断,跳转过去 来到这个函数后,发现还有有很多判断是否是会员的,和会员到期时间,这里我就不一个一个函数讲解了,我直接贴出我修改后的代码吧。微信发送消息字数有上限,就粘贴部分修改过的代码吧。 .method public getCarVipEndTime()Ljava/lang/String; .registers 2
.line 1 iget-object v0, p0, Lcom/kugou/ultimatetv/data/entity/User;->carVipEndTime:Ljava/lang/String;
const-string v0, "2099-12-31"
return-object v0 .end method
method public getSuVipEndTime()Ljava/lang/String; .registers 2
.line 1 iget-object v0, p0, Lcom/kugou/ultimatetv/data/entity/User;->suVipEndTime:Ljava/lang/String;
const-string v0, "2099-12-31"
return-object v0 .end method
.method public getSvipEndTime()Ljava/lang/String; .registers 2
.line 1 iget-object v0, p0, Lcom/kugou/ultimatetv/data/entity/User;->svipEndTime:Ljava/lang/String;
const-string v0, "2099-12-31"
return-object v0 .end method
.method public getVipEndTime()Ljava/lang/String; .registers 2
.line 1 iget-object v0, p0, Lcom/kugou/ultimatetv/data/entity/User;->vipEndTime:Ljava/lang/String;
const-string v0, "2099-12-31"
return-object v0 .end method
.method public isSuVip()Z .registers 2
.line 1 iget-boolean v0, p0, Lcom/kugou/ultimatetv/data/entity/User;->isSuVip:Z
const v0, 0x1
return v0 .end method
.method public isVip()Z .registers 2
.line 1 iget-boolean v0, p0, Lcom/kugou/ultimatetv/data/entity/User;->isVip:Z
const v0, 0x1
return v0 .end method
修改完还不是VIP,我们要回到最初搜索到的豪华VIP函数进行再次分析读程序 在1075行,有个k函数,我们进去看下,这个函数传入了endtime和isvip又做了一次判断 第796行,if-nez v2,:conda_la,v2不等于0跳转到conda_la位置,看下conda_la处的代码为:const/4 p0 0x0。如果p0返回false,VIP一样是不显示的,所以我们直接把const/4,0修改为const/4 ,1。保存签名安装微信登录。 超级VIP,车载VIP,K歌VIP图标都点亮了。超级VIP到期时间是到了2099-12-31。这里车载VIP没有显示会员到期的时间,这里当给你们留个作业了,拒绝白嫖党。(提示:车载VIP到期时间显示,是在a函数里面判断的。) 到这里就完结了?NO!NO!NO!上面的VIP只是装逼的用的,没有任何VIP功能,不信你听个VIP的歌试试???肯定和下图一样,歌曲中间有个小白线,只能听多少秒,高潮部分完全不给你听?! 3.修改VIP歌曲进入核心点,让VIP歌免费听起来! 第一步搜索试听 搜索出来以下内容 我们点击第一个进到函数 因为我比较懒,所以不想分析,直接把这个函数里面的所有判断都注释掉,直接nop大法好。 注意是上面的所有判断都要注释掉。我们返回打签名安装测试。 VIP歌曲可以直接听了,直接拉到了后面。 多测试几首歌 基本OK了,但是有部分的歌曲只能听中间60s的高潮部分。这里我没有做处理,有些歌听高潮部分还是可以的。不然前奏太长。 最后上一张我自己修改的完整版本的,以及传到车机上测试。
下方隐藏内容为本帖所有文件或源码下载链接:
游客你好,如果您要查看本帖隐藏链接需要登录才能查看,
请先登录
|