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

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

2017-3-27 13:45
23303

音频播放URL:http://m.xxx.com/69149360/sound/32173409

其中直接访问 http://m.xxx.com/69149360 可以显示当前主播的所有音频,也就是说 69149360 为主播ID, 而后面的 32173409 应该为当前的音频ID。

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

第一个关键请求:

第二个关键请求:

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

all.js格式化之后变得特别清晰,于是乎我们先稍微看一遍all.js 看看哪里可能是解密的关键地方。干逆向这么久,觉得逆向的过程就是一个猜想和推到猜想的过程;以我C语言功力来理解js 在有可以的地方下断点(关于Chrome JS 调试请看这里: http://www.jb51.net/article/58570.htm)

点击播放,最终发现在 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浏览器,调试模式,手机模式如下所示

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  CCkicker   +1.00 2017/05/08
最新回复 (34)
雪    币: 138
活跃值: (470)
能力值: ( 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
雪    币: 6976
活跃值: (1482)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
6
现状web上的内容越来越多. 楼主这篇文字很及时!!
2017-3-27 13:56
0
雪    币: 138
活跃值: (470)
能力值: ( 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
活跃值: (561)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
少仲 前排学习[em_13]
2017-3-27 14:13
0
雪    币: 370
活跃值: (1180)
能力值: ( 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
活跃值: (1214)
能力值: ( LV12,RANK:782 )
在线值:
发帖
回帖
粉丝
12
mark一下,正想试试这个
2017-3-27 16:49
0
雪    币: 245
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好久没看到记忆宫殿了
2017-3-29 18:06
0
雪    币: 3181
活跃值: (1801)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼主厉害了,操作起来 感觉好吃力。
2017-3-29 19:20
0
雪    币: 7850
活跃值: (2313)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
大神厉害啊,前来学习
2017-3-30 09:01
0
雪    币: 34
活跃值: (864)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
16
你好,非常感谢分享。我按照你的思路走了一下,因为太渣,只走到第一节。我直接把你的“/69149360/sound/32173409”这个复制到地址,找到了和你一样的音频。然后在chrome的开发者工具 Network-media选项就可以看到音频的地址:“http://audio.pay.xmcdn.com/download/1.0.0/preview/1702877/group1/M01/04/6E/wKgJMljAJmaxaBjBAVPzE83Jfuo884.m4a?sign=2c21adabfdf6ccbbd53a9374a688405c&buy_key=fe4f133ccbf4b22dfa2a1e704ccbbda8×tamp=1490925896647901&token=6901&duration=2752” 从这里就可以看到它是有sign,buy_key,timestamp,token,duration这几个变量。所以我不太清楚为什么还要解密?是解密之后绝对地址有不一样吗,但我看你解密的好像是一样的。还有我不理解的是,我们可以点击这个地址打开得到一个音频文件,进度条显示45分钟,不论是下载还是在网页,只能听到3分钟,也就是试听的部分。是它经过加密了吗?那如果是加密的,是不是可以解密这个音频文件?额,我不知道有没有这个技术。。。
2017-3-31 11:18
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
17
lumou 你好,非常感谢分享。我按照你的思路走了一下,因为太渣,只走到第一节。我直接把你的“/69149360/sound/32173409”这个复制到地址,找到了和你一样的音频。然后在chrome的开发者工具 ...
我为什么还需要解密:那是因为直接能得到地址的是免费公开收听的; 而我需要用这个解密方法去解开那些只公开3分钟,或者干脆不公开的地址;
2017-3-31 15:25
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
lumou 你好,非常感谢分享。我按照你的思路走了一下,因为太渣,只走到第一节。我直接把你的“/69149360/sound/32173409”这个复制到地址,找到了和你一样的音频。然后在chrome的开发者工具 ...
咦 ,为什么你的回复我能收到通知; 其他人的就不会。。。?
2017-3-31 15:27
0
雪    币: 34
活跃值: (864)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
19
Nermor 我为什么还需要解密:那是因为直接能得到地址的是免费公开收听的; 而我需要用这个解密方法去解开那些只公开3分钟,或者干脆不公开的地址;
那我懂了,就是解密之后sign,buy_key,timestamp,token,duration这些值是不一样的。但是我还没看懂具体怎么做到的。我再看看。
2017-3-31 17:33
0
雪    币: 138
活跃值: (470)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
lumou 那我懂了,就是解密之后sign,buy_key,timestamp,token,duration这些值是不一样的。但是我还没看懂具体怎么做到的。我再看看。
还有就是解密播放地址;很感谢你能 认真的看完并动手实践 很难得 :)
2017-4-1 08:48
0
雪    币: 34
活跃值: (864)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
21
Nermor 还有就是解密播放地址;很感谢你能 认真的看完并动手实践 很难得 :) [em_63]
:) 我还在琢磨,虽然还不是很懂,但有学到很多。谢谢你。
2017-4-1 22:02
0
雪    币: 5327
活跃值: (3719)
能力值: ( LV13,RANK:283 )
在线值:
发帖
回帖
粉丝
22
多谢分享
2017-4-2 00:16
0
雪    币: 576
活跃值: (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
雪    币: 6101
活跃值: (3082)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
试着做一下,多谢分享
2017-4-6 00:22
0
游客
登录 | 注册 方可回帖
返回
//