Apple hat ein paar Apps vorläufig aus dem iOS App Store entfernt, die das YouMi-Werbe-SDK aus China verwenden. YouMi greift ein paar sensible Daten ab, was Apple nicht erlaubt. Die Apps kommen wieder rein, wenn sie dieses SDK nicht mehr verwenden. Betroffen sind mutmaßlich wohl nur Apps von chinesischen Entwicklern.
Das Aufrufen von privaten APIs wird von Apple normalerweise entdeckt. Es gibt aber Möglichkeiten, den Aufruf zu verheimlichen. Typischerweise erfolgt dabei der Zusammenbau des Methodenaufrufs dynamisch mit Hilfe von NSSelectorFromString und ähnlichem. Wenn man das mit Format-Strings kombiniert, dann ist der Aufruf nicht mehr klar erkennbar. Warum heise das unklar ist, ist mir unklar ;-)
Es wird unter anderem erwähnt, daß auch die Liste installierter Apps übertragen wird. Das geht jedoch zuverlässig nur über das Dateisystem. Und auf diesen Teil des Dateisystems in iOS, auf die anderen Apps, hat eine App keine Zugriffsberechtigung, solange kein Jailbreak verwendet wird.
Im Endeffekt bleiben dann ohne Jailbreak nur drei Möglichkeiten, wie sie das umgesetzt haben, die altbekannt sind: Entweder über wiederholtes Abfragen von bekannten Strings für Custom URL Schemata, was jedoch nur Apps entdecken kann, die auch ein eigenes URL Schema verwenden. Außerdem kann man nicht jede mögliche App auf der Liste haben. Es wird also nach bestimmten bekannten Apps abgefragt. Außerdem begrenzt Apple die Anzahl der Aufrufe auf 50 in iOS 9. Und wenn die App iOS 9 voraussetzt, muß man die verwendeten URL Schemata in einer Property-List angeben.
Die andere Möglichkeit, an eine App-Liste zu kommen, ist, über die Abfrage der laufenden Prozesse über sysctl(). Damit bekommt man jedoch auch nicht alle Apps, die installiert sind, sondern eben nur die, die aktiv sind. Außerdem wurde in iOS 9 sysctl() so geändert, daß sandboxed Apps darüber keine Infos über andere Apps mehr bekommen.
Die dritte Möglichkeit wäre über Icon-Cache-Namen von Apps. Das ist aber ebenfalls in iOS 9 nicht mehr möglich, weil die Namen nun zufällig sind.
Es gibt noch eine vierte Möglichkeit über LSApplicationWorkspace. Versucht man jedoch so eine App in den Store zu laden, gibt es die Fehlermeldung: "The app references non-public selectors in …: allApplications, defaultWorkspace." Man müßte den Aufruf weiter obfuskieren, zum Beispiel über NSSelectorFromString, sonst besteht da keine Chance.
Apple hat die Privatsphäre der User mit iOS 9 weiter abgesichert und schaut offenbar auch genauer hin. Werbenetzwerke wie YouMi haben es nun schwerer, Benutzer auszuspionieren.