Decker82
Full Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Итак, предлагаю вашему вниманию оригинальное решение как снять лимит на одно входящее VPN подключение в Windows XP, собственно ниже инструкция: Как сделать доступными в WinXP несколько входящих VPN подключений // © Decker Как видно, вполне легко и непринужденно к WinXP SP3 подключено 5 VPN клиентов. Ну а теперь инструкция: 1. Загружаемся в безопасном режиме. 2. Распаковываем содержимое архива http://depositfiles.com/files/y6csp4s5j в корень диска C:\ 3. Запускаем пакетный файл прилагающийся в архиве (он осуществляет 4 действия, переименовывает %windir%\System32\rasppp.dll в %windir%\System32\rasppp.bak, переименовывает %windir%\System32\dllcache\rasppp.dll в %windir%\System32\dllcache\rasppp.bak, и копирует патченную rasppp.dll в %windir%\System32\ и %windir%\System32\dllcache\ соответственно) 4. Опять же в безопасном режиме запускаем редактор реестра. Находим ветку HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002bE10318}\ , в ней будут ключи 0001, 0002, 0003 и т.п. Находим тот у которого "ComponentId"="ms_pptpminiport" и "MatchingDeviceId"="ms_pptpminiport", вообщем-то я думаю что пропустить тот раздел в котором в этих параметрах светится слово ms_pptpminiport просто нереально. Устанавливаем "WanEndpoints"=dword:00000080 (в десятичной системе 128), а "MaxWanEndpoints"=dword:000003e8 (в десятичной системе 1000). 5. Перезагружаем компьютер. DLL'ку безопасно можно подменять если у вас установлена русская WinXP SP3, если версия отличается, то результат непредсказуем, т.к. с другими версиями ОС она не тестировалась. Собственно если "родная" версия файла rasppp.dll у вас имеет размер 210944 байта и версию 5.1.2600.5512, то она точно такая же как и у меня. В общем и целом, даже если будут какие-то проблемы скрипт rasppp.cmd сохраняет оригинальную версию файла и для возврата к ней, вам необходимо будет лишь переименовать файлы rasppp.bak в rasppp.dll обратно. Для тех кому интересно, как это работает ... Что же все-таки изменено в этой dll'ке? Если мы посмотрим следующий участок кода в дизассемблере: То мы увидим следующую вещь, что собственно ошибка 937 "Входящие подключения не могут принимать ваши запросы на подключение, поскольку используется другое подключение такого же типа" генерируется в .text:72236174, а туда ведут всего два условных перехода, при этом флаги которые передаются вместе с кодом ошибки хранятся в dword_722525EC . Проанализировав эти переходы, а также все возможные обращения к данным, хранящимся в dword_722525EC: Мы наткнемся на следующий кусок кода: Я понимаю что для вас все это темный лес, но через несколько секунд вы поймете смысл. Как видно из картинки вызывается функция RtlGetNtProductType и в зависимости от того возвращает она единицу или нет, младший бит dword_722525EC либо обращается в 1 либо нет. Так вот, на самом деле функция RtlGetNtProductType возвращает следующие значения: Код: VER_NT_WORKSTATION 0x1 Professional(Workstation) VER_NT_DOMAIN_CONTROLLER 0x2 Domain controller VER_NT_SERVER 0x3 Server | Т.е. 1 в случае если у нас рабочая станция и 2 или 3, если это контроллер домена или сервер. Если у нас рабочая станция, то младший бит переменной dword_722525EC обращается в единицу. Именно он и проверяется на стадии установки соединения, и если там действительно 1, то получаем лимит подключений и 937-ю ошибку. Так вот, если в куске кода: Код: .text:72231303 lea eax, [ebp+var_4] .text:72231306 push eax .text:72231307 call ds:__imp__RtlGetNtProductType@4; RtlGetNtProductType(x) .text:7223130D cmp [ebp+var_4], 1 .text:72231311 jnz short loc_7223131A .text:72231313 or dword_722525EC, 1 .text:7223131A .text:7223131A loc_7223131A: ; CODE XREF: InitializePPP(x)+193j .text:7223131A cmp [ebp+arg_0], esi | Заменить условный переход jnz short loc_7223131A на безусловный - jmp, то младший бит dword_722525EC никогда не станет равным 1, а следовательно 937-ю ошибку мы не получим даже в том случае если у нас рабочая станция. Собственно в той версии rasppp.dll, которая находится в этом архиве, по-сравнению с оригинальной dll'кой, изменен только один байт, а именно: Код: Сравнение файлов RASPPP.DLL и RASPPP_Patched.DLL 00010711: 75 EB |
|