목차
Project
Data
Hooking
훅을 찾을 수 있는 곳
HookCase
寻找 sub_100CC2E20
Hooking sub_100CC2E20
운영 및 유지보수 안전 Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

May 13, 2023 am 08:37 AM
app spotify

Project

이 프로젝트의 목표는 나의 청취 습관을 학습하고 평소에 건너뛰는 몇 곡을 건너뛸 수 있는 Spotify 클라이언트를 구축하는 것입니다. 나는 이러한 필요성이 나의 게으름에서 나온다는 것을 인정해야 합니다. 기분이 좋을 때 재생 목록을 만들거나 찾아야 하는 것을 원하지 않습니다. 내가 원하는 것은 내 라이브러리에서 노래를 선택하고 다른 노래를 섞고 대기열에서 "흐름"이 아닌 노래를 제거할 수 있는 것입니다.

이를 달성하려면 이 작업을 수행할 수 있는 일종의 모델을 배워야 합니다(향후 게시물에서 더 자세히 설명할 수도 있음). 하지만 모델을 훈련하려면 먼저 모델을 훈련할 데이터가 필요합니다.

Data

건너뛴 노래를 포함한 전체 청취 기록이 필요합니다. 기록을 얻는 것은 쉽습니다. Spotify API는 마지막으로 재생된 50곡만 가져오도록 허용하지만, 엔드포인트를 반복적으로 폴링하도록 cron 작업을 설정할 수 있습니다. 전체 코드는 여기에 게시되었습니다: https://gist.github.com/SamL98/c1200a30cdb19103138308f72de8d198

가장 어려운 부분은 건너뛰기를 추적하는 것입니다. Spotify Web API는 이에 대한 엔드포인트를 제공하지 않습니다. 이전에는 Spotify AppleScript API를 사용하여 재생을 제어하는 ​​몇 가지 서비스를 만들었습니다(이 기사의 나머지 부분에서는 MacOS Spotify 클라이언트를 다룹니다). 건너뛴 콘텐츠를 추적하기 위해 이러한 서비스를 사용할 수 있지만 이는 과제를 회피하는 것처럼 느껴집니다. 어떻게 완료할 수 있나요?

Hooking

저는 최근 대상 바이너리에서 생성된 함수 호출을 "가로채기"할 수 있는 기술인 후킹에 대해 배웠습니다. 나는 이것이 건너뛰기를 추적하는 가장 좋은 방법이라고 생각합니다.

가장 일반적인 후크 유형은 삽입 후크입니다. 이러한 유형의 후크는 PLT의 재배치를 무시하지만 이것이 실제로 무엇을 의미합니까?

PLT 또는 프로시저 연결 테이블을 사용하면 해당 함수가 메모리의 어디에 있는지 알지 못한 채 코드에서 외부 함수(libc 등)를 참조할 수 있습니다. PLT의 항목만 참조하면 됩니다. 링커는 PLT의 각 함수 또는 기호에 대해 런타임에 "재배치"를 수행합니다. 이 접근 방식의 한 가지 이점은 외부 함수가 다른 주소에 로드되는 경우 코드의 함수에 대한 각 참조가 아니라 PLT의 재배치만 변경하면 된다는 것입니다.

따라서 printf에 대한 중간 후크를 만들 때 우리가 연결하는 프로세스가 printf를 호출할 때마다 libc 대신 printf 구현을 호출합니다(사용자 정의 라이브러리는 일반적으로 표준 구현도 호출합니다).

훅에 대한 기본 배경 지식을 갖춘 후 Spotify에 후크를 삽입해 볼 준비가 되었습니다. 하지만 먼저 우리는 무엇을 연결하고 싶은지 알아내야 합니다.

훅을 찾을 수 있는 곳

앞서 언급했듯이 외부 함수에 대한 중간 후크만 생성할 수 있으므로 libc 또는 Objective-C 런타임에서 함수를 찾습니다.

후킹할 위치를 조사하는 동안 후킹을 시작하기 좋은 곳은 Spotify 핸들 "미디어 제어 키" 또는 내 MacBook의 F7-F9일 것이라고 생각했습니다. Spotify 앱에서 다음 버튼이 호출될 때 이러한 키에 대한 핸들러가 기능을 호출한다고 가정합니다. 마침내 https://github.com/nevyn/spmediakeytap에서 SPMediaKeyTap 라이브러리를 찾았습니다. 나는 Spotify가 이 라이브러리의 코드를 복사하여 붙여넣었는지 한번 시도해 보고 싶다고 생각했습니다. SPMediaKeyTap 라이브러리에는 startWatchingMediaKeys 메서드가 있습니다. 나는 Spotify 바이너리에서 이 방법이 있는지 확인하기 위해 strings 명령을 실행했습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

Bingo!! Spotify 바이너리를 IDA(물론 무료 버전)에 로드하고 이 문자열을 검색하면 해당 메서드를 찾을 수 있습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

이 함수에 해당하는 소스 코드를 보면 CGEventTapCreate를 찾을 수 있습니다. 함수 흥미로운 매개변수 tapEventCallback:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

디스어셈블리를 다시 보면 sub_10010C230 서브루틴이 tapEventCallback 매개변수로 전달되는 것을 볼 수 있습니다. 이 함수의 소스 코드나 디스어셈블리를 보면 CGEventTapEnable 단 하나의 라이브러리 함수만 호출되는 것을 볼 수 있습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

이 함수를 연결해 보겠습니다.

가장 먼저 해야 할 일은 사용자 정의 CGEventTapEnable을 정의하는 라이브러리를 만드는 것입니다. 코드는 다음과 같습니다.

#include <corefoundation>
#include <dlfcn.h>
#include <stdlib.h>
#include <stdio.h>
void CGEventTapEnable(CFMachPortRef tap, bool enable) 
{
  typeof(CGEventTapEnable) *old_tap_enable;
  printf(“I'm hooked!\n”);
  old_tap_enable = dlsym(RTLD_NEXT, “CGEventTapEnable”);
  (*old_tap_enable)(tap, enable);
}</stdio.h></stdlib.h></dlfcn.h></corefoundation>
로그인 후 복사

dlsym 함수 호출을 통해 실제 라이브러리 CGEventTapEnable 함수의 주소를 얻습니다. 그런 다음 실수로 아무것도 중단하지 않도록 이전 구현을 호출합니다. 다음과 같이 라이브러리를 컴파일해 보겠습니다(https://ntvalk.blogspot.com/2013/11/hooking-explained-detouring-library.html):

gcc -fno-common -c <filename>.c 
gcc -dynamiclib -o <library> <filename>.o</filename></library></filename>
로그인 후 복사

现在,让我们尝试在插入钩子时运行Spotify:DYLD_FORCE_FLAT_NAMESPACE=1 DYLD_INSERT_LIBRARIES= /Applications/Spotify.app/Contents/MacOS/Spotify。点击进入:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

Spotify打开正常,但Apple的系统完整性保护(SIP)没有让我们加载未签名库:(。

幸运的是,我是Apple的reasonably priced developer项目的成员,所以我可以对库进行代码签名。这个问题算是得到了解决。让我们用100美元证书签名我们的库,运行上一个命令,然后......

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

失败。这一点不奇怪,Apple不允许你插入使用任何旧标识签名的库,只允许使用签名原始二进制文件时使用的库。看起来我们必须要找到另一种方法来hook Spotify了。

作为补充说明,细心的读者可能会注意到我们hook的函数CGEventTapEnable,只有在media key event超时时才会被调用。因此,即使我们可以插入钩子,我们也可能不会看到任何的输出。本节的主要目的是详细说明我最初的失败(和疏忽),并作为一个学习经验。

HookCase

经过一番挖掘,我发现了一个非常棒的库HookCase:https://github.com/steven-michaud/HookCase。HookCase让我们实现一种比插入钩子( patch hook)更为强大的钩子类型。

通过修改你希望hook的函数触发中断插入Patch hooks。然后,内核可以处理此中断,然后将执行转移到我们的个人代码中。对于那些感兴趣的人,我强烈建议你阅读HookCase文档,因为它更为详细。

Patch hooks不仅允许我们对外部函数的hook调用,而且允许我们hook目标二进制文件内的任何函数(因为它不依赖于PLT)。HookCase为我们提供了一个框架来插入patch和/或interpose hooks,以及内核扩展来处理patch hooks生成的中断,并运行我们的自定义代码。

寻找 sub_100CC2E20

既然我们已经有办法hook Spotify二进制文件中的任何函数了,那么只剩下最后一个问题......就是位置在哪?

让我们重新访问SPMediaKeyTap源码,看看如何处理媒体控制键。在回调函数中,我们可以看到如果按下F7,F8或F9(NX_KEYTYPE_PREVIOUS,NX_KEYTYPE_PLAY等),我们将执行handleAndReleaseMediaKeyEvent选择器:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

然后在所述选择器中通知delegate:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

让我们看看repo中的这个delegate方法:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

事实证明它只是为处理keys设置了一个模板。让我们在IDA中搜索receiveMediaKeyEvent函数,并查看相应函数的图形视图:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

看起来非常相似,不是吗?我们可以看到,对每种类型的键都调用了一个公共函数sub_10006FE10,只设置了一个整数参数来区分它们。让我们hook它,看看我们是否可以记录按下的键。

我们可以从反汇编中看到,sub_10006FE10获得了两个参数:1)指向SPTClientAppDelegate单例的playerDelegate属性的指针,以及2)指定发生了什么类型事件的整数(0表示暂停/播放,3表示下一个,4表示上一个)。

看看sub_10006FE10(我不会在这里包含它,但我强烈建议你自己检查一下),我们可以看到它实际上是sub_10006DE40的包装器,其中包含了大部分内容:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

哇!这看起来很复杂。让我们试着把它分解一下。

从这个图的结构来看,有一个指向顶部的节点有许多outgoing edges:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

正如IDA所建议的那样,这是esi(前面描述的第二个整数参数)上的switch语句。看起来Spotify的处理的不仅仅是Previous,Pause/Play和Next。让我们把关注点集中到处理Next或3 block:

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

물론 이 작업을 수행하는 데 시간이 좀 걸렸지만, 하단 네 번째 줄에서 r12를 호출하도록 주의를 환기시키고 싶습니다. 다른 경우를 살펴보면 레지스터 호출과 매우 유사한 패턴을 찾을 수 있습니다. 이것은 좋은 기능처럼 보이지만 그것이 어디에 있는지 어떻게 알 수 있습니까?

새 도구인 디버거를 열어 보겠습니다. 처음에는 Spotify를 디버깅하려고 할 때 많은 어려움을 겪었습니다. 아마도 제가 디버거에 익숙하지 않아서일지도 모르지만 꽤 영리한 해결책을 생각해낸 것 같습니다.

먼저 sub_10006DE40에 후크를 설정한 다음 코드에서 중단점을 트리거합니다. 이는 어셈블리 명령 int 3을 실행하여 수행할 수 있습니다(예: GDB 및 LLDB와 같은 디버깅).

HookCase 프레임워크에서 후크의 모양은 다음과 같습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

이를 HookCase 템플릿 라이브러리에 추가한 후 user_hooks 배열에도 추가해야 합니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

그런 다음 제공된 템플릿을 사용할 수 있습니다. Makefile HookCase를 사용하여 컴파일합니다. 그런 다음 다음 명령을 사용하여 라이브러리를 Spotify에 삽입할 수 있습니다: HC_INSERT_LIBRARY= /Applications/Spotify.app/Contents/MacOS/Spotify.

그런 다음 LLDB를 실행하고 다음과 같이 실행 중인 Spotify 프로세스에 연결할 수 있습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

F9를 눌러보세요(Spotify가 활성 창이 아닌 경우 iTunes가 열릴 수 있습니다). 후크의 int $3 줄은 디버거를 트리거해야 합니다.

이제 sub_10006DE40 진입점에 들어갈 수 있습니다. PC는 IDA에 표시된 주소에 해당하는 위치에 있을 것입니다(프로세스가 메모리에 로드되는 위치 때문인 것 같습니다). 현재 프로세스에서 push r15 명령어는 0x10718ee44에 있습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

IDA에서 이 명령어의 주소는 0x10006DE44이며, 이는 오프셋 0x7121000을 제공합니다. IDA에서 r12 명령어가 호출되는 주소는 0x10006E234이다. 그런 다음 해당 주소에 오프셋을 추가하고 이에 따라 중단점을 설정하고(b -a 0x10718f234) 계속할 수 있습니다.

목표 명령어에 도달하면 레지스터 r12의 내용을 인쇄할 수 있습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

우리가 해야 할 일은 이 주소에서 오프셋을 빼는 것뿐입니다. 그러면 명목상 주소는 0x100CC2E20이 됩니다.

Hooking sub_100CC2E20

이제 이 함수를 연결해 보겠습니다.

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

user_hooks 배열에 추가하고 컴파일하고 실행하고 관찰하세요. F9를 누르거나 Spotify 앱에서 다음 버튼을 클릭할 때마다 메시지를 녹음하세요. .

스킵 기능을 훅 켰으니

Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법

나머지 코드는 포스팅하겠지만 이미 포스팅이 너무 길어서 나머지 코드는 리버스엔지니어링을 완료하지 않겠습니다.

간단히 이전 기능도 훅 했습니다(이것을 따라하시면 ​​좋은 연습이 될 것입니다). 그런 다음 두 후크 모두에서 현재 노래가 이미 절반 정도 진행되었는지 먼저 확인합니다. 그렇다면 나는 그 노래가 부적절하다고 생각하기보다는 단지 지루하다고 생각하여 아무것도 하지 않는 것입니다. 그런 다음 뒷면(F7)에서 마지막 건너뛰기를 팝합니다.

현재 노래가 중간쯤 왔는지 확인하는 방법에 대해 몇 마디 말씀드리고 싶습니다. 내 원래 접근 방식은 실제로 popen을 호출한 다음 해당 AppleScript 명령을 실행하는 것이었지만 이는 옳지 않은 것 같습니다.

Spotify 바이너리에서 클래스 덤프를 실행하여 SPAppleScriptObjectModel과 SPAppleScriptTrack이라는 두 가지 클래스를 찾았습니다. 이러한 메서드는 재생 위치, 기간 및 트랙 ID에 필요한 필수 속성을 노출합니다. 그런 다음 이러한 속성에 대해 getter를 연결하고 다음 및 백 후크를 사용하여 호출했습니다(Swizzle이 더 합리적이라고 생각하지만 작동하도록 할 수는 없습니다).

파일을 사용하여 건너뛰기를 추적합니다. 여기서 첫 번째 줄에는 건너뛰기 횟수가 포함됩니다. 건너뛰기에서는 이 카운터를 증가시키고 카운터에서 지정한 줄의 파일에 추적 ID와 타임스탬프를 씁니다. 뒤로 버튼에서는 이 카운터를 감소시킵니다. 이렇게 하면 뒤로 버튼을 누를 때 역추적된 파일에 새 건너뛰기를 쓰도록 파일을 설정하기만 하면 됩니다.

위 내용은 Spotify.app을 리버스 엔지니어링하고 해당 기능을 연결하여 데이터를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Jingdong Mall APP에서 실명인증하는 방법 Jingdong Mall APP에서 실명인증하는 방법 Mar 19, 2024 pm 02:31 PM

Jingdong Mall APP에서 실명인증을 받는 방법은 무엇입니까? Jingdong Mall은 많은 친구들이 자주 사용하는 온라인 쇼핑 플랫폼입니다. 쇼핑하기 전에 모든 사람이 완전한 서비스를 즐기고 더 나은 쇼핑 경험을 얻을 수 있도록 실명 인증을 수행하는 것이 가장 좋습니다. 다음은 JD.com 실명인증 방법입니다. 네티즌분들께 도움이 되었으면 좋겠습니다. 1. JD.com을 설치하고 열고 개인 계정에 로그인합니다. 2. 그런 다음 페이지 하단의 [내]를 클릭하여 개인 센터 페이지로 들어갑니다. 3. 그런 다음 화면에서 작은 [설정] 아이콘을 클릭합니다. 오른쪽 상단에서 설정 기능 인터페이스로 이동합니다. 4. [계정 및 보안]을 선택하여 계정 설정 페이지로 이동합니다. 5. 마지막으로 [실명 인증] 옵션을 클릭하여 실명 정보를 입력합니다. 설치시스템에서는 실제 개인정보를 입력하고 실명인증을 완료해야 합니다.

cocos2d-LUA 리버스 엔지니어링에서 앱 리소스를 해독하는 방법 cocos2d-LUA 리버스 엔지니어링에서 앱 리소스를 해독하는 방법 May 16, 2023 pm 07:11 PM

Dashen APK를 예로 들어 보겠습니다. 앱 복호화 Lua 스크립트에 대한 이전 분석을 통해 Dashen APK의 Lua 스크립트를 복호화할 수 있습니다. 이제 해당 리소스(구성 파일 및 사진 등)를 복호화해 보겠습니다. 복호화 전의 더 중요한 구성 파일을 예로 들어 보겠습니다. 파일 헤더에는 fuckyou!라는 서명 값도 있습니다. 이것을 보고 우리는 먼저 xxtea로 암호화한 것인지 생각해 보았으며, 먼저 xxtea로 복호화한 후 압축을 풀어보니 여전히 오류가 발생하고 있었습니다. 우리가 방금 말한 것을 부정해야 합니다. 우리는 계속해서 구성 파일의 암호를 단계별로 해독합니다. 잠시 생각해 보세요. 파일 헤더는 다음과 같습니다. fuckyou! 파일을 해독하려면 필연적으로 처리가 필요합니다

홍콩 Apple ID 등록 절차 및 주의사항(홍콩 Apple Store만의 장점을 누리세요) 홍콩 Apple ID 등록 절차 및 주의사항(홍콩 Apple Store만의 장점을 누리세요) Sep 02, 2024 pm 03:47 PM

Apple의 제품과 서비스는 항상 전 세계 사용자들에게 사랑을 받아왔습니다. 홍콩 Apple ID를 등록하면 사용자에게 더 많은 편리함과 특권이 제공됩니다. 홍콩 Apple ID를 등록하는 단계와 주의해야 할 사항을 살펴보겠습니다. 홍콩 Apple ID를 등록하는 방법 Apple 장치를 사용할 때 많은 응용 프로그램과 기능에 로그인하려면 Apple ID를 사용해야 합니다. 홍콩에서 애플리케이션을 다운로드하거나 홍콩 AppStore의 특혜 콘텐츠를 즐기려면 홍콩 Apple ID를 등록하는 것이 매우 필요합니다. 이 기사에서는 홍콩 Apple ID를 등록하는 방법과 주의해야 할 사항에 대한 단계를 자세히 설명합니다. 단계: 언어 및 지역 선택: Apple 장치에서 "설정" 옵션을 찾아 입력하세요.

Spotify AI DJ가 Android 또는 데스크톱에 표시되지 않음 Spotify AI DJ가 Android 또는 데스크톱에 표시되지 않음 Feb 20, 2024 am 09:36 AM

SpotifyAIDJ는 사용자에게 개인화된 음악 추천 서비스를 제공할 수 있는 최신 기능입니다. Android 또는 데스크톱에서 SpotifyAIDJ를 찾을 수 없는 경우 이 문서에서 문제 해결 방법을 안내합니다. 인공 지능 기술을 통해 SpotifyDJ는 인간 DJ의 음악 선택 과정을 시뮬레이션하여 사용자에게 더 나은 음악 경험을 제공합니다. 문제 해결을 계속하기 전에 네트워크 연결이 안정적인지 확인하세요. WiFi 라우터를 다시 시작하여 개선 사항이 있는지 확인할 수 있습니다. 또한 Spotify 서버의 실행 상태도 확인할 수 있습니다. 최신 정보를 보려면 @SpotifyStatus(트위터 계정)를 팔로우하세요. 서버에 문제가 있으면 조금만 기다려주세요

China Unicom 앱에서 데이터 패키지를 취소하는 방법 China Unicom에서 데이터 패키지를 취소하는 방법 China Unicom 앱에서 데이터 패키지를 취소하는 방법 China Unicom에서 데이터 패키지를 취소하는 방법 Mar 18, 2024 pm 10:10 PM

China Unicom 앱은 모든 사람의 요구를 쉽게 충족할 수 있습니다. 다양한 서비스를 처리하고 싶다면 여기에서 제때에 구독을 취소할 수 있습니다. 후속 손실을 피하기 위해 많은 사람들이 휴대폰을 사용할 때 데이터가 충분하지 않다고 느껴 추가 데이터 패키지를 구입하지만 다음 달에 원하지 않으면 즉시 구독을 취소하려는 경우가 있습니다. 에디터가 설명하는 구독 취소 방법을 제공하여, 필요한 친구들이 와서 사용할 수 있도록 해드립니다! China Unicom 앱의 오른쪽 하단에 있는 "내" 옵션을 찾아 클릭하세요. 내 인터페이스에서 내 서비스 열을 슬라이드하고 "주문했습니다" 옵션을 클릭하세요.

멀티포인트 앱으로 송장 발행 방법 멀티포인트 앱으로 송장 발행 방법 Mar 14, 2024 am 10:00 AM

구매 증빙 자료인 송장은 우리의 일상 생활과 업무에 매우 중요합니다. 그럼 우리가 평소 듀오디안 앱을 사용해 쇼핑을 할 때, 듀오디안 앱에서 쉽게 송장을 발행할 수 있는 방법은 무엇일까요? 아래에서 이 웹사이트의 편집자가 멀티 포인트 앱에서 송장을 개설하는 방법에 대한 자세한 단계별 가이드를 제공합니다. 더 알고 싶은 사용자는 이 내용을 놓치지 마세요. [송장센터]에서 [다점슈퍼마켓/무료쇼핑]을 클릭하고, 완료된 주문페이지에서 송장발행이 필요한 주문을 선택한 후, 다음을 클릭하여 [송장정보], [수취인정보]를 입력한 후, 몇 분 후 수신 메일함을 입력하여 이메일을 열고 전자 청구서 다운로드 주소를 클릭한 후 마지막으로 전자 청구서를 다운로드하여 인쇄하세요.

Spotify, iOS 및 Android에서 '가장 큰 진화' 출시 Spotify, iOS 및 Android에서 '가장 큰 진화' 출시 May 28, 2023 pm 03:53 PM

오늘 "StreamOn" 이벤트에서 Spotify는 iOS 및 Android 앱에 대한 대대적인 개편을 선보였습니다. 가장 큰 두 가지 구성 요소에는 홈페이지 피드의 음악, 팟캐스트, 오디오북에 대한 비디오 및 오디오 미리 보기와 검색에서 검색할 수 있는 새로운 비디오 피드가 포함됩니다. 회사는 대대적인 UI 개편을 "아티스트와 팬 사이에 더 깊이 들어가고 더 의미 있는 연결을 발견하도록 설계된 새롭고 역동적인 모바일 인터페이스"라고 부르며 "지금까지의 가장 큰 발전"이라고 말했습니다. Spotify는 "차세대 청취자들은 완전히 몰입되기 전에 오디오를 샘플링할 수 있는 더 나은 방법을 갈망하고 있습니다"라고 말합니다. 이것이 바로 "완전히 새로운 대화형 디자인을 통한 보다 활동적인 경험"을 향해 나아가고 있는 이유입니다.

Blackmagic의 전문가 수준 비디오 앱이 Android에 출시되었지만 휴대폰에서 실행하지 못할 수도 있습니다. Blackmagic의 전문가 수준 비디오 앱이 Android에 출시되었지만 휴대폰에서 실행하지 못할 수도 있습니다. Jun 25, 2024 am 07:06 AM

Blackmagic Design은 마침내 호평을 받은 Blackmagic Camera 앱을 Android에 출시했습니다. 전문 비디오 카메라 앱은 무료로 다운로드할 수 있으며 완전한 수동 제어 기능을 제공합니다. 이러한 컨트롤은 프로 수준의 cin을 더 쉽게 수강할 수 있도록 하는 것을 목표로 합니다.

See all articles