Разработка защиты серийными номерами

Тема в разделе "WASM.RESEARCH", создана пользователем jangle, 8 мар 2005.

  1. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Пару часов посидел - пока не получилось отломать ;)



    Результаты пока такие:



    Распаковал прогу от UPX утилитой by Quantum/Volodya

    (http://www.wasm.ru/baixado.php?mode=tool&id=214);



    После распаковки она валится, патч надо делать вот этой команде, тогда все ok:


    Код (Text):
    1. .text:0042272F sub_42272F      proc near               ; CODE XREF: sub_41C7F9+30Ap
    2. .text:0042272F                 mov     [eax], bl
    3. .text:00422731                 retn
    4. .text:00422731 sub_42272F      endp




    После ввода ключа он подается на вход криптографии из ADVAPI, после выхода из нее чекается результат:


    Код (Text):
    1. ; CALL ADVAPI - RSABASE, etc
    2. .text:004197C7                 call    [b]sub_417431[/b]
    3. .text:004197CC                 push    [ebp+var_A0]
    4. .text:004197D2                 push    0EC00h
    5. .text:004197D7                 lea     ebx, [ebp+var_9C]
    6. .text:004197DD                 call    sub_422FD5
    7. .text:004197E2                 push    eax
    8. .text:004197E3                 call    sub_416C88
    9. .text:004197E8                 mov     [ebp+var_A0], eax
    10. .text:004197EE                 mov     eax, dword_425454
    11. .text:004197F4                 call    sub_421B2A
    12. .text:004197F9                 mov     eax, [ebp+var_A0]
    13. .text:004197FF                 call    sub_421B2A
    14. .text:00419804                 fcompp  st(1), st
    15. .text:00419806                 fnstsw  ax
    16. .text:00419808                 sahf
    17. .text:00419809                 jnz     loc_419884
    18. ; Ниже код выводит сообщение типа "ключ OK" и завершает
    19. ; программу, если сравнение выполнено




    Если "руками" сделать "верный" переход, то появится MessageBox с сообщением "Верный ключ" и предложат перегрузить программу; введенный ключ сохранится в файле "TextPAD.key";



    Далее при запуске этот файл будет читатся и ключ из него опять будет сравниваться через вызовы ADVAPI;



    Процедура обработки сообщений головного окна (там, где вместо сохранения файла выдается сообщение "Unregistered") как будто бы не содержит, по крайней мере рядом, "полезного" вызова:


    Код (Text):
    1.  
    2. ; Код, отвечающий опции "Save" - только сообщение об отсутствии регистрации
    3. text:0041BCFF loc_41BCFF:                             ; CODE XREF: sub_41B1C7:loc_41BBF7j
    4. .text:0041BCFF                 fild    word_426390
    5. .text:0041BD05                 fld     [ebp+var_3C]
    6. .text:0041BD08                 fcompp  st(1), st
    7. .text:0041BD0A                 fnstsw  ax
    8. .text:0041BD0C                 sahf
    9. .text:0041BD0D                 jnz     loc_41BD1F
    10. .text:0041BD13                 push    0
    11. .text:0041BD15                 call    sub_41AFAF
    12. .text:0041BD1A                 jmp     loc_41C0F0




    Т.е. после успешной регистрации либо будет работать другая подпрограмма обработки сообщений, либо... надо еще думать.



    Если будет время, посмотрю подробнее...
     
  2. jangle

    jangle New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2005
    Сообщения:
    56
    Адрес:
    Russia
    to _Chingachguk_



    Ай да молодец! Еще немного и всю мою защиту поломаешь!

    :)))
     
  3. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    jangle

    128 бит, чтоли. Ну и пусть он хуже, чем RSA, взломают пароль не через 50 лет, а через 10

    RSA-128 сломают за 5 минут.
     
  4. flankerx

    flankerx New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2004
    Сообщения:
    423
    Адрес:
    Moscow, Russia




    нет, позволю себе не согласиться с тобой :)

    гораздо, гораздо быстрее :)))



    RSATool, например, RSA-128 разложил секунды за 4 :)
     
  5. je_

    je_ New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2004
    Сообщения:
    143
    слуши, не поломать ли этот конкурс!?~:)

    но хто за призами-то пойдёт!?



    но шо это за диджимани такое?
     
  6. jangle

    jangle New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2005
    Сообщения:
    56
    Адрес:
    Russia
    infern0

    RSA-128 сломают за 5 минут.



    Ну тогда ничего не стоит взломать мою прогу, там ведь тоже 128 бит, документацию по криптопровайдеру Windows NT найти несложно, может попробуешь сломать?
     
  7. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    jangle



    Без денег такое ломать лень. А так - достаточно просто. Пишется программа, которая эвристически ищет ключи в памяти. Публичный ключ РСА можно отыскать по более высокой энтропии. Ну а дальше - что-то вроде РСТТул, Пари или чего-то еще в зубы и хана. Но лень, ей-богу, да и времени нет.
     
  8. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    _Chingachguk_ >




    нужно атрибуты секции править - видел call [0] рядом с выборкой сообщений? Хотя может это и не то, 2 часа у меня нет :-(
     
  9. Maxi

    Maxi New Member

    Публикаций:
    0
    Регистрация:
    3 янв 2004
    Сообщения:
    23
    Адрес:
    Russia/Moscow




    Вы живете в разрыве с реальностью! Любого кто купил ее у вас за 3000 не задушит жаба продать ее за $1500 и дешевле... Тот кому он ее продал - продаст за $500 2-м человекам... Итд. Через неделю она будет лежать в инете бесплатно!



    Если действительно программа так дорого стоит, и действительно клиентов 10-ки (и даже сотни) - кончайте заниматся бирюльками и найдите человека который поставит вам на нее нормальную защиту с электронным ключем. Иначе просто не стоит чего либо делать в этом направлении.







    Задача выполненна если программа не растиражированна и каждый пользователь оаплатил ее в полном объеме! Все остальное - education и "Детский сад". Если ваши начальники этого не понимают - мне жалко вашу фирму.
     
  10. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia


    да. но еще надо найти модуль в проге и запихнуть его в рсатул :)
     
  11. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    S_T_A_S_



    Нет, call [0] не видел.



    Еще немного посмотрел прогу.


    Код (Text):
    1. ; Вызов дешифровки из ADVAPI
    2. ; call sub_417431(,,ptr to ptr to Key)
    3. .text:004197C7                 call    [b]sub_417431[/b]
    4. .text:004197CC                 push    [ebp+var_A0]
    5. .text:004197D2                 push    0EC00h
    6. .text:004197D7                 lea     ebx, [ebp+var_9C]
    7. .text:004197DD                 call    sub_422FD5
    8. ; Get ~crc32([ebp+var_9C] as *buffer, EC00 as Len, [ebp+var_A0] as StartCRC32 (= 0))
    9. .text:004197E2                 push    eax
    10. .text:004197E3                 call    [b]sub_416C88[/b]
    11. ; if ( crc32!= dword_425454 ) goto InvalidPassword;
    12. .text:004197E8                 mov     [ebp+var_A0], eax
    13. .text:004197EE                 mov     eax, dword_425454
    14. .text:004197F4                 call    sub_421B2A
    15. .text:004197F9                 mov     eax, [ebp+var_A0]
    16. .text:004197FF                 call    sub_421B2A
    17. .text:00419804                 fcompp  st(1), st
    18. .text:00419806                 fnstsw  ax
    19. .text:00419808                 sahf
    20. .text:00419809                 jnz     loc_419884
    21. ; Ниже код выводит сообщение типа "ключ OK" и завершает
    22. ; программу, если сравнение выполнено




    Итак, sub_417431 дешифрует кусок размером ~EC00h, адрес в ~[ebp+var_9C]. Далее код sub_416C88 считает от него crc, скорее всего crc32, потом идет сравнение с глобальной переменной.



    Скорее всего этот кусок (или куски ему подобные) и есть недостающая часть кода. Получается, это необходима чистая атака на RSA или надо смотреть внимательно. Может быть, чуть позже - пока надо с wingate 6 закончить.



    ЗЫ Меня приколола просто крайняя степень увлеченности компиллятора сравнением через сопроцессор.
     
  12. Broken Sword

    Broken Sword Robert

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    433




    Maxi, тут люди о высоких материях, RSA раскладывают, не стоит о земном... )
     
  13. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    _Chingachguk_ Ну там не RSA, сначала от серийника берется MD5 хеш, на основе этого хеша генерится ключ для последующей дешифровки RC4, а там, видимо црц для проверки правильности расшифрованого куска, т.ч. тут возможен только один правильный серийник
     
  14. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    _Chingachguk_



    call [0] - по адресу 00420AD0, в цикле выборки сообщений. Но я прогу не копал, только мельком взглянул, явно много чего пропустил :)
     
  15. Paravoz

    Paravoz New Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2
    Чем скомпилирована программа? Не узнаю такой экзешник,

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



    jangle Тебя интересует коммерческое использование твоей защиты? Если да, напиши мне на parov@bk.ru
     
  16. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    PowerBasic 7.02 (PEiD)



    Криптование кода (на каждого юзера отдельный exe) хоть не удобно, но хорошо только при вмешивании данных железа (например добавить ещё несколько CryptHashData с параметрами биоса), иначе один добрый юзер сдампит и выложит на всех



    з.ы. вернее выложат просто exe и серийник, а так прийдется дампить :)
     
  17. Paravoz

    Paravoz New Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2
    bogrus PowerBasic 7.02 (PEiD) ?



    А шо це за зверь? Это компилер бейсика?
     
  18. jangle

    jangle New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2005
    Сообщения:
    56
    Адрес:
    Russia
    Чуть позднее я выложу серийник, и можете с чувством глубокого удолетворения сдампить программу, правда ето будет непросто, там есть пара сюрпризов! :)
     
  19. jangle

    jangle New Member

    Публикаций:
    0
    Регистрация:
    5 фев 2005
    Сообщения:
    56
    Адрес:
    Russia
  20. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    bogrus



    Ну там не RSA, сначала от серийника берется MD5 хеш



    Хм. Это случайно не тот вариант, что используется в Office97 - где берется 5 байт от хэша MD5 для создания ключа ? Тогда это всего 2^40 - можно подобрать, правда нужно несколько дней... Вот что это за алгоритм:


    Код (Text):
    1. ;
    2. ; Decrypt data by key
    3. ;
    4. .text:0041719A sub_41719A      proc near               ; CODE XREF: sub_4173EB+25p
    5. .text:0041719A                                         ; sub_417431+28p
    6. .text:0041719A
    7. .text:0041719A pbData          = byte ptr -224h
    8. .text:0041719A hKey            = dword ptr -94h
    9. .text:0041719A hHash           = dword ptr -90h
    10. .text:0041719A hProv           = dword ptr -8Ch
    11. ...
    12. CODE XREF: sub_41719A+2Ej
    13. .text:004171D9                 push    0
    14. .text:004171DB                 lea     ebx, [ebp+hHash]
    15. .text:004171E1                 push    ebx             ; phHash
    16. .text:004171E2                 push    0               ; dwFlags
    17. .text:004171E4                 push    0               ; hKey
    18. .text:004171E6                 push    8003h           ; Algid
    19. .text:004171EB                 push    [ebp+hProv]     ; hProv
    20. .text:004171F1                 call    ds:CryptCreateHash ; Initiate the hashing of a stream of data
    21. .text:004171F7                 call    sub_422B5D




    Под руками нету msdn, что такое 8003h ?



    Кстати, расшифрованный код - это типа DLL или EXE, которая (отображается ?) в память:


    Код (Text):
    1. ;
    2. ; sub_41888F: get invalid lpAddress
    3. ;
    4. .text:0041888F sub_41888F      proc near               ; CODE XREF: sub_417A8F+1Ap
    5. ...
    6. ;
    7. ; Check for "MZ" - header (for key "test" decrypted bytes are: 1C,06,F8,D8..)
    8. ;
    9. .text:00418521                 mov     eax, 5A4Dh
    10. .text:00418526                 mov     ebx, [ebp+var_A8]
    11. .text:0041852C                 movzx   ecx, word ptr [ebx]
    12. .text:0041852F                 cmp     ecx, eax
    13. .text:00418531                 jz      short loc_41853F
    14. .text:00418533                 mov     [ebp+var_7C], 1
    15. .text:0041853A                 jmp     loc_41886B
    16. .text:0041853F ; ---------------------------------------------------------------------- -----
    17. .text:0041853F
    18. .text:0041853F loc_41853F:                             ; CODE XREF: sub_4184DD+54j




    Если после расшифровки первые байты не "MZ", эта sub_41888F вернет нулевой указатель в:


    Код (Text):
    1.  
    2. .text:00417AA9                 call    sub_41888F
    3. .text:00417AAE                 mov     dword_425448, eax
    4. .text:00417AB4                 mov     eax, dword_425448
    5. .text:00417ABA                 mov     [ebp+lpAddress], eax
    6. .text:00417AC0                 mov     eax, 5A4Dh
    7. .text:00417AC5                 mov     ebx, [ebp+lpAddress]
    8.  
    9. ; Crash code (ebx=0)
    10. .text:00417ACB                 movzx   ecx, word ptr [ebx]
    11. .text:00417ACE                 cmp     ecx, eax
    12. .text:00417AD0                 jz      short loc_417ADE




    И все перестанет работать.



    Кстати,



    Программа работает только в операционных системах Windows 2000,

    Windows XP, Windows 2003.




    У меня 98-ая, я переделал 2 dword-а в хидере (5->4) и пока работает - почему только в XP ?



    S_T_A_S_



    Вижу call - он настраивается, хочешь сказать (или ловится SEH в демо режиме) ?



    Жалко, удается смотреть урывками...