首页
社区
课程
招聘
[原创]某APP收费音频无会员绕过下载过程分析
发表于: 2017-3-27 13:45 23638

[原创]某APP收费音频无会员绕过下载过程分析

2017-3-27 13:45
23638

音频播放URL:a07K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2Q4x3X3g2^5P5s2S2Q4x3X3g2U0L8$3#2Q4x3V1j5$3z5e0p5@1z5e0x3$3x3q4)9J5c8Y4y4G2N6h3&6V1i4K6u0r3x3K6t1I4y4K6x3@1x3o6V1`.

其中直接访问 159K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2Q4x3X3g2^5P5s2S2Q4x3X3g2U0L8$3#2Q4x3V1j5$3z5e0p5@1z5e0x3$3x3l9`.`. 可以显示当前主播的所有音频,也就是说 69149360 为主播ID, 而后面的 32173409 应该为当前的音频ID。

点击播放按钮通过chrome 调试 Network功能标签中,可以看到客户端会向服务端请求音频的真实地址用来播放; 通过分析发现以下两个请求比较关键。

第一个关键请求:

第二个关键请求:

第二个请求直接就是m4a 音频地址了,其中服务器地址是 audio.pay.xx.com ,可以轻易的看出应该是从第一条GET中返回的json中获取的;那 这一串参数是怎么得来的呢?

all.js格式化之后变得特别清晰,于是乎我们先稍微看一遍all.js 看看哪里可能是解密的关键地方。干逆向这么久,觉得逆向的过程就是一个猜想和推到猜想的过程;以我C语言功力来理解js 在有可以的地方下断点(关于Chrome JS 调试请看这里: eb0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3A6T1y4e0q4Q4x3X3g2F1k6i4c8Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3y4e0R3#2y4K6m8Q4x3X3g2Z5N6r3@1`.)

点击播放,最终发现在 success: function(t) { 这个地方停下来

使用json返回的_randomSeed通过算法得到字符串A "oRIBQLWKzamwPSuh\C3:1cdMDTYvJVeH_q97fjX58p4nFsgxyr20t.NObi6-GEAlUk/Z"

再使用json中返回的fileId 字段重新排列字符串A 得到最终结果 preview/1702877/group1/M01/04/6E/wKgJMljAJmaxaBjBAVPzE83Jfuo884.m4a


     在 VPP Security Lab 小组中论漏洞挖掘能力我不及@ggggwwww,论漏洞分析能力又不及@少仲。如此菜的人在VPP中得以生存下来是源于两位的无私分享,谢谢你们!

感谢看雪平台上所有无私奉献的大牛,没有你们的文章,估计我的技术应该还处于村口放牛的水平!谢谢!


0x00 背景介绍
    在工作后的休闲时间我比较喜欢打开网络电台听一些有声书,大牛实事点评;不知道从什么时候开始网络上突然流行起了付费音频,很多付费音频都是由名家亲自参与制作,质量非常高 很受大众的喜欢;其中以某电台的付费内容最受欢迎,我也购买了好些套音频来跟着名家的脚步学习;名家制作的付费音频在选择的时候不容二说,直接购买就是;但是也不乏其中有很多的标题党 哗众取宠,能不能在不付费的情况下先进行一次试听呢
0x01 分析
    为了方便分析,我特意选择了直接在浏览器中打开电台wap版;随便选择一个付费才能收听的音频,使用Chrome浏览器,调试模式,手机模式如下所示

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/05/08
最新回复 (34)
雪    币: 138
活跃值: (555)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
有些sb了 打着app的幌子写了一篇web相关的文章。。。
2017-3-27 13:49
0
雪    币: 1
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
大神膜拜
2017-3-27 13:49
0
雪    币: 55
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
大神膜拜
2017-3-27 13:50
0
雪    币: 43
活跃值: (388)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
chrome自带格式化js的功能,就在左下角的“{}”处。
2017-3-27 13:55
0
雪    币: 6876
活跃值: (1692)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
6
现状web上的内容越来越多. 楼主这篇文字很及时!!
2017-3-27 13:56
0
雪    币: 138
活跃值: (555)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
malokch chrome自带格式化js的功能,就在左下角的“{}”处。
GET 新技能! Thanks!
2017-3-27 13:58
0
雪    币: 219
活跃值: (52)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
8
前排学习
2017-3-27 14:09
0
雪    币: 18
活跃值: (721)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
少仲 前排学习[em_13]
2017-3-27 14:13
0
雪    币: 370
活跃值: (1190)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
10
少仲 前排学习[em_13]
VPP Security Lab,少仲哥厉害啊 !
2017-3-27 14:48
0
雪    币: 219
活跃值: (52)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
ThomasKing VPP Security Lab,少仲哥厉害啊 !
向tk老师学习
2017-3-27 15:29
0
雪    币: 6779
活跃值: (1334)
能力值: ( LV12,RANK:782 )
在线值:
发帖
回帖
粉丝
12
mark一下,正想试试这个
2017-3-27 16:49
0
雪    币: 245
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好久没看到记忆宫殿了
2017-3-29 18:06
0
雪    币: 3407
活跃值: (2421)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼主厉害了,操作起来 感觉好吃力。
2017-3-29 19:20
0
雪    币: 8184
活跃值: (2618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
大神厉害啊,前来学习
2017-3-30 09:01
0
雪    币: 34
活跃值: (869)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
16
你好,非常感谢分享。我按照你的思路走了一下,因为太渣,只走到第一节。我直接把你的“/69149360/sound/32173409”这个复制到地址,找到了和你一样的音频。然后在chrome的开发者工具 Network-media选项就可以看到音频的地址:“930K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3q4#2k6r3W2G2i4K6u0W2M7r3q4&6i4K6u0W2P5r3#2U0k6r3&6Q4x3X3g2U0L8$3#2Q4x3V1k6V1L8%4N6F1L8r3!0S2k6q4)9J5c8U0q4Q4x3X3f1H3i4K6u0W2x3q4)9J5c8Y4m8J5k6i4k6A6k6i4N6Q4x3V1j5I4y4K6l9J5z5o6M7%4i4K6u0r3k6%4u0G2N6i4l9I4i4K6u0r3e0e0l9I4i4K6u0r3x3o6c8Q4x3V1j5$3c8g2)9J5c8Y4N6w2k6@1A6y4L8r3A6m8d9X3#2S2P5r3q4n7K9V1u0m8g2W2m8*7c8e0R3K6d9X3k6#2L8K6R3^5y4q4)9J5k6h3@1@1j5g2)9K6c8Y4y4A6k6$3&6Q4x3@1b7J5j5K6t1I4j5h3c8S2j5X3k6V1k6U0k6U0j5$3u0T1k6o6f1K6j5e0V1K6y4K6c8S2y4U0R3^5y4o6l9#2j5#2)9J5y4X3u0#2P5g2)9#2k6X3E0W2P5g2)9K6c8r3k6W2y4r3j5I4x3K6y4U0j5$3u0X3y4r3t1J5x3X3c8X3j5e0u0S2x3h3f1%4x3o6c8U0j5$3u0T1k6r3p5^5i4K6t1$3N6r3W2E0k6i4y4@1j5h3#2H3i4K6y4p5x3e0b7&6x3o6V1J5y4e0R3&6y4U0j5@1y4K6V1H3x3g2)9J5y4Y4c8G2K9$3g2F1i4K6y4p5y4U0V1H3x3g2)9J5y4X3c8#2M7X3q4@1K9h3!0F1i4K6y4p5x3U0M7#2x3W2!0q4x3W2)9^5x3q4)9&6c8l9`.`. 从这里就可以看到它是有sign,buy_key,timestamp,token,duration这几个变量。所以我不太清楚为什么还要解密?是解密之后绝对地址有不一样吗,但我看你解密的好像是一样的。还有我不理解的是,我们可以点击这个地址打开得到一个音频文件,进度条显示45分钟,不论是下载还是在网页,只能听到3分钟,也就是试听的部分。是它经过加密了吗?那如果是加密的,是不是可以解密这个音频文件?额,我不知道有没有这个技术。。。
2017-3-31 11:18
0
雪    币: 138
活跃值: (555)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
lumou 你好,非常感谢分享。我按照你的思路走了一下,因为太渣,只走到第一节。我直接把你的“/69149360/sound/32173409”这个复制到地址,找到了和你一样的音频。然后在chrome的开发者工具 ...
我为什么还需要解密:那是因为直接能得到地址的是免费公开收听的; 而我需要用这个解密方法去解开那些只公开3分钟,或者干脆不公开的地址;
2017-3-31 15:25
0
雪    币: 138
活跃值: (555)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
lumou 你好,非常感谢分享。我按照你的思路走了一下,因为太渣,只走到第一节。我直接把你的“/69149360/sound/32173409”这个复制到地址,找到了和你一样的音频。然后在chrome的开发者工具 ...
咦 ,为什么你的回复我能收到通知; 其他人的就不会。。。?
2017-3-31 15:27
0
雪    币: 34
活跃值: (869)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
19
Nermor 我为什么还需要解密:那是因为直接能得到地址的是免费公开收听的; 而我需要用这个解密方法去解开那些只公开3分钟,或者干脆不公开的地址;
那我懂了,就是解密之后sign,buy_key,timestamp,token,duration这些值是不一样的。但是我还没看懂具体怎么做到的。我再看看。
2017-3-31 17:33
0
雪    币: 138
活跃值: (555)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
lumou 那我懂了,就是解密之后sign,buy_key,timestamp,token,duration这些值是不一样的。但是我还没看懂具体怎么做到的。我再看看。
还有就是解密播放地址;很感谢你能 认真的看完并动手实践 很难得 :)
2017-4-1 08:48
0
雪    币: 34
活跃值: (869)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
21
Nermor 还有就是解密播放地址;很感谢你能 认真的看完并动手实践 很难得 :) [em_63]
:) 我还在琢磨,虽然还不是很懂,但有学到很多。谢谢你。
2017-4-1 22:02
0
雪    币: 6308
活跃值: (4613)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
22
多谢分享
2017-4-2 00:16
0
雪    币: 577
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
mark 同样懂js的路过
2017-4-2 02:08
0
雪    币: 138
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
楼主,刚刚全部做了一遍,未购买的已经限制全部2:59了,用购买过的ep,  fileId,seed,,duration修改后计算出的链接是全部的,没有看全部的js,参数里面的buyKey没有修改,但是他计算出的链接里面buyKey居然是正确的 
2017-4-4 21:45
0
雪    币: 6483
活跃值: (3452)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
试着做一下,多谢分享
2017-4-6 00:22
0
游客
登录 | 注册 方可回帖
返回