PyMobileDevice3
개발자 도구 작업(iOS >= 17.0)
일반적으로 사용되는 작업
OpenSSL 라이브러리
libusb 종속성
개요
설치
용법
비트와 바이트(Python API)
기여
유용한 정보
저작권 고지
pymobiledevice3
은 iDevice(iPhone 등) 작업을 위한 순수 Python3 구현입니다. 이는 이 도구가 아키텍처 및 플랫폼 일반이며 다음에서 지원되고 테스트되었음을 의미합니다.
윈도우
리눅스
macOS
주요 기능은 다음과 같습니다:
Bonjour를 통한 장치 검색
TCP 포트 포워딩
syslog 라인 보기(디버그 포함)
프로필 관리
애플리케이션 관리
파일 시스템 관리(AFC)
충돌 보고서 관리
네트워크 스니핑(PCAP)
펌웨어 업데이트
이미지 장착
알림 수신 및 트리거( notify_post()
api)
SpringBoard 옵션 쿼리 및 설정
WebInspector 기능 자동화
DeveloperDiskImage 기능:
스크린샷 찍기
위치 시뮬레이션
프로세스 관리
KDebug 메시지 스니핑( strace Capability++)
프로세스 모니터링( top
좋아요)
접근성 기능
syslog와 signpost를 모두 포함하는 oslog 스니핑
지원
PyPi에서 설치할 수 있습니다:
python3 -m pip 설치 -U pymobiledevice3
또는 소스에서 직접 최신 버전을 설치하세요.
자식 클론 [email protected]:doronz88/pymobiledevice3.gitcd pymobiledevice3 python3 -m pip install -U -e .
~/.zshrc
에 다음을 추가하여 사용 가능한 모든 하위 명령에 대해 자동 완성을 설치할 수도 있습니다.
# python-click<8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=source_zsh pymobiledevice3)"# python-click>=8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=zsh_source pymobiledevice3)"
현재 이전 iOS 버전(<13)에서 사용하는 경우 openssl이 명시적으로 필요합니다.
macOS의 경우:
양조 설치 openssl
리눅스의 경우:
sudo apt 설치 openssl
복구 또는 DFU 모드에서 장치와 상호 작용하려면 libusb
설치되어 있어야 합니다( restore
하위 명령을 처리하는 데 필요함).
설치 단계는 정확한 플랫폼에 따라 다릅니다.
macOS의 경우:
# homebrewbrew install libusb 사용# MacPortssudo 포트 설치 libusb 사용
리눅스의 경우:
# Debian/Ubuntusudo apt-get install libusb-1.0-0-dev# Fedorasudo dnf install libusb-devel# Arch Linuxsudo pacman -S libusb
창문에서:
최신 릴리스 바이너리를 다운로드하려면 libusb 웹사이트를 따르세요.
https://libusb.info/
CLI 하위 명령은 장치에서 상호 작용하는 데 사용되는 프로토콜 계층에 따라 대략 구분됩니다. 예를 들어 DeveloperDiskImage에서 파생된 모든 기능은 developer
하위 명령을 통해 액세스할 수 있습니다. 이는 또한 존재하지 않는 모든 기능이 이를 필요로 하지 않는다는 것을 의미합니다.
주요 CLI 사용법은 다음과 같습니다.
Usage: pymobiledevice3 [OPTIONS] COMMAND [ARGS]... Interact with a connected iDevice (iPhone, iPad, ...) For more information please look at: https://github.com/doronz88/pymobiledevice3 Options: -h, --help Show this message and exit. Commands: activation Perform iCloud activation/deactivation or query the current state afc Manage device multimedia files amfi Enable/Disable developer-mode or query its state apps Manage installed applications backup2 Backup/Restore options bonjour Browse devices over bonjour companion List paired "companion" devices crash Manage crash reports developer Perform developer operations (Requires enable of Developer-Mode) diagnostics Reboot/Shutdown device or access other diagnostics services lockdown Pair/Unpair device or access other lockdown services mounter Mount/Umount DeveloperDiskImage or query related info notification Post/Observe notifications pcap Sniff device traffic power-assertion Create a power assertion processes View process list using diagnosticsd API profile Managed installed profiles or install SSL certificates provision Manage installed provision profiles remote Create RemoteXPC tunnels restore Restore an IPSW or access device in recovery mode springboard Access device UI syslog Watch syslog messages usbmux List devices or forward a TCP port webinspector Access webinspector services version Query pymobiledevice3 version
참고: 현재 이는 macOS 및 Windows(최대 iOS 17.3.1)에서만 공식적으로 지원되지만, 새로운 잠금 터널을 사용하여 iOS 17.4부터 모든 플랫폼에서 완전히 지원됩니다. iOS 17.0-17.3.1과 Windows 상호 작용을 위해서는 추가 드라이버를 설치해야 합니다(제공되지 않음).
iOS 17.0부터 Apple은 iOS 장치와 작동하는 새로운 CoreDevice 프레임워크를 도입했습니다. 이 프레임워크는 RemoteXPC 프로토콜을 사용합니다. 개발자 서비스와 통신하려면 먼저 다음 두 가지 형식 중 하나로 신뢰할 수 있는 터널을 만들어야 합니다.
tunneld
라는 터널 서버를 실행하여 자동으로 장치를 감지하고 연결을 설정합니다.
다음을 실행합니다.
# 장치가 Corellium 인스턴스 또는 AppleTV와 같은 원격 페어링을 지원하는 경우# 먼저 페어링해야 합니다.# 일반 iOS 장치에는 이 단계가 필요하지 않습니다. python3 -m pymobiledevice3 원격 쌍# Windows에서는 권한 있는 쉘을 사용합니다.sudo python3 - m pymobiledevice3 원격 터널링됨
start-tunnel
사용하여 수동으로 터널 만들기
다음을 실행합니다.
# 장치가 Corellium 인스턴스 또는 AppleTV와 같은 원격 페어링을 지원하는 경우# 먼저 페어링해야 합니다.# 일반 iOS 장치에는 이 단계가 필요하지 않습니다. python3 -m pymobiledevice3 원격 쌍# 참고: Windows에서는 권한 있는 셸을 사용합니다. 다음 명령의 경우# iOS 17.4부터 훨씬 빠른 잠금 터널을 사용할 수 있습니다.sudo python3 -m pymobiledevice3 lockdown start-tunnel# Wi-Fi를 통해서도 이 연결 유형을 사용할 수 있도록 하려면 활성화할 수 있습니다. itpython3 -m pymobiledevice3 lockdown wifi-connections on# 이전 iOS 버전에서는 대신 다음을 사용합니다# WiFi 터널을 강제 실행하기 위해 `-t wifi`를 전달할 수 있습니다.sudo python3 -m pymobiledevice3 원격 시작 터널
필요한 연결 세부 정보를 제공하는 다음 출력이 인쇄됩니다.
Interface: utun6 RSD Address: fd7b:e5b:6f53::1 RSD Port: 64337 Use the follow connection option: --rsd fd7b:e5b:6f53::1 64337
이 명령은 높은 권한 작업인 새 TUN/TAP 장치를 생성하므로 높은 권한으로 실행해야 합니다.
이제 (거의) 모든 pymobiledevice3은 터널을 통해 서비스에 연결하기 위해 추가 --rsd
/ --tunnel
옵션을 허용합니다. 특히 --tunnel
옵션은 개발자 서비스 작업을 단순화하기 위해 InvalidServiceError
오류 시 항상 암시적으로 시도됩니다. 이제 다음과 같이 실행을 시도할 수 있습니다.
# DVT 서비스에 액세스# --tunnel 옵션은 빈 문자열 또는 특정 장치에 대한 UDID를 허용할 수 있습니다. # 기본 포트가 아닌 포트에서 서비스를 제공하는 경우 터널링되는 경우 UDID에 :PORT 접미사가 붙을 수 있습니다. dvt ls / --tunnel ''# 또는 간단히 `--tunnel` 옵션 없이, 터널이 실행 중이라고 가정합니다python3 -m pymobiledevice3 개발자 dvt ls /# 또는 수동 터널 세부 정보를 사용할 수 있습니다python3 -m pymobiledevice3 개발자 dvt ls / --rsd fd7b:e5b:6f53::1 64337# 그리고 다른 "일반적인" 잠금 서비스에 액세스할 수도 있습니다python3 -m pymobiledevice3 syslog live --tunnel ' '
pymobiledevice3
사용하여 장치에서 할 수 있는 일이 많이 있습니다. 이것은 몇 가지 일반적인 작업에 대한 간략한 설명입니다.
# 연결된 장치 나열pymobiledevice3 usbmux list# bonjourpymobiledevice3 bonjour rsd를 사용하여 RemoteXPC 장치 찾아보기pymobiledevice3 bonjour rsd# 모든 syslog 행 보기(디버그 메시지 포함)pymobiledevice3 syslog live# "SpringBoard"라는 단어가 포함된 메시지만 필터링 pymobiledevice3 syslog live -m SpringBoard# 장치 다시 시작pymobiledevice3 진단 restart# devicepymobiledevice3에서 모든 충돌 보고서 가져오기 crash pull /path/to/crashes# 관리 미디어 디렉터리pymobiledevice3 afc shell# 설치된 모든 응용 프로그램 및 해당 세부 정보 나열pymobiledevice3 apps list# 특정 세트만 쿼리 목록 os appspymobiledevice3 apps query BUNDLE_ID1 BUNDLE_ID2# 호스트에서 장치로 TCP 터널 생성pymobiledevice3 usbmux 전달 HOST_PORT DEVICE_PORT# 전체 백업 생성 devicepymobiledevice3 backup2 backup --full DIRECTORY# 지정된 백업 복원pymobiledevice3 backup2 복원 DIRECTORY# 주어진 IPSW 파일/url:pymobiledevice3 복원 업데이트로 소프트웨어 업데이트를 수행합니다. -i /path/to/ipsw | url# 참고: 다음 webinspector 하위 명령을 사용하려면 웹 검사기 기능을 켜야 합니다.# 열려 있는 모든 tabpymobiledevice3에서 대화형 JavaScript 셸을 가져옵니다. webinspector js-shell# 현재 열린 탭 목록은 장치의 브라우저입니다pymobiledevice3 webinspector open-tabs# 참고: 다음 webinspector 하위 명령 또한 원격 자동화 기능을 켜야 합니다.# 새로운 원격 자동화 tabpymobiledevice3 webinspector에서 대화형 JavaScript 셸을 가져옵니다. js-shell --automation# 지정된 URL을 보려면 자동화 세션을 시작합니다pymobiledevice3 webinspector 실행 URL# 셀레늄과 유사한 shell을 가져옵니다pymobiledevice3 webinspector shell# 참고: 다음 하위 명령을 사용하려면 DeveloperMode를 켜야 합니다. 장치에 핀 코드가 없는 경우 다음 명령을 사용하여 자동으로 켤 수 있습니다pymobiledevice3 amfi 활성화-개발자 모드# DDI(DeveloperDiskImage) 마운트pymobiledevice3 마운터 자동 마운트# 참고: 다음 하위 명령에서는 두 개발자 모드가 모두 켜져 있고 DDI가 마운트되었습니다# `lat long` 위치를 시뮬레이션합니다(iOS < 17.0)pymobiledevice3 개발자simulate-location set -- lat long# 시뮬레이션 `lat long` 위치(iOS >= 17.0)pymobiledevice3 개발자 dvtsimul-location set -- lat long# .GPX 파일을 재생pymobiledevice3 개발자 dvtsimul-location 재생 경로.gpx# 시간에 -500에서 500ms 사이의 임의 타이밍 노이즈를 추가합니다. GPX 파일의 두 지점 사이 pymobiledevice3 개발자 dvt 시뮬레이션 위치 재생 경로.gpx 500# 시뮬레이션 위치 지우기:pymobiledevice3 개발자 dvt 시뮬레이션 위치 클리어# 장치에서 스크린샷 찍기:pymobiledevice3 개발자 dvt 스크린샷 /path/to/screen.png# 자세한 프로세스 목록 보기(ppid, uid, guid, 샌드박스 등 포함...)pymobiledevice3 개발자 dvt sysmon 프로세스 단일 # oslog 스니핑pymobiledevice3 개발자 dvt oslog# 프로세스 종료pymobiledevice3 개발자 dvt kill PID# 지정된 디렉터리의 파일 목록(루트가 해제된)pymobiledevice3 개발자 dvt ls PATH# 번들 이름으로 앱 실행pymobiledevice3 개발자 dvt 실행 com.apple.mobilesafari# 모든 KDebug 이벤트를 스니핑하여 `strace`와 같은 출력을 얻습니다:pymobiledevice3 개발자 dvt core-profile-session Parse-live# 모든 KDebug 스니핑 나중에 다음과 같은 도구를 사용하여 분석할 수 있도록 이벤트를 파일로 저장합니다. [`pykdebugparser`](https://github.com/matan1008/pykdebugparser), `fs_usage` 등...pymobiledevice3 개발자 dvt core-profile-session save FILENAME# 장치 확장 정보 가져오기(커널 이름, 칩셋 등) ...)pymobiledevice3 개발자 dvt device-information# 특정 PID에 대한 에너지 소비 모니터링pymobiledevice3 개발자 dvt 에너지 PID1 PID2 ...
lockdownd
와의 통신 비트와 바이트를 이해하거나 Python API를 배우려는 경우 다음 문서를 살펴보는 것이 좋습니다.
iDevice 프로토콜 계층 이해
기여를 참조하세요.
기타를 참조하세요
라이브러리는 Windows 플랫폼의 asyncio에 WindowsSelectorEventLoopPolicy를 사용합니다. 기타 토론을 참조하세요.
이 저작물은 GPL 3.0에 따라 라이센스가 부여되었으며 다음과 같은 주요 기여자에게 귀속됩니다.
헥터 마틴 "marcan" [email protected]
마티유 르나르
matan1008 [email protected]
가이 솔턴
netanelc305 [email protected]