越狱苹果手机导出网易云音乐歌曲(以及缓存文件转换)


撰写时间:20200424

1. 对苹果手机进行越狱

博主的机器是iPhoneSE,系统为iOS12.2。使用爱思助手进行越狱,遵循爱思助手的说明即可。

2. 在手机端使用Cydia安装openssh

手机越狱后会多出一个cydia应用,在cydia中添加源https://apt.binger.com/
添加完毕后,在屏幕底下的“search”选项卡中查找openssh。找到并选择OpenSSH,点击右上角“Modify”,选择“Install”。
安装完成后,一定要修改ssh密码

3. 在电脑端使用putty和winscp连接手机

putty用于通过ssh访问手机控制台,winscp用于手机与电脑的文件互传。安装和使用的教程在这里。(关于putty中控制台字符的复制粘贴看这里

putty
ssh访问手机控制台
winscp
winscp界面

4. 定位网易云音乐文件

iOS文件系统中,应用程序数据会保存在该目录下

/var/mobile/Containers/Data/Application

在手机控制台使用cd命令切换到该目录下

cd /var/mobile/Containers/Data/Application

观察一下目录下应用程序文件夹的结构,无法看出什么信息。

不过,只要在网易云音乐听过歌,就一定会留下缓存文件,缓存文件后缀名一般为uc!因此只需要对子目录中*.uc!文件进行搜索即可。在控制台使用find指令进行搜索

find -name *uc!

搜索结果如下

最终发现网易云音乐歌曲存放的绝对路径如下

/var/mobile/Containers/Data/Application/0255F52E-C661-45D2-9EA8-4626A4E13205/Documents/UserData/Download/

其中最长的一串16进制代码“0255F52E-C661-45D2-9EA8-4626A4E13205”是网易云音乐的程序数据所在的文件夹名称,不同手机上是不一样的,这里根据find指令返回的结果来确定。其余部分应当和我贴出来的一致。

5. 使用winscp下载文件

使用ls命令查看一下存放数据的目录

其中以"done"开头的文件夹中,都存放有已下载的音乐或视频。而“cache”文件夹中存放有平时听歌(却没下载)的缓存文件。其它文件夹里应当有一些别的资料,有兴趣的话可以打开来看看。

使用winscp连接手机(我这里文件传输协议使用sftp协议)

双击iphone端的目录,输入刚才的网易云音乐数据路径


以“done”文件夹为例,打开“done”文件夹

可以看见里面有很多MP3文件,可以直接框选,ctrl + C复制,在本地粘贴即可。(有时候直接拖动文件会报错,不知为何)
传输完成后可能会遗留一个名称为“scp-xxxxx”的文件夹,删除即可(一定在传输完成后才删除)。

此外,缓存的音乐文件存放在“cache”文件夹,打开之,用filter功能找出其中所有后缀为uc!的文件,将这些文件下载到电脑本地。

6. 将uc!文件解码为MP3文件

根据这位大佬的发现,uc!文件只是对源MP3文件的二进制数据,按字节与十六进制数字0xA3进行按位异或了而已,因此我们只要再将uc!文件中的每个字节,同0xA3按位异或一次,就能还原出原来的MP3文件。
我写这篇博客时,网易云音乐7.1.41版本仍然可以使用该方法对文件进行解码。

为了应对300多个缓存文件,我编写了python3脚本如下,在windows10下测试正常。

#!/usr/bin/env python 
# -*- coding:utf-8 -*-

import os

# key number
KEY = 0xA3

# set file path
path_uc = __file__ + '/../ucfile/'
path_mp3 = __file__ + '/../mp3file/'

# get uc file list
ucfiles = os.listdir(path_uc)
file_num = ucfiles.__len__()
print('find %d ucfile(s)' % file_num)

# decode each file
count = 0
for uf in ucfiles:
    # read ucfiles by byte
    f1 = open(path_uc + uf, 'rb')
    rawcode = f1.read()
    f1.close()
    # decode each byte
    decode = bytes([r ^ KEY for r in rawcode])

    # write decoded bytes into mp3file
    f2 = open(path_mp3 + uf + '.mp3', 'wb')
    f2.write(decode)
    f2.close()

    count += 1
    print('%d of all %d files' % (count, file_num))

print('done')

脚本所在的目录布置如下,除了脚本文件外,还需要有“mp3file”和“ucfile”这两个文件夹。后者用来存放待处理的uc!文件,前者用来存放处理完的mp3文件。

将uc!文件放入ucfile文件夹后,直接双击py脚本即可运行(建议使用python3.x解释器,python2我没有测试)

ucfile文件夹

mp3file文件夹

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值