From b85c464e2410cb820702333bd2b063656233418f Mon Sep 17 00:00:00 2001 From: Jixun Wu Date: Fri, 16 Jun 2023 20:43:49 +0100 Subject: [PATCH] docs: improve ios docs --- .../settings/panels/QMCv2/InstructionsIOS.tsx | 136 ++++++------------ .../panels/QMCv2/InstructionsIOSCondition.tsx | 101 +++++++++++++ .../settings/panels/QMCv2/iosAllowBackup.webp | Bin 0 -> 5236 bytes 3 files changed, 143 insertions(+), 94 deletions(-) create mode 100644 src/features/settings/panels/QMCv2/InstructionsIOSCondition.tsx create mode 100644 src/features/settings/panels/QMCv2/iosAllowBackup.webp diff --git a/src/features/settings/panels/QMCv2/InstructionsIOS.tsx b/src/features/settings/panels/QMCv2/InstructionsIOS.tsx index 1060f20..3454525 100644 --- a/src/features/settings/panels/QMCv2/InstructionsIOS.tsx +++ b/src/features/settings/panels/QMCv2/InstructionsIOS.tsx @@ -1,103 +1,51 @@ -import { Box, Code, Heading, ListItem, OrderedList, Text, UnorderedList } from '@chakra-ui/react'; -import { FilePathBlock } from '~/components/FilePathBlock'; - -const EXAMPLE_MEDIA_ID = '0011wjLv1bIkvv'; -const EXAMPLE_NAME_IOS = '333407709-0011wjLv1bIkvv-1.mgalaxy'; -const EXAMPLE_NAME_DB = 'Q0M00011wjLv1bIkvv.mflac'; +import { + Accordion, + AccordionButton, + AccordionIcon, + AccordionItem, + AccordionPanel, + Box, + Heading, + Text, +} from '@chakra-ui/react'; +import { InstructionsIOSCondition } from './InstructionsIOSCondition'; export function InstructionsIOS() { return ( <> - 不推荐从该平台客户端提取文件,因为使用者需要对 iOS 设备进行完整备份。 - - 未越狱用户指南 - - 未越狱用户需要对设备进行完整备份,并能提取备份内的文件。 - - - 使用你喜欢的备份软件对 iOS 设备进行完整备份; - - - 打开备份文件,并导航到下述目录: - /AppDomain-com.tencent.QQMusic/Documents/mmkv/ - - - - 提取或导出密钥数据库文件 filenameEkeyMap; - - - - - 提交导出的 filenameEkeyMap 文件; - - - - 按下「保存」来应用更改。 - - - - 获取离线文件 - - 通过客户端下载的音乐文件存储在备份的下述目录: - /AppDomain-com.tencent.QQMusic/Library/Application Support/com.tencent.QQMusic/iData/iMusic - - 该目录又存在数个子目录,其子目录下保存的「*.mgalaxy」文件则是最终的加密文件。 - - - 格式:[随机数字]-[id]-[随机数字].mgalaxy - - -  例:{EXAMPLE_NAME_IOS} - + iOS 设备获取应用私有文件比较麻烦,你需要越狱或使用一台 PC 或 Mac 来对 iOS 设备进行完整备份。 + 因此,建议换用 PC 或 Mac 重新下载音乐文件然后再尝试解密。 - - 解密离线文件 - - 勾选设定界面的「使用近似文件名匹配」可跳过该节内容。 - ⚠ 注意:若密钥过多,匹配过程可能会造成浏览器卡顿或无响应。 - - - - 在上方的样例文件的情况下,得知其 id 为 {EXAMPLE_MEDIA_ID}; - - - - - 查找密钥表,得到文件名「{EXAMPLE_NAME_DB}」; - - - - - 将导出的「{EXAMPLE_NAME_IOS}」更名为数据库存储的文件名「 - {EXAMPLE_NAME_DB}」; - - - - - 回到主界面,提交离线文件「{EXAMPLE_NAME_DB}」。 - - - - - 越狱用户参考 - - 该节信息根据网络上公开的信息整理,仅供参考。 - - - 密钥数据库文件路径: - - /var/mobile/Containers/Data/Application/<随机>/Documents/mmkv/filenameEkeyMap - - - - 离线音乐文件下载目录: - - /var/mobile/Containers/Data/Application/<随机>/Library/Application - Support/com.tencent.QQMusic/iData/iMusic - - - + + + + + + 我的 iOS 设备已经越狱 + + + + + + + + + + + + + + 我的 iOS 设备没有越狱 + + + + + + + + + ); } diff --git a/src/features/settings/panels/QMCv2/InstructionsIOSCondition.tsx b/src/features/settings/panels/QMCv2/InstructionsIOSCondition.tsx new file mode 100644 index 0000000..2527e09 --- /dev/null +++ b/src/features/settings/panels/QMCv2/InstructionsIOSCondition.tsx @@ -0,0 +1,101 @@ +import { Box, Code, Heading, Image, ListItem, OrderedList, Text } from '@chakra-ui/react'; +import iosAllowBackup from './iosAllowBackup.webp'; +import { FilePathBlock } from '~/components/FilePathBlock'; + +const EXAMPLE_MEDIA_ID = '0011wjLv1bIkvv'; +const EXAMPLE_NAME_IOS = '333407709-0011wjLv1bIkvv-1.mgalaxy'; +const EXAMPLE_NAME_DB = 'Q0M00011wjLv1bIkvv.mflac'; + +export function InstructionsIOSCondition({ jailbreak }: { jailbreak: boolean }) { + const useJailbreak = jailbreak; + const useBackup = !jailbreak; + + const pathPrefix = jailbreak ? '/var/mobile/Containers/Data/Application/<随机>/' : '/AppDomain-'; + + return ( + <> + + 获取密钥数据库文件 + + + {useBackup && ( + + 首先需要在 iOS 客户端的设定允许备份: + + + )} + {useBackup && ( + + 使用你喜欢的备份软件对 iOS 设备进行完整备份; + + )} + + {useBackup && 打开备份文件,并导航到下述目录:} + {useJailbreak && 访问下述目录:} + {pathPrefix}com.tencent.QQMusic/Documents/mmkv/ + + + + 提取或导出密钥数据库文件 filenameEkeyMap; + + + + + 提交导出的 filenameEkeyMap 文件; + + + + 按下「保存」来应用更改。 + + + + + 获取离线文件 + + + 访问下述目录: + + {pathPrefix}com.tencent.QQMusic/Library/Application Support/com.tencent.QQMusic/iData/iMusic + + + 该目录又存在数个子目录,其子目录下保存的「[字符].m[字符]」文件则是最终的加密文件。 + + + 格式:[song_id]-[mid]-[随机数字].m[后缀] + + +  例:{EXAMPLE_NAME_IOS} + + + + + 解密离线文件 + + 勾选设定界面的「使用近似文件名匹配」可跳过该节内容。 + ⚠ 注意:若密钥过多,匹配过程可能会造成浏览器卡顿或无响应。 + + + + 提取文件的 [mid] 部分,如 {EXAMPLE_MEDIA_ID}; + + + + + 查找密钥表,得到文件名「{EXAMPLE_NAME_DB}」; + + + + + 将文件更名为对应的文件名,如{EXAMPLE_NAME_IOS} ➔ + {EXAMPLE_NAME_DB}; + + + + + 回到主界面,提交文件「{EXAMPLE_NAME_DB}」。 + + + + + ); +} diff --git a/src/features/settings/panels/QMCv2/iosAllowBackup.webp b/src/features/settings/panels/QMCv2/iosAllowBackup.webp new file mode 100644 index 0000000000000000000000000000000000000000..513d7b4c83a51a0b67619f30eace86141e07689e GIT binary patch literal 5236 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 literal 0 HcmV?d00001