Compare commits

..

2 Commits

Author SHA1 Message Date
c58a40a1a6 chore: add dev doc content
All checks were successful
continuous-integration/drone/pr Build is passing
continuous-integration/drone/push Build is passing
2023-06-16 20:44:08 +01:00
b85c464e24 docs: improve ios docs 2023-06-16 20:43:49 +01:00
4 changed files with 152 additions and 94 deletions

9
docs/adb_dump.md Normal file
View File

@ -0,0 +1,9 @@
# 利用 ADB 访问安卓私有数据
```sh
APP_ID="com.tencent.qqmusic" # QQ 音乐
APP_ID="cn.kuwo.player" # 酷我
adb shell su -c "tar c '/data/data/${APP_ID}/' | base64" \
| base64 -d | pv | tar -x --strip-components 2
```

View File

@ -1,103 +1,51 @@
import { Box, Code, Heading, ListItem, OrderedList, Text, UnorderedList } from '@chakra-ui/react'; import {
import { FilePathBlock } from '~/components/FilePathBlock'; Accordion,
AccordionButton,
const EXAMPLE_MEDIA_ID = '0011wjLv1bIkvv'; AccordionIcon,
const EXAMPLE_NAME_IOS = '333407709-0011wjLv1bIkvv-1.mgalaxy'; AccordionItem,
const EXAMPLE_NAME_DB = 'Q0M00011wjLv1bIkvv.mflac'; AccordionPanel,
Box,
Heading,
Text,
} from '@chakra-ui/react';
import { InstructionsIOSCondition } from './InstructionsIOSCondition';
export function InstructionsIOS() { export function InstructionsIOS() {
return ( return (
<> <>
<Text>使 iOS </Text>
<Heading as="h3" size="md" mt="3">
</Heading>
<Text></Text>
<OrderedList>
<ListItem>
<Text>使 iOS </Text>
</ListItem>
<ListItem>
<Text></Text>
<FilePathBlock>/AppDomain-com.tencent.QQMusic/Documents/mmkv/</FilePathBlock>
</ListItem>
<ListItem>
<Text>
<Code>filenameEkeyMap</Code>
</Text>
</ListItem>
<ListItem>
<Text>
<Code>filenameEkeyMap</Code>
</Text>
</ListItem>
<ListItem>
<Text></Text>
</ListItem>
</OrderedList>
<Heading as="h3" size="md" mt="3">
线
</Heading>
<Box> <Box>
<Text></Text> <Text>iOS 使 PC Mac iOS </Text>
<Code>/AppDomain-com.tencent.QQMusic/Library/Application Support/com.tencent.QQMusic/iData/iMusic</Code> <Text> PC Mac </Text>
<Text>
<Code>*.mgalaxy</Code>
</Text>
<Text>
<Code>[]-[id]-[].mgalaxy</Code>
</Text>
<Text>
&#x3000;<Code>{EXAMPLE_NAME_IOS}</Code>
</Text>
</Box> </Box>
<Heading as="h3" size="md" mt="3"> <Accordion allowToggle mt="2">
线 <AccordionItem>
<Heading as="h3" size="md">
<AccordionButton>
<Box as="span" flex="1" textAlign="left">
iOS
</Box>
<AccordionIcon />
</AccordionButton>
</Heading> </Heading>
<Text>使</Text> <AccordionPanel pb={4}>
<Text> </Text> <InstructionsIOSCondition jailbreak={true} />
<OrderedList> </AccordionPanel>
<ListItem> </AccordionItem>
<Text>
id <Code>{EXAMPLE_MEDIA_ID}</Code> <AccordionItem>
</Text> <Heading as="h3" size="md">
</ListItem> <AccordionButton>
<ListItem> <Box as="span" flex="1" textAlign="left">
<Text> iOS
<Code>{EXAMPLE_NAME_DB}</Code> </Box>
</Text> <AccordionIcon />
</ListItem> </AccordionButton>
<ListItem>
<Text>
<Code>{EXAMPLE_NAME_IOS}</Code>
<Code>{EXAMPLE_NAME_DB}</Code>
</Text>
</ListItem>
<ListItem>
<Text>
线<Code>{EXAMPLE_NAME_DB}</Code>
</Text>
</ListItem>
</OrderedList>
<Heading as="h3" size="md" mt="3">
</Heading> </Heading>
<Text></Text> <AccordionPanel pb={4}>
<UnorderedList> <InstructionsIOSCondition jailbreak={false} />
<ListItem> </AccordionPanel>
<Text></Text> </AccordionItem>
<FilePathBlock> </Accordion>
/var/mobile/Containers/Data/Application/&lt;&gt;/Documents/mmkv/filenameEkeyMap
</FilePathBlock>
</ListItem>
<ListItem>
<Text>线</Text>
<FilePathBlock>
/var/mobile/Containers/Data/Application/&lt;&gt;/Library/Application
Support/com.tencent.QQMusic/iData/iMusic
</FilePathBlock>
</ListItem>
</UnorderedList>
</> </>
); );
} }

View File

@ -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 (
<>
<Heading as="h3" size="md">
</Heading>
<OrderedList>
{useBackup && (
<ListItem>
<Text> iOS </Text>
<Image src={iosAllowBackup}></Image>
</ListItem>
)}
{useBackup && (
<ListItem>
<Text>使 iOS </Text>
</ListItem>
)}
<ListItem>
{useBackup && <Text></Text>}
{useJailbreak && <Text>访</Text>}
<FilePathBlock>{pathPrefix}com.tencent.QQMusic/Documents/mmkv/</FilePathBlock>
</ListItem>
<ListItem>
<Text>
<Code>filenameEkeyMap</Code>
</Text>
</ListItem>
<ListItem>
<Text>
<Code>filenameEkeyMap</Code>
</Text>
</ListItem>
<ListItem>
<Text></Text>
</ListItem>
</OrderedList>
<Heading as="h3" size="md" mt="3">
线
</Heading>
<Box>
<Text>访</Text>
<FilePathBlock>
{pathPrefix}com.tencent.QQMusic/Library/Application Support/com.tencent.QQMusic/iData/iMusic
</FilePathBlock>
<Text>
<Code>[].m[]</Code>
</Text>
<Text>
<Code>[song_id]-[mid]-[].m[]</Code>
</Text>
<Text>
&#x3000;<Code>{EXAMPLE_NAME_IOS}</Code>
</Text>
</Box>
<Heading as="h3" size="md" mt="3">
线
</Heading>
<Text>使</Text>
<Text> </Text>
<OrderedList>
<ListItem>
<Text>
<Code>[mid]</Code> <Code>{EXAMPLE_MEDIA_ID}</Code>
</Text>
</ListItem>
<ListItem>
<Text>
<Code>{EXAMPLE_NAME_DB}</Code>
</Text>
</ListItem>
<ListItem>
<Text>
<Code display="inline">{EXAMPLE_NAME_IOS}</Code>
<Code display="inline">{EXAMPLE_NAME_DB}</Code>
</Text>
</ListItem>
<ListItem>
<Text>
<Code>{EXAMPLE_NAME_DB}</Code>
</Text>
</ListItem>
</OrderedList>
</>
);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB