Underground InformatioN Center [&articles] 
[network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive][home]

Пример взлома программ защищеных с помощью криптоалгоритма MD5

Внимание!!!
   Эта статья написана ИСКЛЮЧИТЕЛЬНО в помощь программистам и по сути своей представляет экспертную оценку защиты.
Заметьте - бесплатную оценку :)

Пациент
KiXscripts Editor v1.х, (2.2мб)

Инструменты

  • Numega SmartCheck любой версии
  • DAMN Hash Calculator v1.5.0
  • Hiew или любой дизассемблер

    Запускаем программу вместе со SmartCheck. Пишем чего-нибудь в диалоге регистрации. Я вводил "Corbio" и "1234567". Естественно получаем сообщение, что наш серийник неверен.

    -Click
     | OnError
     | Len returns LONG:7         // Это размер моего серийника
     | MsgBox returns Integer:1   // "Registration is invalid!"

    Интересно, а зачем нужен размер серийника? Смотрим в правом окошке SmartCheck offset для строки - Len returns LONG. У меня 11С608, для других версий этой программы будет другой offset. Смотрим в Hiew по адресу 11С607.

     call  _куда-то
     xor   ecx,ecx
     cmp   eax,20h

    ....Ну и так далее.
    Логично предположить, что раз длина серийника сравнивается с 32, то он должен быть именно 32 символа. Проверяем это и видим что я, как всегда, был прав :). Посмотрим на получившийся листинг. Теперь, когда размер правилен, мы вышли на саму проверку валидности. Интересный кусок:

     Rtrim$       "sHa50WFaXaND6LaMdr1n65Te3l" 
     String$
     CryptCreateHash returns BOOL:1
     Len retorns LONG:32  "CorbiosHa50WFaXaND6LaMdr1n65Te3l"
     CryptHashData returns BOOL:1
     Space$
     CryptGetHashParam returns BOOL:1

    Строка "sHa50WFaXaND6LaMdr1n65Te3l" статична, ее можно найти в екзешнике. Похоже на то, что эта строка добавляется к имени юзера и от результата считается какой-то хеш. Так как строка начинается с "sHa", то я и подумал, что это алгоритм SHA.
    Но посмотрим на листинг дальше. 128 битный хеш "плавно превращается" в строку. Вот она:

     RTrim$       "8165591BD4EFB8B67C94925210D388AE"            
     CryptDestroyHash BOOL:1
     Strings$
     Strings$
     Strings$
     MsgBox returns Integer:1   // "Registration is invalid!"

    Вот. А так как вводить надо было 32х символьный серийник и полученная строка тоже 32 символа, то скорее всего, это и есть правильный серийник. Проверяем. Так и есть.
    Почти все понятно. Остался единственный вопрос - а какой все таки это алгоритм? Тут нам поможет тулзень от Ivanopulo - DAMN Hash Calculator.
    Вводим "CorbiosHa50WFaXaND6LaMdr1n65Te3l". Оказывается, это никакой не SHA а MD5.

    P.S. - Конечно далеко не все программы защищенные MD5 так бесполезно его используют. Но подавляющее большинство. Стойкость криптоалгоритмов обесценивается неумением их применять.

    Линки
    Весь софт для RE - http://www.protools.cjb.net
    Applied Cryptography - http://www.cacr.math.uwaterloo.ca/hac/

    C пионерским приветом,
    Сorbio (corbio@mail.ru).
    uinC Member
    [c]uinC

    Статья написана в мае 2002 года специально для UInC (http://www.uinc.ru).

    Все документы и программы на этом сайте собраны ТОЛЬКО для образовательных целей, мы не отвечаем ни за какие последствия, которые имели место как следствие использования этих материалов\программ. Вы используете все вышеперечисленное на свой страх и риск.

    Любые материалы с этого сайта не могут быть скопированы без разрешения автора или администрации.


  • [network & security news] [RSS & Twitter] [articles, programing info] [books] [links, soft & more...] [soft archive][home]
     Underground InformatioN Center [&articles] 
    2000-2015 © uinC Team