破解豆瓣FM离线限制
本帖最后由 古今第一 于 2014-7-18 19:26 编辑功能简介豆瓣电台是基于算法推荐的网络音乐播放产品。它基于豆瓣庞大的用户数据,通过判断用户在播放时的操作行为,为用户推荐他可能感兴趣的曲目。开发商:豆瓣网
准备:离线超过两个兆赫的时候会提示 “添加离线兆赫失败,超过了离线兆赫数限制”
破解过程:直接IDE载人搜索 关键字” 离线兆赫失败” 找到了字符串的定义段
<stringname="add_offline_channel_fail">添加离线兆赫失败,超过了离线兆赫数限制</string>
可以看到字符串的内部名是add_offline_channel_fail所以继续搜索add_offline_channel_fail
到了一个定义文件 <public type="string" name="add_offline_channel_fail"id="0x7f0c0035"/>,可以看到定义id 0x7f0c0035继续搜索0x7f0c0035到了代码调用处
往上翻可以看到一个函数,addNewOfflineChannel,什么东西?用脚趾头猜都知道,这就是添加离线兆赫的函数名,所以接着搜索addNewOfflineChannel找到了函数的定义段
.method public addNewOfflineChannel(Lcom/douban/fm/model/Channels$Channel;)Z
.locals 3
.parameter "channel"
.prologue
const/4 v0, 0x0
.line 2783
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mQualityManager:Lcom/douban/radio/controller/QualityManager;
invoke-virtual {v1}, Lcom/douban/radio/controller/QualityManager;->isPro()Ljava/lang/Boolean;
move-result-object v1
invoke-virtual {v1}, Ljava/lang/Boolean;->booleanValue()Z
move-result v1
iput-boolean v1, p0, Lcom/douban/radio/offline/OfflineManager;->mUserPro:Z
.line 2785
iget-boolean v1, p0, Lcom/douban/radio/offline/OfflineManager;->mUserPro:Z
if-eqz v1, :cond_1
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->size()I
move-result v1
const/4 v2, 0x4
if-lt v1, v2, :cond_1
.line 2801
:cond_0
:goto_0
return v0
.line 2789
:cond_1
iget-boolean v1, p0, Lcom/douban/radio/offline/OfflineManager;->mUserPro:Z
if-nez v1, :cond_2
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
invoke-virtual {v1}, Ljava/util/LinkedList;->size()I
move-result v1
const/4 v2, 0x2
if-ge v1, v2, :cond_0
.line 2793
:cond_2
iget-object v1, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
iget v2, p1, Lcom/douban/fm/model/Channels$Channel;->id:I
invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object v2
invoke-virtual {v1, v2}, Ljava/util/LinkedList;->contains(Ljava/lang/Object;)Z
move-result v1
if-nez v1, :cond_0
.line 2795
iget-object v0, p0, Lcom/douban/radio/offline/OfflineManager;->mDB:Lcom/douban/radio/offline/OfflineDB;
invoke-virtual {v0, p1}, Lcom/douban/radio/offline/OfflineDB;->addNewChannel(Lcom/douban/fm/model/Channels$Channel;)V
.line 2796
iget-object v0, p0, Lcom/douban/radio/offline/OfflineManager;->mChannels:Ljava/util/LinkedList;
iget v1, p1, Lcom/douban/fm/model/Channels$Channel;->id:I
invoke-static {v1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object v1
invoke-virtual {v0, v1}, Ljava/util/LinkedList;->add(Ljava/lang/Object;)Z
.line 2798
const/4 v0, 0x1
goto :goto_0
.end method
一大堆的乱哄哄的代码。。。反正我是没能读懂几个。。。转到Java看吧,
第二个条件判断出现了0x2的比较,肯定就是离线兆赫的限制了,而在DALVIK代码中也可以找到与之对应的代码const/4 v2, 0x2if-ge v1, v2, :cond_0所以我们可以直接把0x2改为我们想要的数值来突破限制,也可以直接把这段代码删除。修改后效果
原版豆瓣FM下载:http://pan.baidu.com/s/1pJAw0P1豆瓣FM无离线限制版:http://www.52pojie.cn/thread-275914-1-1.html
还有每个兆赫离线容量允许修改呢?
我已经把这些设置内嵌到菜单里面了
http://www.cnblogs.com/litou/p/3540600.html
http://pan.baidu.com/s/1eQBprSA#dir/path=%2Fandroid%2Fapk%2F%E8%B1%86%E7%93%A3FM 思路不错,学习了 话说- - 干嘛不把改好的分享呢~~~ 本帖最后由 古今第一 于 2014-7-18 19:27 编辑
Rea 发表于 2014-7-18 18:48
话说- - 干嘛不把改好的分享呢~~~
等下分享,我上传下
OK了 豆瓣FM无离线限制版:http://www.52pojie.cn/thread-275914-1-1.html
不错啊!!!!! 牛叉!!!! 哈哈 不错 我记得以前好像看过。。 lyj706757539 发表于 2014-7-22 17:17
我记得以前好像看过。。
原创的!!!!! 学习了,正需要,谢谢楼主分享!
页:
[1]
2