СОДЕРЖАНИЕ

1. Введение в ломание Windows-программ

2. Обзор SoftICE/Win 2.oo

3. Поиск регистрационных кодов

3.1 Task Lock 3.00 - простая защита на основе серийного номера

3.2 Command Line 95 - простая регситрация "имя-код"

4. Создание генератора ключей для Command Line 95

5. Как работают инструкции PUSH и CALL когда программа вызывает функцию

6. О программах, написанных на Visual Basic

ПРИЛОЖЕНИЯ

A. Как в SoftICE загружать символьные имена (имена функций etc)

B. Синтаксис функций GetWindowText, GetDlgItemText и GetDlgItemInt

C. Где найти программы

D. Как связаться с автором

1. ВВЕДЕНИЕ В ЛОМАНИЕ WINDOWS-ПРОГРАММ

Ломать программы Windows в большинстве случаев даже проще, чем ломать программы Dos. В Windows сложно что-нибудь скрыть от того, кто ищет, особенно если программа использует стандартные функции Windows.

Первая (и часто единственная) вещь, которая Вам потребуется - это SoftICE/Win 2.oo, мощный отладчик от фирмы NuMega. Некоторым людям он кажется очень сложным в использовании, но я расскажу Вам, как с ним управляться и, я надеюсь, Вы поверите мне. =) В приложении A я привел некоторую информацию, которую Вам следует прочитать.

URL всех программ, которые Вам понадобятся, приведены в приложении C.

- ED!SON, edison@ccnux.utm.my

2. ОБЗОР SOFTICE/WIN 2.OO

Ниже приведен очень схематичный рисунок, демонстрирующий окно SoftICE:
|--- | -------------- Регистры -| | 'R' - правка значения регистров
| Окно данных | 'D' - просмотр памяти, 'E' - правка памяти
| Окно кода | 'U' - просмотр кода по адресу, 'A' - вставка кода
| Окно команд | Здесь Вы набираете команды

Другие важные клавиши (в стандартной настройке):

'H'/F1 - помощь

F5/Ctrl+D - запуск программы (или продолжение прерванной программы)

F8 - пошаговая отладка с заходом в тело функции

F10 - пошаговая отладка без захода в тело функции

F11 - выйти из функции (будет работать только до первого PUSH в функции)

3. ПОИСК РЕГИСТРАЦИОННЫХ КОДОВ

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

3.1 Task Lock 3.00 - простая защита на основе серийного номера

Это очень простая защита: номер не зависит ни от каких факторов.

3.1.1 Медицинское обследование

Какой разрядности программа - 16 или 32 бит? Где вводится регистрационная информация? Даст ли мне справка какие-нибудь предположения о том, как устроена регистрация? Попробуйте ответить на эти вопросы перед тем, как мы продолжим.

....Сейчас Вы должны быть заняты обследованием....Вы заняты обследованием? ...Ну как, уже все?...

OK, теперь Вы знаете, что это 32-битное приложение, работающее под

Windows 95 и что регистрация заключается в заполнении регистрационного номера в диалоговом окошке, которое появляется когда Вы выбираете меню "Register|Register...". Из справки Вам также стало известно, что существует два типа регистрации: для индивидуального использования и для использования в "конторе" (в оригинале - site license). Поэтому очень вероятно, что в программе будет ДВЕ проверки регистрационных кодов.

3.1.2 Прерывание программы

Регистрационные коды чаще всего вводятся в обычных строчках ввода типа Windows Edit. Чтобы проверить код, программа должна прочитать содержимое строки ввода при помощи одной из функций:

16-бит 32-бит

------ ------

GetWindowText GetWindowTextA, GetWindowTextW

GetDlgItemText GetDlgItemTextA, GetDlgItemTextW

Последняя буква в названии 32-битных функций говорит о том, какие строки использует эта функция: однобайтовые или двухбайтовые. Двухбайтовые строки используются ОЧЕНЬ редко.

Возможно, что Вы уже уловили мою мысль. "Если бы можно было прерваться по вызову GetWindowText..." - и Вы МОЖЕТЕ это сделать!!! Но сперва Вы должны убедиться, что символьные имена (имена функций) загружены SoftICE'ом. Если Вы не знаете, как это сделать - см. приложение A.

Чтобы установить "ловушку" (на самом деле это называется точкой останова или брейкпоинтом) в SoftICE, Вы должны зайти в отладчик нажатием клавиш Ctrl-D и использовать команду BPX. В качестве параметра команды можно использовать либо имя функции, либо непосредственно адрес. Так как наш "объект изучения" (Task Lock) является 32-битным приложением, мы должны поставить брейкпоинт на функцию GetWindowTextA. Если это не поможет, попробуйте поставить брейкпоинт на другие функции.

В командной строке SoftICE наберите следующее:

:bpx getwindowtexta

Если Вы получите сообщение об ошибке (например, "No LDT"), убедитесь, что в фоне у Вас не выполняются никакие другие приложения. Я заметил, что Norton Commander в фоне является причиной подобного поведения SoftICE.

Вы можете проверить наличие брейкпоинтов командой:

:bl

В результате Вы увидите что-нибудь типа:

00) BPX USER32!GetWindowTextA C=01

Чтобы выйти из отладчика, нажмите Ctrl-D (или F5) еще раз.

Продолжим... Итак, Вы установили брейкпоинт и теперь SoftICE будет "выскакивать" при каждом вызове функции GetWindowTextA. Попробуем ввести какое-нибудь значение в окне регистрации и нажмем OK. Вы нажимаете OK... ...и получаете дурацкое сообщение о том, что Ваш код был неправильным. Значит, это была не функция GetWindowTextA... Попробуем GetDlgItemTextA. Удалим старый брейкпоинт:

:bc 0

(0 - это номер брейкпоинта в списке брейкпоинтов)

И установим новый:

:bpx getdlgitemtexta

Ну что ж, попробуем еще раз...


Информация о работе «Как ломать программы Windows (C) ED!SON [UCF], перевод Mr.Boco/TCP»
Раздел: Информатика, программирование
Количество знаков с пробелами: 16261
Количество таблиц: 2
Количество изображений: 0

0 комментариев


Наверх