
webkit; but pwned
このプログラムは絶対にスパイウェアではありません。
64ビットのiOSデバイスでできるだけ早く実行してください。
あなたの協力には報奨があります。
[ ライブ版: totally-not.spyware.lol ]
フロントエンドとWebKitエクスプロイトは/rootにあります。
カーネルエクスプロイトは/glueにあります。
ポストエクスプロイテーションは/glue/depにあります。
DoubleH3lixとMeridianは、それぞれのディレクトリで make headless と make all により、独立して静的ライブラリにビルドできます。
これらはその後、/glue 内の payload のビルドに使われます。payload はWebKitエクスプロイト後にJITから実行されるバイナリです。make を実行するだけでビルドでき、必要な依存関係もすべてビルドされます。
そして最後に、/root で make を実行することで、そのすべてがWebKitエクスプロイトと結合されます。ここでも必要に応じて依存関係がビルドされます。
私たちは当初、WebKitパッチを10.xにバックポートしようとしましたが、結局断念しました。
詳細は/patchを参照してください。要点は次のとおりです。
WebKitのバグの一部は、基本的に巨大なswitch-caseであるJSC::DFG::clobberizeにおける誤った予測でした。その修正は、一部の値を、他の値のために既に使われているブロックへ再ルーティングするというものでした。
私たちが確認したバージョンでは、コンパイラがそのためのジャンプテーブルを生成していたため、正しいコードは既に存在しているので、それらのジャンプテーブルをすべて見つけてパッチするだけ、というのが私たちのアイデアでした。
問題は、すべてが依存している値がiOS 10の存続期間中に何百回も変更されていることです(そうです、iOSのリリース回数よりもはるかに頻繁です)。そして、コード内の近くには目印らしきものがどこにもないため、どの値をパッチすべきかを特定することは事実上不可能です。:(