Например: Иконки
Среда, 08.05.2024, 12:28 Регистрация Карта сайта RSS Лента
Меню сайта
Всё для ucoz Всё для кс 1.6 ПРОГРАММЫ ДЛЯ ПК Онлайн игры Видео ТВ Радио Каталог сайтов Гостевая книга Доска объявлений Форум FAQ (вопрос/ответ) Блог Каталог статей Все игры Alawar Боты для игр Заказ доменов
Чат
Статистика
Гости: Пользователи:
Онлайн всего: 3
Гостей: 3
Пользователей: 0
Пользователи онлайн
Никого нет.
Реклама
Страны посетителей

Реклама на сайте

Главная » 2011 » Июль » 11 » SoftIce для начинающих
15:47
SoftIce для начинающих
SoftIce для начинающих


Тебе никогда не хотелось иметь у себя программу, с помощью которой можно ломать игрушки, shareware и trial программы и вообще все, что запускается на компьютере? Я думаю, что хотелось. А такая программа существует! И уже достаточно давно. Это SoftICE от NuMega Software. Просто считается, что ее использование это удел избранных программистов, разбирающихся в архитектуре процессора, устройстве железа, в ассемблере и принципах действия операционных систем. Но на самом деле и минимальных знаний достаточно для работы с этой программой. Сначала введу тебя в курс дела.
SoftICE является самым мощным отладчиком на сегодняшний день (т.е. прогой, которая может разобрать по кирпичику любую другую прогу и каждый этот кирпичик изменить как захочется). А это значит, что с его помощью можно исследовать все: от ядра Windows до программ на С++. Создавался он для отладки 32-битных приложений, драйверов под Win NT и Win 95/98 и других программ под Win и Dos (так по крайней мере говорят его разработчики ;). Но люди со всего мира нашли ему дополнительное применение :)) Ведь что собой представляет какая-нибудь Trial-программа? Не что иное, как 32-битное WIN приложение. А ее отладка? Правильно - устранение защиты: или проверки времени, или проверки наличия Key-файла, или еще чего-нибудь.

В связи с тем, что многие программы уже были взломаны с помощью SI, производители ПО стали вшивать в свои творения части кода, проверяющие наличие SI в системе и, в случае его обнаружения, не дающие программе вообще работать (они думали, что это поможет, - вот наивные!). Поэтому тебе могут понадобиться несколько программ, скрывающих этот отладчик от чужих глаз. Я тебе советую посетить сайт www.dore.ru, а точнее его отдел www.dore.ru/files/debuggers, где представлено много полезных прог, а именно сам SI под WIN 95/98 и под WIN NT, примочки, мешающие другим прогам определить наличие SI в системе, дополнительные плагины к нему, делающие работу с ним приятнее и удобнее. Если же тебе нужен SOFTICE для Win ME, Win 2000 или Win XP, то перепиши соответствующий апдейт с сайта производителя: www.numega.com/drivercentral/icecentral.asp. Под каждым апдейтом написано, как его устанавливать. Итак, если у тебя уже есть проинсталлированный SoftICE, можешь пропустить следующий раздел, если нет, то прими его к сведению.

Установка

В установке нет ничего сложного, просто после нее НАДО ВНЕСТИ ИЗМЕНЕНИЯ в файл winice.dat (он должен находиться в каталоге, куда ты установил SI), а именно раскомментировать в нем несколько строк:

; ***** Examples of export symbols that can be included for Windows 95 *****

;Change the path to the appropriate drive and directory

EXP=c:\windows\system\kernel32.dll - эти;

EXP=c:\windows\system\user32.dll - строки надо;

EXP=c:\windows\system\gdi32.dll - раскомментировать;

Это нужно для того, чтобы видеть имена Win API функций (стандартные функции, используемые программами при работе под Win). А именно на них мы и будем ловить программы, но об этом позже.

Что реально может делать SoftICE и как им управлять?

Вообще SoftIce состоит из нескольких окон: регистров, данных, кода и команд. В окне кода ты видишь текст программы на ассемблере, а в окно команд вводишь команды управления SI. Перемещаться между окнами удобно с помощью мышки, но можно и без нее, хотя это сложновато для начала.

Основные команды (очень важный момент)

BPX адрес/имя функции - установить в указанный адрес или на вызов функции точку останова (еще ее называют брэйк опинтом).

BPM адрес - установить точку останова на адрес памяти.

BL - вывести список всех установленных точек останова (каждая имеет свой номер).

BD номер точки останова - сделать точку с соответствующим номером не активной.

BE номер точки останова - команда, обратная предыдущей.

BC номер точки останова - удалить точку останова.

Фактически, другие команды нам с тобой не понадобятся. Итак, с помощью SI можно заморозить все программы в любой момент (например, будет вызвана стандартная функция или выполнена команда по определенному адресу). Когда ты взламываешь прогу, тебя можно сравнить с хирургом, ковыряющимся во внутренностях человека, твой компьютер - с операционным столом, а SI - со скальпелем, ножницами и наркозом.

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

Ловушки. И собственно сам взлом

Итак, нам надо выбрать момент, когда перехватить управление у программы. Проще всего ломаются проги, использующие Win API функции. (Это стандартные функции, облегчающие программирование под WIN. Например, если тебе нужно создать окно на рабочем столе, то ты просто вызываешь какую-то функцию с параметрами, а не пишешь код, создающий окно с нуля.) То есть тебе нужно будет определить, на вызов какой из этих функций будет реагировать SI. Алгоритм твоих действий должен быть следующим:

1. Решить, на что ты будешь ловить свою программу. На какую API функцию.

2. Установить на ее вызов точку останова (bpx имя функции).

3. Запустить свою прогу и спровоцировать вызов этой функции.

4. Нажав F11, перейти к тому месту в программе (на тот адрес), откуда она вызывалась.

5. Установить точку останова на выполнение команд строки с этим адресом.

6. Снова спровоцировать вызов этой функции.

7. Просмотрев регистры, узнать необходимые тебе данные (к примеру, серийный номер) или адрес той строки, в которой обрабатываются результаты вызова функции (это могут быть какие-либо команды ассемблера: cmp или jump).

8. Запустив HIEW или что-то похожее, внести необходимые изменения (cmp можно заменить пустой командой nop, а какую-нибудь разновидность команды условного перехода - на безусловный jmp и тот же адрес). Именно из-за последних нескольких пунктов считается, что знание ассемблера является очень желательным при работе с SI.

Самыми часто используемыми Win API функциями являются:

MessageBoxIndirect - работа с окном сообщений. Используется в 16-битных приложениях.

MessageBox - работа с окном сообщений. Используется в 16-битных приложениях.

MessageBoxA - то же самое, но 32-битное приложение.

MessageBoxIndirectA - то же самое, что и MessageBoxIndirect, но 32-битное приложение.

GetWindowText - обычная строка ввода типа Windows Edit. Используется в 16-битных приложениях.

GetWindowTextA - то же самое, но 32-битное приложение. Строки используются однобайтовые.

GetDlgItemText - примерно то же, что и предыдущая функция, отличия в деталях. Используется в 16-битных приложениях.

GetDlgItemTextA - то же самое, но 32-битное приложение. Строки используются однобайтовые.

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

Практика

Вроде теорию я тебе всю изложил. Теперь практика: классический пример. Возможно, пример немного трудноват, но даже если ты запомнишь хотя бы малую часть, то сможешь почувствовать себя настоящим хирургом-маньяком, ищущим себе все новые и новые жертвы. Итак прога-пациент называется TaskLock. Будем ловить на GetWindowTextA (команда ":bpx getwindowtexta"). Ты можешь проверить, установилась ли точка останова командой ":bl". В результате увидишь что-нибудь типа: "00) BPX USER32!GetWindowTextA C=01". Далее жми F5. Продолжим. Попробуй ввести какое-нибудь значение в окне регистрации и нажми OK. Ты получишь дурацкое сообщение о том, что код был неправильным. Значит, это была не функция GetWindowTextA. Попробуем GetDlgItemTextA. Удали старый брейкпоинт ":bc 0" (0 - это номер брейкпоинта в списке брейкпоинтов) и установи новый ":bpx getdlgitemtexta". Вводи номер заново. Теперь ты в SoftICE, в самом начале функции GetDlgItemTextA. Чтобы попасть туда, откуда она была вызвана, нажми F11. Теперь ты внутри модуля SGLSET.EXE. Сейчас ты уже можешь запретить реакцию на вызов функции ":bd 0".

Первая строка в окне кода выглядит так: "CALL [USER32!GetDlgItemTextA]"

Чтобы посмотреть строчки над ней, нажимай Ctrl+Up ("стрелка вверх") до тех пор, пока не увидишь нижеприведенный кусок кода. Если ты ничего не понимаешь в Ассемблере, я добавил комментарии, которые могут помочь.

RET ; Конец функции

PUSH EBP ; Начало другой функции

MOV EBP, ESP ; ...

SUB ESP, 0000009C ; ...

PUSH ESI ; ...

> LEA EAX, [EBP-34] ; EAX = EBP-34

PUSH EDI ; ...

MOVE ESI, ECX ; ...

PUSH 32 ; Макс. длина строки

> PUSH EAX ; Адрес текстового буфера

PUSH 000003F4 ; Идентификатор управления

PUSH DWORD PTR [ESI+1C] ; Идентификатор окна диалога

CALL [USER32!GetDlgItemTextA] ; Получить текст

Команды PUSH означают сохранение значений для последующего использования. Я пометил важные строчки символом '>'. Глядя на этот код, мы видим, что адрес текстового буфера хранился в регистре EAX и что EAX был EBP-34h. Поэтому стоит взглянуть на EBP-34h ":d ebp-34". Ты должен увидеть текст, который ввел в диалоговом окне. Теперь ты должен найти место, где твой номер сравнивается с реальным серийным номером. Поэтому мы пошагово трассируем программу при помощи F10 до тех пор, пока не встретим что-нибудь о EBP-34. Не пройдет и нескольких секунд, как ты наткнешься на следующий код:

> LEA EAX, [EBP+FFFFFF64] ; EAX = EBP-9C

LEA ECX, [EBP-34] ; ECX = EBP-34

PUSH EAX ; Сохраняет EAX

PUSH ECX ; Сохраняет ECX

> CALL 00403DD0 ; Вызывает функцию

ADD ESP, 08 ; Удаляет сохраненную информацию

TEST EAX, EAX ; Проверяет значение функции

JNZ 00402BC0 ; Прыгает, если не "ноль"

Мне кажется, что это выглядит как вызов функции сравнения двух строк. Эта функция работает так: на входе - две строки, на выходе - 0, если они равны, и любое другое значение, если не равны. А зачем программе сравнивать какую-то строчку с той, что ты ввел в окне диалога? Да затем, чтобы проверить ее правильность. Значит этот номер скрывался по адресу [EBP+FFFFFF64]. SoftICE не совсем корректно работает с отрицательными числами, и поэтому настоящий адрес следует посчитать: 100000000 - FFFFFF64 = 9C.

Ты можешь сделать это вычисление прямо в SoftICE: "? 0-FFFFFF64". Число 100000000 слишком велико для SoftICE, а вычитание из 0 дает тот же самый результат. Наконец пришло время взглянуть, что же скрывается по адресу EBP-9C (команда ":d ebp-9c"). В окне данных SoftICE ты увидишь длинную строчку цифр - это серийный номер! Но в программе есть два типа регистрации, следовательно, и два разных серийных номера. Поэтому после того, как ты записал на бумажечку первый серийный номер, продолжай трассировать программу при помощи F10. Мы дошли до следующего куска кода:

> LEA EAX, [EBP-68] ; EAX = EBP-68

LEA ECX, [EBP-34] ; ECX = EBP-34

PUSH EAX ; Сохраняет EAX

PUSH ECX ; Сохраняет ECX

> CALL 00403DD0 ; Снова вызывает функцию

ADD ESP, 08 ; Удаляет сохраненную информацию

TEST EAX, EAX ; Проверяет значение функции

JNZ 00402BFF ; Прыгает, если не "ноль"

И что ты видишь по адресу EBP-68? Второй серийный номер! Вот и все...
Просмотров: 974 | Добавил: XZOTIX | Теги: EXP=c:windowssystemkernel32.dll, SOFTICE, win xp, Нажав F11, Win 2000, откуда, SoftIce для начинающих, перейти к тому месту в программе (н | Рейтинг: 0.0/0 Вернутся
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Реклама на сайте