Как это работает?
Браузер подключается к прокси, прокси делает MITM с браузером и открывает новое TLS соединение с сервером устанавливая SNI в соответствии с маппингами в spoof.list, НО, дальнейший HTTP трафик полностью проксируется без изменений, то есть заголовок Host: остается неизменным.
ТСПУ видит SNI = www.google.com, сервер гугла видит HTTP заголовок Host: www.youtube.com, и каким то чудом возвращает ответ для YouTube.com а не Google.com.
При попытке прикрыть этот способ, РКН полностью убьет Google, для РКН сломать гугл пока-что дорогое удовольствие, поэтому это будет работать до тех пор, пока Россия окончательно не отрезалась от глобальной сети.
Код тут полностью навайбкоден нейронкой, так как задача была проверить теорию а не написать что-то производительное.
Сертификат возвращаемый сервером имеет альтернативные доменные имена, и чтобы не было ошибок валидности сертификата - домены для спуфа надо подбирать, например сертификат при подключении к www.google.com подойдет и для www.youtube.com. В случае с GGC (ну или googlevideo.com) нужно подбирать домен для спуфа из альтернативных имен этого самого GGC. Подбирать домены можно ориентируясь этому ❌ Handshake with www.google.com failed: tls: failed to verify certificate: x509: certificate is valid for *.c.docs.google.com, *.a1.googlevideo.com, *.bdn.dev, *.oo rigin-test.bdn.dev, *.c.2mdn.net, *.c.bigcache.googleapis.com, *.c.chat.google.com, *.c.doc-0-0-sj.sj.googleusercontent.com, *.c.drive.google.com, *.c.googlesyndication.com, *.c.google video.com, *.c.mail.google.com, *.c.mail.googleusercontent.com, *.c.pack.google.com, *.c.play.google.com, *.c.youtube.com, *.dai.googlevideo.com, *.googlevideo.com, *.googlezip.net, *.gvt1.com, *.offline-maps.gvt1.com, *.snap.gvt1.com, *.gcpcdn.gvt1.com, xn--ngstr-lra8j.com, *.xn--ngstr-lra8j.com, not www.google.com , звёздочка в домене это Wildcard сертификат, можно и нужно ее заменить на любой текст либо существующее доменное имя GGC, проще говоря: если *.c.docs.google.com то c.docs.google.com -> failed to verify, однако aboba.c.docs.google.com -> сработает.
А что если просто менять SNI и не делать MITM? Мне не удалось заставить это работать, увы, но видимо генерируемые ключи зависят от SNI, и при попытке подменить SNI я получаю curl: (35) schannel: next InitializeSecurityContext failed: SEC_E_DECRYPT_FAILURE (0x80090330) - Указанные данные не могут быть расшифрованы.
Однако это явно имеет какой-либо потенциал.
If you're a Google engineer, I kindly ask you not to change anything on the servers. They are working perfectly, thx.