
webkit; but pwned
Эта программа определённо не шпионское ПО.
Запустите её на вашем 64-битном устройстве iOS как можно скорее.
Ваше послушание будет вознаграждено.
[ Живая версия на totally-not.spyware.lol ]
Фронтенд и WebKit-эксплойт находятся в /root.
Эксплойт ядра находится в /glue.
Пост-эксплуатация находится в /glue/dep.
DoubleH3lix и Meridian могут быть собраны независимо в статические библиотеки с помощью make headless и make all соответственно, в своих каталогах.
Затем они используются для сборки payload в /glue — бинарного файла, который запускается из JIT после WebKit-эксплойта. Его можно собрать просто командой make, и он соберёт все зависимости по мере необходимости.
И всё это в конечном итоге связывается вместе с WebKit-эксплойтом запуском make в /root, который опять же соберёт зависимости по мере необходимости.
Изначально мы хотели перенести WebKit-патч на 10.x, но в итоге сдались.
См. /patch для подробностей, но суть такова:
Одна часть ошибки WebKit заключалась в неверных предсказаниях в JSC::DFG::clobberize, что по сути огромный switch-case. Исправление заключалось в перенаправлении некоторых значений в блоки, которые уже используются для других значений.
На проверенных нами версиях компилятор генерировал для этого таблицы переходов, так что нашей идеей было просто найти и пропатчить все эти таблицы переходов, поскольку правильный код уже присутствовал бы.
Проблема в том, что значения, от которых всё зависит, менялись сотни раз за время жизни iOS 10 (да, гораздо чаще, чем выходили релизы iOS), и рядом в коде, похоже, нет никаких ориентиров, так что для нас практически невозможно определить, какие значения нужно пропатчить. :(