Легкий способ взлома (для начинающих)

Материал из Справочник исследователя программ
Версия от 19:08, 25 декабря 2010; Bad guy (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигацииПерейти к поиску

Не подскажете какой-нибудь легкий способ взлома

Можно попробовать выделить адресное пространство ломаемой программы, после чего сделать поиск введенного пароля в памяти (предварительно ввести пароль и нажать ОК или Регистрация и т.д.) с помощью команды в SoftIce "s 0 l -1 "пароль который вы ввели"". Если пароль найдется в памяти, то посмотрите близлежащие области памяти: возможно рядом будет настоящий пароль. Это можно сделать нажимая мышкой на полосы прокрутки в окне данных, где найдется введенный пароль, либо Alt + вверх или вниз. Однако на практике такое наврятли сработает. Разве что в crackme каком-нибудь.

А еще какой-нить легкий способ взлома?

Ну например если программа выводит MessageBoxA, то ставим брейкпоинт на MessageBoxA и вводим код (или делаем что нужно) и жмем ОК (ну или что там в программе надо нажать для регистрации). Должны будем сразу же прерваться в отладчике в начале функции MessageBoxA (она должны будет вывести окно с сообщением о неправильном пароле и т.п.). Для выхода из функции жмем F12 (после чего надо будет нажать ОК в появившемся MessageBox'e) и оказываемся на следующей, после вызова MessageBoxA, команде. Смотрим выше и ищем условный переход типа je, jne, jz, jnz (je - это то же самое, что и jz, а jne - то же самое, что и jnz). Если нашли, то можно попробовать поставить брейкпоинт на адрес этого условного перехода и еще раз попытаться зарегистрироваться. Скорее всего остановимся на этом адресе. Теперь попробуйте изменить соответствующий флаг. Например если там je, jne, jz, jnz то эти команды перехода зависят от флага нуля (zf - флаг нуля). Пишем r fl "флаг", в нашем примере - "r fl z", для смены значения флага на противоположное и нажимаем F5. Возможно программа выведет сообщением о верной регистрации. А почему так? Потому что скорее всего эта команда условного перехода (jz, jnz и т.д.) делает переход на вывод сообщения об успешной регистрации, либо о неуспешной. Если это так, то в нашем случае она должна будет выполнить переход на сообщение о неверном коде, и если мы сменим соответствующий регистр флагов, то изменится и действие этой команды, и мы направимся на вывод сообщения об успешной регистрации.

Ну а еще какой-нибудь легкий способ? =)

Можно улучшить предыдущий способ (про установку брейкпоинта на функцию MessageBoxA) использованием программы W32Dasm. Начало такое же. Узнаем адрес например следующей после вызовы MessageBox команды. Открываем исследуюмую программу в W32Dasm'e и ищем этот адрес. Выше (это может быть на 5-10-20 строк выше) скорее всего будет одно из двух:

1) Такая строка:

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00XXXXXX(C)

В этом случае перейдите на адрес XXXXXX и там скорее всего будет команда условного перехода (jn, jnz и т.д. - уже устал писать =). Тогда попробуйте изменить этот условный переход на противоположный одним из известных способов (например с помощью отладчика поставить брейкпоинт на адрес этой команды и изменить соответствующий флаг на противоположный, как было описано выше; либо изменить соотвествующую команду на противоположную в файле)

2) Условный переход типа jz, jnz, je, jne. Как и в предыдущем случае, попробуйте изменить этот переход.