
webkit; 하지만 pwned
이 프로그램은 절대 스파이웨어가 아닙니다.
64비트 iOS 기기에서 가능한 한 빨리 실행하세요.
귀하의 협조는 보상받을 것입니다.
[ 라이브 버전: totally-not.spyware.lol ]
프론트엔드와 WebKit 익스플로잇은 /root에 있습니다.
커널 익스플로잇은 /glue에 있습니다.
포스트 익스플로잇은 /glue/dep에 있습니다.
DoubleH3lix와 Meridian은 각각 해당 디렉토리에서 make headless 및 make all로 독립적으로 정적 라이브러리로 빌드할 수 있습니다.
그런 다음 WebKit 익스플로잇 이후 JIT에서 실행되는 바이너리인 /glue의 payload를 빌드하는 데 사용됩니다. make만 실행하면 빌드할 수 있으며, 필요에 따라 모든 의존성도 빌드됩니다.
그리고 /root에서 make를 실행하면 WebKit 익스플로잇과 최종적으로 모두 연결되며, 이 역시 필요에 따라 의존성을 다시 빌드합니다.
우리는 원래 WebKit 패치를 10.x로 백포트하려고 했지만, 결국 포기했습니다.
자세한 내용은 /patch를 참조하세요. 핵심은 다음과 같습니다.
WebKit 버그의 한 부분은 JSC::DFG::clobberize의 잘못된 예측이었는데, 이는 기본적으로 거대한 switch-case입니다. 이에 대한 수정은 일부 값을 이미 다른 값에 사용되는 블록으로 다시 라우팅하는 것이었습니다.
우리가 확인한 버전에서는 컴파일러가 이를 위해 점프 테이블을 생성했기 때문에, 올바른 코드가 이미 존재하므로 해당 점프 테이블을 찾아 패치하기만 하면 된다는 생각이었습니다.
문제는 모든 것이 의존하는 값들이 iOS 10의 수명 기간 동안 수백 번 변경되었다는 것입니다(네, iOS 릴리스보다 훨씬 더 자주 변경되었습니다). 그리고 코드 근처 어디에도 이정표가 없는 것처럼 보여서 어떤 값을 패치해야 할지 사실상 결정할 수 없습니다. :(