Как заставить terminal services в XP Home принимать RDP соединения?

Тема в разделе "WASM.WIN32", создана пользователем ziral2088, 14 окт 2010.

  1. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    Занялся проблемой вчера.
    Прочитал статьи:
    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.

    Опыта в реверсе ОС большого не имею. Кто может помочь советом - куда копать? Цель узнать:
    Какой компонент надо исследовать для последующего патча?
     
  2. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    Покопался еще чуть чуть. Как только Ос грузиться, если сразу поменять wSuiteMask в SharedUserData, то подключение проходит.
    Потом уже после подключения, можно вернуть все назад и подключения будут проходить.
    Видимо действительно какой то компонент инициализируется и потом уже не смотрит, какая ОС стоит Home или XP.
    Вот узнать бы только какой компонент, не буду же я всю ОС дизасмить...
     
  3. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    Фух, вроде бы разобрался, перед глазами уже плывет, надо идти спать. Кто будет с таким же сталкиваться смотрите в сторону:
    001b:760f75b8 e84b5f0200 call termsrv!IsPersonalWorkstation (7611d508)
    -> VerifyVersionInfo

    По идее надо раньше старта терминальных сервисов хукнуть функцию VerifyVersionInfo и все будет хорошо. Завтра проверю, как код напишу.
    Или попробую терминальные сервисы перезапустить... Завтра решу что с этим делать.
     
  4. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    Все сделал. Ищем в процессе svchost.exe в модуле termsrv.dll следующие 8 байт:
    0x74 , 0x19 , 0x3b , 0xc7 , 0x75 , 0x15 , 0x89 , 0xbb

    И меняем первый бат на 0xeb.

    После этого Терминальный сервис будет думать что работает в Windows XP Proffesional и принимать РДП соединения.
     
  5. khv_test

    khv_test New Member

    Публикаций:
    0
    Регистрация:
    30 июн 2004
    Сообщения:
    135
    Сделай еще inmem лоадер с функционалом ON OFF и будет супер ;)
     
  6. sambd

    sambd New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2007
    Сообщения:
    60
    Респект за поиски, еще бы добавить поддержку одновременно нескольких юзеров, было бы вообще супер =)
     
  7. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    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 они другие.
     
  8. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    спасибо за труд, но вот уже в сети давно есть :)
    _http://fouroom.ru/viewtopic.php?id=347
     
  9. ptr

    ptr New Member

    Публикаций:
    0
    Регистрация:
    14 мар 2009
    Сообщения:
    130
    там можно увидеть и остальные API которые нужны пропатчить :)
     
  10. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    ziral2088,

    Оно, конечно, работает, но корректность сомнительна. Ну не заточена Home под удалённый доступ, хоть ты тресни пополам. Напоминает мои попытки сделать из XP Pro — 2002 Server. :derisive:
     
  11. ziral2088

    ziral2088 New Member

    Публикаций:
    0
    Регистрация:
    16 авг 2009
    Сообщения:
    283
    baldr
    Я патчу только терминальный сервис. Ничего больше не трогаю. Это не та кака в инете, которая меняет тип ОС и так далее.

    ptr
    для РДП патчить апи никакие не надо. Нужно просто пропатчить сравнение версии системы в терминальных сервисах.