Сейчас на форуме: _MBK_, asfa (+5 невидимых)

 eXeL@B —› Вопросы новичков —› Разбор распостраненной защиты
Посл.ответ Сообщение

Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 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. Прошу строго не судить, если подобные статьи уже есть, я просто не нашел



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 17 июня 2009 12:13 · Поправил: tempread
· Личное сообщение · #2

Такой тип реализации защиты очень распространен и может реализоваться совершенно по разному в каждом отдельном случае. Поэтому универсальных решений быть в принципе не может. Функции,на которые ставились прерывания не помогут при исследовании Делфи программ. Советую начать изучение программы,написаной на Делфи, с декомпиляции, если не запакована. Декомпилятор - DeDe.



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 июня 2009 12:22
· Личное сообщение · #3

Я про это в курсе. Пользовался DeDe. Нашел окошко с регистрацией: Tregistrationform. В процедурах также видно без проблемм registration, а также ее составляющие. Пробовал ставить бряки на разное - останавливался, но бестолку



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 17 июня 2009 12:57
· Личное сообщение · #4

Нужно определить место,где считывается серийник и имя, и "следить" за ними в отладчике, анализируя все действия,которые программа с ними делает.



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 июня 2009 13:08
· Личное сообщение · #5

Я понимаю. Это наподобие, как у прог на С++: поставил бряк на GetDlgItemText, GetWindowtext или на сообщение, ввел регистационные данные, нажал на кнопку и сразу попал на место проверки. Ну тут (в данной проге)таким образом получилось только, как указано выше, при постановке бряка на на хендл TEdit Window creation and destruction. Че еще может быть, пока не знаю. Некоторые рекомендуют пользоваться softice. Пользовался все тоже плюс сайс еще и глючит, в Оле удобнее.



Ранг: 159.1 (ветеран), 7thx
Активность: 0.130
Статус: Участник

Создано: 17 июня 2009 14:29 · Поправил: tempread
· Личное сообщение · #6

Не могу понять в чем проблема... Есть результат от DeDe, там все адреса есть. Ставишь брекпоинт на нужный(выбранный в исходнике ,который дал DeDe) адрес и начинаешь исследовать. Часто программа только проверяет на внешнюю "правильность" введеных данных , а реальная проверка осуществляется после ее перезагрузки.



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 июня 2009 14:51
· Личное сообщение · #7

Да вот и весь прикол - на какой адрес нужно ставить брекпоинт? Я конечно еще помучаюсь. Но хотелось бы какой нибудь пример наподобие или чтобы на данном примере тыкнули носом, где искать зарытую собаку. Но все равно спасибо за напутствие.
Буду очень благодарен, если данный пример быдет исследован вживую, чтобы я разобрался с агоритом подобных защит.



Ранг: 26.2 (посетитель), 6thx
Активность: 0.020
Статус: Участник

Создано: 17 июня 2009 14:56
· Личное сообщение · #8

Код регистрации можно подсмотреть.
Code:
  1. 004C4023  |.  8B55 FC              MOV EDX,DWORD PTR SS:[EBP-4] ; любой введеный код регистрации
  2. 004C4026  |.  8B45 F8              MOV EAX,DWORD PTR SS:[EBP-8]; правильный код регистрации
  3. 004C4029  |.  E8 1257F4FF          CALL 00409740 ; проверка
  4. 004C402E  |.  85C0                 TEST EAX,EAX
  5. 004C4030  |.  0F94C3               SETE BL
  6. 004C4033  |.  84DB                 TEST BL,BL
  7. 004C4035  |.  75 18                JNZ SHORT 004C404F.




Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 июня 2009 15:04
· Личное сообщение · #9

А как именно ты сюда попал?



Ранг: 26.2 (посетитель), 6thx
Активность: 0.020
Статус: Участник

Создано: 17 июня 2009 15:30
· Личное сообщение · #10

Запустил Source Rescuer. Можно DeDe, разницы нет.
Нашел Registration.pas -> procedure TRegistrationForm.btn_RegisterClick(Sender: Tobject);
begin
//Address $4CD40C
end;
Поставил bp на адрес 4CD40C в OllyDBG
Ввел рег. данные, жмякунл ок, брякнулся на этом адресе.
Немного потрассировал, и увидел процедуру проверки.

Пожалуй тебе следует почитать статьи для новичков.



Ранг: 0.8 (гость)
Активность: 0=0
Статус: Участник

Создано: 17 июня 2009 15:39
· Личное сообщение · #11

Спасибо. Не поверишь. Я так делал, но только почти не трассировал после срабатывании на бряке. Да, нужно быть повнимательней



Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 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, но она написана на испанском языке.




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 18 июня 2009 09:01
· Личное сообщение · #13

vnekrilovЕсть плаг для оллли Point Events in Delphi Executables сним намного проще ;)

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 18 июня 2009 09:25
· Личное сообщение · #14

ClockMan пишет:
Есть плаг для оллли Point Events in Delphi Executables

Выложи куда нить, чет не смог нагуглить




Ранг: 568.2 (!), 464thx
Активность: 0.550.57
Статус: Участник
оптимист

Создано: 18 июня 2009 09:28
· Личное сообщение · #15

crc1 пишет:
Выложи куда нить, чет не смог нагуглить



eff3_17.06.2009_CRACKLAB.rU.tgz - Point Events in Delphi Executables v1.0.rar

-----
Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли.




Ранг: 133.4 (ветеран), 57thx
Активность: 0.110
Статус: Участник

Создано: 18 июня 2009 12:16
· Личное сообщение · #16

crc1
На tuts4you куча разных плагов, этот в том числе.

Делал перевод статейки Marciano, идущей вместе с плагином:


6220_18.06.2009_CRACKLAB.rU.tgz - pointE_tut_ru.rar


 eXeL@B —› Вопросы новичков —› Разбор распостраненной защиты
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати