Dht не работает в торрент. Ошибка uTorrent — DHT ожидание входа

Часто многие пользователи торрент-клиента uTorrent сталкиваются с ошибкой «dht ожидание входа» в процессе загрузки или раздачи файлов. При возникновении подобной ошибки обычно скорость всех активных загрузок падает до нуля и закачки останавливаются. Рассмотрим некоторые причины и способы устранения данной ошибки.

Причины возникновения ошибки uTorrent — dht ожидание входа могут быть разные, но все они так или иначе связаны с вашим сетевым подключением и его настройками, попросту с вашим подключением к интернету.

Вот некоторые основные причины возникновения ошибки «dht ожидание входа»:

Не настроен форвардинг портов для UDP пакетов

Блокированы входные развертывающие узлы router.bittorrent.com и router.utorrent.com. uTorrent по данным адресам получает IP адреса остальных узлов DHT.

Неправильная конфигурация uTorrent

Так же могут быть и другие причины, но выше приведенные причины одни из основных при возникновении данной ошибки.

Теперь рассмотрим варианты решения данной проблемы.

Форвардинг портов необходим для того, чтобы к вашему компьютеру могли подключаться из внешней сети, т.е. из интернета. Обычно на многих роутерах это все работает по умолчанию, но для uTorrent важно, чтобы так же перенаправлялись и пакеты UDP. В настройках вашего роутера нужно отредактировать перенаправление нужных пакетов на ваш компьютер.

Если у вас заблокированы узлы router.bittorrent.com и router.utorrent.com то uTorrent не сможет подключиться к ним и получать адреса узлов DHT. Для того, чтобы проверить, заблокированы ли данные узлы, необходимо в командной строке windows сделать команду ping router.bittorrent.com и ping router.utorrent.com если пакеты возвращаются и есть связь с данными узлами, то этот пункт можно отбросить, если же в командной строке будет написано, что данный узел или сервер не доступен, значит данные узлы блокируются или файерволом или антивирусной программой. Нужно отключить в защитных программах фильтрацию пакетов по данным адресам.

Иногда причина бывает очень банальна, и все решается постой переустановкой торрент-клиента uTorrent, но перед тем как устанавливать поверх старой версии новую, необходимо полностью удалить старый клиент, включая все файлы настройки и т.п. Только после этого устанавливать новую или обновленную версию уТоррента. Если вы не хотите удалять ваш старый клиент, то можно как минимум попробовать удалить файлы настроек dht.dat и dht.dat.old из папки %APPDATA%\uTorrent. После запуска программы эти файлы пересоздаются заново с новыми настройками.

Здесь мы рассмотрели самые популярные причины возникновения ошибки программы uTorrent — dht ожидание входа. Но это не исчерпывающий список причин и способов их решения, на различных компьютерах и сетевых конфигурациях причины могут быть разные, необходимо пробовать различные решения для удаления данной ошибки.

На многих так называемых «приватных» трекерах торренты раздаются с установленным флагом, не позволяющим использовать сеть DHT . Цель этого - не допускать раздачу материала клиентам, не зарегистрированным на данном трекере. Однако для пользователя это означает уменьшение количества сидеров, иногда - значительное.

Ниже мы рассмотрим, как отключить такое ограничение в популярных торрент-клиентах. Будет рассмотрен общий подход, а также практическое применение к актуальной версии uTorrent и qBitTorrent .

1. Вступление.

В сети в прошлом выкладывалось достаточно много информации касательно так называемых «патчей DHT», равно как выкладывались и сами патчи. Однако при анализе этих данных зачастую они оказываются противоречивыми и даже в ряде случаев полностью нерабочими. Связано это с постоянным обновлением клиентов, изменением структуры программ, а в ряде случаев - неправильным подходом авторов патчей.

Мы попытаемся не просто создать готовое решение, а проанализировать основные шаги так, чтобы читатель мог даже в случае изменение в будущем самостоятельно снимать ограничения DHT в новых версиях клиентов.

2. Подготовка.

Нам понадобятся:
  1. Актуальный дистрибутив торрент-клиента.
  2. Архиватор, способный распаковывать инсталляционные файлы, например в случае uTorrent и qBitTorrent - 7-zip .
  3. Распаковщик исполняемых файлов клиента, в случае uTorrent - UPX .
  4. IDA или любой другой дизассемблер.
Вначале, извлечём и распакуем исполняемые файлы. Для этого откроем скачанные инсталляторы и откроем их в 7-zip. Нам потребуются:
  • в случае uTorrent - файл Carrier.exe;
  • В случае qBitTorrent - файлы qbittorrent.exe и qbittorrent.pdb (либо их 64-разрядные аналоги, если будет изменяться 64-битный клиент).
Для uTorrent также необходимо распаковать UPX-упаковку, это можно сделать командой
upx.exe -d Carrier.exe

2. Поиск и изменение кода.

В общем, реализация блокировки DHT во всех клиентах на уровне Ассемблера выглядит одинаково, это вызов функции проверки флага, и если эта функция возвращает нулевое значение - переход на область кода, которая позволяет использовать DHT:

Call TestPrivate test eax, eax jz NotPrivate
по этой причине сам патч будет выражаться в простом изменении одного байта кода 74 => EB, превращающего условный переход jz в безусловный и таким образом игнорирующий проверку на «приватность».

Остаётся найти данную функцию.

На самом деле это совершенно не сложно, учитывая специфику данного кода и наличие ключевого слова «private». Откроем распакованный файл клиента uTorrent в IDA и выполним поиск по данному ключевому слову:

Видно, что с указанным ключом в uTorrent присутствует всего три участка кода. Вот как они выглядят:


Совершенно очевидно, что необходимый нам код - это третий в списке, поскольку только он представляет собой вызов функции и проверку возврата на ноль с последующим условным переходом.

Наша задача заключается в простом замене функции, как мы уже упоминали ранее:

По сути, это замена характерной последовательности
68 00 FF 69 00 E8 19 F1 FA FF 85 C0 74 07
на
68 00 FF 69 00 E8 19 F1 FA FF 85 C0 EB 07

В случае qBitTorrent задача упрощается ещё больше, поскольку разработчик вложил pdb-файл в установщик, так что названия функций будут более очевидными, и поиск по ключевому слову упрощается:

Так выглядит сам код проверки:

Как видите, по сути он неотличим от uTorrent. Патч будет аналогичным:


E8 20 CB FA FF 84 C0 74 59
на
E8 20 CB FA FF 84 C0 EB 59

QBitTorrent также предлагается в виде 64-разрядного клиента. Действия в отношении него буду совершенно аналогичными, за исключением того, что нам потребуется 64-разрядная версия IDA. Результат поиска по ключевому слову ожидаемо аналогичен:

Вид соответствующей функции несколько отличен, однако суть осталась та же:

Ну и соответствующий патч, здесь это будет три байта:

Это замена характерной последовательности
E8 8F 0E F8 FF 4C 8D 3D 54 E5 46 01 83 CB FF 84 C0 0F 84 DB 00 00 00
на
E8 8F 0E F8 FF 4C 8D 3D 54 E5 46 01 83 CB FF 84 C0 E9 DC 00 00 00 00

3. Итоги

Нами было последовательно изучена процедура поиска и отключения функции ограничения использования DHT для приватных торрентов в популярных клиентах uTorrent и qBitTorrent.
Думаю, что предложенный механизм будет аналогичен и для любых других клиентов - во всяком случае я проверил его и на ComboPlayer .

Для автоматизации процесса мной были созданы два патчера для актуальных версий uTorrent и qBitTorrent. Для uTorrent патчер также распаковывает исходный инсталлятор. Файлы можно скачать здесь:

Патчер qBitTorrent версии x32
Патчер qBitTorrent версии x64
Патчер распакованного файла uTorrent
Silent всё-в-одном патчер uTorrent : распаковывает, патчит и обратно упаковывает инсталлятор, а также распаковывает, патчит и упаковывает обратно уже установленный uTorrent (при условии, что установочная папка - по умолчанию, то есть "%userprofile%\AppData\Roaming\uTorrent\"

Статьи по теме: