
webkit; but pwned
Dieses Programm ist definitiv keine Spyware.
Führe es so schnell wie möglich auf deinem 64-Bit-iOS-Gerät aus.
Deine Kooperation wird belohnt.
[ Live-Version unter totally-not.spyware.lol ]
Frontend und WebKit-Exploit befinden sich in /root.
Kernel-Exploit befindet sich in /glue.
Post-Exploitation befindet sich in /glue/dep.
DoubleH3lix und Meridian können unabhängig voneinander mit make headless bzw. make all in ihren Verzeichnissen zu statischen Bibliotheken gebaut werden.
Diese werden dann verwendet, um das payload-Binary in /glue zu bauen, das nach dem WebKit-Exploit von JIT ausgeführt wird. Es kann mit einem einfachen make gebaut werden und baut bei Bedarf alle Abhängigkeiten.
Und all das wird schließlich mit dem WebKit-Exploit zusammengeführt, indem man make in /root ausführt, was bei Bedarf wiederum Abhängigkeiten baut.
Ursprünglich wollten wir den WebKit-Patch auf 10.x zurückportieren, haben es aber letztendlich aufgegeben.
Siehe /patch für Details, aber das Wesentliche ist:
Ein Teil des WebKit-Bugs bestand aus falschen Vorhersagen in JSC::DFG::clobberize, was im Grunde ein riesiges Switch-Case ist. Die Lösung dafür war, einige Werte auf Blöcke umzuleiten, die bereits für andere Werte verwendet werden.
Bei den Versionen, die wir geprüft haben, hatte der Compiler dafür Sprungtabellen generiert, also wäre unsere Idee gewesen, einfach all diese Sprungtabellen zu finden und zu patchen, da der korrekte Code bereits vorhanden wäre.
Das Problem ist, dass sich die Werte, von denen alles abhängt, im Laufe der Lebensdauer von iOS 10 hunderte Male geändert haben (ja, viel häufiger als es iOS-Releases gab), und es scheint weit und breit keine Anhaltspunkte im Code zu geben, sodass es für uns praktisch unmöglich ist zu bestimmen, welche Werte gepatcht werden müssen. :(