古今第一 发表于 2014-7-18 17:11

破解豆瓣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


litouphone 发表于 2014-8-21 13:03

还有每个兆赫离线容量允许修改呢?
我已经把这些设置内嵌到菜单里面了

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 17:27

思路不错,学习了

Rea 发表于 2014-7-18 18:48

话说- - 干嘛不把改好的分享呢~~~

古今第一 发表于 2014-7-18 19:17

本帖最后由 古今第一 于 2014-7-18 19:27 编辑

Rea 发表于 2014-7-18 18:48
话说- - 干嘛不把改好的分享呢~~~
等下分享,我上传下
OK了 豆瓣FM无离线限制版:http://www.52pojie.cn/thread-275914-1-1.html

无极超哥 发表于 2014-7-18 19:52

不错啊!!!!!

924410377 发表于 2014-7-20 21:48

牛叉!!!!

resin66 发表于 2014-7-21 19:09

哈哈 不错

Qwetry 发表于 2014-7-22 17:17

我记得以前好像看过。。

古今第一 发表于 2014-7-22 19:52

lyj706757539 发表于 2014-7-22 17:17
我记得以前好像看过。。

原创的!!!!!

lomlon 发表于 2014-7-23 11:11

学习了,正需要,谢谢楼主分享!
页: [1] 2
查看完整版本: 破解豆瓣FM离线限制