Я думаю, все мы понимаем текущую ситуацию с интернетом на территории Российской Федерации. Сейчас это выходит на уровень абсурда, а VPN-сервисы выходят на уровень первой необходимости, и в связи с этим я хотел бы поговорить о том, насколько некоторые из них ну абсолютно ужасны, и каким сервисам верить не стоит.
Сразу хочу сказать одно. Не поймите текст ниже неправильно: цель статьи — не сказать, что определенные сервисы предоставляют плохое обслуживание, а донести, что нельзя верить в маркетинг. Этот материал был мной написан только потому, что на моих глазах люди верили в этот идиотизм. Особо технических действий здесь не будет, просто базовый анализ (не является реверс-инжинирингом, т. к. реверс законодательно подразумевает декомпиляцию и/или обход встроенных механизмов защиты), который должен быть понятен даже обывателю. Статья может быть немного кривоватой, если я где-то не доглядел, — изначально писалась не для хабра, а для моего сайта. Но вроде знакомым зашло, так что почему бы нет?
Вообще в основном это касается тех сервисов которые вышли за уровень подписки (любой клиент + панель которая отдает конфигурации), то есть у них имеется свое приложение. Обычно после его разработки они начинают говорить что-то в духе “- Эксклюзивные обходы: обходы, которые появляются только в нашем приложении, и работают благодаря кастомному ядру”. (цитата телеграм-канала Atlanta, неплохой, кстати, сервис был, но селфхост все равно лучше) Это заявление является абсолютным бредом.
Поясню на пальцах и примере Kakadu.
Цитаты рекламы некоторого сервиса с ИИшным попугаем на логотипе:
“Наш сервис разрабатывался 5 лет и специально для чебурнета”
“Мы используем запатентованную технологию ‘invisible protocol’”
Цитаты из одного видео, сказать такой бред еще надо умудриться.
Хорошо, так давайте проверим их патент.
Роспатент: Пусто.
Google patents: Результаты есть но они не связаны с искомыми.
Ни в нашей, ни в глобальной патентной службе, ни в выдаче гугла, ни у них на сайте, вообще НИГДЕ нет ничего об их “invisible protocol”. Я, конечно, понимаю, что это маркетинг, но маркетинг ужасно отвратительный.
Ладно, ладно, не угнетаем их раньше времени, давайте проверим, что у них под капотом, и почитаем лицензионное соглашение, может, там будут зацепки? Я полез в пользовательское соглашение.
11. Шифрование и безопасность Мы используем ChaCha20-Poly1305, Curve25519 и Noise Protocol Framework — те же технологии шифрования, которым доверяют Google, Signal и Cloudflare. Актуальная версия всегда будет доступна на нашем официальном сайте или внутри приложения.
Это буквально описание Wireguard…
Я подозреваю Wireguard в основном из-за Noise protocol, он используется в хендшейке Noise_ikpsk2. Само собой, Noise Protocol это “фреймворк”, он не обязательно принадлежит Wireguard, но в данном контексте это самый вероятный случай т.к. никаких патентов на их собственный прото не было обнаружено, а значит что они используют обычное VPN-ядро. В singbox/xray Noise обычно использует только подозреваемый wireguard. И что они используют VLESS, что wg шифр вероятно заявлен верный, AEAD_CHACHA20_POLY1305 из TLSv1.3.
Все проведенные ниже действия актуальны на 19.04.2026, все что я провел ниже может быть проверено вами.
Посмотрим самым быстрым способом: Проверим, есть ли упоминания “invisible protocol” в коде, раз уж его документаций и патентов нигде нет. (strings более наглядный нежели распаковка apk и прикладывание сюда скринов)
Вывод strings на их android пакет для проверки наличия "invisible-protocol"
namilsk@mpc ~> strings Kakadu.apk | grep -i "invisible" | uniq index: jstmpllitinterptarinsecurepathreflectlite.SetCurrency_SymbolModifier_LetterModifier_SymbolNonspacing_MarkSpace_Separator Hanifi_RohingyaPsalter_PahlaviELFOSABI_NETBSDELFOSABI_86OPENEM_ALTERA_NIOS2EM_ARC_COMPACT2EM_CSR_KALIMBA SHT_GNU_LIBLISTSHT_GNU_VERNEED COMPRESS_LOPROCCOMPRESS_HIPROCPT_GNU_EH_FRAMEPT_GNU_PROPERTYDT_INIT_ARRAYSZDT_FINI_ARRAYSZDT_SYMTAB_SHNDXDT_GNU_CONFLICT.debug_line_str .debug_rngliststoo many imagesno symbol tableinvalid pointerAuthoritative: AuthenticData: NSResource bodycreating name: initialize time AddRange(%v-%v)invalid IPRangeframe too largeX-Accel-ExpiresX-Forwarded-Forstart outbound/close outbound/close endpoint/read ECH config decode short_idreload key pairunpack responsefound user id: parse rule-set[close rule-set[fallback-delay=source_ip_cidr=domain_suffix=[ domain_keyword=fetch rule-set network changedlistener closedreceive message: TLS handshakepeek first byteinvalid requestdiscard padding parse host key parse range endResolveAddress ResolveService SetLinkDomains downlinkPacketsmissing servers already existsset exit node: "MultiLabelMap"Derp-Fast-Start (no semicolon)fswatch: watch passCredEnabledquickAckEnabledmonotonicOffsetHasIPPacketInfoDestinationAddr pkg/tcpip.RoutePacketsReceivedNeighborSolicitMembershipQueryIGMPPacketStatsLinkLocalSourceHostUnreachableRepliesReceivedpkg/tcpip.Stats packetsReceivedmembershipQueryicmpRateLimiterrtrSolicitTimerinvalidationJobaddressEndpointneighborSolicit%T.Prefix(): %s%s unrecognized networkEndpointmaxHeaderLengthNetworkProtocolOutputInterfaceMinRandomFactorMaxRandomFactorRetransmitTimerqueuedProtocolsicmpPacketEntry timeWaitTimeoutlastRcvdAckTimePrevCopiedBytesunhandled statepkg/buffer.Viewinvalid timeout is unavailableinvalid integerinvalid boolean 0601021504Z0700non-minimal tagunknown Go typeBelowExactAbovetimestamp replyfmipv6 messages#multipartfilesAccept-Language/etc/mime.types accept-encodingaccept-languagex-forwarded-forstring too longDiacriticalDot;DoubleRightTee;DownLeftVector;GreaterGreater;HorizontalLine; InvisibleComma;InvisibleTimes;LeftDownVector;LeftRightArrow;Leftrightarrow;LessSlantEqual;LongRightArrow;Longrightarrow;LowerLeftArrow; NestedLessLess;NotGreaterLess;NotLessGreater;NotSubsetEqual;NotVerticalBar;OpenCurlyQuote;ReverseElement;RightTeeVector;RightVectorBar; ShortDownArrow;ShortLeftArrow;SquareSuperset;TildeFullEqual;UpperLeftArrow;ZeroWidthSpace;curvearrowleft;doublebarwedge;downdownarrows; hookrightarrow;leftleftarrows;leftrightarrow;leftthreetimes;longrightarrow;looparrowright;nshortparallel;ntriangleright;rightarrowtail; rightharpoonup;trianglelefteq;upharpoonright;not enough data# Lookups = %d index: jstmpllitinterptarinsecurepathreflectlite.**SetCurrency_SymbolModif** ...
Вообще достаточно комично что единственное что нашлось в их пакете связанное с тем самым “запатентованным протоколом разрабатывавшимся 5 лет” – это “Невидимая запятая” (InvisibleComma, вывод выше) из HTML спецсимволов. Никаким “Invisible Protocol” здесь как видите не пахнет.
Хорошо, тогда вынюхаем подозреваемые протоколы и самые популярные ядра, чтобы понять что они на самом деле используют, смотреть будем наличие Wireguard-go, Xray и SingBox.
Аналогичная операция с Wireguard
namilsk@mpc ~> strings Kakadu.apk | grep -i "wireguard" | uniq IsWireGuardOnly isWireguardOnly WireGuardGoString *wireguard.Device *netlink.Wireguard *wireguard.Outbound *wireguard.Endpoint *wireguard.wireConn *option.WireGuardPeer *wireguard.ClientBind *wireguard.peerConfig sendWireGuardOnlyPing *wireguard.stackDevice *wireguard.PeerOptions *[]option.WireGuardPeer *wireguard.wireEndpoint *wireguard.systemDevice *[]wireguard.peerConfig *[]wireguard.PeerOptions forceFullWireguardConfig *wireguard.DeviceOptions *[1]wireguard.PeerOptions *wireguard.deviceEndpoint *wireguard.remoteEndpoint *wireguard.EndpointOptions addrForWireGuardSendLocked *option.LegacyWireGuardPeer maybeReconfigWireguardLocked *wireguard.systemStackDevice sendWireGuardOnlyPingsLocked &*option.LegacyWireGuardOutboundOptions 'github.com/sagernet/wireguard-go/device 'github.com/sagernet/wireguard-go/replay 'github.com/sagernet/wireguard-go/tai64n )github.com/sagernet/wireguard-go/rwcancel ..... github.com/sagernet/tailscale/tailcfg.(*NodeView).IsWireGuardOnly github.com/sagernet/wireguard-go/conn.(*StdNetBind).ParseEndpoint github.com/sagernet/wireguard-go/conn.(*StdNetEndpoint).ClearSrc github.com/sagernet/wireguard-go/conn.(*StdNetEndpoint).DstIP github.com/sagernet/wireguard-go/conn.(*StdNetEndpoint).DstToBytes github.com/sagernet/wireguard-go/conn.(*StdNetEndpoint).DstToString github.com/sagernet/wireguard-go/conn.listenNet github.com/sagernet/wireguard-go/conn.(*StdNetBind).Open github.com/sagernet/wireguard-go/conn.(*StdNetBind).makeReceiveIPv4 github.com/sagernet/wireguard-go/conn.(*StdNetBind).makeReceiveIPv6 github.com/sagernet/wireguard-go/conn.(*StdNetBind).Open.(*StdNetBind).makeReceiveIPv6.func2 github.com/sagernet/wireguard-go/conn.(*StdNetBind).Open.(*StdNetBind).makeReceiveIPv4.func1 github.com/sagernet/wireguard-go/conn.(*StdNetBind).Open.deferwrap1 github.com/sagernet/wireguard-go/conn.(*StdNetBind).putMessages github.com/sagernet/wireguard-go/conn.(*StdNetBind).receiveIP github.com/sagernet/wireguard-go/conn.(*StdNetBind).getMessages github.com/sagernet/wireguard-go/conn.(*StdNetBind).receiveIP.deferwrap1 github.com/sagernet/wireguard-go/conn.(*StdNetBind).BatchSize github.com/sagernet/wireguard-go/conn.(*StdNetBind).Close github.com/sagernet/wireguard-go/conn.(*StdNetBind).Close.deferwrap1 github.com/sagernet/wireguard-go/conn.ErrUDPGSODisabled.Error
Wireguard-go имеется, записано. Он также разработан SagerNet как и sing-box, по этому, вероятно, он засунут здесь в купе с самим sing-box. Проверим эту теорию.
То-же самое с sing-box
namilsk@mpc ~> strings Kakadu.apk | grep -iE "sing-box|singbox|libbox" | uniq .... github.com/sagernet/sing-box/experimental/libbox/internal/procfs/procfs.go github.com/sagernet/sing-box/experimental/libbox/build_info.go github.com/sagernet/sing-box/experimental/libbox/command_clash_mode.go github.com/sagernet/sing-box/experimental/libbox/command_client.go github.com/sagernet/sing-box/experimental/libbox/iterator.go github.com/sagernet/sing-box/experimental/libbox/command_close_connection.go github.com/sagernet/sing-box/experimental/libbox/command_connections.go github.com/sagernet/sing-box/experimental/libbox/command_conntrack.go github.com/sagernet/sing-box/experimental/libbox/command_deprecated_report.go github.com/sagernet/sing-box/experimental/libbox/command_group.go github.com/sagernet/sing-box/experimental/libbox/command_log.go github.com/sagernet/sing-box/experimental/libbox/command_power.go github.com/sagernet/sing-box/experimental/libbox/command_select.go github.com/sagernet/sing-box/experimental/libbox/command_system_proxy.go github.com/sagernet/sing-box/experimental/libbox/command_urltest.go github.com/sagernet/sing-box/experimental/libbox/config.go github.com/sagernet/sing-box/experimental/libbox/dns.go github.com/sagernet/sing-box/experimental/libbox/panic.go github.com/sagernet/sing-box/experimental/libbox/deprecated.go github.com/sagernet/sing-box/experimental/libbox/http.go github.com/sagernet/sing-box/experimental/libbox/log.go github.com/sagernet/sing-box/experimental/libbox/memory.go github.com/sagernet/sing-box/experimental/libbox/monitor.go github.com/sagernet/sing-box/experimental/libbox/pidfd_android.go github.com/sagernet/sing-box/experimental/libbox/pprof.go github.com/sagernet/sing-box/experimental/libbox/profile_import.go github.com/sagernet/sing-box/experimental/libbox/remote_profile.go github.com/sagernet/sing-box/experimental/libbox/service.go github.com/sagernet/sing-box/experimental/libbox/service_other.go github.com/sagernet/sing-box/experimental/libbox/link_flags_unix.go github.com/sagernet/sing-box/experimental/libbox/service_error.go github.com/sagernet/sing-box/experimental/libbox/service_pause.go github.com/sagernet/sing-box/experimental/libbox/setup.go github.com/sagernet/sing-box/experimental/libbox/tun.go github.com/sagernet/sing-box/experimental/libbox/tun_name_linux.go github.com/sagernet/sing-box/build/amd64/libbox/go_libboxmain.go github.com/sagernet/sing-box/experimental/libbox/platform.go github.com/sagernet/sing-box/build/amd64/libbox/go_main.go github.com/sagernet/sing-box/build/amd64/libbox/seq.go github.com/sagernet/sing-box/build/amd64/libbox/seq_android.go path github.com/sagernet/sing-box/build/amd64/libbox lib/arm64-v8a/libbox.soPK lib/armeabi-v7a/libbox.soPK lib/x86/libbox.soPK lib/x86_64/libbox.soPK .....
Удивительно, но они даже не умудрились почистить ссылки на go пакеты зависимости через -ldflags="-s -w". Кстати распаковав APK и зайдя в /lib/$(ARCH)/ можно увидеть libbox.so, который в очередной раз показывает нам что они просто забрали себе свободный софт (GPLv3.0) в бэкенд и называют его “своей, запатентованной технологией” Понятно, осталось только понять какой же из всех возможных протоколов этот сервис реально использует.
Посмотрим на активность через PCAPDroid (с Google Play версией Kakadu). Раз в 30 секнунд приложение отправляет DNS запросы на домены google-statistics.com, say-today.ru и firebaselogging.googleapis.com. firebaselogging - понятно, это FireBase, сервис через который работают все уведомления в Android. Но вот первое и второе это какие то левые, судя по дизайну вайбкод сайты, что смущает.

В прочем метриках нет ничего удивительного. Никаких данных все равно не передается, летят только DNS запросы. Да и когда приложение выключено никаких запросов нет. К этому вернемся попозже.
Анализ сетевого поведения
Я послушал их трафик через Wireshark, отталкиваясь от резульатов я могу сказать что вероятнее всего они используют VLESS + Reality связку, стандартную на данный момент, по тому что характерных хендшейков иных протоколов вроде Hys2 (QUIC), WG (Noise_ik), ShadowSocks я не наблюдаю, также при включении он всегда стучит на русский IP с ISP SELECTEL и SNI say-today.ru.

Обратите внимание на пакет 9156: 9156 192.168.240.112 155.212.215.82 TLSv1.3 609 ClientHello (SNI=say-today.ru) тот самый SNI на счет которого отправлялись DNS запросы. А сам по себе конфиг использует http/1.1 который выглядит абсолютно также как обычный GET запрос на сайт, настройки неплохие.
Но на деле это может быть только SNI, проверим DNS запись, совпадает ли SNI с доменом?
namilsk@mpc ~> nslookup say-today.ru Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: say-today.ru Address: 155.212.215.82
и второй
namilsk@mpc ~> nslookup google-statistics.com Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: google-statistics.com Address: 155.212.215.82
Все правильно, но еще раз напоминаю что я НЕ подключался к say-today.ru напрямую, от чего можно сделать вывод что это балансировщик или часть прокси-цепи за сайтом-заглушкой (Xray fallback на веб сервер локалхоста) по тому что все сервера ведут туда. (А судя по их tik-tok который я начал смотреть чуть чаще так и есть, это часть цепочки прокси. Но в целом я не могу точно сказать реально ли один у них один сервер или нет, то требует уже реверс-инжиниринга)
Дальше я заинтересовался теми самыми “вайбкод сайтами” который мы видели выше, google-statistics и say-today. Они имеют один IP, одни номера телефонов которые отличаются только последней цифрой (+7(495)128449{0,2}). Я отправил заявку с TempMail и левым номером на этот сайт - ответа ноль.
Ну, я думаю, тут и в воду глядеть не надо, чтобы понять, что это просто две заглушки без реальной смысловой нагрузки:
Нет ценообразования у, казалось бы, бизнес-сайтов
Нет ответа на заявки (ни автоматического, ни реального)
Близкий к вайб-коду дизайн
Одинаковые номера телефонов (вероятно, фиктивные, отличие только в последней цифре)
Один IP
Одинаковые формы подачи заявок (отсутствие ЛК/регистрации уже должно настораживать, если бы это был реальный сервис)
Обфусцированный код
И что собственно не так? Почему я говорю что настройки хорошие но все равно продолжаю гнать на этот VPN?
А потому что устойчивость к блокировкам. Ее нет. Он централизован: каждый раз при подключении все ваши адреса будут стучать на один балансировщик или одну часть цепи, IP которой пока что чудом остался нетронутым РКН; а когда до него доберутся, документы не гарантируют их ответственности за их лежащие сервера. По крайней мере, сколько я его не тыкал, менял сервера, перезапускал и исполнял прочие действия, которые могут его стриггерить, ничего не поменялось. (Кстати, бесплатный премиум, который они дают для тестов на два дня, так у меня и не завелся.)
И последний штрих:
Мы прилагаем усилия для стабильной и безопасной работы Сервиса, но не можем гарантировать полное отсутствие перебоев, сбоев или снижения скорости, особенно из-за внешних факторов: - проблем у интернет-провайдера; - государственных блокировок; - перегрузки сети; - ошибок на устройстве пользователя. Мы не несем ответственности за любые убытки или неудобства, связанные с использованием Сервиса, включая, но не ограничиваясь: - потерей данных; - нарушением законодательства; - проблемами с подключением; - неисправностями оборудования.
Здесь вы видите фактически полное снятие ответственности. Вы — заплатили, Kakadu — не обязуется предоставлять вам гарантии на рабочее подключение. Похвалить можно только за политику возврата, она у них приятная. Хотя, впрочем, ничего удивительного — это стандартная юридическая защита сервиса.
Итого:
Инфраструктурное бутылочное горло в лице одного входного сервера. (В одном из их рекламных видео которое крутилось вокруг доп. тарификации зарубежного трафика было заявлено что “Весь их трафик идет сквозь русские сервера дальше в Европу”, отсюда мы можем видеть что мои расследования были частично подтверждены, но точно утверждать нельзя тк декомпиляцией я не занимался)
Отсутствие гарантий на работоспособность (юридическая база большинства таких сервисов, терпимо)
Украденный свободный софт (нарушена лицензия GPLv3.0, которая требует открыть код программы если она была модифицирована, а также указывать авторство если софт под этой лицензией используется в проприетарном продукте. Ни одно из требований не соблюдено.)
Берите только проверенные сервисы, только те где вы можете посмотреть конфигурации, и только тот к которому есть доверие. И помогайте не разбирающимся знакомым с выбором.
А лучше - потратьте пару вечеров и поднимите все свое, за такие-же деньги вы сможете получить не ограниченное кол-во устройств, минимальные задержки и высокую скорость.
