Überwindet OS X und Jailbroken iOS private Apple-Berechtigungen

8

Dies ist wahrscheinlich ein verlorener Grund, aber ich werde fragen, weil ich ehrlich gesagt nur neugierig bin ...

Wir haben einen Kunden, der eine Ersatz-Messaging-App für OS X erstellen möchte. Sie möchten grundsätzlich die gleichen Konten, den Chat-Verlauf und alles andere verwenden, bieten aber eine komplett andere Benutzeroberfläche (für Menschen mit bestimmten Behinderungen) -in Nachrichten.app. Das Erstellen einer eigenen Messaging-App würde nicht funktionieren, da der primäre Dienst in Messages.app, iMessage, völlig undokumentiert ist und es daher nahezu unmöglich wäre, dies mit Code von Drittanbietern zu unterstützen.

Nach ersten Recherchen wurde klar, dass der gut dokumentierte AppleScript-Ansatz eine praktikable, aber grobe Lösung bieten würde, die viele Funktionen der ursprünglichen App (wie eine Anzeige beim Tippen usw.) verpasst, ganz zu schweigen davon, dass dies erforderlich ist die ursprüngliche Nachrichten-App wird ausgeführt, die den Benutzer ablenkt.

An diesem Punkt begannen wir ein wenig tiefer zu graben und fanden das IMCore.framework . IMCore ist im Grunde das, was Messages.app verwendet, um mit den verschiedenen Diensten zu kommunizieren, und seine Engine ist imagent , was scheint, die Daten zu verwalten und tatsächlich mit den verschiedenen IM-Servern zu kommunizieren. IMCore ist ein privates Framework, das offensichtlich etwas riskant zu benutzen ist (und automatisch ihre App aus dem App Store ausschließt), aber wir gingen davon aus, dass wir mit OS X das Programm weiterhin implementieren und die Anwendung außerhalb der App verteilen können Store mit nicht viel Schwierigkeit.

Wir haben mit IMCore experimentiert (beim Reverse-Engineering von Messages.app, um zu sehen, wie es verwendet wird) und haben einige Fortschritte gemacht. Wir konnten erfolgreich eine Verbindung mit dem Image-Prozess herstellen und mehrere Konfigurationsvorgänge durchführen, stellten dann jedoch fest, dass das Datenmodell im Grunde leer ist. Wir können keine Daten des Benutzers sehen oder mit IM-Diensten kommunizieren, obwohl wir im Sicherheitskontext des Benutzers ausgeführt werden.

Dann haben wir bemerkt, dass die Nachrichten.app einige sehr merkwürdige undokumentierte Berechtigungen wie com.apple.private.imcore.imdpersistence.database-access und com.apple.imagent hat. An dieser Stelle gehen wir davon aus, dass diese Berechtigungen fehlen, um erfolgreich mit imagent zu kommunizieren. Wir haben versucht, diese Berechtigungen zu unserer eigenen App hinzuzufügen und konnten sie erfolgreich erstellen und codieren, aber wenn das Programm gestartet wird, stürzt es beim Start mit der Systemmeldung EXC_CRASH (Code Signature Invalid) ab (Xcode sagt Terminated due to code signing error ).

Unsere ängstliche Annahme ist, dass Apple ihre privaten Berechtigungen gesperrt hat, so dass das System keine Binärdatei akzeptiert, die sie verwendet, es sei denn, es ist direkt von Apple signiert, aber dies ist offensichtlich eine Theorie. Die andere Frage ist: Wie weiß imagent , ob unsere Binärdatei diese Berechtigungen hat oder nicht? Könnten wir diese Ansprüche nicht irgendwie vortäuschen?

Wie gesagt, fühlt sich an wie eine verlorene Sache, aber wer weiß. Ich vermute, dass Leute, die Hardcore-Jailbreak-Arbeit an iOS gemacht haben, vielleicht eine oder zwei Ideen haben - irgendjemand?

    
ldoogy 25.02.2015, 04:50
quelle

1 Antwort

5

Ich werde meine eigene Frage beantworten, um ein bisschen mehr Informationen zu geben, falls sich jemand darum kümmert. Am Ende des Tages konnten wir diese Barriere überwinden, indem wir in den imagent -Prozess injizierten und die Berechtigungsverifikationsfunktionen abfingen, indem wir Funktionalität hinzufügten, so dass imagent die XPC-Verbindung für unseren Client erlaubte.

Dies öffnete die Tür für die uneingeschränkte Kommunikation mit imaget durch IMCore.framework , und ich kann bestätigen, dass die volle iMessage-Funktionalität erreicht wurde. Wir konnten das iTunes-Konto des Benutzers sehen, Nachrichten senden und empfangen, Nachrichten aus der Datenbank des Benutzers laden (um den Verlauf für jeden Chat anzuzeigen) und so ziemlich alles andere. Die Implementierung beinhaltete einen winzigen Systemdämon, der das Image bei jedem Neustart (oder beim Hochfahren des Systems) injizierte. Daher war es für einen Endbenutzer sehr einfach, mit einem Standard-OS-X-Installationsprogramm zu installieren.

IMCore.framework ist ziemlich einfach zu verwenden und enthält jedes winzige bisschen Metadaten für iMessage, einschließlich Benachrichtigungen, die der Benutzer am anderen Ende eingibt, die APIs für das Senden und Empfangen von Anhängen, Sie nennen es! Es scheint sich ein wenig zwischen OS X-Versionen zu ändern, aber wir konnten es über OS X-Versionen hinweg arbeiten lassen (wir haben 10.8 bis 10.10 getestet).

Die Herausforderung kam, als El Capitan auftauchte. Die neue Rootless-Funktion (System Integrity Protection) in El Capitan verhindert, dass unser kleiner Hack in imagent injiziert wird, was dieser Lösung ein Ende setzt. :-( Der Fehler tritt auf, wenn wir task_for_pid für den Prozess imagent aufrufen. Das scheitert und verhindert im Grunde, dass wir unseren Code in diesen Prozess einfügen.

Alles in allem kein Happy End, aber zumindest haben wir einen Eindruck vom gelobten Land bekommen.

    
ldoogy 08.02.2016 22:23
quelle

Tags und Links