Реферат: Как ломать программы Windows C EDSON UCF, перевод Mr.BocoTCP
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) еще раз.