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

Discussion in 'Статьи' started by bobob, 14 Aug 2006.

  1. bobob

    bobob Member

    Joined:
    2 Jun 2006
    Messages:
    111
    Likes Received:
    69
    Reputations:
    -15
    Пациент
    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 так бесполезно его используют. Но подавляющее большинство. Стойкость криптоалгоритмов обесценивается неумением их применять. ;)
     
  2. bobob

    bobob Member

    Joined:
    2 Jun 2006
    Messages:
    111
    Likes Received:
    69
    Reputations:
    -15
    сори, копирайтов не имеется, просто из сборки статей!