99,99% защита от дизассемблирования -прокатит ли?

Тема в разделе "WASM.RESEARCH", создана пользователем Stariy, 26 мар 2010.

  1. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Задача: есть программа, нужно сделать так, чтоб если нехороший человек ее украдет - он не смог ее дизассемблировать и разобраться в алгоритме. Пришла в голову следующая идея: есть загрузчик, который при запуске получает ключ (неважно, как - через инет, от пользователя, из паспорта диска), затем выкусывает у себя из хвоста или из ресурсов кусок зашифрованных данных, расшифровывает и либо скидывает в файл и запускает (если мне совсем лень), либо запускает сразу из памяти (если я осилю написать свой загрузчик).
    Плюсы - разобраться в коде за разумное время злоумышленник не сможет, если заюзать хорошее шифрование.
    Минусы:
    - надо доверять юзеру, ведь он может сдать ключ или сдампить запущенную прогу. Ну предположим, мы ему доверяем.
    - атака на открытый текст. Проанализировав загрузчик, можно выяснить алгоритм шифрования и понять, что на выходе ожидается исполняемый модуль, теоретически это может помочь получить ключ, насколько я понимаю.

    Какие могут быть еще минусы, что можно улучшить?
     
  2. d2k9

    d2k9 Алексей

    Публикаций:
    0
    Регистрация:
    14 сен 2008
    Сообщения:
    325
    Если к примеру шифрование будет по Blowfish то не расшифрует. Тока явное указание ключа не есть гуд. Как вариант сделать формирование ключа сразу при старте РЕ из регистров процессора которые 100% будут содержать в себе нужные значения - но это опять же против чайников, хотя уже не полных ;) И ессно надо писать свой загрузчик: если бушь куда-то копировать не составит труда отловить это (FileMon например и потом хук на работу с файлами) и взять уже готовый расшифрованный вариант :)
     
  3. Vam

    Vam New Member

    Публикаций:
    0
    Регистрация:
    16 июл 2008
    Сообщения:
    149
    А вам не приходила в голову мысль, что нехорошим человеком может быть официальный пользователь - его цель получить/купить у вас программу с ключом, разобрать и ...
     
  4. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    купите протектор, не жмите 5 копеек
     
  5. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Ну заказчику хитрить смысла нет, он и так получит все, что захочет, и даже исходники, если надо. А сами юзеры считаются хорошими и незаинтересованными в сливе программы. Другое дело, что ее могут украсть. И смысл в том, чтобы в случае кражи алгоритм не ушел. Вероятность того, что прогу сопрут вместе с железом (на основе характеристик которого можно получить ключ) или подкупят пользователя, или будут целенаправленно ставить кейлоггеры и мониторы считается стремящейся к нулю. Просто если предположить, что и пользователь нехороший или на компе проходной двор, то задача близка к нерешаемой.
    Насчет покупки протектора - денег не жалко, но проблема в том, что нет уверенности в невозможности разботать такую защиту. Даже если заказывать индивидуально под себя - можно ли гарантировать, что вор с хорошим бюджетом не наймет дорогих профи и за 2-3 человекомесяца не разберется с каждым байтом? Возможно, что протектор и так будет куплен, а описанный мной вариант -дополнение. Если прога зашифрована хорошо, то для начала раскопок по любому понадобится ключ.
     
  6. karabas_barabas

    karabas_barabas Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    168
    тогда накрывай vmprotect или ему подобным протом, который из 50 кб кода сделает 1 мб - тогда нехороший человек будет очень долго выкривать нехорошие слова при изучении проги
     
  7. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    стоить это будет минимум в 20+ раз дороже чем любая готовая система лицензирования
    видимо цель не защитить ПО а куда то деньги вложить или время потратить или еще что-то
     
  8. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Хе-хе. Денег там немного потратится, да и вообще, в данном случае вопросы стоимости у заказчика не на первом месте. 10 и 100 - числа в принципе одного порядка в этом случае. А вот паранойя имеет место быть. Например, если писать прогу для качественного удаления файлов (фигня, казалось бы, таких прог полно на любой вкус, да и сложного там ничего нет), то ему нетрудно перед приемкой попросить ехе-файл для предварительного теста, обработать им несколько флэшек и дисков, а потом раздать в 2-3 независимые фирмы для восстановления, разыграв спектакль типа 'ой-ой, там все финансовые документы за 5 лет, а тут вирус напал', и приплатив спецам лично для обеспечения качества работы. И на сдачу проги приходит уже не в слепую, а с перечнем хвостов и глюков, найденных спецами. Все это денег стоит, но ему пох, видимо.
    О протекторах с рынка разговор такой:
    - а че париться, давайте накроем самым крутым и все?
    - а ты в нем уверен?
    - ну посмотрите сами в инете, проконсультируйтесь, если не верите, там на год работы, мозг сломаешь.
    - а исходники есть, там точно дыр нету?
    - исходников нет, но ломать тяжело и дорого.
    - ну назови хоть одну прогу, которую не сломали?
    - винрар:)
    - а серьезно? Помнишь, твой друг нам ломал вм-протект где-то за 3 недели?
    - ну было, дык ведь эта...
    - вот и все, какие еще варианты, давай подумаем.
     
  9. Twister

    Twister New Member

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

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

    Таким методом будет обеспечен довольно-таки надежный результат при минимуме физических и материальных затрат.
     
  10. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Stariy

    Ну если есть в условии чта в момент юзанья этого алго необходим запрос на верификацию на сервачог, то проще отправить данные на сервачог и вернуть честному пользователю резальт.

    Или - получив ключ - текущий ключ! - юзверь применяет его одын раз и алго перешифровывается Новым ключом (открытая-закрытая криптография, видима, рулед). Т.е. если не случилось краша то после каждой сессии остаеццо перешифрованная копия - воруй нихачу.
     
  11. spa

    spa Active Member

    Публикаций:
    0
    Регистрация:
    9 мар 2005
    Сообщения:
    2.240
    Я думаю такого анального издевательства пользователи не вынесут )
     
  12. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.551
    Адрес:
    Russia
    Stariy
    Новый V-Ray® 1.50 for Maya (от ChaosGroup) - еще не взломали. И не скоро взломают скорее всего.
     
  13. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    PSR1257
    А если нет доступа к интернету?

    spa
    +1 :)
     
  14. PSR1257

    PSR1257 New Member

    Публикаций:
    0
    Регистрация:
    30 ноя 2008
    Сообщения:
    933
    Twister

    А если нету - то все равно можно :)

    Перво-наперво - раздать каждому пользователю _СВОЙ_ приватный RSA... Это поможет выявить "предателя" (хотя зачем это может понадобицца ,,,).

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

    Не забываем что если у меня есть black box с вашим алго - пусть 15 раз крытый фемидой и еще там 30 разных виртуальных машин одна над другой - я могу реверсировать алгос только по запросам-откликам.
     
  15. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    PSR1257
    Что-то Вы увлеклись ;)
     
  16. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Не-не, он думает в правильном направлении. Желательно, что бы никто, кроме пользователя, не знал даже близко, что и как. Есть прога, просит пароль, расшифровывает и запускает. Все. Что там дальше - хз. Тратить время и деньги на неизвестно что - глупо. А если накрыть пакером-криптором, то все равно различные мониторы покажут, что прога дергает сеть, шлет такие-то запросы, ищет некие файлы, трогает реестр... Есть повод присмотреться... А дальше все упирается в деньги...
     
  17. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Эм... Пользователь - реверсер? 0_0

    Угу. И пользователь, который выше вдруг оказался реверсером, дампит расшифрованный код и преспокойно его анализирует после "ввода" пароля. Ну-ну. :)

    Я так понимаю в этом вся соль, не дать проанализировать код? Тогда VM - один из лучших выборов, именно за это славится VMProtect.

    От этого ничто не спасет. Не надо пытаться бороться с ветряными мельницами.
     
  18. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Нет. Хотя это не особо то важно.
    Я же писал, что по условиям задачи пользователю мы доверяем, поскольку в полностью агрессивной среде любая программа рано или поздно вскроется. Пользователь не будет никому говорить пароль или ключ, не будет запускать отладчиков и дампить что-то, он будет просто пользоваться прогой, как положено. А злоумышленник сопрет прогу вирусом или тупо скопирует, пока пользователь спит, к примеру.
    Извращения, типа заснять камерой через подзорную трубу сквозь форточку, как пользователь вводит пароль - это мы отбросим. Это тоже не обойти...
    Он дает 100% гарантию? Я прекрасно понимаю, что это долго, что это практически нереально и т.д. Но если сравнить время на перебор ключа и на дизассемблирование накрытой вмпротектом проги - какое время будет больше?
    Зашифрованная прога будет запрашивать пароль и вылетать после неправильного, или запрашивать размер файла key.bin в корне С, делать из него ключ, расшифровывать себя и вылетать. Что это - суперсекретный генератор номеров кредиток или неудачная лабораторная работа студента? Неясно. Я попрошу разобраться, Вы поковыряетесь и скажете - там AES, надо ключ. Я предложу 50к$. Вы сможете расшифровать? А если я попрошу снять вмпротект за ту же сумму - шансов на успех будет больше или меньше? А за 100к$? Вон тут где то kaspersky писал, что за 72 часа втроем распотрошили алгоритм. Нет уверенности, что с последними версиями вмпрота это тоже не получится. Нужно или доказать, или отказаться от него. Про шифрование вроде все доказано, по крайней мере, пока не опровергли. А вот с ВМ - это как повезет.
     
  19. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Если злоумышленник может спереть прогу вирусом, он с таким же успехом может сдампить ее вирусом. В этом случае преимущество у виртуальной машины, коль сложным не был бы алгоритм шифрования.
     
  20. Stariy

    Stariy Member

    Публикаций:
    0
    Регистрация:
    22 окт 2003
    Сообщения:
    529
    Адрес:
    Russia
    Выходит, так... Тогда, получается, вм все таки не лишена смысла... Хотя защиты то она по любому не дает, лишь значительно осложняет дизассемблирование. Надо использовать комбинацию...