Избранное Все заметки Главная
1 заметка с тегом

net

Убираем лимит 30 CCU у NetDrone Engine Free

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

Предыстория:
Гулял на днях по AssetStore (далее AS), копался в категории Scripting/Network и набрел на один с виду хороший ассет — NetDrone Engine. Разумеется, я сразу забрал его к себе домой и стал декомпрессить. Поигрался со сценами и в итоге обнаружил для себя следующие фичи:

1) Надежный UDP, т.е надстройка над обычным UDP : проверка доставки сообщения,гарантия правильной последовательности и т.д

2) Каналы , комнаты , обработки всех возможных ситуаций (например отключение игрока от сервера) уже предусмотрены.

3) В комплекте сервер , написанный на 2 языках (C++,C#)

Затем начался разглядывать серверный код, и наткнулся на тот самый лимит в 30 одновременных коннектов.

Переменная iMaxUser отвечает как раз установление максимального кол-ва юзеров.

Метод Initialize вызывается из библиотеки libnetdroneunity_nocrypt_ccu30.dll

Если заглянем внутрь dll (используя дизассемблер dnSpy) ,то поймем,что со своей стороны мы можем лишь уменьшить это значение, но никак не увеличить

На этом можно было бы закончить статью, казалось бы,нужно лишь отредактировать код в dnSpy и заменить оригинальную dll на нашу (модифицированную), но нет, при компиляции нас ждёт нечто подобное:

И чтобы не парить себе мозг,исправляя эти ошибки мы пойдем иным путём,

Погнали
Задействуем ildasm (Дизассемблер) и ilasm (Ассемблер). Две эти утилиты уже присутствуют на вашем ПК (если вы устанавливали Visual Studio)

Воспользуйтесь поиском на вашем ПК,чтобы отыскать ildasm.exe и ilasm.exe

Теперь запускаем ildasm.exe и кидаем в открывшееся окошко нашу dll. В опциях выбираем Дамп, и ничего не меняя сохраняем в произвольную папку. На выходе получим 2 файла : имя.il , имя.res

Теперь открываем имя.il с помощью блокнота и ищем интересующую нас переменную

Заменяем на своё значение и сохраняем.

Теперь, если вы нашли вторую утилиту ilasm.exe ,то скопируйте путь до папки, в которой она лежит и выполните команду в cmd

Команда : cd <путь до папки>

Ну и последний штрих — запускаем ilasm с параметрами, вот так — ilasm /dll C:\StudyServer\newIL\code.il /output=C:\StudyServer\newIL\code.dll

где C:\StudyServer\newIL\code.il — путь к нашему il файлу иC:\StudyServer\newIL\code.dll — путь к dll файлу,который создастся после отработки ilasm .

Если всё прошло ОК , то вы должны увидеть такое сообщение:

Такое ощущение,что разраб специально не стал усложнять нам жизнь (за это ему и респект),а ведь можно было,как минимум, обфусцировать всю dll , и хранить хэши оригинальной dll для выявления подмены.

На этом всё,всем спасибо за внимание,надеюсь статья окажется некоторым полезной!

UPD: Забыл написать,что в ConfigEx.cs на 98 строке также необходимо поменять значение аргумента у метода SetMaxConnection(30) на своё

UPD: если вы криворукий балван,то вот ссылка на модифицированную dll — https://cloud.mail.ru/public/D4L2/UhtYbhi2j