alex_emilsson


Emilsson Magazine. Обо всём, кроме политики


Previous Entry Share Next Entry
Проверка на вшивость: проект Win3X
alex_emilsson
Дополнительная безопасность ещё никому не помешала...

На наши компьютеры регулярно попадают десятки различных компьютерных программ (иногда, даже если мы этого не хотим).Совершенно очевидно, что далеко не все они одинаково полезны. Хорошей защитой против вредоносных программ являются антивирусные программы, но и они иногда бессильны. Кроме того, антивирусы иногда причисляют к вредоносам разного рода "кряки", "патчи"(в плохом смысле этого слова), "кейгены", "активаторы", и т.п. В результате, для того, чтобы заставить работать какую-нибудь прогу или игрушку, нам приходится отключать антивирус, и, таким образом, подвергать компьютер повышенной опасности - ведь вполне возможно, что запускаемый патч или кейген, помимо своей основной функции содержит ещё немало "интересного". Так что же делать?

Если угрозу предотвратить нельзя - ведь Вам же хочется запустить тот злосчастный кейген, без которого ничего не заработает, не так ли - то почему бы не попытаться хотя бы получить по возможности как можно более исчерпывающую информацию о последствиях запуска? Хорошая мысль, но как этого добиться? Похоже, что некоторые возможности всё-таки существуют. Я хотел бы предложить Вам одну свою интересную разработку, которая могла бы помочь в этом деле.

Как всегда, хорошие идеи появляются неожиданно. Так было и здесь. Всё началось с того, что я купил в магазине лицензионный диск с одной отличной игрушкой (какой - не скажу :0 ). Придя домой, я сразу же, не откладывая в долгий ящик, сразу же приступил к её установке. Дело это нехитрое, да вот только после установки при первом запуске игрушка потребовала произвести онлайн-активацию через Интернет (что вполне логично, ведь диск-то был лицензионный). Но как назло, именно тогда у меня как раз не было возможности доступа к Интернет (она появилась только через несколько дней), а опробовать покупку хотелось как можно быстрее. И я решил, а почему бы, собственно, не попробовать узнать, что это за активация такая, и как она устроена, так сказать, "изнутри". Хороших профессиональных, и, главное, удобных  дебаггеров/декомпиляторов у меня не было (нет, была, конечно, парочка - один слишком специализированный, другой со слишком непростым консольным (!) интерфейсом), поэтому я решил попробовать написать, нет, не дебаггер, конечно, а специальную прогу, которая могла бы перехватывать вызовы WIndows API, и выводить результаты, например, в текстовый файл (можно и на экран, но если целевая программа при запуске переходит в полноэкранный режим, то вывод на экран(в окно) это не слишком хорошая идея). Написать такую программу можно, но это заняло бы немало времени (и его у меня не осталось бы на всё остальное), поэтому я решил реализовать более простую и менее ресурсоёмкую(в плане выпитых чашек кофе) идею. А идея заключалась в том, чтобы сделать не полноценную программу, а просто набор dll-библиотек, которые имитируют собой обычные библиотеки Windows, но вызов каждой функции сопровождается вначале анализом её параметров и выводом результатов в текстовый файл, а после разбора управление переходит на ту же функцию уже в обычной Windows DLL. Чтобы эти библиотеки-имитаторы могли работать в целевой программе, в ней с помощью текстового редактора ("Блокнот" не подходит, а вот встроенный редактор из "Far Manager" - то, что надо) нужно было бы вручную (и очень, очень аккуратно) исправить имена всех используемых WinAPI-библиотек. Имена правились просто - в имени библиотеки последняя буква исправлялась на "X" или "x" (регистр не важен, просто для красоты). Ну, а поскольку в Windows имена почти всех WInAPI-библиотек заканчиваются на "32", и после правки они оканчивались теперь на "3X", то весь проект получил кодовое имя "Win3X" - по аналогии с WIn32, разумеется.

Вся разработка заняла несколько дней - закодировать парсинг подробных описаний WinAPI нелёгкая, однако, задача - и "Win3X" был готов к использованию. Протестировав проект на целевой программе (той самой игрушке) я получил неплохие результаты: подробный список логов вызовов WinAPI функций. С их помощью удалось установить некоторые ключевые области процедуры активации, и таким образом, я примерно знал, где именно нужно использовать отладчик. Впрочем, сразу же скажу, что "взломать" активацию той игрушки мне не удалось (с теми примитивными отладчиками, которые у меня имелись, это заняло бы слишком много времени), да и к тому времени у меня уже исправно работал Интернет, и я без особого труда активировал игрушку на офсайте разработчиков. Зато, с помощью отладчика, мне удалось установить несколько довольно хитрых антиотладочных приёмов, использованных в процедуре активации; я слышал о них и раньше, но воочию наблюдать не приходилось. И конечно, же, поскольку некоторые из них были основаны на манипуляциях с параметрами некоторых функций WinAPI, эти приёмы тут же перекочевали в мой "Win3X" :)

После того, как игрушка была успешно активирована через Интернет, потребность в "Win3X" отпала, и я его забросил. Но недавно (после написания статьи о VPets) я о нём снова вспомнил, и решил, а почему бы не использовать эти библиотеки для проверки на "вшивость" различных псевдовредоносных программ, вроде различных патчей и кейгенов. Эти программы в любом случае приходится запускать, и поэтому подробный отчёт об их деятельности никому бы не помешал. И сейчас я хочу предложить этот проект Вам.

Как можно использовать "Win3X" в деле проверки файлов? Это делается так, как описано ниже.

Вначале скачайте файл "Win3X_alpha.exe" по одной из ссылок, приведённых ниже; файл представляет собой обычный SFX-RAR архив, запакованный с помощью WinRAR, а для того, чтобы он не рассыпался по дороге, я запаковал его с помощью пароля "win3x" {кавычки НЕ нужны; все буквы, разумеется, строчные латинские}.

 Затем распакуйте его. Все файлы в архиве - dll-библиотеки + дополнительно инструкция. При распаковке можно выбрать любую папку для установки. Все распакованные библиотеки после установки будут сперва недоступны для использования. Чтобы их использование стало возможным, нужно будет: а) скопировать их в папку, где находится программа, которую Вы собираетесь проверить; правда, тогда каждый раз при проверке очередной программы их придётся копировать в её рабочую папку заново (так как я проверял только одну программу, я использовал именно этот вариант); или ещё вариант - поскольку кейгены обычно не взаимодействуют ни с какими компонентами программных продуктов, они сами могут быть скопированы в папку установки "WIn3X"; б) скопировать их в папку %System32%, т.е., например, "C:\Windows\system32" - тогда библиотеки будут доступны всегда, при запуске любой программы; в) никуда ничего не копировать, просто добавить путь к папке установки "Win3X" в переменную окружения PATH.

Теперь о подготовке проверяемой программы. Нужно будет внести в неё изменения, так что сначала сделайте её копию. После этого можно работать с исходным файлом, а когда он будет не нужен - удалите его и восстановите оригинал из сохранённой копии. С исходным файлом придётся "поработать руками" при помощи какого-нибудь текстового редактора. Замечу, что Вам придётся иметь дело с редактированием двоичного, а не обычного текстового файла, поэтому соблюдайте осторожность! Некоторые редакторы лепят символы переноса строк где надо и не надо (даже в двоичных файлах), так что они могут сделать Вашу программу неработоспособной. Как я уже писал в начале статьи, я использую удобный во всех отношениях встроенный редактор из "Far Manager 1.70". Там также имеется отличная встроенная программа просмотра, одной из уникальных черт которой является возможность просмотра содержимого файла прямо во время записи в него, и если запись происходит в конец файла (т.е. файл увеличивается в размере), то окно просмотра прокручивается автоматически (или по Ctrl+PgDn) и отображает самые последние записанные данные.
Какие же изменения нужно сделать в исходной программе? Открывайте файл в редакторе, находите и меняете все имена используемых библиотек, просто заменив последнюю букву имени на латинскую "X" или "x", в зависимости от регистра исходного имени (вообще-то разницы нет, просто для красоты; можно везде использовать только "X"). ВНИМАНИЕ, менять нужно имена только тех библиотек, которые представлены в папке установки "Win3X" !!! На данный момент это:
 
  1. KERNEL32 меняем на KERNEL3X;
  2. SHELL32 меняем на SHELL3X;
  3. ADVAPI32 меняем на ADVAPI3X;
  4. USER32 меняем на USER3X;
  5. NTDLL меняем на NTDLX;
  6. SHLWAPI меняем на SHLWAPX;
  7. VERSION меняем на VERSIOX.

Вот и всё! Теперь можно запускать Ваш активатор, патч, кейген, и т.п. По окончании его работы вы сможете просмотреть логи всех использованных библиотек. Они будут иметь имена вида "KERNEL3X.log", "SYSTEM3X.log", и так далее. Для каждой вызванной функции в логах будет иметься запись, содержащая имя функции, список параметров (название, тип, исходное значение), тот же список параметров после выполнения функции (если какие-то параметры были изменены), и возвращаемый результат (тип и значение), если функция возвращает какой-либо результат {а практически все WinAPI-функции возвращают HRESULT :DWORD}.

Теперь информация об ограничениях данного проекта:
  •  В рамках проекта поддерживается обширный список WinAPI (точно не считал, но более, чем 250 различных функций), но разумеется, этот список далеко не полный;
  • Все библиотеки корректно работают для однопоточных приложений; для многопоточных возможны проблемы с выводом логов (после вызова CreateThread и перехода к новому потоку, а также после взаимодействия с критическими секциями в логах выводится мусор; после вывода мусора вновь выводятся нормальные данные, но нельзя сказать, к какому потоку они принадлежат); впрочем, всевозможные патчи и кейгены обычно простые однопоточные приложения и это не должно быть особой проблемой;
  • В списках параметров числовые значения выводятся только в hex-формате; структуры данных представлены только указателями (т.е, подробное описание структуры со значением каждого её элемента не приводится); для указателей данные, на которые они ссылаются, доступна только для строк и чисел (т.е., выводится значение строки или числа).
А теперь о САМОМ ГЛАВНОМ - каким образом Вы можете помочь развитию проекта "Win3X".

Вначале, просто скачайте его с одного из файлообменников, по ссылкам приведённым ниже:
< Замечу, что файл "Win3X_alpha.exe" имеет небольшой размер, так что Вы спокойно сможете скачать его, и не покупая платный доступ. >
После установки и использования (по инструкциям, приведённым выше, или в установочном архиве) я очень хотел бы услышать (точнее сказать, прочитать 8) ) все Ваши мнения и замечания по поводу работы "Win3X".
Чтобы не засорять блог излишней информацией, все сообщения об обнаруженных ошибках пишите прямо мне на e-Mail, указанный в моём профиле. В качестве темы укажите "Win3X", чтобы сразу было видно, о чём идёт речь. В первую очередь будут рассматриваться сообщения об отсутствующих функциях вида "Точка входа функции такой-то не найдена в библиотеке такой-то". Проект предусматривает широкий спектр функций, но, разумеется, я не мог учесть всё, так, что...

Сюда, в блог, в виде комментариев, друзья, можете писать все ваши предложения (желательно дельные) по поводу улучшения этой программы - какой функционал нужно добавить, изменить, или может быть, что-то следует удалить? Изначально я делал всё это для своих собственных нужд, и меня лично всё устраивает, но может быть, это не очень удобно для Вас, так что советуйте, не стесняйтесь! Чтобы оперативно следить за всеми изменениями, Вы можете стать постоянным подписчиком моего блога, или присоединиться ко мне в "Твиттере" (ссылка есть в профиле), как Вам больше нравится.

Кроме вышеперечисленного, друзья, Вы также можете поддержать этот проект материально. Изначально этот проект конечно же, бесплатный, каковым он и является в том самом оригинальном виде, в котором он доступен сейчас. Если в него понадобится внести мелкие косметические изменения, то это, конечно же, не составит мне никакого труда. Но если изменения будут существенными, это может занять несколько часов или даже дней работы, а тратить такое количество времени просто так как-то не слишком хочется; в конце концов, у меня ведь есть дела и поважнее...
Так что, оцените проект "Win3X" по достоинству, и если он Вам действительно понравился, то Вы можете помочь его развитию, перечислив любую сумму (минимум 20 рублей, максимум - сколько пожелаете) на кошелёк Яндекс.Деньги за номером  410011040769854

С нетерпением жду Ваших отзывов!

?

Log in

No account? Create an account