Download Appteka (works without ads)

Appteka is a community-driven, free Android apps market

GoQuiet

GoQuiet

160 downloads

Uploaded by
OpenMaker
Version
1.1.1 (build 4) 
Size
5.2 MiB
Publish Date
2022-03-06
Category
Tools
Package
com.github.shadowsocks.plugin.gq_client
Minimum OS
Android 4.4
SHA1
c78074b982fed3e65cd0f138228577715737f63c
Description
GoQuiet — ещё один плагин для Shadowsocks, который полностью и конфиденциально, мощнейшим образом маскирует трафик под обычный HTTPS-трафик на неблокируемые веб-сайты. Через доменное прикрытие и маскирует прокси-сервер под обычный веб-сервер. Тем самым ни один, слышишь, вообще ни один провайдер не сможет отследить какое бы то не было действие. С такой обфусикацией ещё никто не справился, поэтому трафик будет зашифрован, так, как не был зашифрован тот же Wireguard, OpenVPN и во многих других сервисах, предоставляющие создание VPN-клиента. Но, они далеко не обеспечивали полную анонимность, если не считать Lokinet, только shadowsocks быстрее и оптимальнее. И до сих-пор, он так и не был расшифрован провайдерами, если, конечно не брать в счёт голый shadowsocks. Но, если чуток разобраться, создавать свои конфы в этом VPN-клиенте будет не трудно — плагины же, усовершенствуют анонимизацию и облегчает процесс некоторых вещей. Режим работы плагина Для сервера: ss-server -c <path-to-ss-config> --plugin <path-to-gq-server-binary> --plugin-opts "<path-to-gqserver.json>" Для клиента: ss-local -c <path-to-ss-config> --plugin <path-to-gq-client-binary> --plugin-opts "<path-to-gqclient.json>" или как значение plugin и plugin_opts в Shadowsocks JSON { "server": "0.0.0.0", "server_port":443, "local_address": "127.0.0.1", "local_port":1080, "пароль": "mypassword", "timeout":300, "method":"aes-128-gcm", "fast_open":false, "reuse_port":true, "no_delay":true, "plugin": "path-to-gqserver/client-binary", "plugin_opts": "path-to-gqserver/client.json" } В качестве альтернативы, plugin_opts может быть опциями конфигурации, разделенными полутонами. Например: "plugin_opts":"WebServerAddr=204.79.197.200:443;Key=exampleconftest" Ключи не могут содержать = " ;. Автономный режим Автономный режим следует использовать только в том случае, если ваш shadowsocks порт не поддерживает плагины Для сервера: gq-server -r 127.0.0.1:8388 -c <path-to-gqserver.json> ss-server -c <path-to-ss-config> -s 127.0.0.1 -p 8388 Для клиента: gq-client -s <server_ip> -l 1984 -c <path-to-gqclient.json> ss-local -c <path-to-ss-config> -s 127.0.0.1 -p 1984 -l 1080 Конфигурация Для сервера: WebServerAddr - это адрес и порт перенаправления, когда входящий трафик не от shadowsocks. Он должен соответствовать IP записи ServerName, заданной в gqclient.json. Key — это ключ. Он должен совпадать с ключом, заданным в gqclient.json. Для клиента: ServerName — домен, который вы хотите заставить GFW думать, что вы посещаете. Key — ключ TicketTimeHint — время, необходимое для истечения срока действия билета сессии и генерации нового. Оставьте значение по умолчанию. Browser — это браузер, который вы хотите заставить GFW думать, что вы используете, это НЕ имеет никакого отношения к веб-браузеру или любому веб-приложению, которое вы используете на своей машине. В настоящее время поддерживаются chrome и firefox. ○ Как это работает ● Как упоминалось выше, этот плагин обфусцирует трафик shadowsocks как трафик TLS. Это включает в себя добавление заголовка TLS Record Layer к данным приложения и имитацию TLS handshake. Оба эти действия тривиальны в реализации, но, манипулируя данными, передаваемыми в последовательности рукопожатия, мы можем добиться некоторых интересных вещей. Последовательность рукопожатия TLS инициируется клиентом, посылающим сообщение ClientHello. Нас интересует поле random и расширение:session_ticket. Согласно rfc5246, поле random представляет собой текущее 32-битное время unix, скомбинированное с 28 случайными байтами. Однако в большинстве реализаций все 32 байта генерируются случайным образом (источник: Wireshark). Расширение session_ticket запускает механизм, называемый возобновлением сессии, который позволяет серверу пропустить множество шагов, в первую очередь сообщение Certificate, отправляемое сервером. Если у вас нет действительного сертификата TLS, вам придется составить сообщение invalid cert, что является сильным признаком, указывающим на то, что сервер является прокси. Благодаря наличию session_ticket нам не нужно передавать эту информацию. Клиентская часть этого плагина составляет сообщение ClientHello, используя следующую процедуру: # Глобальные переменные # В конфигурационном файле: preshared_key = '[Ключ, переданный вне диапазона]' ticket_time_hint = 3600 # В реализациях TLS это время в секундах для истечения срока действия билета сессии. # Обычные значения: 300, 3600, 7200 и 100800. # Вычисляется при запуске: aes_key = sha256(preshared_key) opaque = rand32int() # Случайно: iv = randbytes(16) goal = sha256(str(floor(gettimestamp()/(12*60*60))) + preshared_key) rest = aes_encrypt(iv,aes_key,goal[0:16]) random = iv + rest # Билет на сессию ticket = randbytes(192,seed=opaque+aes_key+floor(gettimestamp()/ticket_time_hint))) Когда сервер получает сообщение ClientHello, он проверяет поле random. Если оно не проходит, все ClientHello отправляется на адрес веб-сервера, заданный в конфигурационном файле, и сервер действует как ретранслятор между клиентом и веб-сервером. Если он проходит, то сервер составляет и отправляет ServerHello, ChangeCipherSpec, Finished вместе, а клиент отправляет ChangeCipherSpec, Finished вместе. В этих сообщениях нет никакой полезной информации. Затем сервер действует как ретранслятор между клиентом и сервером shadowsocks. BTC: bc1q59yvpnh0356qq9vf0j2y7hx36t9ysap30spx9h ETH: 0x8effF29a8F9bD38A367580527AC303972c92b60c Открытый исходный код: https://github.com/cbeuw/GoQuiet.git Если случились проблемы / ошибки в плагине и вам нужно о ним сообщить, то всё это можно вывести тут: https://github.com/cbeuw/GoQuiet.git/issues Список всех изменений: https://github.com/cbeuw/GoQuiet.git/releases ▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎▪︎ GoQuiet is another plugin for Shadowsocks that completely and confidentially, in the most powerful way masquerades traffic as regular HTTPS traffic to non-blocked websites. Through domain cover and masks the proxy server as a normal Web server. That way no, you hear, no ISP at all can trace any action at all. No one has yet coped with such obfuscation, so the traffic will be encrypted, the way the same Wireguard, OpenVPN and in many other services providing VPN-client creation were not encrypted. But, they are far from providing complete anonymity, unless you count Lokinet, only shadowsocks is faster and better. And so far, it has not been decrypted by ISPs, unless of course bare shadowsocks is taken into account. But, if you understand a little bit, it will not be difficult to create your own confines in this VPN-client - plugins also improve the anonymization and facilitate the process of some things. Mode of the plugin For the server: ss-server -c <path-to-ss-config> --plugin <path-to-gq-server-binary> --plugin-opts "<path-to-gqserver.json>" For the client: ss-local -c <path-to-ss-config> --plugin <path-to-gq-client-binary> --plugin-opts "<path-to-gqclient.json>" Or as the plugin and plugin_opts value in Shadowsocks JSON { "server": "0.0.0.0", "server_port":443, "local_address": "127.0.0.1", "local_port":1080, "password": "mypassword", "timeout":300, "method":"aes-128-gcm", "fast_open":false, "reuse_port":true, "no_delay":true, "plugin": "path-to-gqserver/client-binary", "plugin_opts": "path-to-gqserver/client.json" } Alternatively, plugin_opts can be configuration options separated by halftones. For example: "plugin_opts":"WebServerAddr=204.79.197.200:443;Key=exampleconftest" Keys cannot contain = " ;. Offline mode Offline mode should be used only if your shadowsocks port does not support plugins For the server: gq-server -r 127.0.0.1:8388 -c <path-to-gqserver.json> ss-server -c <path-to-ss-config> -s 127.0.0.1 -p 8388 For the client: gq-client -s <server_ip> -l 1984 -c <path-to-gqclient.json> ss-local -c <path-to-ss-config> -s 127.0.0.1 -p 1984 -l 1080 Configuration For the server: WebServerAddr is the redirection address and port when incoming traffic is not from shadowsocks. It must match the ServerName IP entry specified in gqclient.json. Key is a key. It must match the key specified in gqclient.json. For the client: ServerName is the domain you want GFW to think you are visiting. Key - key. TicketTimeHint - the time it takes for the session ticket to expire and generate a new one. Leave the default value. Browser is the browser you want GFW to think you are using, it has NOTHING to do with the web browser or any web application you are using on your machine. Currently chrome and firefox are supported. ○ How it works ● As mentioned above, this plugin obfuscates shadowsocks traffic as TLS traffic. This involves adding a TLS Record Layer header to the application data and simulating a TLS handshake. Both of these actions are trivial to implement, but by manipulating the data sent in the handshake sequence, we can achieve some interesting things. The TLS handshake sequence is initiated by the client sending the ClientHello message. We are interested in the random field and the extension:session_ticket. According to rfc5246, the random field represents the current 32-bit unix time combined with 28 random bytes. However, in most implementations, all 32 bytes are randomly generated (source: Wireshark). The session_ticket extension triggers a mechanism called session resumption, which allows the server to skip many steps, most notably the Certificate message sent by the server. If you do not have a valid TLS certificate, you have to compose an invalid cert message, which is a strong indication that the server is a proxy. Thanks to the session_ticket, we don't need to pass that information on. The client part of this plugin composes a ClientHello message using the following procedure: # Global variables # In the configuration file: preshared_key = '[Key passed out of range]' ticket_time_hint = 3600 # In TLS implementations, this is the time in seconds for the session ticket to expire. # Common values: 300, 3600, 7200 и 100800. # Computed at startup: aes_key = sha256(preshared_key) opaque = rand32int() # Random: iv = randbytes(16) goal = sha256(str(floor(gettimestamp()/(12*60*60))) + preshared_key) rest = aes_encrypt(iv,aes_key,goal[0:16]) random = iv + rest # session ticket ticket = randbytes(192,seed=opaque+aes_key+floor(gettimestamp()/ticket_time_hint))) When the server receives a ClientHello message, it checks the random field. If it doesn't pass, all ClientHello is sent to the web server address specified in the configuration file, and the server acts as a relay between the client and the web server. If it passes, the server composes and sends ServerHello, ChangeCipherSpec, Finished together, and the client sends ChangeCipherSpec, Finished together. There is no useful information in these messages. The server then acts as a relay between the client and the shadowsocks server. BTC: bc1q59yvpnh0356qq9vf0j2y7hx36t9ysap30spx9h ETH: 0x8effF29a8F9bD38A367580527AC303972c92b60c Open Source: https://github.com/cbeuw/GoQuiet.git If there are any problems / bugs in the plugin and you need to report them, you can output them all here: https://github.com/cbeuw/GoQuiet.git/issues List of all changes: https://github.com/cbeuw/GoQuiet.git/releases

You may also be interested