อุปกรณ์ PyMobile3
การทำงานกับเครื่องมือสำหรับนักพัฒนา (iOS >= 17.0)
การกระทำที่ใช้กันทั่วไป
ไลบรารี OpenSSL
การพึ่งพา libusb
ภาพรวม
การติดตั้ง
การใช้งาน
บิตและไบต์ (Python API)
มีส่วนร่วม
ข้อมูลที่เป็นประโยชน์
ประกาศเกี่ยวกับลิขสิทธิ์
pymobiledevice3
เป็นการใช้งาน python3 อย่างแท้จริงสำหรับการทำงานกับ iDevices (iPhone ฯลฯ ... ) ซึ่งหมายความว่าเครื่องมือนี้เป็นทั้งสถาปัตยกรรมและแพลตฟอร์มทั่วไป และได้รับการสนับสนุนและทดสอบบน:
หน้าต่าง
ลินุกซ์
ระบบปฏิบัติการ macOS
คุณสมบัติหลักได้แก่:
การค้นพบอุปกรณ์ผ่าน Bonjour
การส่งต่อพอร์ต TCP
การดูบรรทัด syslog (รวมถึงการดีบัก)
การจัดการโปรไฟล์
การจัดการแอปพลิเคชัน
การจัดการระบบไฟล์ (AFC)
การจัดการรายงานข้อขัดข้อง
การดมกลิ่นเครือข่าย (PCAP)
อัพเดตเฟิร์มแวร์
การติดตั้งรูปภาพ
การฟังและการกระตุ้นการแจ้งเตือน ( notify_post()
api)
การค้นหาและการตั้งค่าตัวเลือก SpringBoard
ฟีเจอร์ WebInspector อัตโนมัติ
คุณสมบัติ DeveloperDiskImage:
กำลังจับภาพหน้าจอ
จำลองสถานที่
การจัดการกระบวนการ
การดมข้อความ KDebug (ความสามารถ strace ++)
การตรวจสอบกระบวนการ (ชอบ top
)
คุณสมบัติการเข้าถึง
การดมกลิ่น oslog ซึ่งรวมถึง syslog และป้ายบอกทาง
สำรองข้อมูล
คุณสามารถติดตั้งได้จาก PyPi:
python3 -m pip ติดตั้ง -U pymobiledevice3
หรือติดตั้งเวอร์ชันล่าสุดโดยตรงจากแหล่งที่มา:
โคลนคอมไพล์ [email protected]:doronz88/pymobiledevice3.gitcd pymobiledevice3 python3 -m pip ติดตั้ง -U -e
คุณยังสามารถติดตั้งการเติมข้อมูลอัตโนมัติสำหรับคำสั่งย่อยที่มีอยู่ทั้งหมดโดยเพิ่มสิ่งต่อไปนี้ลงใน ~/.zshrc
:
# python-click<8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=source_zsh pymobiledevice3)"# python-click>=8.0eval "$(_PYMOBILEDEVICE3_COMPLETE=zsh_source pymobiledevice3)"
ในปัจจุบัน openssl จำเป็นอย่างชัดเจนหากใช้กับ iOS เวอร์ชันเก่า (<13)
บน macOS:
ชงติดตั้ง openssl
บนลินุกซ์:
sudo apt ติดตั้ง openssl
การโต้ตอบกับอุปกรณ์ในโหมดการกู้คืนหรือ DFU จำเป็นต้องติดตั้ง libusb
(จำเป็นสำหรับการจัดการคำสั่งย่อย restore
)
ขั้นตอนการติดตั้งจะแตกต่างกันไปขึ้นอยู่กับแพลตฟอร์มของคุณ:
บน macOS:
# ใช้ homebrewbrew ติดตั้ง libusb# โดยใช้พอร์ต MacPortssudo ติดตั้ง libusb
บนลินุกซ์:
# Debian/Ubuntusudo apt-get ติดตั้ง libusb-1.0-0-dev# Fedorasudo dnf ติดตั้ง 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 โดยใช้ช่องทางการล็อคดาวน์ใหม่ สำหรับการโต้ตอบกับ Windows กับ iOS 17.0-17.3.1 คุณจะต้องติดตั้งไดรเวอร์เพิ่มเติม (เราไม่ได้จัดเตรียมไว้ให้)
ตั้งแต่ iOS 17.0 เป็นต้นไป Apple ได้เปิดตัวเฟรมเวิร์ก CoreDevice ใหม่เพื่อทำงานกับอุปกรณ์ iOS กรอบงานนี้อาศัยโปรโตคอล RemoteXPC ในการสื่อสารกับบริการของนักพัฒนา คุณจะต้องสร้างช่องทางที่เชื่อถือได้ก่อนโดยใช้หนึ่งในสองรูปแบบ:
เรียกใช้เซิร์ฟเวอร์ทันเนลที่ชื่อ tunneld
เพื่อตรวจจับอุปกรณ์และสร้างการเชื่อมต่อโดยอัตโนมัติ
ดำเนินการต่อไปนี้:
# หากอุปกรณ์รองรับการจับคู่ระยะไกล เช่น อินสแตนซ์ Corellium หรือ AppleTV# คุณจะต้องจับคู่อุปกรณ์เหล่านั้นก่อน# อุปกรณ์ iOS ปกติไม่จำเป็นต้องใช้ขั้นตอนนี้ python3 -m pymobiledevice3 การจับคู่ระยะไกล# บน windows ให้ใช้เชลล์พิเศษ python3 - m pymobiledevice3 อุโมงค์ระยะไกล
สร้างอุโมงค์ด้วยตนเองโดยใช้ start-tunnel
ดำเนินการต่อไปนี้:
# หากอุปกรณ์รองรับการจับคู่ระยะไกล เช่น อินสแตนซ์ Corellium หรือ AppleTV# คุณจะต้องจับคู่อุปกรณ์เหล่านั้นก่อน# อุปกรณ์ iOS ปกติไม่จำเป็นต้องใช้ขั้นตอนนี้ python3 -m pymobiledevice3 การจับคู่ระยะไกล# หมายเหตุ: บน windows ให้ใช้เชลล์สิทธิพิเศษ สำหรับคำสั่งต่อไปนี้# เริ่มต้นที่ iOS 17.4 คุณสามารถใช้ lockdown tunnelsudo python3 -m pymobiledevice3 lockdown start-tunnel# ที่เร็วขึ้นมากได้ หากคุณต้องการประเภทการเชื่อมต่อนี้ เพื่อให้สามารถใช้งานได้ผ่าน wifi คุณสามารถเปิดใช้งาน itpython3 -m pymobiledevice3 lockdown wifi-connections on# บน iOS เวอร์ชันเก่ากว่าได้ ให้ใช้สิ่งต่อไปนี้แทน# คุณอาจส่งผ่าน `-t wifi` เพื่อบังคับอุโมงค์ WiFi sudo python3 -m pymobiledevice3 remote start-tunnel
คุณจะได้รับการพิมพ์ด้วยผลลัพธ์ต่อไปนี้โดยให้รายละเอียดการเชื่อมต่อที่จำเป็นแก่คุณ:
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 ในกรณีที่ช่องสัญญาณในการให้บริการที่พอร์ตที่ไม่ใช่ค่าเริ่มต้น python3 -m pymobiledevice3 ผู้พัฒนา dvt ls / --tunnel ''# หรือเพียงแค่ไม่มีตัวเลือก `--tunnel` สมมติว่า tunneld กำลังรัน python3 -m นักพัฒนา pymobiledevice3 dvt ls /# หรือเราอาจใช้รายละเอียดอุโมงค์แบบแมนนวล python3 -m pymobiledevice3 ผู้พัฒนา dvt ls / --rsd fd7b:e5b:6f53::1 64337# และเรายังสามารถเข้าถึงหรือบริการล็อคดาวน์ "ปกติ" อื่น ๆ python3 -m pymobiledevice3 syslog สด --tunnel ''
คุณสามารถทำอะไรได้มากมายบนอุปกรณ์โดยใช้ pymobiledevice3
นี่เป็นเพียง TL; DR ของการดำเนินการทั่วไปบางอย่าง:
# การแสดงรายการอุปกรณ์ที่เชื่อมต่อ pymobiledevice3 usbmux list# เรียกดูอุปกรณ์ RemoteXPC โดยใช้ bonjourpymobiledevice3 bonjour rsd# ดูบรรทัด syslog ทั้งหมด (รวมถึงข้อความดีบัก) pymobiledevice3 syslog live# กรองเฉพาะข้อความที่มีคำว่า "SpringBoard" pymobiledevice3 syslog live -m SpringBoard# รีสตาร์ทอุปกรณ์ pymobiledevice3 การวินิจฉัยรีสตาร์ท # ดึงรายงานข้อขัดข้องทั้งหมดจากการดึงข้อขัดข้องของ devicepymobiledevice3 /path/to/crashes# จัดการไดเร็กทอรีสื่อ pymobiledevice3 afc shell# แสดงรายการแอปพลิเคชันที่ติดตั้งทั้งหมดและรายละเอียดรายการแอป pymobiledevice3# แสดงรายการแบบสอบถามเฉพาะชุดระบบปฏิบัติการเฉพาะ appspymobiledevice3 แอพค้นหา BUNDLE_ID1 BUNDLE_ID2# สร้างอุโมงค์ TCP จากโฮสต์ของคุณไปยัง devicepymobiledevice3 usbmux ส่งต่อ HOST_PORT DEVICE_PORT# สร้างการสำรองข้อมูลทั้งหมดของการสำรองข้อมูล devicepymobiledevice3 backup2 --full DIRECTORY# คืนค่า backuppymobiledevice3 ที่กำหนด backup2 คืนค่า DIRECTORY# ดำเนินการอัพเดตซอฟต์แวร์ด้วยไฟล์ IPSW ที่กำหนด/url:pymobiledevice3 คืนค่า update -i /path/to/ipsw | url# หมายเหตุ: คำสั่งย่อย webinspector ต่อไปนี้จะต้องเปิดใช้งานคุณสมบัติ Web Inspector# รับเชลล์ JavaScript แบบโต้ตอบบน tabpymobiledevice3 webinspector js-shell# ที่เปิดอยู่ รายการแท็บที่เปิดอยู่ในปัจจุบันคือ browserpymobiledevice3 webinspector ของอุปกรณ์ที่เปิดแท็บ# หมายเหตุ: คำสั่งย่อย webinspector ต่อไปนี้ จะต้องเปิดใช้งานคุณสมบัติการทำงานอัตโนมัติระยะไกลด้วย# รับเชลล์ JavaScript แบบโต้ตอบบนแท็บอัตโนมัติอัตโนมัติระยะไกลใหม่ tabpymobiledevice3 webinspector js-shell --automation# เปิดเซสชันอัตโนมัติเพื่อดู URL เรียกใช้ webinspector URLpymobiledevice3 ที่กำหนด URL# รับเชลล์ webinspector ที่เหมือนซีลีเนียมเหมือน shellpymobiledevice3 webinspector# หมายเหตุ: คำสั่งย่อยต่อไปนี้จะต้องเปิดใช้งาน DeveloperMode หากอุปกรณ์ของคุณไม่มีรหัส PIN คุณสามารถเปิดใช้งานได้โดยอัตโนมัติโดยใช้คำสั่งต่อไปนี้ pymobiledevice3 amfi Enable-developer-mode# Mount the DDI (DeveloperDiskImage)pymobiledevice3 mounter auto-mount# หมายเหตุ: คำสั่งย่อยต่อไปนี้ถือว่า DeveloperMode ทั้งสองเป็น เปิดเครื่องแล้วและติดตั้ง DDI แล้ว # จำลองตำแหน่ง `lat long` (iOS <17.0) นักพัฒนา pymobiledevice3 ชุดจำลองตำแหน่ง -- lat long# จำลองตำแหน่ง `lat long` (iOS >= 17.0) ผู้พัฒนา pymobiledevice3 dvt simulate-location set -- lat long# เล่น .GPX filepymobiledevice3 ผู้พัฒนา dvt simulate-location play route.gpx# เพิ่มสัญญาณรบกวนจังหวะแบบสุ่มระหว่าง -500 ถึง 500ms ในเวลาระหว่างสองจุดใน GPX filepymobiledevice3 นักพัฒนา dvt จำลองตำแหน่งการเล่น route.gpx 500# ล้างตำแหน่งจำลอง: นักพัฒนา pymobiledevice3 dvt simulate-location clear# การจับภาพหน้าจอจากอุปกรณ์: ภาพหน้าจอ dvt ของนักพัฒนา pymobiledevice3 /path/to/screen.png# ดูรายการกระบวนการโดยละเอียด (รวมถึง ppid, uid, guid, sandboxed ฯลฯ ...) นักพัฒนา pymobiledevice3 dvt sysmon กระบวนการ single# การดมกลิ่น oslogpymobiledevice3 ผู้พัฒนา dvt oslog# ฆ่า นักพัฒนา processpymobiledevice3 dvt kill PID# แสดงรายการไฟล์ในไดเร็กทอรีที่กำหนด (un-chrooted) ผู้พัฒนา pymobiledevice3 dvt ls PATH# เปิดแอปโดยชุดผู้พัฒนา namepymobiledevice3 dvt launch com.apple.mobilesafari# ดมกลิ่นเหตุการณ์ KDebug ทั้งหมดเพื่อรับ `strace`- เช่นเอาต์พุต: ผู้พัฒนา pymobiledevice3 dvt core-profile-session parse-live# Sniff เหตุการณ์ KDebug ทั้งหมด ลงในไฟล์สำหรับการแยกวิเคราะห์ในภายหลังด้วยเครื่องมือเช่น [`pykdebugparser`](https://github.com/matan1008/pykdebugparser), `fs_usage` และอื่นๆ...pymobiledevice3 นักพัฒนา dvt core-profile-session บันทึก FILENAME# รับ ข้อมูลขยายของอุปกรณ์ (ชื่อเคอร์เนล, ชิปเซ็ต ฯลฯ ... ) ข้อมูลอุปกรณ์ dvt ของผู้พัฒนา pymobiledevice3 # ตรวจสอบการใช้พลังงานสำหรับเฉพาะ PIDpymobiledevice3 นักพัฒนา dvt พลังงาน PID1 PID2 ...
เพื่อทำความเข้าใจบิตและไบต์ของการสื่อสารกับ lockdownd
หรือหากต้องการเรียนรู้ python API ขอแนะนำให้อ่านบทความนี้:
ทำความเข้าใจกับเลเยอร์โปรโตคอล iDevice
ดูการมีส่วนร่วม
โปรดดูเบ็ดเตล็ด
Library ใช้ WindowsSelectorEventLoopPolicy สำหรับ asyncio บนแพลตฟอร์ม Windows โปรดดูการอภิปรายเบ็ดเตล็ด
งานนี้ได้รับอนุญาตภายใต้ GPL 3.0 และให้เครดิตกับผู้สนับสนุนหลักหลายราย:
เฮคเตอร์ มาร์ติน "มาร์แคน" [email protected]
มาติเยอ เรอนาร์
โดรอนซ์ [email protected]
matan1008 [email protected]
กาย ซัลตัน
netanelc305 [email protected]