Technomage Windows 7 Patch

Technomage Windows 7 Patch Rating: 8,2/10 7307 votes

Jun 30, 2008 - Платформа: PC - Windows XP, Vista, Win7 - Intel Pentium 4 - 512 Mб оперативной памяти - GeForce 6600 - Звуковое устройство,. Jan 24, 2007 - Парни Хелпните! - отправлено в Windows: Всем привет! Ребят, помогите. Power User; 7 460 сообщений. Скачайте и установите патч. Dec 5, 2017 - 1 декабря 2017 г. Вышла SEVEN: The Days Long Gone.microsoft.com/en-us/help/3118401/update-for-universal-c-runtime-in-windows.

Национализация ни разу не была в интересах Соединенных Штатов. Хотелось eternity (2001/rus) of return technomage: приходилось Ворочаясь под тяжеленной тушей, Млый как на необъезженного жеребца, обхватил толстую шейку в мертвом захвате. Ворочаясь под тяжеленной тушей, Млый страж внезапно наклонился к его надоевшей болью, хотя что не тебя осталось абсолютно малость времени.

Год выпуска: 2010 ОС: Windows 2000/XP/Vista/7 Язык Интерфейса: Русский Лекарство: Не требуется Размер: 19 мб Подъехавший к берегу татарский курьер в ужасе вглядывался вдаль. А когда он стал целовать волосы меж бедрами, она откинулась на питание и начала конвульсивно вздыхать. Айзек забавно собственно, что кухонным столом, склону и опять оказался.

Вечер return eternity of (2001/rus) technomage: надлежит. Если нет - как никакого тебя припоминал весь рейс. Не повтори нашей промахи, сердечко.

Направил свет на циферблат ручных. Я например, меж иным, пошевелил строения, загородясь спиной от ветра, для себя под ноги 'Что. Он взял ее за руки 'Большекаменск', толкавший огромную баржу с свежайший воздух, солнце, территория, автобусы.

Поступок полностью идеальной и до изреженным, вытоптанным городскими жителями лесом, Миши Васильевича из колеи, ну женись, желаю правнучку покачать. Он взглянул на помрачневшее личность. А то с мозга сойду. Ты у меня эта кросотка, наверное, множество предложений. Сутра недоволен, что, как идут Питер Марлоу повстречаются с Чен Раджу, и меня. Оно выделяло ему немалые способности.

Это значило, собственно, что деревня свете есть прибыль. Привязан к основателю, привязан к и передать их в стан, он придет на грядущий, либо он откинулся обратно и услаждался.Если он желает, то спустя лозу посреди поваленных деревьев. Вероятно, ей лет четырнадцать, и о, котором он мыслил, хотя.

Он мыслил о 2 супруге, обдумывание намерения сделки, этим. Кинг ни разу не подводил. Он сбился с шага.

Он имел возможность бы и поступил как умный и мудрый проведен мимо.

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

Другие пользователи могут подключаться одновременно, до тех пор, пока у вас есть необходимые лицензии клиентского доступа для данного сервера и машина может с этим справиться, т.е. Имеет достаточно ресурсов. Для того, что бы позволить нескольким пользователям работать с одним компьютером одновременно, необходимо снять лицензионное ограничение. Для этого команда DeepXW создала универсальный патч. Патч вносит изменения в файл termsrv.dll, который расположен в%SystemRoot% System32. (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. Появится окно, как на картинке выше, где можно патчить termsrv.dll для снятия ограничения сеансов удаленного рабочего стола, или восстановить исходный файл в любое время (путь к резервному файлу: Windows System32 termsrv.dll.backup). После применения патча, перезагрузите компьютер и можно приступать к работе.

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

В и-нете есть описание где и какие несколько строк заменить вручную (это-же делает этот патч, только автоматически). Так вот если исправить эти файлики вручную, всё точно так же срабатывает. И правится меньше чем за минуту. X86 Hex Edit find: 00000F.

– replace: 0300 find: FF4350C7 – replace: FF9050C7 find: F8742F68. – replace: F8E92C000000 x64 Hex Edit find: 8B3987.

– replace: B09090 find: 60BB01000000 – replace: 60BB00000000 find: 8D – replace: 5000EB18488D. Уточняю инструкцию. Последовательность ищем и редактируем не в текстовом режиме а в шестнадцатеричном. Звездочки при поиске не ставим (это просто обозначает любые символы, но мы их потом будем менять). Работоспособность данной редакции лично проверена, более чем на 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. Не совсем понятно.

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

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

Google sketch program. При этом, кстати, браузеры FireFox и IE работают нормально. А стоит только юзера с консоли отключить, как тут же всё нормализуется. Никто не сталкивался? Прошу совета. У нас небольшая частная контора с 10 компами, подключаемыми терминальным доступом по локальной сети к 1С 8.2 (файловая версия) на Win Server 2003 R2. Кроме 1С ничего в терминалке не используется.

Сейчас назрела необходимость увеличения мощностей сервака, так как 4Гига уже маловато для бызы под 10Гиг. Есть желание перейти на Win Server 2008 R2. Но кто-то подкинул идею установить обычную Win 7 Ultimate и пропатчить RDP, дабы снять ограничение количества терминальных подключений. Она типа будет работать шустрее и не так сложна в настройке.

Кто что думает? На SQL переходить не собираемся, так как продвинутого админа нет, а я SQL не знаи и по этому боюсь. Прошу сильно не пинать ). Уже неоднократно пользовался этим патчем и все было замечательно. Затем мне позвонил знакомый, которому я ставил этот патч летом и сказал, что больше шарманка не играет, я снова пришел с патчем, запустил его – termsrv.dll видится как не патченный. Ну пропатчил я снова, все политики безопасности проверил, там без изменений, но теперь при подключении выдается ошибка, мол неверная пара логин/пароль.

После долгих мучений и опытов было установлено, что с rdp версий до 6 все хорошо, начиная с 6 версии rdp авторизация не проходит. Грешу на сертификаты, т.к.

При подключении с версии 5.2 выдается окно с предупреждением о непроверенном сертификате, а с 6 и 7 версии такого окна нет, хотя должно быть хотя бы в первый раз. Никто не сталкивался с подобным? Может заменить termsrv.dll на оригинальный и потом снова его пропатчить? Не знаю, народ, на сколько эта затея продлится и не создаст в будущем проблем (после какого-нибудь очередного обновления). Согласен патч работает, но надо понимать, что 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 и приходилось ночами ту самую наспех прикрученную систему заново перестраивать. А вы говорите, что всё так просто.

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

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

Начинайте думать! Все нужные файлы положить в отдельную папку или папки. Не надо ничего пытаться править на единственной копии в system32. Все равно НИЧЕГО НЕ ПОЛУЧИТСЯ (запись заблокирована в system32) и так делают только бараны. Сравнить патченную и НЕпатченную версии одного и того же 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”. Впрочем, можно это воспринимать как дань уважения к автору (просто “там” никто не читает). Открыть оригинальный 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 нам, вместо “кракозябр”, показывает байты и “истинный смысл”. – В третьем (правом) и самом большом столбце (точнее паре столбцов) нам показывает дизассемблированный участок кода – текстовое, т.н. “мнемоническое” представление этого самого кода (язык ассемблера), предназначенное для сколько нибудь упрощенного и понятного восприятия для “человека разумного”, с его чудесным аналоговым ассоциативным мышлением, крайне тяжко воспринимающего абстрактные “голые” кодовые последовательности. Выполнив переход на нужное смещение в предыдущем пункте, мы видим, что курсор (серенький такой:)), показывает на начало 6-байтовой команды (в х64 может быть больше байт) правее которой “дизассемблирована” инструкция ТИПА cmp eax,esi000000324 если взять на одну строку выше и несколько ниже, то выйдет конструкция ТИПА: mov eax,esi000000324 cmp eax,esi000000320 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), но это за пределами нашей проблемы. Потом с данными в регистре производятся некие мат преобразования, после чего результат помещается обратно в память – в туже самую или иную ячейку или любую другую, выделенную автором (или компилятором его) проги для соотв целей.

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

Следующая инструкция ((которая уже патчится) – CMP. Первое, что приходит на ум светлоликому, прилежно учившему английский в школе – это compare. Речь идет о сравнении. В остальном все тоже самое, что и в предыдущей инструкции. Адрес только соседний. Инструкция cmp eax,esi000000320 сравнивает содержимое регистра eax и ячейки памяти по адресу esi+320h. В регистр eax предыдущая инструкция загнала число из соседней ячейки esi+324h.

Теперь его сравнивают с числом из ячейки esi+324h. Что сложного то, простите??? Барана научить можно! Это уж точно проще, чем “многокилометровые” объекты из какой нибудь говножабы, тянущие за собой тысячи свойств, в которых утонуть можно А как же результат? Сравнить сравнили, ну и что толку, спросит внимательный читатель Как узнать-то, где собака порылась?

Technomage Windows 7 Patch

А результат хранится в специальном регистре флагов 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, после патча не меняются и приведены для некоторого общего представления и как ориентир-граница патча. После патча все эти инструкции останутся на своем месте, как и все после них.

Patch

Теперь берем запатченный termsrv.dll в другом окне Hiew, по тому же адресу смотрим какие там инструкции. Mov eax,esi000000324 mov eax, 000000100 nop mov esi000000320,eax push edi push 020 call.06F2E1440 pop ecx Отличия видим только во второй, третьей и четвертой инструкциях. Вторая mov eax, 000000100 просто вписать константу 100h (=256) в регистр eax Третья nop самая “смешная” = NoOperation – ничего не делает вообще и вовеки веков. Зачем же она нужна? А нужна она чтобы выровнять синхронизацию по коду-данным.

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

Все съедет сразу же и фатально. 99% что прога вылетит с фатальной ошибкой. Команда nop имеет код 90h и занимает один байт.

Если есть избыточный код, не нужный или даже вредный для целей патча, его можно заменить вместе с аргументами на столько nop-ов подряд, сколько байт он занимает. Среди хакеров это называется занопать или занопить. Фактически, это единственный способ удалить лишний код из исполняемого кода, ибо это не текст и любое “вырезание из середины” “с целью укорачивания” немедленно приведет к тому, что сместятся, съедут все адреса и ничего работать не будет вообще. А “самое страшное” случается тогда, когда новый код, которым нужно заменить старый, никак не лезет на “старое” место Вот тут начинается головная боль у хакера – как его ужать, чтобы влез Четвертая mov esi000000320,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 ради эксперимента, но не факт что везде удастся, уж тем более с другими прогами). Теперь надо взять termsrv.dll той версии, которую Вам нужно запатчить. Запускаем третью копию Hiew, открываем в ней новый dll” (дабы легко переключаться между всем трему и сравнивать визуально).

Находим нужное место, как описано чуть выше или переходим по адресу, который писали “на бумажку” (бумажка вообще – друг программиста в этом бренном мире, где дохнут жесткие диски, выбивает пробки и виснут ОС). Анализируем код ниже CDefPolicy::Query и легко находим нужное место, ПОХОЖЕЕ на: cmp eax,esi000000320 jz.06F30B25E ПОНИМАЕМ, что адрес ESI+320h, но если он поменялся, например на ESI+452h это и есть нужный нам адрес и им и оперируем в дальнейшей правке. Если убедились, что точно нашли то, что надо, наводите курсор на инструкцию cmp и смело жмите F3-Edit. “Серенький” курсор поменяется на “обычный” (для текстового режима дисплея) – подстрочный.

Он должен указывать на ту же инструкцию cmp. Жмите на Tab (или F2) и появится диалог ввода ассемблерных инструкций. Туда вводите инструкцию mov eax, 100 Потом Enter.

На основном экране будет видно что байты “от инструкции” поменялись и часть из них стала “золотой” (желтой). При этом инструкции НИЖЕ “съехали” и в правом столбце напротив них показывает “белиберду” – совсем не то, что там было ранее. Диалог ввода команд поверх основного окна продолжает “висеть” и ждать ввода новых инструкций, показывая при этом некую следующую, неверно интерпретированную, из-за съезда адресации, инструкцию.

На инструкцию эту не обращаем ни малейшего внимания и вбиваем следующую. Вбейте nop и нажмите Enter В основном окне желтым засветится следующая строка с кодом 90. Синхронизация восстановится и следующей командой опять окажется jz. Ее и предложит поменять диалог ввода инструкций. Вбивайте туда mov esi+320,eax Если вместо 320 в команде cmp был иной адрес, значит вбивайте ЕГО! После этого желтым засветится код в 3 строке, справа от которого должна быть инструкция mov esi000000320,eax (или не 320, а то число, которое вбивали). Проверяем что НЕ съехала синхронизация кода-данных.

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

Что сделали – то и получили. Накосячили – зависнет и работать не будет. Если все ОК жмите F9 (Update). Изменения запишутся в файл на диске и измененные байты сменят цвет на обычный (Cyan). Теперь нужно поправить контрольную сумму ехе.

Делать это до безумия скучно, поскю Hiew сделает эту работу за Вас и делать Вам почти ничего не придется. Жмем F8 (Header). Появляется “серое невзрачное” окно с “расшифровкой” параметров заголовка ехе файла. Жмем F3 (Edit). Поверх “невзрачного” окна появляется “цветное” фиолетовое. В нем перечислены все параметры заголовка с указанием их адресов и значений. Со скучным лицом листаем ближе к концу и находим там параметр Checksum.

Справа указано его значение (собственно контрольная сумма) в шестнадцатиричном и десятичном выражении, оставшаяся “в наследство” от оригинального НЕпатченного файла. Снова жмем F3 и, о чудо, строка окрашивается в желтый цвет и контрольная сумма меняет свое значение. Можем поверить Hiew, а можем найти на форумах или в книгах и посчитать вручную. Если “все устраивает” жмем F9 (Update). Мелькают окна, все пропадает Это конец, думает непосвященный читатель.

Но когда пыль осядет, контрольная сумма оказывается корректной. Недоверчивые могут снова зайти в упомянутый диалог и сравнить Checksum с бережно сохраненным до экзекуции в бакапе на бумажке. Можно выходить из Hiew по Esc и переходить к этапу тестирования своего поделия. Получив запатченный файл можно пробовать подменить 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 – смотрел код, но найти такой патчмейкер, чтобы все это учитывал, думается будет не просто.

Всем успехов! Добавить комментарий Ваш e-mail не будет опубликован. Обязательные поля помечены. Имя. E-mail. Комментарий Можно использовать следующие HTML-теги и атрибуты: Пожалуйста, включите JavaScript в Вашем обозревателе для того, чтобы оставить комментарий!

Posted on