Несколько RDP сессий в Windows 7

Профессиональная и Максимальная версии Windows 7 поставляются с функцией удаленного рабочего стола (RDP) , которая позволяет получить доступ к вашей машине удаленно, находясь вдали от дома или офиса. К сожалению, по умолчанию, она ограничена одной сессией одного пользователя. Это означает, что если кто-то удаленно подключается к вашему компьютеру, а кто-то уже находится в своей сессии, то он будет автоматически отключен, даже если у этого пользователя права администратора.

Это не техническое ограничение, а лицензионное. Дело в том, что удаленный рабочий стол в серверных версиях Windows, по умолчанию поддерживает два одновременных подключения, для устранения неполадок и управлением компьютером. Другие пользователи могут подключаться одновременно, до тех пор, пока у вас есть необходимые лицензии клиентского доступа для данного сервера и машина может с этим справиться, т.е. имеет достаточно ресурсов.

Для того, что бы позволить нескольким пользователям работать с одним компьютером одновременно, необходимо снять лицензионное ограничение. Для этого команда DeepXW создала универсальный патч. Патч вносит изменения в файл termsrv.dll, который расположен в %SystemRoot%\System32\.

Icon of Zip Archives UniversalTermsrvPatch (66.3 KB)

Патч поддерживает: Windows XP SP2 SP3; Vista SP1 SP2; Windows 7 [32bit(x86)/64bit(x64)], Windows Server 2008 SP1/SP2

Скачайте и распакуйте архив, затем запустите соответствующий файл с правами администратора (кликните правой кнопкой мыши на исполняемом файле, выберите “Запуск от имени администратора”). Для 32-разрядных систем используется UniversalTermsrvPatch-x86.exe, для 64-разрядных используется UniversalTermsrvPatch-x64.exe.

windows-sessions-patch

Появится окно, как на картинке выше, где можно патчить termsrv.dll для снятия ограничения сеансов удаленного рабочего стола, или восстановить исходный файл в любое время (путь к резервному файлу: \Windows\System32\termsrv.dll.backup). После применения патча, перезагрузите компьютер и можно приступать к работе .

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

VN:F [1.9.22_1171]
Rating: 4.8/5 (26 votes cast)
Метки: , ,
Опубликовано в Разное
1 комментарий на “Несколько RDP сессий в Windows 7
  1. Тариэль:

    Спасибо автору!!! вопрос,сколько можно одновременно подключится, есть-ли ограничение ???

    VA:F [1.9.22_1171]
    Rating: +5 (from 5 votes)
    • Сергей Кирсанов Сергей Кирсанов:

      Пожалуйста!
      Я нигде не встречал точной цифры, обозначающей максимально возможное число одновременных пользователей. Так как патч снимает лицензионное ограничение вообще, то, по идее, максимальное число одновременных пользователей зависит только от ресурсов ПК – на сколько хватит. Известны случаи, когда ПК на Windows 7 по RDP использовали 15 человек.

      VN:F [1.9.22_1171]
      Rating: +6 (from 8 votes)
  2. Ilya:

    А что делать, если поля в окошке UniversalTermsrvPatch-x64.exe не активные?

    VA:F [1.9.22_1171]
    Rating: 0 (from 2 votes)
    • Сергей Кирсанов Сергей Кирсанов:

      Вы имеете в виду, что в полях нет соответствующих значений? Точно запускаете патч от имени администратора? Соблюдается соответствие разрядности ОС и UniversalTermsrvPatch?

      VN:F [1.9.22_1171]
      Rating: +5 (from 5 votes)
  3. Stam:

    super, spasibo!

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
  4. tfutka:

    для вин сервера 2012, никто не знает где патч найти?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  5. Юзер:

    Можно сделать так, чтобы две сессии были под одним и тем же пользователем?

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
    • Сергей Кирсанов Сергей Кирсанов:

      Для серверной Windows можно:
      необходимо изменить значение fSingleSessionPerUser ключа системного реестра HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\TerminalServer с 0×1 (Force each user to a single session save this ) на 0×0 (Allow multiple sessions per user).
      Для обычной Windows – похоже что нельзя.

      VN:F [1.9.22_1171]
      Rating: +1 (from 1 vote)
      • Александр:

        Спасибо огромное! Работает!!!

        VA:F [1.9.22_1171]
        Rating: +1 (from 1 vote)
      • Den:

        Какой нахрен патч для серверной оси вам нужен? Это ж сервер,там и так всё есть!

        VA:F [1.9.22_1171]
        Rating: -1 (from 3 votes)
        • Александр:

          Там есть, если у сервера лицензия легальная, а не пиратская. На пиратской все включить без лицензии не получится

          VA:F [1.9.22_1171]
          Rating: 0 (from 2 votes)
      • woow:

        Спасибо

        VA:F [1.9.22_1171]
        Rating: 0 (from 0 votes)
  6. soier:

    нужно зайти под др. пользователем, после чего завершить процесс explorer.exe в текущем rdp-сеансе и запустить его от имени желаемого пользователя: runas /u:username explorer.exe

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  7. Евгений:

    Скажите, а если это офисная машина.. этот патч проблем с законом не создаст?

    VA:F [1.9.22_1171]
    Rating: 0 (from 2 votes)
    • Сергей Кирсанов Сергей Кирсанов:

      Нет. Однако, не следует рассказывать об этом Вашим сетевикам и безопастникам:)

      VN:F [1.9.22_1171]
      Rating: 0 (from 0 votes)
      • Евгений:

        Дело в том, что в офисе всё на X-систамах стоит и проблема заключается в графических пакетах adobe и coral, так что надо так чтобы дизайнеры и верстальщики могли работать без проблем.

        VA:F [1.9.22_1171]
        Rating: 0 (from 0 votes)
        • Евгений:

          т.е. один официальный windows 7 и все к нему. Можно так? Не накажут если ворвутся?

          VA:F [1.9.22_1171]
          Rating: 0 (from 0 votes)
          • Сергей Кирсанов Сергей Кирсанов:

            Только не windows7, а windows server.
            7-ка, какой бы не была, все равно не даст подключиться нескольким пользователям по RDP без патча.
            А вот на windows server Вы можете настроить такое подключение “официально”, используя функционал “Службы удаленных рабочих столов”. За него точно не накажут)).

            VN:F [1.9.22_1171]
            Rating: +1 (from 3 votes)
      • Lex:

        Усткновил работкет но вот на однгй машине пол дня работает аичерез пол дня начинает писать чтото про службу лицензирования что не достаточное количество лицензий и пользователи не могут подключитьс пока не перезагрузишь машину. Винде переустанавливал но кажлый раз беда одна и таже вин 7 про 64

        VA:F [1.9.22_1171]
        Rating: 0 (from 0 votes)
  8. Евгений:

    на WinServer Standart реализуется такое?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  9. nickhard:

    Спасибо!

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  10. Олег:

    ОГРОМНОЕ Спасибо! Все работает.

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  11. DSAMS:

    Чувак – ты просто супер ! СПАСИБО

    VA:F [1.9.22_1171]
    Rating: 0 (from 2 votes)
  12. Илья:

    Это крутой патч, всем советую) Спасибо издателям!

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  13. Андрей:

    После обновления от 16 октября, в котором изменен драйвер RDP этот способ уже не прокатывает… пришлось откатить обновления, так как использую терминально некоторые программы.

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
    • Евгений:

      Да действительно после выхода обновления данный способ перестал работать, есть ли возможность обновить патч?

      VA:F [1.9.22_1171]
      Rating: 0 (from 0 votes)
  14. Ник:

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

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  15. Леонид:

    И после обновления Октября 2014 года всё решаемо. В и-нете есть описание где и какие несколько строк заменить вручную (это-же делает этот патч, только автоматически). Так вот если исправить эти файлики вручную, всё точно так же срабатывает. И правится меньше чем за минуту.
    x86 Hex Edit
    find: 003B86200300000F****** – replace: 00B800010000908986200300
    find: FF4350C7 – replace: FF9050C7
    find: F8742F68** – replace: F8E92C000000

    x64 Hex Edit
    find: 8B87380600003987****** – replace: B80001000090898738060000909090909090
    find: 60BB01000000 – replace: 60BB00000000
    find: 50007418488D – replace: 5000EB18488D

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
  16. Спасибо за инфу

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  17. в termsrv.dll (x86) таких последовательностей не нахожу

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    • Леонид:

      Уточняю инструкцию.
      Последовательность ищем и редактируем не в текстовом режиме а в шестнадцатеричном. Звездочки при поиске не ставим (это просто обозначает любые символы, но мы их потом будем менять).
      Работоспособность данной редакции лично проверена, более чем на 15-ти различных системах с Win7, а так же люди отписывались что и на Win8.1 у них тоже это получилось.
      Чтобы система дала отредактировать или заменить данный файл, необходимо загрузится со сторонней системы (WinPE), иначе система блокирует файл и не дает его изменить.

      Привожу последовательности ещё раз.

      x86 Hex edit
      find: 00 3B 86 20 03 00 00 0F ** ** ** ** – replace: 00 B8 00 01 00 00 90 89 86 20 03 00
      find: FF 43 50 C7 – replace: FF 90 50 C7
      find: F8 74 2F 68 ** ** – replace: F8 E9 2C 00 00 00

      x64 Hex edit
      find: 8B 87 38 06 00 00 39 87 ** ** ** ** ** ** ** ** ** ** – replace: B8 00 01 00 00 90 89
      87 38 06 00 00 90 90 90 90 90 90
      find: 60 BB 01 00 00 00 – replace: 60 BB 00 00 00 00
      find: 50 00 74 18 48 8D – replace: 50 00 EB 18 48 8D

      VA:F [1.9.22_1171]
      Rating: +2 (from 2 votes)
      • Леонид:

        К стати этот же способ действует и на Server2008R2, там используется та же DLL.

        VA:F [1.9.22_1171]
        Rating: -1 (from 1 vote)
      • Алексей:

        Можно и без загрузки с внешней. Мне помогал вариант с остановкой служб “Службы терминалов” и “Совместимость быстрого переключения пользователей” (не напрямую, а через перевод в “отключено” и перезагрузки).
        После этого можно менять termsvr.dll
        А затем возвратить способы загрузки служб, как до отключения.

        VA:F [1.9.22_1171]
        Rating: 0 (from 0 votes)
      • Сергей:

        Леонид. Не совсем понятно. После обновлений 16 октября, вы пишите: “Последовательность ищем и редактируем не в текстовом режиме а в шестнадцатеричном.”. Т.е. сначала нужно пропатчить программой UniversalTermsrvPatch dll а потом дополнительно отредактировать ручками в hex редакторе или можно самому обойтись без всяких патчей и просто отредактировать в hex? И второй вопрос. Если я возьму эту пропатченную dll в hex редакторе, которая будет работать на винде с последними обновлениями и скопирую ее в винду без обновлений – она будет работать??

        VA:F [1.9.22_1171]
        Rating: 0 (from 0 votes)
  18. Игорь:

    Значит так.
    Сделал я себе по этому рецепту одновременные сессии в Windows 7, но словил следующую траблу:
    Если одновременно с RDP-сессией заходит пользователь с основной консоли, то наблюдаются неприятные артефакты во многих программах. А именно: не прорисовываются окна. Например: Опера, Хром, Embarcadero RAD studio. Выглядит это так: вместо окна программы рисуется любой мусор, который был на его месте до появления этого окна. При этом, кстати, браузеры FireFox и IE работают нормально. А стоит только юзера с консоли отключить, как тут же всё нормализуется. Никто не сталкивался?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    • Игорь:

      Раскопал сам немного пробемму : ноги неё растут из т.н. аппаратного 2D ускорения в винде. Не нашёл у себя, где оно глобально отключается, но обнаружил, что можно отключать его для любого exe’шника, если в его свойствах/Compatibility поставить “совместимость с Windows Vista”.
      А у Хрома есть специальная опция: –disable-gpu.

      VA:F [1.9.22_1171]
      Rating: 0 (from 0 votes)
  19. Сергей:

    Прошу совета.
    У нас небольшая частная контора с 10 компами, подключаемыми терминальным доступом по локальной сети к 1С 8.2 (файловая версия) на Win Server 2003 R2. Кроме 1С ничего в терминалке не используется. Сейчас назрела необходимость увеличения мощностей сервака, так как 4Гига уже маловато для бызы под 10Гиг. Есть желание перейти на Win Server 2008 R2. Но кто-то подкинул идею установить обычную Win 7 Ultimate и пропатчить RDP, дабы снять ограничение количества терминальных подключений. Она типа будет работать шустрее и не так сложна в настройке. Кто что думает? :)
    P.S. На SQL переходить не собираемся, так как продвинутого админа нет, а я SQL не знаи и по этому боюсь.
    Прошу сильно не пинать )

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    • Костя:

      на данный момент серверное железо не многим дороже… поэтому советую воспользоваться решениями от НР
      1.серверы начального уровня у них не дорогие (за 40к можно неплохой вариант найти)
      2.совместимость с 2008 и 2012
      3.именно для оптимизации подобных задач и существуют серверные решения винды… здесь же – только первый и далеко не единственный “танец с бубном” имхо
      4.задел на будующее
      5.серверные решения более стабильны

      VA:F [1.9.22_1171]
      Rating: 0 (from 0 votes)
  20. Костя:

    автору спасибо! все работает… патчил после всех обновок по состоянию на 02.12.14
    P.S.: задачи не серверные, потому вполне устраивает и несколько сессий на семёрке)))

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  21. Miguel:

    Уже неоднократно пользовался этим патчем и все было замечательно.
    Затем мне позвонил знакомый, которому я ставил этот патч летом и сказал, что больше шарманка не играет, я снова пришел с патчем, запустил его – termsrv.dll видится как не патченный.
    Ну пропатчил я снова, все политики безопасности проверил, там без изменений, но теперь при подключении выдается ошибка, мол неверная пара логин/пароль.
    После долгих мучений и опытов было установлено, что с rdp версий до 6 все хорошо, начиная с 6 версии rdp авторизация не проходит. Грешу на сертификаты, т.к. при подключении с версии 5.2 выдается окно с предупреждением о непроверенном сертификате, а с 6 и 7 версии такого окна нет, хотя должно быть хотя бы в первый раз.
    Никто не сталкивался с подобным ? Может заменить termsrv.dll на оригинальный и потом снова его пропатчить ?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  22. artSergio:

    Использовал этот патч пару лет назад на win serv 2008 – всё отлично работает до сих пор.
    Но вот в чем беда: пытаюсь пропатчить другую win serv 2008 (не r2), в которой уже стоят какие-то лицензии microsoft – не патчится. Поменял вручную циферки в файлк termserv.dll – всё то же. При подключении спрашивает логин пароль, и выводит окошко, что лицензии закончились. Как быть?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  23. Большое спасибо автору. Особо порадовало то, что файл лежит не на файлообменнике, а на сайте автора. За это отдельное спасибо.

    VA:F [1.9.22_1171]
    Rating: +4 (from 4 votes)
  24. Олег:

    Большое спасибо. Офигенский патч!

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
  25. Евгений:

    Спасибо большое что поделились этим патчем, он меня сегодня очень выручил! Правда искренне благодарен. Успехов и процветания Вашему проекту!
    С уважением, Евгений

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
  26. Yertargyn:

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

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
    • indiffere:

      Создаеш 2 пользователя:
      Пользователя с правами админа и без онных прав.
      при подключении просто вводиш данные пользователей в зависимости от задач ( нужен админ вводиш логин пароль админа, аналогично простому пользователю )

      VA:F [1.9.22_1171]
      Rating: 0 (from 0 votes)
  27. Владислав:

    Доброго дня. Кто знает- опубликуйте пожалуйста байты для Windows 8(8.1) 32/64 bit . Заранее благодарю.

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  28. Илья:

    Спасибо, работает! Windows 7

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  29. int13h:

    Не знаю, народ, на сколько эта затея продлится и не создаст в будущем проблем (после какого-нибудь очередного обновления). Согласен патч работает, но надо понимать, что Windows 7 – это не серверная OSь. И лично я Windows 7 в корпоративе как терминальный сервер для 1С-ки не использовал бы никогда и ни при каком условии по ряду причин. Уж лучше потратить время и поднять на 2003r2 или 2008r2 и только на реальном железе (виртуалки исключаю строго по определению из-за риска потери данных). Два главных условия: 1) разделение мест хранения данных, система на Raid1, Raid 10 под базы, отдельный Raid под SQL, и отдельный Raid под Backup на самой машине, 2) несколько Гигабитных карт (и минимум два Link-а на маршрутизатор). Удалённые (из WAN) подключаются к одному линку (или паре линков) через проброс на шлюзе, а из локальной сети (т.е. из LAN, или из сети периметра) – подключаются к другому линку (или другой паре линков). А лучше поставить 6-7 Гигабитных карт, чтобы суммировать каналы по каждому направлению, два на внешнее хранилище, одну для связи с DC (контроллером домена) по вопросам аутентификации и авторизации (очень актуально если у вас базы в DBF-е валяются), ну и конечно для захода (админства) для себя любимого. Лень гуглить, вопрос для гуру: а Windows 7 умеет агрегацию делать (т.е. суммировать каналы)? А ведь правда, очень хороший вопрос, который вас сейчас пока не волнует. А те слова, что у нас в конторе будет… всего… да и только… 5, 10 или 15 удалённых пользователей, а завтра их не станет больше, – уже много админов тех сказок слышало, когда через N-дней этих (удалённых сотрудников) становилось более 30 и приходилось ночами ту самую наспех прикрученную систему заново перестраивать. А вы говорите, что всё так просто. Не, я не спорю, если с*кс по-быстрому вас устраивает – патч вам в руки.

    VA:F [1.9.22_1171]
    Rating: -2 (from 2 votes)
  30. rus:

    Большое спасибо! Все работает! Версия файла 6.1.7601.18637

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  31. Евгений:

    Подскажите, как можно сделать на RDP чтоб совместим был с видео картой? Или какой нибудь другой протокол есть?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  32. GrHnd:

    Почему-то я не нашел файл termsrv.dll в директории %SystemRoot%\System32\, хотя патч отработал и достиг своево результата.
    Может он правит какой-то другой файл?
    Версия Windows Server 2008 R2 Enterprise.

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  33. Алексей:

    Поясните пожалуйста: в W7x64 есть проверка файлов на сертификацию Microsoft. Ее надо будет отключить? Или этот файлик прокатит ?
    Спасибо!

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  34. p5er6:

    20.06.2016 – win 7 полет нормальный!
    В архиве есть ридми и ссылка на сайт автора с кучей интересностей
    deepxw.blogspot.com

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  35. Ваня:

    Подскажите пожалуйста как патчить termsrv.dll — 6.1.7601.23403 в Win7 64bit?

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
  36. Anatoliy:

    Есть такой прожект на GitHub “RDP Wrap” называется.
    DLL в системе не правит и работает даже на Win 10, ложится прокладкой между Терминал-сервов и Службой RDP.

    Правда с автологином там трабл. Пароль ручками надо вводить.
    Кто ищет, да обрящет……

    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)
  37. Noname:

    Какой штраф будет юр. лицу если использовать этот патч с лицензионной системой?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  38. Hoffman:

    Все отлично работает, большое спасибо!

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  39. neo:

    СПАСИБО АВТОР!!! Все работает отлично! Здоровья тебе и удачи!

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  40. Сергей:

    Подскажите, патч установил пользователей создал захожу с удаленного ПК и сразу выбрасывает!!!
    Что делать???

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  41. Алексей:

    Спасибо!

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  42. Руслан:

    Здравствуйте. А на Windows 10, будет работать программа?

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)
  43. TheDrive:

    Чтобы запатчить новые версии (если не менялась значимо логика работы соответствующего участка кода), необходимо сделать следующее:

    0. Инструкция годится для более или менее образованных, а главное, сообразительных специалистов, умеющих думать. Те, кто привык все “копировать” по Copy/Paste, думается, не справятся и будут разводить “стоны” и “причитания” о том, что “многа букОв”, “сложно” или “нИАсилил” в силу больше страхов и стереотипов мышления, нежели сложности проблемы. Это их удел. Рожденный ползать, как известно, летать не может. Не дай себе засохнуть, Анон! Выпей Иаду или делай ДЕЛО и начни себя уважать!

    1. Скачать любую – платную или бесплатную версию Hiew
    Годятся даже очень древние версии 90х гг, но если требуется патчить х64, то нужны 8.х (начиная с середины 2000х :)) Лучше, конечно, взять свежую. Автор 25 лет развивает продукт и мало есть иных столь совершенных творений мастерства программиста.

    2. Взять termsrv.dll некой поддерживаемой версии – оригинальную и запатченную версии. Если нет запатченной – разумно предположить, что надо ее запатчить имеющимся патчером не тупите! Начинайте думать! Все нужные файлы положить в отдельную папку или папки. Не надо ничего пытаться править на единственной копии в system32. Все равно НИЧЕГО НЕ ПОЛУЧИТСЯ (запись заблокирована в system32) и так делают только бараны.

    3. Сравнить патченную и НЕпатченную версии одного и того же dll любым компарером бинарных файлов. В комплект винды входит консольная утилита FC. Команда “FC /b termsrv.org termsrv.crk > differences.txt” ведет к профиту. Список различий, а он там маленький, строк на 20, направится в файл differences.txt
    Открываем файл текстовым редактором и, либо оставляем открытым, либо переписываем на бумажку с какого и по какое смещение менялись байты. Сразу вникаем и понимаем, что все смещения и значения байтов, как и ниже в Hiew, указаны в шестнадцатиричной системе, но “пугать” это никого не должно, ибо даже переводить в десятичную ничего не потребуется! (Если вдруг понадобится, для общего развития – виндовый калькулятор в помощь.)

    В списке видим (выявляем) 3 условных блока, где адреса идут подряд. Первый блок – 2 байта в самом начале exe, по смещениям 140-с-чемто-h (dll имеет тот же формат, что и exe, разница лишь в том, что в нем только процедуры и функции для внешнего вызова – т.н. экспорты, поэтому и непосредственно исполнить его, переименовав в ехе не удастся). Это данные, поск смещения попадают на заголовок ехе файла. По этим смещениям хранится контрольная сумма кода-данных (без заголовка), которую Винда проверяет перед запуском, убеждаясь, что файл не был поврежден и что нибудь не грохнется, соотв, при попытке его исполнить. Вернемся к ним позже.
    Далее следует блок изменений приблизительно 10 байт. Это, как раз, то, что мы будем изучать. После него есть еще один блок изменений – 6 самых последних байт ехе-шника. Суть сводится к тому, что вместо “нулей” автор вбил свое зычное имя “deepxw” в пустующее место в конце. Низкий ему поклон за патч и идею, но нам повторять его “изыски” при переносе патча особого резона нет, посему, это могут сделать сами желающие, кому нечем заняться долгими зимними вечерами в рамках исследования “Вбивание обычных букОв в пустующие места ехе файлов с использованием Hiew”. Впрочем, можно это воспринимать как дань уважения к автору (просто “там” никто не читает).

    3. Открыть оригинальный dll в одном окне Hiew, запатченный – в другом (запуcтить 2 копии Hiew! Вообще куда удобнее юзать Far – двЭ щтуки, как файл менеджер и основу для запуска “этих ваших” Hiew). В обоих нажать F4 (Mode) и выбрать Decode (F3). Увидим дизассмеблированный кусок файла из самого начала. Смотреть там нечего, ибо Hiew “пытается” дизассемблировать заголовок EXE файла, а это данные, а не код. Нечего туда пялиться, х-ту он вам показывает, что совершенно нормально, ибо тут надо ДУМАТЬ, а не “копировать”! Еще раз собираемся и начинаем думать не нужно пытаться тупо и буквально выполнять инструкцию…

    4. В обоих Hiew (по очереди, блин, думаем…) нажимаем F5 (Goto) и видим, что в верху появилось поле ввода. Туда вбиваем адрес первого различия (из ВТОРОГО БЛОКА!), найденного в файле различий. НАПРИМЕР, в Win7SP1x86Rus это адреса в районе 19100h, а в VistaSP2Eng (x86 или x64 – хз), как я видел в блоге автора – адреса в районе 65200h. Попадаем на место первого исправленного байта.

    Данные в этом окне Hiew имеют вид:
    – В первом столбце – hex смещение – от начала файла, либо в памяти процесса – зависит от режима Hiew, выбираемого по Alt-F1 (Global-Local). По умолчанию показывает Local = как в памяти, если Hiew удается разобраться с форматом кода-данных. В нашем случае это проблемы не представляет ибо формат ехе-файла позволяет ему легко “во всем разобраться”. Поэтому не нужно пугаться увидев там 06F2F8D51 вместо введенного 19153. Адресация по памяти важна для понимания адресации процесса, как она будет выглядеть при исполнении, соотв для анализа кода, если таковой потребуется.
    – Во втором столбце идет шестнадцатиричное представление кода-данных с разбором какой код и какие данные к какой инструкции относятся. Поэтому то каждая строка разной длины. Показано так исключительно для вашего удобства. “На самом деле” (С) в самом файле все они “слеплены” вместе-подряд, что Вы можете лицезреть в режиме “простого” просмотра hex данных (F4->Hex), где “тупо” слева показаны hex байты через пробелы, а справа – “кракозябры” из таблицы ASCII, которые этим байтам соответствуют – как в “любом” “старом-добром” hex редакторе типа WinHex, скрины которого Вы видели на “любом” “кулхацкерском” веб сайте. Мы все время работаетм с одними и теми же байтами, как собственно и сам компьютер делает. Вопрос исключительно в их представлении и интерпретации. Когда Вы копируете исполняемый файла с диска на диск – это ВСЕ ДАННЫЕ и НИКАКОГО КОДА, ибо никто и ничего не исполняет. Но стоит указать Винде, что это исполняемый файл, запустить его, как винда разбирает его на код и данные и запускает только код из заранее предопределенного стандартом и заголовком места, после чего сам код, исполняемый процессором, разбирается далее по своей структуре и сам снова делится на код и данные и так далее.
    В режиме F4->Decode нам, вместо “кракозябр”, показывает байты и “истинный смысл”.
    – В третьем (правом) и самом большом столбце (точнее паре столбцов) нам показывает дизассемблированный участок кода – текстовое, т.н. “мнемоническое” представление этого самого кода (язык ассемблера), предназначенное для сколько нибудь упрощенного и понятного восприятия для “человека разумного”, с его чудесным аналоговым ассоциативным мышлением, крайне тяжко воспринимающего абстрактные “голые” кодовые последовательности.

    5. Выполнив переход на нужное смещение в предыдущем пункте, мы видим, что курсор (серенький такой :)), показывает на начало 6-байтовой команды (в х64 может быть больше байт) правее которой “дизассемблирована” инструкция ТИПА cmp eax,[esi][000000324]
    если взять на одну строку выше и несколько ниже, то выйдет конструкция ТИПА:
    mov eax,[esi][000000324]
    cmp eax,[esi][000000320]
    jz .06F30B25E
    push edi
    push 020
    call .06F2E1440
    pop ecx
    Чтобы понять эту конструкцию совсем не требуется быть “знатоком ассемблера”, хотя рекомендуется иметь хотябы базовые знания по теме “программирование на любом зяыке”. А вот знание Английского языка никак не помешает!

    Первая инструкция (которая никак не патчится, она “выше первого различия”) называется mov – какая, простите, первая ассоциация приходит на ум из английского языка? – правильно – move – т.е. переместить. Аргументы инструкции идут во втором “подстолбце”. eax и edi – это т.н. 32-битные регистры – одиночные ячейки памяти в самом проце, предназначенные для хранения данных в период их обработки. Почти все регистры однотипны, туда теоретически можно записать что угодно, лишь бы влезло, но часть из них традиционно используется для хранения данных определенных типов (чтобы не путаться), например, EAX, EBX, ECX, EDX используются непосредственно для “данных пользователя”, причем ECX традиционно идет как счетчик (циклов например), а ESI, EDI – как указатели некой текущей позиции в памяти, адресов, с которыми предстоит работать. А часть регистров аппаратно зависима и их “лучше не трогать” – например регистр IP автоматически содержит адрес текущей инструкции, которую выполняет процессор, и если попытаться записать туда какие-то свои данные – переменную своей проги, то проц тупо уйдет на инструкцию с этим адресом и все грохнется. ESP – указывает на стек – этакую “бутылку”, в которую кто первый залез, тот последним вылезет (Fist In Last Out), предназначенную для временного хранения данных, которые не помещаются в регистры, но нет смысла их загонять обратно в память, поск они будут использованы вскоре. Для работы с данными, обычно, некий байт – 8бит, слово – 16бит, длинное слово – 32бит или двойное длинное слово 64бит (для 64-бит процессоров) помещаются из памяти в регистр. Для работы с короткими данными можно обращаться к частям регистра (например eax состоит из ax – нижние 16бит и ah и al – части самого ax), но это за пределами нашей проблемы. Потом с данными в регистре производятся некие мат преобразования, после чего результат помещается обратно в память – в туже самую или иную ячейку или любую другую, выделенную автором (или компилятором его) проги для соотв целей.

    В квадратных скобках указываются адреса. Если надо взять ДАННЫЕ из ячейки памяти по какому-то адресу, а не сам адрес, то просто пишут адрес в квадратных скобках. Конструкция ТИПА [ESI][000000324] означает, что данные надо взять из ячейки памяти, имеющей адрес, значение которого получается сложением значения в регистре ESI + 324h. В Ассемблере принято писать более понятно [ESI+324h], но автору Hiew было удобнее показывать так, возможно, для наглядности. При вводе команд Hiew отлично принимает стандартные конструкции типа [esi+324], что показано ниже.

    Итого понимаем, что данная инструкция берет данные (4байта=32бит) по адресу [ESI+324h] и кладет их в регистр EAX. Следующая инструкция ((которая уже патчится) – CMP. Первое, что приходит на ум светлоликому, прилежно учившему английский в школе – это compare. Речь идет о сравнении. В остальном все тоже самое, что и в предыдущей инструкции. Адрес только соседний. Инструкция
    cmp eax,[esi][000000320]
    сравнивает содержимое регистра eax и ячейки памяти по адресу [esi+320h]. В регистр eax предыдущая инструкция загнала число из соседней ячейки [esi+324h]. Теперь его сравнивают с числом из ячейки [esi+324h]. Что сложного то, простите??? Барана научить можно! Это уж точно проще, чем “многокилометровые” объекты из какой нибудь говножабы, тянущие за собой тысячи свойств, в которых утонуть можно…
    А как же результат? Сравнить сравнили, ну и что толку, спросит внимательный читатель… Как узнать-то, где собака порылась? А результат хранится в специальном регистре флагов Flags. В этом зарезервированном регистре каждый бит означает некий флажок. В частности есть флажок нуля – Zero. Если в результате выполнения инструкции сравнения выяснится, что числа равны, флажок будет взведен (1), если нет – то сброшен (0) (или наоброт, лень отлачиком смотреть – тут это не важно). Аналогично есть другой флажок на предмет больше-меньше – Sign. Флажки меняются в резуьтате выполнения инструкций их меняющих, и останутся в своем положении, пока не будут изменены в результате выполнения иной инструкции, затрагивающей их состояние. Поэтому после cmp мы можем выполнять любые иные инструкции, зависящие от состояния флажка пока не выполним ту, которая его меняет. Состояние флажков считывается инструкциям условного перехода и некоторыми иными а резуьтатом становится некое действие или бездействие этих инструкций.

    Следующей инструкцией идет
    jz .06F30B25E
    Инструкции, которые начинаются на J [почти] все означают Jump – прыжок, т.е. переход в другое место. Данная инструкция относится к инструкциям условного перехода и расшифровывается как Jump if Zero – т.е. переход по адресу, если стоит флажок Нуля. Если флажок НЕ стоит – то “ничего и не будет”. В качестве аргумента дается адрес перехода (они бывают разные, относительные или абсолютные, “далеко” или “близко” в памяти. Тут адрес указан в адресном пространстве программы, как он настроен по заголовку exe, вникать смысла нет, это лишь все усложнит. Если предыдущая инструкция выявила равенство аргументов, то переход произойдет, если нет, то не произойдет и процессор перейдет к следующей инструкции.

    Следующие 2 инструкции
    push edi
    push 020
    Вспоминаем, что по английски push означает пихать, толкать. Тут это означает загнать числа в стек для временного хранения. Часто так сохраняют переменные перед входом в процедуры, поск внутри процедуры регистры могут использоваться для иных целей, а с помощью стека можно как сохранить значения регистров, так и передать аргументы процедуре, которая их вытащит оттуда после входа в нее, а перед выходом запихает туда результаты если таковые имеются и требуются. Удобство в том, что не нужно заботиться о выделении адресного пространства для хранения временных данных существенного объема. Если нужно передать массив – достаточно просто передать его адрес в памяти. Все элементы массива передавать никакого резона нет, это лишь бесполезно сожрет память и процессорное время, как это делается при быдлокодинге. (Когда требуется сохранение оригинальной копии массива по логике работы – это другая ситуация и сам программист осознанно инициирует копирование массива с целью репликации.)
    При работе со стеком проц сам обо всем позаботится – область для хранения стека выделяется операционкой при аппаратной поддержке проца.
    Первая инструкция сохранит значение регистра EDI – указателя на некую область памяти, а вторая запихнет туда заранее предопределенную константу 20h. Наверное, некий аргумент процедуры, но нам это не важно ибо нет нужды делать анализ, который сделал автор патча – мы ведь переносим готовый патч на другую версию проги и это, обычно, ПРОСТО!

    Следующая инструкция
    call .06F2E1440
    По английски call означает звать, вызывать.
    Речь о вызове процедуры. В коде вызова процедур нет имен – есть адреса, где расположен их код. Для удобства дизассемблеры (в т.ч. Hiew) могут вытаскивать имена процедур и функций из таблиц импортов и экспортов ехе файлов (поск там предполагается взаимодействие разных программ и “библиотек” уже после компиляции и процедурам даются имена, по которым их можно вызвать из другой программы, но внутренние процедуры не поименованы после компиляции). В исходниках имена, конечно, были, но после компиляции они ни к чему… Только место бы занимали. Процессору нет нужды знать чьи то имена, он числа считает… Иногда декомпиляторам/дизассемблерам удается вытащить имена процедур из отладочной информации (если очередной быдлокодер забыл ее отрубить и раздул размер бинарника бесполезной инфой) и это помощь в анализе кода, но нам в нашем случае даже это пофиг. Нам нет нужды понимать зачем нужна эта процедура и что она делает… Напоминаю, у нас есть готовый патч и если удастся его перенести “без приключений” то вникать и не потребуется.

    Последняя приведенная инструкция
    pop ecx
    Pop – действие обратное push – т.е. вытащить последнее загнанное в стек значение. В данном случае в регистр ecx. Наверное эта инструкция нужна чтобы извлечь результат выполнения процедуры, но нам это тоже пофиг, в т.ч. и потому, что эта инструкция, как и 2 push-а выше, и call, после патча не меняются и приведены для некоторого общего представления и как ориентир-граница патча. После патча все эти инструкции останутся на своем месте, как и все после них.

    6. Теперь берем запатченный termsrv.dll в другом окне Hiew, по тому же адресу смотрим какие там инструкции.
    mov eax,[esi][000000324]
    mov eax, 000000100
    nop
    mov [esi][000000320],eax
    push edi
    push 020
    call .06F2E1440
    pop ecx
    Отличия видим только во второй, третьей и четвертой инструкциях.
    Вторая mov eax, 000000100
    просто вписать константу 100h (=256) в регистр eax
    Третья nop
    самая “смешная” = NoOperation – ничего не делает вообще и вовеки веков. Зачем же она нужна? А нужна она чтобы выровнять синхронизацию по коду-данным. Дело в том, что размеры оригинального и запатченного кода должны полностью совпадать по числу байт и границе команд (вместе с их аргументами). Если что либо сдвинется хотяб на один байт, процессор попадет “не туда”, будет воспринимать некий аргумент инструкции, как команду, а следубщие за ним байты – как аргументы этой команды, даже если там иной код команды. Все съедет сразу же и фатально. 99% что прога вылетит с фатальной ошибкой. Команда nop имеет код 90h и занимает один байт. Если есть избыточный код, не нужный или даже вредный для целей патча, его можно заменить вместе с аргументами на столько nop-ов подряд, сколько байт он занимает. Среди хакеров это называется занопать или занопить. Фактически, это единственный способ удалить лишний код из исполняемого кода, ибо это не текст и любое “вырезание из середины” “с целью укорачивания” немедленно приведет к тому, что сместятся, съедут все адреса и ничего работать не будет вообще. А “самое страшное” случается тогда, когда новый код, которым нужно заменить старый, никак не лезет на “старое” место… Вот тут начинается головная боль у хакера – как его ужать, чтобы влез…
    Четвертая mov [esi][000000320],eax
    поместить число из регистра eax в ячейку памяти [ESI+320h]
    В принципе третью и четвертую или третью и вторую инструкции можно поменять местами – это ничего не изменит. Но убрать nop никак нельзя ибо новые команды по длине кода на 1 байт меньше чем старые и такое расхождение, если его не парировать nop-ом немедленно приведет к слету синхронизации.

    Сравнение “с тем что было” сразу ставит все на свои места!
    Было – взять число из ячейки [ESI+324h], сравнить его с числом из ячейки [ESI+320h]. Если равны, то “куда то” прыгнуть, если нет то идти дальше и выполнить процедуру. В контексте задачи напоминает это сравнение числа допустимых подключений с пределом допустимых (т.е. 1 для рабочей станции или 2 для сервера). Предел хранится в какой-то константе, адрес которой указан в инструкции сравнения.
    Что стало – взять число из ячейки [RSI+324h], забить на “это дело” и тут же перезаписать значение регистра EAX константой 100h (=256 – т.е., видимо, новый предел 256 подключений), после чего поместить это число в ячейку [ESI+320h]
    Никто ничего не сравнивает, процедура, которая вызывается ниже, всегда будет выполнена. Кроме того, в ячейку [ESI+320h], где, очевидно, хранился лимит подключений “насильно” записывается новый лимит =256 на случай, если где-то в другом месте программы имеются иные проверки этого лимита. ВОТ И ВСЕ! Сложно придумать что-то более примитивное!

    Если бы нам пришлось искать это место самостоятельно, то пришлось бы трассировать отладчиком процедуры этого dll, как это очевидно делал автор патча или дизассемблировать все чем-то вроде IDA и внимательно изучать код, содержащий сотни тысяч инструкций. Но у нас все готовое! Это как в анекдоте про механика, который один раз стукнул молотком и машина завелась, но тонкость в том, что он знал куда стукнуть и это стоит немалого труда. (Только не надо тут про деньги – засуньте себе их жопу! Особенно в предверии великого праздника! Для любителей “заработка в интернете” – есть специализированные сайты. )

    Почему же патч не срабатывает на всех последующих версиях – потому, что меняются адреса и слегка меняется код (его аргументы) при компиляции. Это приводит к смещению нужного кода внутри ехе на другие смещения, а если искать по сигнатуре (строгой последовательности байтов), может не находит поск агрументы поменялись. Многие адреса ведь тоже являются аргументами инструкций и меняют бинарный код до неузанваемости при том, что суть его все та же… Сделайте это вручную! У Вас же голова на плечах, а не “строгая последовательность извилин”…

    7. Теперь в ОРИГИНАЛЕ той версии termsrv.dll, которую патчит патчер, нужно найти некую уникальную, в контексте программы, последовательность байт ОКОЛО того места которое нужно запатчить, чтобы поискать ее в новой версии termsrv.dll, той которую Вы хотите запатчить, но патчер ее не патчит…
    Смотреть нужно на дизассемблер, а искать БАЙТЫ ему соответствующие, причем если выбрать что-то слишком “простое”, то такая комбинация будет встречаться при поиске много раз и будет трудно найти нужное место, оно будет “тонуть” среди кучи других похожих. А нам крайне важна “точность попадания”, ибо если запатчить “не там”, то работать не будет, а то и винда повиснет…
    Выбирать для строки поиска инструкции, содержащие длинные фиксированные адреса нельзя. При компиляции других версий они, скорее всего, съедут и Вы ничего не найдете по ним в новой версии.
    Вся процедурка-то, где происходит проверка, маленькая, всего пару десятков команд. Для ассемблера это “ничто”. Hiew покажет вам условные границы процедуры как “полосы” _^_^_^_^_^_. Обратите внимание, что в начале процедуры идет обращение к адресу “импортной” процедуры Windows API – CDefPolicy::Query и Hiew это задетектил (поэтому имя функции и выудил и написал). Это должно стать для Вас хорошим ориентироом, на пути к нужному месту. Кроме того, это “какбЭ намекает”, что может быть есть иной путь решения проблемы, например нахождение некого “секретного” Policy, отвечающего за поведение Terminal Server. Желающие могут потрассировать код отладчиком и поискать как инициализируется переменная или константа с количеством подключений. Но для строки поиска “код от CDefPolicy” не годится, ибо адрес процедуры в импорте, скорее всего съедет в новой версии. Я бы попытался искать по байтам из начала процедуры после CDefPolicy. Там идет:
    57 push edi
    6A10 push 010
    8BF1 mov esi,ecx
    33DB xor ebx,ebx
    выходит 57 6A 10 8B F1 33 DB
    В конце можно добавить еще E8 код инструкции call, идушей следом, но НЕ ее аргумент (следующие байты), ибо это адрес и он поменяется при компиляции новых версий.
    Такая последовательность дает мне при поиске в Hiew (F7-Search)
    Всего 3 совпаденияю Причем вызов CDefPolicy виден в контексте всего в одном случае – в первом же. Если у Вас так же – место найдено, записываем его адрес из первого столбца (предварительно нажав Alt-F1 – Global!) “на бумажку” и пробуем патчить.
    Если код поменялся настолько, что ничего не находит, ищем другие уникальные последовательности, в т.ч. почерпнутые в соседних процедурах и пробуем искать их. Задача – найти нужный код, где “все совпадает по смыслу”, а не последовательность, об этом думаем и смотрим на контекст, пытаясь выискать CDefPolicy::Query в новой версии. Можно искать текст CDefPolicy::Query в новом .dll, Вы найдете строку (неск раз), но не место, где на ее адрес ссылаются. Такой метод иногда помогает найти нужное используя F6 (Reference) в Hiew и мне удалось так найти нужное место в dll от Win7SP1x86Rus ради эксперимента, но не факт что везде удастся, уж тем более с другими прогами).

    8. Теперь надо взять termsrv.dll той версии, которую Вам нужно запатчить. Запускаем третью копию Hiew, открываем в ней новый dll” (дабы легко переключаться между всем трему и сравнивать визуально). Находим нужное место, как описано чуть выше или переходим по адресу, который писали “на бумажку” (бумажка вообще – друг программиста в этом бренном мире, где дохнут жесткие диски, выбивает пробки и виснут ОС).
    Анализируем код ниже CDefPolicy::Query и легко находим нужное место, ПОХОЖЕЕ на:
    cmp eax,[esi][000000320]
    jz .06F30B25E
    ПОНИМАЕМ, что адрес [ESI+320h], но если он поменялся, например на [ESI+452h] это и есть нужный нам адрес и им и оперируем в дальнейшей правке.

    9. Если убедились, что точно нашли то, что надо, наводите курсор на инструкцию cmp и смело жмите F3-Edit. “Серенький” курсор поменяется на “обычный” (для текстового режима дисплея) – подстрочный. Он должен указывать на ту же инструкцию cmp.
    Жмите на Tab (или F2) и появится диалог ввода ассемблерных инструкций.
    Туда вводите инструкцию
    mov eax, 100
    Потом Enter. На основном экране будет видно что байты “от инструкции” поменялись и часть из них стала “золотой” (желтой). При этом инструкции НИЖЕ “съехали” и в правом столбце напротив них показывает “белиберду” – совсем не то, что там было ранее.
    Диалог ввода команд поверх основного окна продолжает “висеть” и ждать ввода новых инструкций, показывая при этом некую следующую, неверно интерпретированную, из-за съезда адресации, инструкцию.
    На инструкцию эту не обращаем ни малейшего внимания и вбиваем следующую.
    Вбейте nop и нажмите Enter
    В основном окне желтым засветится следующая строка с кодом 90.
    Синхронизация восстановится и следующей командой опять окажется jz. Ее и предложит поменять диалог ввода инструкций.
    Вбивайте туда
    mov [esi+320],eax
    Если вместо 320 в команде cmp был иной адрес, значит вбивайте ЕГО!
    Жмите Enter. после этого желтым засветится код в 3 строке, справа от которого должна быть инструкция mov [esi][000000320],eax (или не 320, а то число, которое вбивали).
    Проверяем что НЕ съехала синхронизация кода-данных. Следующей инструкцией должна быть push edi (или иная если код сильно поменялся и у Вас там была иная инструкция до патча – она и должна остаться на своем месте и правильно интерпретироваться, что говорит о том, что дальше нее все ОК).

    Когда все вбили жмите ОДИН РАЗ Esc. Диалог ввода инструкций пропадет, но его можно вызвать еще раз в любой момент (в режиме редактирования) нажав Tab. Все измененные байты будут иметь желтый цвет. Дотошно проверьте, что все выглядит корректно, нигде не накосячили. Проверять за вас тут никто ничего не будет, никаких “защит от дураков” любого ранга и звания НЕТ. Регалии никто учитывать не станет. Что сделали – то и получили. Накосячили – зависнет и работать не будет.
    Если все ОК жмите F9 (Update). Изменения запишутся в файл на диске и измененные байты сменят цвет на обычный (Cyan).

    10. Теперь нужно поправить контрольную сумму ехе. Делать это до безумия скучно, поскю Hiew сделает эту работу за Вас и делать Вам почти ничего не придется. Жмем F8 (Header). Появляется “серое невзрачное” окно с “расшифровкой” параметров заголовка ехе файла.
    Жмем F3 (Edit). Поверх “невзрачного” окна появляется “цветное” фиолетовое. В нем перечислены все параметры заголовка с указанием их адресов и значений. Со скучным лицом листаем ближе к концу и находим там параметр Checksum. Справа указано его значение (собственно контрольная сумма) в шестнадцатиричном и десятичном выражении, оставшаяся “в наследство” от оригинального НЕпатченного файла. Снова жмем F3 и, о чудо, строка окрашивается в желтый цвет и контрольная сумма меняет свое значение. Можем поверить Hiew, а можем найти на форумах или в книгах и посчитать вручную. :) Если “все устраивает” жмем F9 (Update). Мелькают окна, все пропадает… Это конец, думает непосвященный читатель. Но когда пыль осядет, контрольная сумма оказывается корректной. Недоверчивые могут снова зайти в упомянутый диалог и сравнить Checksum с бережно сохраненным до экзекуции в бакапе на бумажке. Можно выходить из Hiew по Esc и переходить к этапу тестирования своего поделия.

    11. Получив запатченный файл можно пробовать подменить termsrv.dll в целевой ОС.
    В силу защитных механизмов Винды от изменения системных файлов, равно как запрета на запись запущенных программ (sharing violation) потребуется остановка службы Terminal services (см. в комментариях других пользователей выше) и замена копий dll во “всяких WinSxS” итп, дабы самовольная Винда даже и думать забыла о попытках восстановления непатченного варианта.

    Если все работает, значит Вы стали кулхацкером или сделали первый ОСОЗНАННЫЙ шаг на этом пути. Никто не мешает Вам ковырять и познавать дальше, делая мир лучше и добрее. В нете есть много инструкций и целых тематических форумов для тех кто хочет думать своей головой, а не только потреблять ширпотребную порнуху от Матрицы.

    Не побрезгуйте опубликовать список измененных байт (получить его можно с помощью все того же “стокового” “FC /b File1 File2″) для других, менее искушенных пользователей, здесь и/или на других ресурсах, сделайте добро ближнему, как завещал Господь и прославьте свое имя в анналах хакерской истории.

    По списку изменений можно изготовить .CRK файл (для патчеров, понимающих этот древний формат), либо изготовить patch.exe с помощью какого либо патч-мейкера, коих, за годы эволюции, написали десятки и сотни. Только выбирайте тогда “с поддержкой Windows Vista/7″ ибо старые, хоть и хорошие-годные, но ничего не знают об Escalate privileges, и Винда тупо не позволит им что либо патчить в Windows/System или Program Files. В инструкциях следует упомянуть о требовании остановки службы терминалов, либо использовании патчей на файлах в отдельных папках с последующей подменой в system32 силами самих пользователей. В любом случае, список изменений публикуйте, не жлобьтесь на “лавры”, поск кому-то возможно, придется трахаться вручную и инфа позволит найти альтернативное решение. Авторский патчер все это делает автоматически, включая работу с WinSxS – смотрел код, но найти такой патчмейкер, чтобы все это учитывал, думается будет не просто.

    Всем успехов!

    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Выбор языка: