
webkit; mas pwned
Este programa definitivamente não é spyware.
Execute-o no seu dispositivo iOS de 64 bits o mais rápido possível.
Sua obediência será recompensada.
[ Versão no ar em totally-not.spyware.lol ]
O frontend e o exploit do WebKit estão em /root.
O exploit do kernel está em /glue.
A pós-exploração está em /glue/dep.
DoubleH3lix e Meridian podem ser compilados independentemente em bibliotecas estáticas com make headless e make all, respectivamente, em seus diretórios.
Essas são então usadas para compilar o payload em /glue, que é o binário executado a partir do JIT após o exploit do WebKit. Pode ser compilado com apenas um make, e compilará todas as dependências conforme necessário.
E tudo isso é finalmente unido ao exploit do WebKit executando make em /root, que novamente compilará as dependências conforme necessário.
Originalmente queríamos fazer backport do patch do WebKit para o 10.x, mas acabamos desistindo.
Veja /patch para detalhes, mas a essência é:
Uma parte do bug do WebKit consistia em previsões incorretas em JSC::DFG::clobberize, que é basicamente um enorme switch-case. A correção para isso era redirecionar alguns valores para blocos que já são usados para outros valores.
Nas versões que verificamos, o compilador havia gerado jump tables para isso, então nossa ideia teria sido simplesmente encontrar e corrigir todas essas jump tables, já que o código correto já estaria presente.
O problema é que os valores dos quais tudo depende mudaram centenas de vezes ao longo do ciclo de vida do iOS 10 (sim, muito mais frequentemente do que houve lançamentos do iOS), e parece não haver pontos de referência em nenhum lugar próximo no código, então é praticamente impossível para nós determinar quais valores corrigir. :(