Занялся проблемой вчера. Прочитал статьи: 1. http://www.mydigitallife.info/2008/06/13/convert-and-upgrade-windows-xp-home-to-professional-without-reinstalling/comment-page-4/#comments 2. http://www.mydigitallife.info/2008/06/14/install-and-enable-remote-desktop-in-windows-xp-home-edition/ Написал код который правит значения в реестре(AllowMultipleTSSessions,fDenyTSConnections,AllowTSConnections и другие). Написал код который устанавливает root\\rdpdr.(использовал исходники devcon) Написал патч для termsrv.dll.(простой патч в памяти) А вот с конвертом проблемы. Не хочется терять лицензию ОС. Пробовал бряк просто ставить на GetVersionExW и там править каждый раз при вызове(то есть простой патч результата GetVersionExW который убирает значение VER_SUITE_PERSONAL) - все приложения начинают падать и не запускаются, то есть такой вариант работать не будет как я понял. Если при загрузке ОС, взять WinDbg и просто вручную поменять значение в [SharedUserData+0x2d0 (7ffe02d0)] с 310(VER_SUITE_PERSONAL+VER_SUITE_SINGLEUSERTS+VER_SUITE_TERMINAL) на 110(VER_SUITE_SINGLEUSERTS+VER_SUITE_TERMINAL) то все работает, как и в статье. Из [SharedUserData+0x2d0 (7ffe02d0)] функция GetVersionExW берет значение wSuiteMask(то что я и хочу поменять). Но если делать так уже когда ОС загружена, то не ничего не выходит, коннект сбрасывается, видно какой то компонент уже проинициализировался как XP Home. Опыта в реверсе ОС большого не имею. Кто может помочь советом - куда копать? Цель узнать: Какой компонент надо исследовать для последующего патча?
Покопался еще чуть чуть. Как только Ос грузиться, если сразу поменять wSuiteMask в SharedUserData, то подключение проходит. Потом уже после подключения, можно вернуть все назад и подключения будут проходить. Видимо действительно какой то компонент инициализируется и потом уже не смотрит, какая ОС стоит Home или XP. Вот узнать бы только какой компонент, не буду же я всю ОС дизасмить...
Фух, вроде бы разобрался, перед глазами уже плывет, надо идти спать. Кто будет с таким же сталкиваться смотрите в сторону: 001b:760f75b8 e84b5f0200 call termsrv!IsPersonalWorkstation (7611d508) -> VerifyVersionInfo По идее надо раньше старта терминальных сервисов хукнуть функцию VerifyVersionInfo и все будет хорошо. Завтра проверю, как код напишу. Или попробую терминальные сервисы перезапустить... Завтра решу что с этим делать.
Все сделал. Ищем в процессе svchost.exe в модуле termsrv.dll следующие 8 байт: 0x74 , 0x19 , 0x3b , 0xc7 , 0x75 , 0x15 , 0x89 , 0xbb И меняем первый бат на 0xeb. После этого Терминальный сервис будет думать что работает в Windows XP Proffesional и принимать РДП соединения.
sambd Для нескольких юзеров ищем в процессе svchost.exe в модуле termsrv.dll последовательности: 0x3b , 0x46 , 0x0c , 0x7f , 0x16 , 0x8b , 0x45 , 0x08 Меняем 4ый и 5ый байт на 0x90 0x90 Ищем 0x83 , 0x78 , 0x24 , 0x00 , 0x74 , 0x04 , 0x33 , 0xc0. Меняем 5тый байт на 0x75 После этого сидим и радуемся. Смещения последовательности для XP Home\Proffesional. В Висте и Вин7 они другие.
ziral2088, Оно, конечно, работает, но корректность сомнительна. Ну не заточена Home под удалённый доступ, хоть ты тресни пополам. Напоминает мои попытки сделать из XP Pro — 2002 Server.
baldr Я патчу только терминальный сервис. Ничего больше не трогаю. Это не та кака в инете, которая меняет тип ОС и так далее. ptr для РДП патчить апи никакие не надо. Нужно просто пропатчить сравнение версии системы в терминальных сервисах.