Что такое кряк как им пользоваться. Крэкинг: практика взлома и теория защиты. Изучаем содержимое папки с установочным файлом

Итак, начнем с теории. Crack (крэк, кряк) - программа, позволяющая осуществить взлом защиты программы, установленной разработчиками для ограничения функциональных возможностей. Как правило, кряк создается для массового использования, и создается программистами-энтузиастами без преследования выгоды. Существуют целые коллективы программистов, занимающихся взломом ПО, например «TEAM ROR», «Team EQUiNOX», «BEAN», «SSG» и другие. Для слова кряк используются следующие выражения: лекарство, таблетка, медицина, пилюля, аптека и т.п.. Вот самые типичные способы защитить программное обеспечение от "несанкционированного" использования:

Условно бесплатное ПО (shareware) - программы которые можно бесплатно скачать и использовать определенный промежуток времени по прошествию которого за программу придется заплатить, если Вы решили пользоваться ей дальше. Срок бесплатного пользования программой составляет, обычно, 30 дней.

Демо-версия (demo) - программы данного типа, как правило, предназначены для того, чтобы пользователь смог оценить возможности программы. Демо-версия обычно не полнофункциональна (часть опций программы может не работать) либо имеет ограничения на применение программы. Например, программа в демо режиме может обрабатывать всего 1 файл либо создавать какой-то чертеж, но без возможности его распечатать или сохранить результаты работы на диске. Т.е. программы данного типа позволяют лишь оценить саму программу, ее интерфейс и степень ее полезности для пользователя. Полнофункциональную версию необходимо приобретать у разработчика.

Триал- версия (trial) - в принципе, полный аналог условно-бесплатного ПО (shareware) за исключением того, что часто в trial-версиях пользователю предоставляется не определенный бесплатный срок использования программы (30, 14 дней), а определенное количество запусков программы. Можно сказать, что программы типа trial и shareware это одно и тоже.

Защита от копирования (retail software) - Эта защита препятствует только тому, чтобы пользователи не делали копии и не устанавливали программное обеспечение на нескольких компьютерах, не покупая лицензию.

Защита на дисках (игры) - эта защита обычно используются в играх; Для запуска игры вы должны иметь оригинальный компакт-диск. Типичным кряком этой защиты является NoDVD или NoCD, реже - специальный драйвер.

Существует еще множество других типов программной защиты, от очень простого до чрезвычайно сложного. Удаление, отключение или обход защиты - очень трудное и интересное занятие для крэкера. Удаляя защиту, взломщик "побеждает" программиста (или целые программные группы), ответственных за создание алгоритма защиты. После того, как программа сломана, крэкеры, обычно, выкладывают свежеизготовленный кряк на общедоступное скачивание, чтобы продемонстрировать свои способности миру.

Серийный номер, патч, генератор ключей и т.д., принято называть кряком или крэком (от англ. crack). Теперь мы расскажем о каждом подробнее.

Существует несколько основных типов кряков:

Серийные номера aka сериалы (serial numders, s/n). Это самый простой тип кряка - последовательный специальный текстовый код, позволяющий снять ограничения или демонстрационный период работы программы. Чаще всего способен работать на нескольких компьютерах, если не проверятся разработчиком через интернет. Чтобы зарегистрировать программу, использующую этот вид регистрации, нужно: Запустить программу и, обычно на вкладке О программе -> Ввести серийный номер или регистрация, вставить этот код.

Регистрационные файлы aka ключи (regfiles, keyfiles). По существу, рег-файлы очень похожи на серийники, обычно это специальный файл с расширением *reg. Если открыть кей-файл любым текстовым редактором, то можно увидеть серийный номер, если он, конечно не зашифрован. Чтобы активирвать программу, регистрирующуюся этим способом, обычно нужно запустить *reg файл и просто согласиться с изменениями реестра. Бывают исключения среди *reg файлов, это могут быть просто файлы, не относящиеся к реестру; их нужно скопировать в папку с программой, также есть вариант типа lisence.dat и им подобных случаев. Разработчикам программы довольно легко противостоять распространению кей-фалов, поскольку, в большинсве случаев, они могут просто заблокировать ключ, добавив его в черный список. Например, ключи Касперского Антивируса блокируются таким способом.

Генератор ключей aka кейген (keygenerator, keymaker, keygen) - небольшая программа, которая генерирует криптографический ключ для кодирования данных или псевдоподлинные CD-ключи или серийные/регистрационные/активационные номера для регистрации/активирования ПО. Генератор ключей сделать намного сложнее, чем любой другой кряк, поскольку крэкер должен не только полностью понять последовательный алгоритм генерации объектного кода, но также и быть в состоянии обновить его. За частую, создание keygen"а занимает несколько дней или даже неделю. Keygen использует те же алгоритмы, что и защита, поэтому его создание - это также результат взлома защиты, а точнее успешного исследования алгоритмов защиты с помощью отладчика либо дизассемблера. Так, можно скачать бесплатную демо (trial) версию и с помощью кейгена превратить ее в полнофункциональную, введя сгенерированный серийный номер.

Разработчики ПО пытаются предотвратить пиратство, используя активацию продукта, требующую от пользователя соединиться с интернетом или позвонить по телефонному номеру для дальнейшего использования ПО, как, например, Adobe . Новейшие кейгены также содержат метод обхода активации продукта. Также, существуют программы, которые сами генерируют специальный ключ, который нужно предоставить разработчику вместе с платой, чтобы получить ключ активации. К счастью, многие крэкеры умеют обходить такую защиту. Пример такой защиты можно увидеть в программах EzGenerator, Incomedia Website X5 Evolution и др.

Patch. Патч - самый широко распространенный тип кряков - маленькая программа, которая изменяет целевые программные файлы, чтобы удалить или изменить часть кода, который ответственен за ограничения защиты или регистрационный процесс. В результате исправление или заставляет программное обеспечение "думать", что оно регистрировано; или например, открывает недоступные в демо-вериях ключевые кнопки или закрытые функции или просто удаляет модуль защиты и т.п. Патч легко создать, сравнивая двоичный код регистрированной версии и trial-версии и исправляя различия между ними. Для регистрации программы необходимо скопировать патч в папку с установленной программой и пропатчить *.exe или *.dll-файл.

Один недостаток патчей - то, что, если взломцик случайно изменит часть кода, который необходим для нормального функционирования программы, она будет работать некорректно или не будет работать вовсе. Некоторые разработчики преднамеренно "смешивают" код защиты с кодом программы, чтобы сбить с толку крэкера; однако, опытные взломщики обходят данный вид защиты без проблем.

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

Loader. Loader - программа, предназначенная для запуска взламываемой программы. Обычно просто обходит ограничения на количество запусков или триальное время. Обычно, лоадеры используются, чтобы взломать программное обеспечение с зашифрованными двоичными файлами.

Cracked EXE. Cracked EXE - это взломанный EXE файл, в котором нейтрализован модуль защиты. Также встречаются случаи с Cracked DLL. Скопировав с заменой такой файл в папку с программой вы получите полнофункциональную версию программы. Иногда, *.exe бывают сломаны не до конца, и программа все еще требуют ввести серийный номер, то ее можно ‘добить’, введя любой набор символов, как правило это бывает 11111-11111-11111 или aaaaa- aaaaa- aaaaa.

NoCD/NoDVD. NoCD/NoDVD является аналогом Craсked EXE.

Лекарство - более обобщенная форма всех вышеперечисленных понятий.

Хорошо, теперь мы знаем о типах crack"в и что они делают. Как правильно использовать их?

Во-первых, проверьте загруженный кряк хорошим антивирусом, например NOD32, Kaspersky. Вообще, мы рекомендуем делать это с любым исполняемым файлом, загруженным из Интернета. Помните, что крэкеры никогда не заражают свои кряки вирусами; поскольку один известный крэкер сказал: "Я не собираюсь проводить недели работы, чтобы украсть Ваш пароль ICQ или форматировать Ваш жесткий диск". Тем не менее, советуем ВСЕГДА, проверять кряки антивирусом, перед применением.

Во-вторых, читайте NFO-файл , прилагаемый к кряку! В этом файле, обычно содержится краткая инструкция по применению лекарства, также бывают случаи с ‘Readme.txt’, эти файлы всегда следует читать, перед тем, так использовать кряк. чтение NFO/Readme сохранит Вас от многих проблем позже.

Теперь Вы готовы распаковать и использовать кряк (если это - программа). Если это - патч или лоадер, Вы должны сначала закрыть взламываемую программу, затем открыть NFO-файл и следовать инструкции. Помните, что некоторые кряки не работают как предназначено; в кряке может быть ошибка, или целевая защита программы могла бы быть уже обновлена. В таких случаях Вы, возможно, должны или получить старшую версию программы, или более новую / рабочую версию крэка.

Если все прошло удачно, то, теперь, программа должна работать без ограничений!

Спасибо за чтение нашего маленького гайда; мы надеемся, что он помог Вам или по крайней мере Вам было интересно читать. Мы будем регулярно обновлять это и добавлять подробную информацию, по мере появления новой информации.

Крэкинг: практика взлома и теория защиты

Alexander Antipov

Здравствуй, дорогой читатель! Сегодня мы поговорим на столь интересную и
важную тему как КрЭк и методы защиты от него. Извините, что приходится писать старомодным литературным языком. Просто писать всё современным программерским сленгом я побоялся из-за возможного не прохода статьи в «свет». Поэтому даже смайлыков вы в ней почти не увидите. Ладно, поехали…


Для начала немного теории. Само название «КрЭк» (а в разговорном «КрЯк») переводится как «Трещина», а в разговорном английском как «Кража со взломом». Перевод говорит сам за себя(Прим. Автора - для чайников: крЭкинг - это взлом шароварного(платного, от слова «Shareware») софта(программного обеспечения), с целью получения полнофункциональной версии, разблокировки ограничений, обусловленных нелицензионной или незарегистрированной копией, а также продление/снятие триального (от слова Trial - испытательного) периода или просто убирание надоедающего окна, в котором при каждом запуске вам напоминают о регистрации). Само занятие крЭкинг появилось с появлением первого платного софта. Соответственно сразу нашлись люди(так сказать Робин-Гуды), которым очень не понравилось, что за какое-то программное обеспечение разработчики начали ещё и брать деньги. Они не просто ради практики начали ломать софт, а и свободно распространять свои «КрЯки» в интернете, наверно чтобы принести всеобщую радость халявы в мир (или чтобы дать разработчикам понять, что они смело могут полностью отказаться от всех своих защит, потому что не было ещё не сломанной защиты). Ладно, перейдём к делу…

Чтобы изучить теорию защиты от взлома ПО нужно изучить все тонкости самого взлома. Так что мы сначала начнём именно с него. Возьмём пару программ и походу разберёмся как, что и куда. Вот. В альтернативу всем остальным статьям по крЯкингу я возьму не зарубежный софт, а наш советский, то бишь софт стран бывшего СССР. Кстати, т.к. в России/Украине больше крЭкеров, чем в остальных странах, то в основном наши умельцы действительно очень хорошо защищают свой софт. Но, как известно, из всех правил всегда существуют исключения. Всё. К делу…

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

Я взял действительно нужную программу «Зодчий», которая представляет собой менеджер базы данных СНиПов(строительные нормы и правила) и ГОСТов для архитекторов. В доказательство, что она настолько полезна, я поискал в интернете на неё уже сделанный крЯк. И очень удивился, когда не нашёл ни одного бесплатного крЯка, а самый дешёвый из них стоил порядка 312грн. Что всё равно гораздо дешевле чем лицензия(уж поверьте). Кстати, не спешите качать с Интернета все подряд крЯки на интересующий вас софт, т.к. кроме угрозы «нахватать» вирусов существуют ещё и просто «лохотроны»(пустышки), в которых вам взамен на в будущем высланный вам код вы обязуетесь пополнить крЯкеру телефонный счёт или ещё что-то на подобии этого. Не ведитесь.

Ладно, вернёмся к нашему делу. По нажатии на кнопку «Зарегистрировать» появляется поле с уже введённой половиной пароля и предложение ввести вторую половинку. Давайте попробуем ввести неправильный (вдруг программа и так запустится). К сожалению прога по нажатию на Enter тут же закрылась. «Что ж тут делать?», спросите вы. А я вам отвечу. В данном случае есть 7 подходов. Перечислим каждый из них:

  • Можно открыть редактор ресурсов (ResHacker, Restorator), попробовать найти там диалог Регистрации, удалить и посмотреть не будет ли тупо прога его пропускать передавая управление главной форме.
  • Можно найти адрес команды, которая открывает именно окно регистрации и попробовать заNOPпить(заменить её ассемблерной командой nop (no operator), то есть пустой командой) её. Что в принципе тоже может привести к пропуску.
  • По текстовой ссылке найти заголовок главной формы, примерно вычислить адрес точки входа на неё и используя адрес, который мы получили в прошлом пункте(прямо перед окном регистрации), перескочить с него на адрес главной формы. Это можно осуществить командами «прыжков» jcc . Они делятся на безусловные переходы(прыжки) jmp (от англ. jump «прыжок») и условные ( je,jne …). Детальное описание к ним вы можете получить в самоучителе по ассемблеру.
  • Так же найдя адрес команды, открывающей окно регистрации (методом поиска по тексту, трассировки и отладки с использованием брЭйкпоинтов (breakpoint – точка остановки)) можно идти вручную «вверх» по течению программы(то есть полностью проследить ход её развития в обратном направлении) до тех пор, пока мы не найдём сравнение/опрос данных о регистрации. То есть при запуске программа ведь тоже «смотрит» зарегистрирована ли она или нет. И переключить эту «развилку». Тогда без всяких паролей программа будет «думать», что она зарегистрирована.
  • Узнать сам пароль. Это возможно(но далеко не всегда) сделать прогонкой проги и постоянным наблюдением за регистрами процессора, оперативной памятью и стэком (от англ. stack – «кипа»). Но в большинстве случаев пароль шифруется или просто обрабатывается так, что отладчик его не может увидеть.
  • Ну и самый распространённый метод – это метод переключения «развилки» проверки правильности пароля. То есть перехват выполнения кода(или просто поиск по заголовкам элементов управления) в том месте, где прога именно сравнивает введенный пароль с правильным паролем. Если мы эту развилку переключим на обратную, то можно будет ввести любой пароль (соответственно кроме правильного).
  • Ну и самый крайний метод. Это перехват выхода программы и его отмена. То есть в нашем случае по нажатии на Enter с неправильно введённым паролем программа даёт команду выхода. Что нам мешает перехватить её, узнать откуда она была вызвана и «произвести» отмену её вызова. Недостатком остаётся то, что придётся постоянно вводить любой пароль для работы с программой.

Вот. Чтобы осуществить крЯк хоть одним из этих методов нужно посмотреть не сжата ли программа внешним упаковщиком. Программы часто сжимают в основном из-за защиты, из-за сохранения авторских прав и просто из-за улучшения компактности программы. Самые распространённые пакеры (от англ. pack – «упаковывать»): UPX, AsPack(и AsProtect), PECompact, WinUPack, Telock, NeoLite, Yoda, PE-Shield, Armadillo… Они сжимают как и все(или не часть) ресурсы так и сам код программы, что приводит к невозможности её дизассемблирования (декомпиляции в исходный код ассемблера), отладки(трассировки) и даже редактированию ресурсов. Поэтому перед крЯком обязательно нужно проверить подопытную прогу на «сжатость».

Есть немало программ узнающих чем именно сжата программа и много анпакеров(то есть распаковщиков). Я предпочитаю 2 самых, по моему мнению, лучших из них. Это: PEiD и PE-scan . У каждого из них своя «изюминка»: PEiD может даже показать на каком языке программирования написана прога, а в PE-scan даже встроены некоторые стандартные распаковщики.

Как видим наш «Зодчий» (его исполняемый файл имеет имя ARM_ARH.EXE) ничем не сжат. А PEiD даже показывает нам, что он написан на языке Borland Delphi. Также они оба могут показать наглядную информацию о структуре файла, в которую вам вникать вовсе не обязательно. Т.к. наш файл ничем не сжат мы можем смело приступать ко всему остальному.

Давайте попробуем начать с самого простого, с проверки шифруется ли пароль. Для этого нам понадобится дЭбаггер(от анлг. Debugger – «отладчик»). Я поклонник «OllyDBG». Так как считаю, что эра SoftICE’а уже в прошлом(но он ещё актуален для отладки драйверов). Открываем в нём наш ARM_ARH.EXE, ждём пока Оля («Olly») проанализирует весь код и начинаем отладку. Жмём F9 (Run) , наш Зодчий запускается без exception’ов (от англ. exception – «исключение»). Это означает, что на него «не поставили» никакой анти-отладочной защиты.


Вводим вместо 2-ой половины пасса(пароля) что угодно и скрестив пальцы молимся, что сейчас отловим требуемый пароль. Жмём на Enter, перед нами «предстаёт» окно Olly, в статусной панели которого мы можем прочитать, что возник экзэпшн по адресу 0EEDFADE. В принципе это нам и надо. Теперь «шарим» взглядом по дампу памяти(правое нижнее окно). Тут мы видим всё, что произошло с программой с момента её запуска(переход по адресам, загрузка модулей, строк, вызов функций и возврат из них). Но, к сожалению, пароля мы тут так и не нашли. Но не расстраивайтесь, не всё уж так плохо.

Попробуем такую теорию, а что если полный пароль загружается только тогда, когда мы вводим пароль заново полностью, а не только 2-ю половину. Для этого жмём радио-кнопку «Повторно на этой ПЭВМ» и перед нами появляется абсолютно пустой TEdit(поле для ввода). Вводим снова что попало и жмём Enter. Опять таки вылетает exception с тем же адресом. Ошибка, скорее всего, обусловлена запросом программы на выход. Снова «проматываем» весь дамп в поисках паролей. И… натыкаемся на очень любопытные строки:

0012F0D0 |00FA2E18 ASCII "75ZS8H"

0012F0D4 |00FA2E04 ASCII "A3R6NR"

0012F0D8 |00FA2DC8 ASCII "75ZS8H2238859"

0012F0DC |00F9F170 ASCII "A3R6NR306767043" //если помните, это уже введён-

0012F0E0 |00F9F18C ASCII "A3R6NR306767043-?" ная половина нашего пароля.

0012F0E4 |00F9F128 ASCII "033005"

Хм. Не трудно увидеть, что ASCII-строка "75ZS8H2238859" очень смахивает(по длине) на вторую половину. Стоит попробовать. И… Поздравляю, у нас всё вышло! Скриншот можете посмотреть ниже.

Ну вот. С одним простым крЯком мы справились. Теперь у нас есть пароль, который мы можем продавать за 312грн. Но у нас есть ещё и мозги, поэтому мы его и сохранять не будем, т.к. знаем, что эти действия припадают под статью УК Украины. Поэтому эта статья рассматривается только как наглядный пример, в котором показывается насколько слаба бывает защита у программного обеспечения. И за любое неправомерное использование данного материала ответственность несёт только сам читатель.

Так перейдём к более сложному крЯку. Возьмём очень популярный на сегодняшний день плЭер: Light Alloy. Его сделала наша советская компания-разработчик Softella (http://www.softella.com/).

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

На заголовке окна LA красуется неприятная надпись UNREGISTERED. А сама регистрация проходит в таком виде:

Ну что ж, как вы уже догадались, нам следует искать «развилку» проверки пароля. Начнём. Сначала проверим не запакован ли чем-то наш LA.exe. Отправляем в PEiD и… видим, что он нагло сжат самым популярным пакером UPX.

Чтобы распаковать его лезьте в нЭт по линке и качайте распаковщик UPX’а или скачайте его вместе с GUI (графический интерфейс), мой называется UPX X-Shell 1.02 (http://www.urixsoft.nm.ru/). Откройте его в нём и нажмите кнопку «Распаковать». Если на статусной панели появится надпись «… БЕЗ ОШИБОК», значит всё в порядке.

Теперь вы увидите, что размер LA.exe увеличился с 894КБ аж до 2,75МБ и рядом с файлом появилась резервная копия LA.ex~ со старым размером. Отлично, распаковали.

Теперь к делу. Загружаем наш плЭер в Олли и запускаем(F9 ). Сразу же вылетает экзэпшн. Это первая противоотладочная защита. Но она легко пропускается Олли по нажатию Shift+F9.

Теперь ищём текстовые ссылки (string rпосле eferences), которые соответствуют смыслу. Для этого в главном окне отладки с ярлыком «С» и заголовком «CPU – main thread, module LA» нажмите правую кнопку мыши ->Search for->All referenced text strings и проматывайте в поисках чего-нибудь. Я напал на такую строку: ASCII "Registration is successful. Please restart application."

Двойной клик и мы переносимся именно на тот адрес команда которого подгружает этот текст. По логике, развилка должна быть выше. Идём вверх и видим команду сравнения test и прыжок сразу же неё.

Слово short означает – короткий, то есть недалёкий прыжок. Видим что он осуществляется (это показывает маленькая галочка слева от шестнадцатеричного представления команды) и что он перепрыгивает в этом же файле(LA) на адрес 0050417А. Сама команда je означат jump if equal, то есть прыжок при равности. С адреса 0050417А идут команды присвоения/помещения mov и помещение в регистр общего предназначения edx строки о неправильности кода.

Это означает, что в будущем она по любому вызовется, скорее всего в процедуре которая вызывается командой call (от англ. call – «вызывать») по адресу 00504186. Вот. Тогда пробуем «переключить» стрелку (условный прыжок). То есть мы прыгнем на сообщение «Access code is not valid» уже тогда, когда мы введём именно правильный пароль. А при вводе любого другого пароля программа продолжит своё выполнение вниз по коду и дойдёт до требуемого «Registration is successful». Это самый стандартный и самый простой метод крЯкинга.

Сначала завершим предыдущую сессию отладки нажав Ctrl+F2. Щёлкаем дважды по строке с нашим прыжком (адрес 0050415D) и переименовываем je в jne (jump if not equal). И снова жмём Run (F9).

Увы… Как это ни странно LA показывает всё то же сообщение о неправильности пароля. А это значит, что программа там даже и не проходит… А это просто программистский обман.

Ну что ж, мы не сдаёмся. Стрелки « > », слева от кода команд, означают, что на команду по этому адресу возможен переход программы с какого-то удалённого адреса. То есть на меченый стрелкой адрес совершается прыжок или вызов процедуры.

Тогда давайте попробуем поставить брЭйк(breakpoint) на команду с адресом 0050418B. Для этого нужно «подсветить» мышкой или клавой эту команду и нажать F2. Адрес подсветится выделяющимся цветом. Жмём Ctrl+F2 и снова F9.

Программа всё так же запускается, но при вводе неправильного пароля останавливается именно так, где мы поставили брЭйк и передаёт управление в отладчик. А это значит, что мы с вами не ошибались и что всё-таки мы на правильном пути. Значит нужно подниматься ещё выше дабы найти «настоящий» участок сравнения и прыжок следующий за ним.

Находим ближайшие(впрочем и единственные в этой подпроцедуре, в которой мы находимся) условные переходы:

00504096 |. 0F84 86000000 je LA.00504122

005040E3 75 2A jnz short LA.0050410F

На обоих стоят маленькие галочки(просто они не скопировались как символ). Смело ставим брЭйки на них и перезапускаем отладку. При нажатии кнопки подтверждающей ввод пароля у нас «вылетает» наш брЭйк. То есть всё идёт по плану.

Теперь чисто для теста мы меняем его с je на jne и трассируем методом Step over (покомандная отладка программы без входа в подпроцедуру) . Когда доходим до нашего второго jump’а мы видим, что он тоже «собирается» прыгнуть (Jump is taken). А если он прыгнет мы снова попадём на «… code is invalid». То есть мы столкнулись с двойной перепроверкой пароля.

Это показывает на наличие большего числа извилин у разработчиков чем одна. Хм, но нам то что. Смело меняем jnz (всё равно, что jne ) на обратный ему je и наслаждаемся результатом:

Теперь надо сохранить наши изменения в исполняемый файл. Для этого жмём правую->Copy to executable-> All modifications. Откроется окно «D», нажмите «закрыть» его. И вам предложат сохранить его. Введите что- то на подобии LA(cracked).exe.

Теперь давайте проверим на работоспособность нашу сохранённую программу. Запускаем и опа… Программа «выбивает» две ошибки. Но ведь в отладчике у нас всё работало. А это значит, что разработчики поставили ещё и двойную проверку подлинности пароля при запуске. Для этого они и просили перезапустить программу. Под видом, что она так не может обновиться.

Ну ладно. Загружаем уже LA(cracked) в Олли. Запускаем. Натыкаемся на два exception’а, пропускаем их через щифт и… перед нами красуется всё то же окно с надписью «UNREGISTERED».

Хм… А ведь почему бы не «оттолкнуться» именно от него. Рыщем в текстовых ссылках и находим:

005558A1 |. B9 6C5B5500 mov ecx,LA_c.00555B6C ; ASCII " - UNREGISTERED"

БрЭйк можно не ставить, т.к. программа точно проходит тут(эта ссылка только одна) . Идём вверх в поисках возможных полезных развилок, которых по идее должно быть две…

0055584E |. 75 70 jnz short LA_c.005558C0

0055586D |. 75 51 jnz short LA_c.005558C0

В данном случае маленькие галочки(которые обозначают эквивалентность) показывают нам, что прыжок не состоится. А значит программа «спустится» до «UNREGISTERED». Следовательно нам надо совершить эти прыжки. Меняем их на je , сохраняем изменения и запускаем уже сохранённый файл.

Всё супер. Перед нами предстаёт окошко Light Alloy’я без всяких UNREGISTERED. Отличная работа!

Так. Следующие примеры я буду описывать немного быстрее. Всё-таки вы ж уже тоже опытные…

Возьмём ещё одну советскую прогу SlyControl. Это программа для дистанционного управления компьютером со всевозможных устройств (WinLIRC, Tekram M205, FlyRC2…). Русским, или людям знающим русский язык эту программу можно регистрировать каждый месяц (кстати, куда вводить полный код я так и не нашёл), но мы ж максималисты. КрЯкнем её…

За что мы зацепимся? Хм. Отладчик распознаёт только латинские буквы. Поищем в текстовых ссылках мыло(e-mail) разработчика… Нету.

О, кнопка xUSSR. Ищем… Есть! То, что надо. Но их есть две. Ставим брЭйк на обе.

004165D7 . BA A26C4A00 mov edx,SlyCtrl2.004A6CA2 ; ASCII "xUSSR"

00416FED . BA 2C6E4A00 mov edx,SlyCtrl2.004A6E2C ; ASCII "xUSSR"

В принципе, программа полнофункциональна, остаётся только лишить её этого NUG’а(сообщения, напоминающего о регистрации). Трассируем… Пропускаем пару экзэпшнов и «натыкаемся» на первый брЭйк(для интереса можете убедиться в том, что прога не будет проходить через второй брЭйк). Но окно регистрации ещё не появилось. Так что трассируем дальше, что бы найти именно его вызов. И доходим до:

00413D6D FF92 E8000000 call dword ptr ds: ; jmp.&vcl60.@Forms@...

00413D73 . 8B0D 7CEC4A00 mov ecx,dword ptr ds:; SlyCtrl2._RegForm

В данном случае лучше пойти вверх и переключить «развилку», чем просто заполнить вызов Рег.Формы NOP’ами. Да и на главной форме красуется надпись:

Так что идём вверх… И видим одну очень примечательную структурку:

Ведь это спокойно может быть сравнение. Изменяем. К нашей с вами радости не появляется ни какого NUG’а, а заголовок формы очень изменился в лучшую сторону:

Вот так вот мы поломали пару советских программ.

А теперь я хочу вам показать как делаются NO-CD. То есть крЯки игр с целью их запуска без диска и обеспечения их полнофункциональности. Возьмём уже далеко не советскую игру «Heroes of Might and Magic V» версии 1.0 от издателя 1С. Установим. Запустим:

Как видите игра «просит» диск. Если у вас здоровенный винт и вам не в лом вставлять полтора гигабайтовый виртуальный диск, то можете ничего и не делать. Но мы её попробуем крЯкнуть.

Программа ничем не сжата и написана на «Micorsoft Visual C++ 7.0 Method2 ». Загружаем её в Олли и… из-за здорового размера (11,26Мб) Олли переглючивает и он виснет на 97,7 процентах анализа файла.

Может через пол дня он и догрузится, но я со своим PIV 640 3,2GHz решил, что 10 минут хватило, чтобы понять, что он уже не загрузится.

Тогда решаемся использовать более примитивный софт для крЯка, такой как W32Dasm и HIEW. Когда-то я «сидел» только на них. Dasm(disassembler) тужится, но буквально через 3 минуты всё-таки полностью загружает и анализирует наш H5_Game.exe.

Нажимаем Ctrl+L (Load) вместо F9 (Олли) и видим снова окошко с предупреждением о вставке диска. Переключаемся на Дасм, жмём Паузу (кнопкой или пробелом) и видим, что управление не передалось сразу Дасму.

Ну ничего, жмём на повтор и видим как Дасм нам сразу показал адрес MessageBox’а, в котором мы только что нажали «Повтор»:

Походу тут конструкция cmp/jne ответственна за наш выбор нажатия кнопок («Повтор» или «Отмена»), но сам факт, что диалог уже вызван присутствует. Значит идём вверх и натыкаемся на такие строки:

Прыжки jbe и jne можете проверить, но ничего не получится. Это значит что сюда программа «прыгает» из другого участка проги. А с какого нам показывают две строчки: Referenced by a… Jump at Addresses:

и 3 адреса прыжков, с которых может быть совершён прыжок сюда, к нашему MessageBox’у.

Ищем их в асм-листинге(можно промоткой, а можно через «Перейти» Shift+F12) и ставим на все 3 прыжка брЭйки. Буквы «(C)» и «(U)» означают «Conditional»(от англ. условный) и «Unconditional»(безусловный).

:00401181 0F8598000000 jne 0040121F

:004011AB 7472 je 0040121F

:004011F8 7525 jne 0040121F

Пробуем его поменять. ГыгЫ) Не вышло?! ;-) Правильно, потому что W32Dasm не предназначен для динамического редактирования декомпилированного файла.

Для этого открываем его в 16-ричном дизассемблерном редакторе HIEW. Я лично переименовываю файл в H5_Game(c).exe.hiew и выбираю HIEW в «открыть с помощью».

Когда открывается HIEW нажмите Enter 2 раза. Это переведёт его в режим дизассемблера.

Переходим на адрес нижнего прыжка. Для этого нажмите F5 и введите адрес с точкой: .004011F8 .

Нажимаем F3(правка) и если вы хорошо разбираетесь в 16-теричной системе счисления, то можете просто заменить 5 на 4 в 2-х байтах: 75 25. А если вам тяжело это помнить, то можете нажать ещё и F2 и править саму ассемблерную команду. Сохраняем(F9). Теперь копируем с переименовкой файл H5_Game(c).exe.hiew в H5_Game(c).exe и запускаем. Но перед нами снова появляется всё то же сообщение…

Снова просматриваем код. И видим, что прыжок:

:0040121D 7533 jne 00401252

Должен перепрыгивать через MessageBox. Значит он не осуществляется.

Так давайте переключим его. Снова в HIEW. С 7533 в 7433. Сохраняем(F9). Переименовываем. И запускаем. Гы. Игра начинает загружаться.

Теперь возьмём достаточно похожий случай. Игра:«FIFA2007» (Вы скажете: «Так она у меня и так без диска идёт!». Это значит, что у вас скорее всего новая версия с русскими комментаторами или ваша игра от другого издателя). Устанавливаем, запускаем:

Посмотрим что мы сможем с этим сделать. Действуем как и в прошлый раз. PEiD нам говорит, что fifa07.exe ничем не сжат. Тут, по моему, само реально пойти самым распространённым методом отладки: ставить брЭйки на WinAPI функции, вызывающие диалог или показывающие окно. Ну, для этого их нужно знать. Вот пару самых распространённых: MessageBoxA, MessageBoxW, ShowWindow, ShowWindowEx .

Загружаем ФИФУ в Олли. Открываем, если не открыт по умолчанию, плагин «Command line » (Plugins->2. Command line). Пишем туда «bpx MessageBoxA », жмём Enter. И точно так же проделываем с MessageBoxW…

Если вы захотите выбрать брЭйк из всего списка API-функций, используемых в приложении, вы можете написать в плагин: «bpx “что угодно”». То есть не правильную API. Например: «bpx dfgsdfg ». И из списка через правую поставить брЭйк куда хотите ничего не вводя. Теперь в окне «(B) Breakpoints» появится список ваших поставленных брЭйков. В нём вы можете приостановить работу одного из брЭйков или удалить любой из них. Значит брЭйки мы поставили.

В окне дампа мы можем посмотреть как по частям загружалось содержимое диалога:

Теперь идём вверх(можете попробовать прыжки, но они не перепрыгивают вызов сообщения) и натыкаемся на первую строчку этой подпроцедуры. Выделим эту строчку и в статусной строке видим:

Local calls from 005EFD12, 005F0595, 005F066D, 005F0694, 005F0D6A, 005F0ED3

Это нам показывает, что наша подпрограмма вызывалась call ’ами с перечисленных адресов. Теперь остаётся поставить брЭйки на все эти call ’ы и поотменять вызов этой подпроцедуры. Для этого попереходим на каждый адрес вызова и понаставим брЭйки. Копируем первый адрес, жмём Ctrl+G , вставляем и жмём Enter. Олли сразу прыгнет на введённый адрес. Жмём F2 (брЭйк) и точно так же проделываем со всеми остальными call ’ами.

Теперь завершим прошлую отладку нажав Ctrl+F2 (Reset). И запустим снова (F9 ). Видим, что выскочил брЭйк по адресу 005F0D6A . Возможно, что будут ещё и после проверки, так что не следует ещё сильно радоваться. Пробуем заNOP ить этот call.

И вуалля: ФИФА отлично запустилась и без диска. Теперь можно наслаждаться гордо крЯкнутой игрой;-)

Ну и последний пример возьмём чуть-чуть потяжелее. Игра называется: «Deer Hunter 2004». Знающие английский догадаются, что это охота на оленей. Игра старенькая, но очень реалистичная.

Вот. Тут заморочка в том, что игра без диска идёт. Впрочем так же как и с диском. Но наши пираты, которые видимо нагло украли эту игру не посмот- рели, что игра без диска идёт только как клиент- версия. То есть в эту игру можно играть только подключившись к локальному или интернет-серверу. Об этом свидетельствует это сообщение:

Поехали… Прога ничем не сжата и написана на MS Visual C++ 7.0. Отлично.

Проблема состоит в том, что нам надо найти проверку подлинности диска. Т.к. даже когда я вставляю купленный диск в свой CD-ROM игра всё равно его не находит или видит, что он не оригинальный. Ну ничего, мы ему покажем;-)

На этом скрине(сокр. от Screenshot) видно, что кнопки «Создать сервер» и «на охоту» погашены. А не погашена только та, которая отвечает за подключение к серверу.

Ладно, за дело. Загружаем DH2004.exe в Олли и ищем текстовые ссылки. Чтоб не мучаться и проматывать весь здоровенный список ссылок, можно нажать правую->Search for text->«И ввести фразу» и если ссылка не одна то жать правую->Search for next.

Я предпочёл искать по цитате «Do you want». Кроме того сразу же рядом валялись ссылки из тех же диалогов об отсутствии дисков:

0040D232 push DH2004.00561B08 ASCII "Do you want to play without the CD-ROM?You may only join local games."

0040D252 push DH2004.00561B50 ASCII "Deer Hunter 2004 CD-ROM not detected"

0040D257 push DH2004.00561ADC "Please Insert Deer Hunter 2004 CD-ROM!"

Видим, как тут собирается сообщение. Теперь ищем не короткий прыжок. Т.к. короткий нас не выведет из диалога. Вот все прыжки, снизу вверх(в обратном порядке) до первого длинного:

0040D226 |. 74 28 | je short DH2004.0040D250

Он перепрыгивает наш диалог, но вызывает похожий:

0040D21D |. EB 56 | jmp short DH2004.0040D275

0040D21B |. 74 02 | je short DH2004.0040D21F

Цикловые прыжки… И наконец-то:

0040D1E0 |. 0F84 8F000000 | je DH2004.0040D275

Как видим, он явно не короткий. Заменяем на jne , пробуем и… УРА:

Жмём «на охоту!» и наслаждаемся игрой. Сеть тоже работает, проверено.

Если вы хотите сделать хороший крЭк, который бы много не занимал и который удобней бы крЯкал игру (то есть не заменой исполняемого файла), то можно воспользоваться утилитой «PatchCreationWizard». Которая может создавать маленькие программки, которые будут изменять в исполняемом файле именно те байты, которые изменили вы при крЯке. Тогда вам только стоит будет указать где находится, файл, который вы собираетесь пропатчить и нажать «Patch».

Давайте создадим как бы полностью завершённый крЯк для нашего «Охотника». Надеюсь вы сами догадались сохранить все изме- нения в другой файл(у меня это по традиции DH2004(с).exe).

Теперь запускаем PatchCreationWizard, жмём Next, выбираем «Byte Patch», Next, в поле «Your Handle» пишем свой гордый ник или ещё какую-нибудь немаловажную информацию, в «Target Title» тоже чёта в этом роде, ну я там привык писать «КрЯк на…», а в поле «Target File» нужно вписать имя файла, который будем патчить.

Жмём Next, нажимаем кнопку «Browse» справа от поля «Original File» и, соответственно, указываем оригинальный не крЯкнутый файл(DH2004.exe в нашем случае); потом жмём по «Browse» справа от «Patched File» и выбираем крЯкнутый (DH2004(с).exe).

Жмём в последний раз Next и ждём пока сгенерится наш патч. Теперь в папке с игрой появился файл patch.exe. Запустим его. Он отлично пропатчивает игру.

Теперь, после установки игры, стоит просто кинуть его в папку с игрой, запустить и нажать «Patch». И игра будет успешно крЯкнута. КрЯк(патч) теперь будет занимать всего 5КБ(примерно), вместо объёма всей exe’шки(1,7МВ – Deer Hunter; 5,2MB – FIFA, 15MB – Heroes of M&M). Весомая разница.

Но нужно помнить, что это не законно и преследуется УК Украины. Но всё-таки обидно, когда покупаешь игру,а она даже с диском не идёт. Приходится выкручиваться.

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

Ещё для запутывания крЯкеров делают не одно поля для ввода пароля, а 3-6. Это сбивает с толку потому что там столько же и сравнений. То есть нужно искать не одну «развилку», а целых 6, которые программисты могли запихнуть в совсем разные места. Но для опытного крЯкера это всё равно не представит большой проблемы.

Трюком является после ввода пароля или просить перезапуска или хотя бы закрывать диалог ввода пароля(без всяких «Ура! Пароль верен» или «К сожалению вы даже с 132 раза не угадали пароль» ;-)). КрЯкеру будет тяжело перехватить управление после ввода пароля, а уж тем более найти «развилку», т.к. ему не от чего будет оттолкнутся чтобы найти сравнение.

Более хорошей защитой является активация только по Интернету, т.к. тогда крЯку остаётся перепрыгивать сам «выход» в Интернет и возвращать флаг правильности пароля или переключать прогу в самом начале, где она при запуске проверяет себя на активированность. Нужно использовать ещё антиотладочные сегменты кода. Которые следят не действует ли отладчик в системе, и если всё-таки действует, то послать программе команду отказа ра- боты. Или такие сегменты, которые вызывают не пропускаемое исключение.

Ну почти самая лучшая защита это сжимать программы какими-то неизвестными пакерами, как например Armadillo. На которых анпакер найти ооочень тяжело или практически нереально. Но всё равно, зная(видя) алгоритм кодирования, «высшим умам» не составит труда написать обратный его ход.

А так же актуально использовать утилиты, которые скрывают/подделывают заголовок(header) файла, а именно ту часть, где прописано каким пакером он сжат. То есть в PEiD вы будете видеть, что файл ничем не сжат или «типа» сжат тем пакером, название которого вы прописали в этой программе.

Вот самые известные из них: DotFix FakeSigner, StealthPE, HidePE. Последние две это оба продукта одной и той же фирмы и делают одну и ту же функцию, просто были сделаны оба с целью заработать побольше денег.

Но самый лучший из них, на сегодняшнее время, конечно DotFix FakeSigner. Он включает и подделку header’а и анти-отладочную защиту. А для игр на сегодняшнее время лучшей защитой является «StarForce», который тоже ломают, но очень мало людей. Т.к. защита построена на снижения скорости привода и отражении лазера от специальной дорожки диска под определённым углом…

Ну вот на этом и всё. На сегодня хватит. В следующей статье я вам возможно расскажу про взлом StarForce’а и про лучший метод защиты софта – виртуальную машину.

Ну ладно. До свидания и до новых встреч на нашем свободном литературном пространстве. ;-) Пока! С вами был Uncr0wneD .

З.Ы. Данную статью нужно рассматривать только в ознакомительной форме. Автор не несёт никакой ответственности.

Все мы любим использовать хороший софт для своих целей. Например, для обработки графики, редактирования файлов PDF, запуска хороших игр и т. д. часто необходимо приобрести право использования. Но не у всех есть возможность (или желание) выкладывать свои кровные денежки для этой цели. И в этом случае хакеры пишут специальные программы, которые позволяют обойти процедуру оплаты. Такой софт называется в народе «кряком».

Не будем сейчас заострять внимание на том, что это неправильно и противозаконно, что использовать такое программное обеспечение нельзя. Ведь это и так очевидно, но тем не менее многие пользователи с радостью используют эту возможность. Сегодня просто расскажем вам о том, что такое «кряк», о возможных последствиях его использования.

Что это?

Итак, данный термин был заимствован из английского языка. Дословное значение crack - «ломать с треском». «Кряк»-программа при запуске попросту вносит некоторые изменения в код платного программного обеспечения, которое в результате этого перестает проверять, была ли совершена оплата за использование или нет. Следует отметить, что по аналогичному принципу работают и «патчи». Их отличие заключаются в том, что последние могут как «взламывать», так и исправлять различные ошибки и недоработки в программном обеспечении.

Но вернемся к нашим «баранам». Очень часто применяется «кряк» для Windows, поскольку это самая популярная операционная система, и большинство софта пишется именно для нее. Пользователи должны помнить о том, что, помимо отмены оплаты, этот хакерский софт нередко способен навредить компьютеру. Например, при установке «кряк» через интернет связывается со своим производителем и получает соответствующие инструкции, что ему необходимо выполнить. Например, передать какие-то данные, остановить определенные службы, инфицировать конкретные файлы и так далее.

Мотивы написания

Вы уже начинаете понимать, что такое «кряк»? Его очень часто пишут не из-за каких-нибудь идейных побуждений или альтруистических наклонностей. Автор такого софта, как правило, преследует какие-то личные интересы. Нередко при его инсталляции в систему проникает «троянская» программа, которая «ворует» ваши пароли от учетных записей или каких-нибудь аккаунтов, и так далее.

Многие пользователи одной из популярных версий пиратской «Хрюши» в свое время ощутили в полной мере, что такое «кряк», и какие могут быть от него последствия. При деактивации лицензионной проверки этой операционной системы последняя заражалась «троянцем». Со всеми вытекающими последствиями. Долгое время антивирусный софт ничего не мог поделать с этой проблемой, поскольку многие передовые противовирусные программы попросту ничего не обнаруживали.

«Фаервол»

Если вы все же по каким-то причинам используете программы для взлома, настоятельно советуем вам кроме антивируса установить дополнительный «фаервол». Ведь последний позволяет обнаружить подозрительную активность в системе и предупредить вас об этом. Особое внимание стоит обращать на «кряк» для игры. Именно для игр выпускается множество «взломщиков» с вредоносными сюрпризами.

Еще один пример вредоносного воздействия такого софта. На этот раз происходит воровство в прямом смысле этого слова. Программа требует от пользователя отправки сообщения на специальный короткий номер якобы для получения нужного ключа. На самом же деле при выполнении данного требования все деньги с вашего мобильного счета будут перечислены в неизвестном направлении. Ключ вами получен так и не будет.

Антивирусное ПО лучше не отключать

Также нельзя оставить без внимания еще одну особенность «кряков». Каждый, кто использовал или пытался использовать этот софт, стакивался с рекомендацией о том, что необходимо отключать антивирусную программу во время его запуска. Сделать это необходимо для того, чтобы якобы не произошло ложное срабатывание тревоги, в результате которого задача «кряка» не будет выполнена.

В этом утверждение есть часть правды. Действительно «антивирусники», защищая авторские права разработчиков, относят «кряки» к вредоносному софту даже в том случае, если те действительно только обходят процедуру платной активации. Но вы должны понимать и то, что сейчас таких «безобидных» программок очень мало. И скорее всего, если вы отключите защиту вашего компьютера, в систему проникнет какой-нибудь вредоносный «агент». Надеемся, вы поняли, что такое «кряк».


за что ему огромная благодарность.Все копирайты
принадлежат cr0ck`у

>Q:Какими
программками посоветуешь пользоваться?

A:Отладчики:
DOS: Soft-Ice, DeGlucker, CUP /d, TD(только для
начинающих),386(тоже),
Еще есть: AFDPro, GameTools, AxeHack, но это только для
частных случаев.
WIN: Soft-Ice, TD , встроенный в WDASM32 отладчик
Вьюеры/редакторы:
DOS/WIN: HiEW, BIEW, QVIEW
WIN:WDASM32
И самая рульная вещь - IDA. Это наикрутейший
дизасемблер со многими фичами и отлично
продуманной идеологией.
Унпакеры:
DOS:unp, cup386, unpack
WIN:procdump

>Q: Хм! Думаешь мне что нибудь говорят слова
`отладчик", `унпакер", `дизасемблер".

A: Хм! Очень плохо 🙁
_Отладчики_(они же дебагеры) были придуманы для
поиска ошибок в программах.Но вскоре были
приспособлены хакерами для своих нужд. А вскоре
появились специальный хакерские
отладчики.Отладчики посволяют пройти программу
по шагам, останавливаться толко в определенных
местах программы и т.д. При этом хакер полностью
контролирует трассируемую(так называется
выполнение по шагам) программу. _Унпакеры_.
Производители программ часто упаковывают свои
программы(чтобы они занимали меньше места) или
криптуют(зашифровывают) их (чтобы хакеры или
конкуренты не могли взломать/посмотреть ее).
Первое и второе усложняет взлом. Чтобы
избавиться от проблем хорошие люди делают
унпакеры/ункрипторы, которые позволяют
распаковать/раскриптовать эти программы.
_Дизасемблер_ позволяет из исполняемого файла (com,
exe, ...) получить листинг этой программы на языке
ассемблера. Ассемблер это эквивалент машинного
кода, только записаный более-менее понятными
словами и обозначениями.

>Q:Что мне нужно знать для того чтобы стать
хакером?

A:Просто знать что-то конечно недостаточно, но вот
несколько советов:
Во-первых не обойтись без знания ассемблера.
Учить его можно по-разному. Сначала нужно
почитать книжки или доки по ассемблеру, вникнуть
в устройство компьютера (прерывания,организация
памяти,ввод/вывод на уровне портов). Неплохо
написать
несколько небольших программ на асме или хотя бы
посмотреть как это делают другие. Хорошо бы
выучить какой-нить язык высокого уровня. Лично
мне кажется что для
этого идеально подходит С. Ведь С некоторые даже
называют языком среднего уровня, т.к. он наиболее
близок к ассемблеру и одновременно обладает
огромной мощью.
Потом начинайте ломать всякие кракмисы. Они ведь
для этого и сделаны 😉 Переходите
к взлому программ. Вначале посмотрите примеры, а
затем ломайте сами. Учитесь пользоваться
различными программами. Например, IDA очень трудно
освоить одним наскоком, но сколько возможностей
она дает! Soft-Ice тоже имеет много фич которые вы
можете никогда и не узнать, но при их применении
жизнь может сильно облегчиться.

>Q:Полного знания паскаля хватит, чтобы
заниматься хакингом?

A: Повторюсь что ты должны знать в первую очередь
асм. Конечно, если ты знаешь паскаль очень хорошо,
то тебе его надолго хватит одного. Но в идеале
нужно знать _несколько_ языков.
Например: ASM, C, C++,PAS, Perl и т.д.

>Q:Вот ты говоришь что IDA крутая вешь? А для чего я
ее могу применять? Ясно конечно что для
дизасемблирования, но ты говорил про всякие
крутые фичи.

A: Самое простое: поиск ссылок на строки
регистрации. Например, программа пишет тебе на
экран "Unregistered". Ты ищещь эту строку в
программе, а затем ссылки на нее. Т.е. определяешь
в каких местах программы идет обращение к этой
строке. А где-то рядом будет проверка
пароля/рег.номера. Еще такая замечательная вещь.
IDA использует технологию FLIRT. При помощи нее можно
обнаруживать в программах
вызовы функций стандартных библиотек и вместо call
12345678h
ты увидишь: call _strcpy
А что делает strcpy ты уже должен знать 😉 Еще в IDA
есть встроенный язык, очень похожий на С. С
помощью него можно вытворять с программой что
угодно: например, расшифровать зашифрованную
часть программы.

>Q:Что такое Soft-Ice и как этой прогой
пользоваться?

A:Как было сказано вначале это отладчик. Кстати,
очень крутой отладчик. По фичности он опережает
всех. А насчет пользования, то софт-айз имеет кучу
команд, и нужно знать что какая из них делает. Об
этом можно прочитать в различных ФАКах о
софтайзе.

>Q:А если нету у меня такого ФАКа? Что делать?

A:Искать! Может быть в следующей версии этого ФАКа
я добавлю команды софтайза, но пока придется
довольствоваться командой `H". Без
параметров она выдает список всех команд с
кратким описанием, а если в качестве параметра
указать название какой-нить команды софтайза, то
получишь немного более подробную справку.

>Q:Я уже приготовился ломать, но понял что не
знаю как запускать софтайз 🙁

A:Кстати если я теперь говорю про софтайз, то я
имею ввиду виндовую версию. Софтайз запускается
из режима эмуляции ДОСа по виндами. Нужно просто
запустить файл winice.exe. Когда загрузятся винды
запускаете Symbol Loader. А в нем в File->Open. Выбираете
ломаемую прогу и Module->Load.

>Q: Все о каких-то бряках говорят. Что это?

A: Бряк, брякпоинт, брекпоинт, breakpoint - точка
останова. Отладчики позволяют поставить бряк в
каком-нить месте программы и запустить ее. Когда
программа дойдет до этого места - она
остановиться и ты окажешься в дебагере, а там
делай чего хочешь.

>Q: Один мой друг хвастался что все программы
битхаком каким-то ломает. Что это такое?

A: Битхак (bithack) - это метод взлома при котором в
программе меняются несколько бит или байт.
Например если известно что по такому-то адресу
происходит переход, если программа не
зарегестрирована, то можно команду перехода,
которая находится по
этому адресу, заменить, например, на команду NOP.
Если ты не знаешь что это за команда, то серьезнее
отнесись к изучению асма 😉

>Q: Ясно. А что такое метод Бруте Форсе?

A: Во-первых пишется с маленькой буквы - бруте
форсе(brute force) ;)) А во вторых дословно переводиться
как метод `грубой силы", т.е., например, простой
перебор всех возможных паролей.

>Q:Почему софтайз не дает поставить брякпоинт на
некоторые функции, например на GetDlgItemTextA?

A:Все функции храняться в библиотеках. Например
GetDlgItemTextA находится в USER32.DLL К тому же функции
грузятся в память по определенным адресам. И
брякпоинты ставятся не на функции а на адреса
соответсвующие им. А что бы софтайз знал где - что,
нужно экспортировать в софтайз нужные
библиотеки. Делается это в winice.dat

Обычно эти строки уже есть, но закомментированы и
нужно просто убрать `;"

>Q:Все сделал, загрузил. Теперь хочу начать
ломать программу. Она спрашивает
регистрационный номер(РН). Что делать?

A:Нужно отыскать место где сравнивается
введенный номер с нужным и подправить его
чуть-чуть

>Q: Отыскать? А как?

A: Можно несколькими путями.
1. Отлавливаем место где вводится РН. Затем
трассируем по шагам пока не найдем сравнение.
Здесь обчно делают так bpx GetDlgItemTextA ставят бряк на
функцию, при помощи которой обычно считывается
строка из окна ввода. Можно ставить бряки на
другие функции GetDlgItem*, GetWindowText*, hmemcpy. Хочу
обратить внимание на последнюю. Она просто
выполняет копирование участка памяти, но она
применяется поголовно всеми функциями ввода
данных. Поэтому бряк можно ставить и на нее. Но
нужно помнить, что она может вызывается и при
простом копировании данных, поэтому бряк на нее
нужно ставить только перед нажатием кнопки `OK".
Ввод РН можно отловить и так: Ввели РН. И не
нажимая ОК жмете Ctrl+D. Теперь вы в софт ксора к
данным дает исходные данные.