2013-05-07 3 views
5

mit otool -tV SpringBoardServices Befehl, ich bin in der Lage C-Funktionen in SpringBoardServices Rahmen binär zu bekommen ..iOS SpringBoardServices erhält UIApplication

ich SBFrontmostApplicationDisplayIdentifier sehen kann, die mir ID des vordersten App geben. Kann diese ID verwendet werden, um UIApplication zu erhalten? Letztendlich möchte ich die oberste Ansicht bekommen, die Berührungsereignisse und ihren Typ wie UIButton usw. verbraucht?

Jede Hilfe wird geschätzt.

+0

Wie weit sind Sie damit gekommen? –

Antwort

3

Dies ist keine echte Antwort, sondern nur einige Gedanken zu diesem Problem.

C vs Objective C-API spricht

  • Im Allgemeinen gibt es zwei Arten von API: C-API (wie SBFrontmostApplicationDisplayIdentifier) ​​und Ziel des C-API.

  • Ich glaube, dass alle C-APIs nur mit primitiven Typen (Strings, Integer usw.) arbeiten. Ich habe keine C-API gesehen, die Objective-C-Objekte zurückgibt.

  • SBFrontmostApplicationDisplayIdentifier gibt ID (die nur eine Zeichenfolge ist) zurück. Als Beispiel "com.apple.Preferences" für die App "Einstellungen".

  • Ich glaube, Sie haben mehr Glück für Objective-C-API suchen, die jede Art von Objekten zurückgibt

Inter-Prozess-Kommunikation

  • Es gibt keine einfache Art und Weise zu übertragen Objekt (insbesondere komplexe Objekte, die auf andere Objekte zeigen, die auf andere Objekte verweisen usw.) zwischen Prozessen. Wenn Sie darüber nachdenken, kann das UIApplication-Objekt die Hälfte der Anwendung referenzieren. Die einzige Möglichkeit besteht darin, ALLES an einem Ende zu serialisieren und an einem anderen Ende zu deserialisieren.

  • Unter Berücksichtigung von Problemen im Zusammenhang mit der Serialisierung von Objekten übergeben die meisten APIs, die eine prozessübergreifende Kommunikation durchführen müssen, einfache Strukturen mit äußerst wichtigen Informationen. Und ich habe genau dieses Muster beim Reverse-Engineering von iOS-Binärdateien gesehen.

UIApplication

  • Meine Vermutung, dass UIApplication Objekte nie einen Prozessraum verlässt. Tatsächlich ist die Existenz der SBApplication-Klasse (von SBDisplay übernommen) in Springboard eine Art indirekte Bestätigung dafür.

Ideen

  • Versuchen bei BackboardService aussehen

  • Versuchen Sie, alle APIs in SpringboardService

  • ich für alles im Zusammenhang mit Anzeige verfolgen würde versuchen, zu überprüfen.

P.S. Ich würde die Lösung gerne sehen, da mir keine APIs bekannt sind, die Einblick in die Benutzeroberfläche von Drittanbieter-Apps geben.

+0

Hallo Victor - Haben Sie jemals GSEventRegisterEventCallBack verwendet? Kann das hilfreich sein, um ein Ereignis zu erhalten, wenn eine Ansicht hinzugefügt oder entfernt wird? Ich weiß, dass dies eine etwas vage Frage ist, aber ich konnte GSEventRegisterEventCallBack nicht aufrufen und fragen, ob Sie es benutzt haben. – Jailbroken

+0

Ich habe es nicht benutzt. Und ich würde sagen, es ist eine wirklich interessante Forschungsrichtung. Ich habe Informationen hinzugefügt, die ich für 10-15 Minuten des Reverse Engineering in der getrennten Frage gefunden habe, die Sie geschrieben haben. Testen Sie es auch auf einem echten Gerät oder Simulator? –