返回信息流背景:
某导航提供的音乐服务(音乐e栈),和虾米合作的,需要付费使用,前段时间本来想上网搜个破解版,结果没搜到,索性自已分析了一下它的交互方式,找出了个通过充值认证来延长服务有效期的方法。方法本身不复杂,主要是因为它的认证机制略显简陋,本文主要从技术角度来说明过程,仅供参考学习。
1 原始界面
http://hutaow.com/images/articles/201408/cracking_svautomusic_service_expired.png
如上图,插入经过车机初始化过的TF卡后,启动音乐e栈客户端,显示当前服务有效期为0天,并提示需要充值续费。如果点击下载专辑的按钮,提示不允许下载。
2 寻找入手点
既然提示让续费,那就看看续费过程是什么样子。
先随便输个卡号密码试试:
http://hutaow.com/images/articles/201408/cracking_svautomusic_paid_invalid.png
竟然用CS架构来做充值认证,实在是土的掉渣,就从这里入手了。
3 交互过程
把刚才进行充值时的报文用Wireshark抓下来,看看它是如何交互的。
1) 报文
http://hutaow.com/images/articles/201408/cracking_svautomusic_pcap_paid_failed.png
可以看到,充值认证的流量走的是TCP协议8080端口,对端连接的服务器地址是42.156.140.44,这个暂时放一边,先来看看请求和响应报文分别填了什么内容。
2) 请求消息
http://hutaow.com/images/articles/201408/cracking_svautomusic_pcap_paid_request.png
上图中可以看到,充值请求消息虽然走的是8080端口,但实际内容并非HTTP协议。
TCP负载的开头44个字节是一段二进制数据,估计是发送充值消息的结构体头,这里我们不关心;接下来就一段xml格式的内容,其中xml内容直接是用明文传输,并且单词基本都在四级词汇范围内,可以清楚的看到它发送了车载设备的ID号、服务剩余天数,以及刚才输入的充值的卡号、密码等信息。
因为这个是请求消息,不需要对它关注太多,下面来看看服务的响应消息。
3) 响应消息
http://hutaow.com/images/articles/201408/cracking_svautomusic_pcap_paid_response.png
可以看出,响应消息和请求消息的格式基本一样,follow一把看的更清楚些:
http://hutaow.com/images/articles/201408/cracking_svautomusic_pcap_follow_stream.png
注意响应消息xml中的result和remain_days字段,可以看到result字段的值为102,该值为充值的返回值;另外一个remain_days值为0,它便是服务器认证后的有效时间。
4 思路
从上面的报文分析,充值的交互其实是简单的一请求加一响应消息,客户端将车载设备的ID及充值卡号、密码发送给服务器,然后服务器校验认证充值卡是否有效,然后返回充值结果,并且将充值后的有效期也带给客户端。
可以想到,通过伪造一个认证服务器,当充值的时候,让客户端去连接伪造的服务器,然后服务器返回充值成功的消息,即有可能骗过客户端认为充值成功。
伪造过程中所需要的服务器成功消息,可以尝试通过修改上面抓包内容来构造。
5 主机重定向
前面3.2节中提到到过,客户端所连接的服务器地址是42.156.140.44,相信不会有人把IP直接写死在代码里的,起码是个域名,那一定会发DNS请求,DNS解析结果会缓存在主机上,执行一下下面的命令,来看看当前Windows主机上的DNS缓存列表:
ipconfig /displaydns
从列表里搜索IP地址,找到如下信息:
s2.xiami.com
----------------------------------------
记录名称. . . . . . . : s2.xiami.com
记录类型. . . . . . . : 1
生存时间. . . . . . . : 50
数据长度. . . . . . . : 4
部分. . . . . . . . . : 答案
A (主机)记录 . . . . : 42.156.140.44
看来域名就是s2.xiami.com了,修改Windows的hosts文件(%windir%\system32\drivers\etc\hosts)中添加下面一条关联项,将s2.xiami.com指向伪造的服务器(这里直接使用本机环回地址):
127.0.0.1 s2.xiami.com
6 伪造服务器
伪造服务器越简单越好,直接用Python写个TCP的服务器,只要有客户端连接发消息(假设只有目标程序会连接,也不用管发的是什么消息),就直接返回伪造好的内容。
代码如下所示,服务器响应的数据先从真实服务器的TCP负载拷贝过来:
http://hutaow.com/images/articles/201408/cracking_svautomusic_code.png
7 响应消息
服务器正常工作了,下面开始修改响应消息,想办法骗过客户端认为充值成功。
1) 修改响应码
先从响应码(result)开始,原始值是102,先减1试试101:
http://hutaow.com/images/articles/201408/cracking_svautomusic_code_result_101.png
进行充值操作,看看客户端收到后是什么情况:
http://hutaow.com/images/articles/201408/cracking_svautomusic_result_101.png
如上图,提示信息变成了“该卡已被使用过”,看来方向是对的,再改成100看看:
http://hutaow.com/images/articles/201408/cracking_svautomusic_code_result_100.png
执行充值操作:
http://hutaow.com/images/articles/201408/cracking_svautomusic_result_100.png
如上图,客户端提示“账户充值成功!”。
2) 修改有效时间
虽然提示充值成功,但是有效期还是显示0天,下面把remain_days改成99试下:
http://hutaow.com/images/articles/201408/cracking_svautomusic_code_result_100_remain_99.png
再试下充值操作:
http://hutaow.com/images/articles/201408/cracking_svautomusic_result_100_remain_99.png
可以看到,充值成功,并且有效期也变成了99天。
8 检验结果
随便选择一张专辑下载,可以发现已经可以随意下载了:
http://hutaow.com/images/articles/201408/cracking_svautomusic_downloading.png
下载完成后同步到车载设备上,可以发现车载设备上显示的服务有效期也被延长了99天:
http://hutaow.com/images/articles/201408/cracking_svautomusic_car.jpg
另外补充一句,充值显示成功后,还需要把hosts恢复回去,因为后面的专辑下载等操作还需要连接真实的服务器。
原文放在这里了:http://hutaow.com/blog/2014/08/01/cracking-svautomusic/
这是一条镜像帖。来源:北邮人论坛 / security / #38271同步于 2014/8/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
一种伪造服务器骗过某导航的音乐服务,从而延长有效期的方法
hutaow
2014/8/1镜像同步79 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
好腻海,希望未来能如同楼主学成大牛
【 在 hutaow (胡桃夹子) 的大作中提到: 】
: 背景:
: 某导航提供的音乐服务(音乐e栈),和虾米合作的,需要付费使用,前段时间本来想上网搜个破解版,结果没搜到,索性自已分析了一下它的交互方式,找出了个通过充值认证来延长服务有效期的方法。方法本身不复杂,主要是因为它的认证机制略显简陋,本文主要从技术角度来说明过程,仅供参考学习。
: 1 原始界面
: ...................
通过『我邮2.0』发布
我也不明白有 oauth 有 ssl 为啥就喜欢自己乱搞。
【 在 colorest 的大作中提到: 】
: 每次下载的时候不再做一遍服务器端验证只能说这公司sb。。。
发自「贵邮」