![]() |
eXeL@B —› Вопросы новичков —› Разбор распостраненной защиты |
Посл.ответ | Сообщение |
|
Создано: 17 июня 2009 09:51 · Личное сообщение · #1 Здравствуйте. В последнее время часто попадаются проги с похожим типом регистрации (часто написанные на делфи), т. е. есть код оборудования, нужно ввести имя и серийник (прога не запакована или можно распаковать). Вроде бы тривиальная проблемма, однако не понятно, где собака зарыта. Запускаю прогу под отладчиком, открываю окно регистрации, ввожу имя, серийный номер, ставлю бряк на хендл TEdit отправку различных сообщений срабатывает только на Window creation and destruction; GetDlgItemText, GetWindowText - не срабатывают, на SendMessage - вызывается напостой (с условием не срабатывает). Бряк на память на введенный серийник или на имя также срабатывает очень часто еще до нажатия кнопки зарегистрировать. Мне кажется, что здесь алгоритмы проверки регистрации чем то напоминают описание статьи "Крутая защита или CRACKL@B CrackMe #1" из архива. Вот ссылка на одну из прог: rapidshare.com/files/245437211/Beam_211108.rar.html P. S. Прошу строго не судить, если подобные статьи уже есть, я просто не нашел ![]() |
|
Создано: 17 июня 2009 12:13 · Поправил: tempread · Личное сообщение · #2 Такой тип реализации защиты очень распространен и может реализоваться совершенно по разному в каждом отдельном случае. Поэтому универсальных решений быть в принципе не может. Функции,на которые ставились прерывания не помогут при исследовании Делфи программ. Советую начать изучение программы,написаной на Делфи, с декомпиляции, если не запакована. Декомпилятор - DeDe. ![]() |
|
Создано: 17 июня 2009 12:22 · Личное сообщение · #3 |
|
Создано: 17 июня 2009 12:57 · Личное сообщение · #4 |
|
Создано: 17 июня 2009 13:08 · Личное сообщение · #5 Я понимаю. Это наподобие, как у прог на С++: поставил бряк на GetDlgItemText, GetWindowtext или на сообщение, ввел регистационные данные, нажал на кнопку и сразу попал на место проверки. Ну тут (в данной проге)таким образом получилось только, как указано выше, при постановке бряка на на хендл TEdit Window creation and destruction. Че еще может быть, пока не знаю. Некоторые рекомендуют пользоваться softice. Пользовался все тоже плюс сайс еще и глючит, в Оле удобнее. ![]() |
|
Создано: 17 июня 2009 14:29 · Поправил: tempread · Личное сообщение · #6 Не могу понять в чем проблема... Есть результат от DeDe, там все адреса есть. Ставишь брекпоинт на нужный(выбранный в исходнике ,который дал DeDe) адрес и начинаешь исследовать. Часто программа только проверяет на внешнюю "правильность" введеных данных , а реальная проверка осуществляется после ее перезагрузки. ![]() |
|
Создано: 17 июня 2009 14:51 · Личное сообщение · #7 Да вот и весь прикол - на какой адрес нужно ставить брекпоинт? Я конечно еще помучаюсь. Но хотелось бы какой нибудь пример наподобие или чтобы на данном примере тыкнули носом, где искать зарытую собаку. Но все равно спасибо за напутствие. Буду очень благодарен, если данный пример быдет исследован вживую, чтобы я разобрался с агоритом подобных защит. ![]() |
|
Создано: 17 июня 2009 14:56 · Личное сообщение · #8 Код регистрации можно подсмотреть. Code:
![]() |
|
Создано: 17 июня 2009 15:04 · Личное сообщение · #9 |
|
Создано: 17 июня 2009 15:30 · Личное сообщение · #10 Запустил Source Rescuer. Можно DeDe, разницы нет. Нашел Registration.pas -> procedure TRegistrationForm.btn_RegisterClick(Sender: Tobject); begin //Address $4CD40C end; Поставил bp на адрес 4CD40C в OllyDBG Ввел рег. данные, жмякунл ок, брякнулся на этом адресе. Немного потрассировал, и увидел процедуру проверки. Пожалуй тебе следует почитать статьи для новичков. ![]() |
|
Создано: 17 июня 2009 15:39 · Личное сообщение · #11 |
|
Создано: 18 июня 2009 08:05 · Личное сообщение · #12 Для программ, написанных на Delphi, я использую следующий метод: 1. Нахожу инструкцию MOV EAX, DWORD PTR DS: [ESI+2], которая читает в программе адреса разных событий; 2. Устанавливаю на этой инструкции bp; 3. Запускаем программу, и когда она останавливается на bp, смотрим в окно регистров. Там, в одном из регистров (обычно EDX), указывается имя события, например, btnGenerateClick, а по адресу [ESI+2] указан адрес обработчика этого события, например, 0045B4B8 4. Устанавливаем на этом адресе bp, вводим регистрационные данные, нажимаем кнопку ОК, и программа останавливается на начале процедуры чтения регистрационных данных. 5. Трассируем эту подпрограмму, и исследуем процессы, выполняемые с регистрационным кодом. Вообще, по этому методу имеется хорошая статья marciano, но она написана на испанском языке. ![]() |
|
Создано: 18 июня 2009 09:01 · Личное сообщение · #13 |
|
Создано: 18 июня 2009 09:25 · Личное сообщение · #14 |
|
Создано: 18 июня 2009 09:28 · Личное сообщение · #15 crc1 пишет: Выложи куда нить, чет не смог нагуглить ![]() ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. ![]() |
|
Создано: 18 июня 2009 12:16 · Личное сообщение · #16 crc1 На tuts4you куча разных плагов, этот в том числе. Делал перевод статейки Marciano, идущей вместе с плагином: ![]() ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Разбор распостраненной защиты |