Защита программ от взлома с помощью виртуальной машины.

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

  1. parov

    parov New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2005
    Сообщения:
    11
    Появилась мысль, реализовать защитный механизм, путем внедрения в программу, виртуальной машины, исполняющей байт-код. Как мне кажется, это значительно усложнит жизнь кракеру. Ведь чтобы взломать программу, ему прийдется изучить логику работы виртуальной машины. А это довольно сложно и муторно. Для примера, написал классический пример:



    IF (сериник не совпадает)

    {

    MessageBox "Invalid Serial Key"

    }



    И откомпилировал этот пример компилятором байт-кода, а

    линковщиком собрал EXE сборку содержащую смешанный нативный и байт-код. Мне кажется, проанализировать работу этой кодовой каши будет нелегко.



    У меня пара вопросов к господам кракерам:



    1) Насколько трудно/легко пропатчить этот пример.

    Ну чтобы он не запрашивал серийник, или воспринимал любой

    номер как правильный?



    2) Стоит ли вообще, копать в этом направлении. Переводить

    кракоопасные ветки программы на virtual machine. Затруднит

    ли это анализ и реверсинг проги?





    Серийный номер: 1823782474122314









    [​IMG] 287662290__vm.rar
     
  2. parov

    parov New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2005
    Сообщения:
    11
  3. Dr.Golova

    Dr.Golova New Member

    Публикаций:
    0
    Регистрация:
    7 сен 2002
    Сообщения:
    348
    Ну это уже не ново - ExeCryptor, VMProtect, StarForce, ASProtect

    Скорость взлома упирается в скорость написания дизассемблера для конкретной VM. Потом все патчится также как native код.
     
  4. Chingachguk

    Chingachguk New Member

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



    Имхо, основная задача VM - это не сделать пресловутый jnz @@InvalidPassword размазанным по телу программы, а сделать плоходоступным для "вытаскивания" критичные алгоритмы. Что же до InvalidPassword, так (по-моему) что байт-код, что обычные переменные - все так же точно трейсится с помощью bpm от места ввода в форме до проверки. Вот расчет my_hash(password) имеет смысл доверить VM.
     
  5. parov

    parov New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2005
    Сообщения:
    11
    Скорость взлома упирается в скорость написания дизассемблера для конкретной VM. Потом все патчится также как native код.



    Вот расчет my_hash(password) имеет смысл доверить VM.



    Значит, если я применю малораспостраненную VM в своей проге. Кракер поковырявшись в ней, пойдет в конце концов пить пиво... Какой смысл мучиться с этой VM, ведь при взломе другой проги этот опыт не пригодится.

    С VMProtect ситуация другая, этой VM защищается много софта и время для ее изучения, потратить не жалко.
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    parov

    Хмм... Тогда надо написать генератор виртуальных машин, чтобы каждый пак она была разной :)
     
  7. parov

    parov New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2005
    Сообщения:
    11
    Хмм... Тогда надо написать генератор виртуальных машин, чтобы каждый пак она была разной :)



    Да нет, это излишне. Если VM редкоиспользуемая никакой генератор не нужен
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    parov



    Хех)) Главный показатель криптоуязвимости - популярность :)
     
  9. bogrus

    bogrus Active Member

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




    Ну, вот алгоритм выводит число 249022032, которое потом сверяется (CompareStringA) с этим же числом, зашитым в прогу
    Код (Text):
    1. ;=====================================================================
    2. format      pe gui
    3. include     '%fasminc%\win32a.inc'
    4. ;=====================================================================
    5. table       file    'vm_table'
    6. serial      db      '1823782474122314',0
    7. fmt         db      '%u',0
    8. message     rb      32
    9. ;=====================================================================
    10. entry       $
    11.             mov     ecx,serial
    12.             mov     esi,16
    13.             mov     eax,-1
    14. @@:         mov     edx,eax
    15.             xor     ebx,ebx
    16.             mov     bl,byte[ecx]
    17.             and     edx,0FFh
    18.             xor     edx,ebx
    19.             shr     eax,8
    20.             mov     edx,dword[table+edx*4]
    21.             xor     eax,edx
    22.             inc     ecx
    23.             dec     esi
    24.             jnz     @B
    25.             invoke  wsprintf,message,fmt,eax
    26.             add     esp,4*3
    27.             invoke  MessageBox,0,message,message,0
    28.             invoke  ExitProcess,0
    29. ;=====================================================================
    30. data        import
    31. library     kernel32,'kernel32.dll',\
    32.             user32,'user32.dll'
    33. include     '%fasminc%\apia\kernel32.inc'
    34. include     '%fasminc%\apia\user32.inc'
    35. end         data
    36. ;=====================================================================
    [​IMG] 417718280__test.zip
     
  10. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    А кейгенится за милую душу, пол-минуты брутфорса и уже первый валидный серийник:



    ЄYш`



    Первая буква украинская, вот ASCII хекс 0xAA,0x59,0xF8,0x60, у кого нет украинского, пробуйте через Ctrl+C или Alt %)
     
  11. Chingachguk

    Chingachguk New Member

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



    Гм. А я тебя не понял - в чем идея ? ;) Впрочем, позднее посмотрю еще раз.
     
  12. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Какая идея? Идея была не у меня :)

    В проге число 249022032d (т.е. 0ED7C650h), есть таблица, прогоняем цикл возможных комбинаций пока не выпадет джекпот :)
    Код (Text):
    1. next_serial:
    2.             ...
    3.             mov     ecx,0-serial_len
    4.             xor     edx,edx
    5.             xor     eax,eax
    6.             dec     eax
    7. @@:         mov     dl,al
    8.             xor     dl,byte [serial+serial_len+ecx]
    9.             shr     eax,8
    10.             xor     eax,dword [table+edx*4]
    11.             inc     ecx
    12.             jnz     @B
    13.             cmp     eax,0ED7C650h
    14.             jnz     next_serial
    15. valid:
    Серийников просто море: rQC1D[пробел]
     
  13. parov

    parov New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2005
    Сообщения:
    11
    А кейгенится за милую душу, пол-минуты брутфорса и уже первый валидный серийник:



    И не сомневался, что вы за минуту эту прожку сломаете! :)

    Думал что просто один байт перехода пропатчите.

    Но все же, не получил ответа. Байт-код труднее сломать

    чем native?



    Кому интересно исходники этого примера с компилером можно

    скачать тут : http://scriptcom.narod.ru/files/vm.zip



    Для сборки EXE надо запустить BUILD.BAT
     
  14. bogrus

    bogrus Active Member

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




    А он там точно есть? Я наверное не знаю, что такое байт-код(с точки зрения процессора), по-этому его там(в отладчике) и не заметил
     
  15. Chingachguk

    Chingachguk New Member

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



    ok! Я протормозил - подумал, ты споришь с моим утверждением и дал какой-то опровергающий его код - типа попробуй в нем проследи использование критичных данных.
     
  16. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Да не, я спорить не любитель, просто согласился с твоим мнением после просмотра этой проги, специально ж запятую поставил :)
     
  17. parov

    parov New Member

    Публикаций:
    0
    Регистрация:
    12 апр 2005
    Сообщения:
    11
    А он там точно есть? Я наверное не знаю, что такое байт-код(с точки зрения процессора), по-этому его там(в отладчике) и не заметил



    Так в отладчике он выглядет как натив? Ну чтож, спасибо

    автору скрипт-машины, видимо там хороший JIT
     
  18. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
  19. volodya

    volodya wasm.ru

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



    Очень на то похоже.



    parov



    Уважаемый. Мне не нравятся две вещи.

    1. Регистрация на форуме под разными именами.

    2. Постинг одного и того же на многих форумах.



    Еще раз что-нибудь из этого повторится - бан.