Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.03.22;
Скачать: CL | DM;

Вниз

Схемы защиты ПО   Найти похожие ветки 

 
Rouse_ ©   (2012-05-11 23:42) [0]

Вот сидели мы тут, обсуждали и придумывали, а потом задались вопросом: а какие трюки для защиты своего ПО использует народ? :)


 
Eraser ©   (2012-05-11 23:47) [1]

imho, железных пути 3:
1. качественная защита на основе аппаратного ключа.
2. размещение основной логики в онлайн.
3. любая защита, вынуждающая крякера вносить изменения в код, т.е. "патчить", чтобы слетала ЦП.


 
Dennis I. Komarov ©   (2012-05-11 23:56) [2]

Лиц. соглашение.


 
Inovet ©   (2012-05-11 23:58) [3]

> [1] Eraser ©   (11.05.12 23:47)
> чтобы слетала ЦП

Это что церебральный паралич чтобы слетал с программы?:)


 
Rouse_ ©   (2012-05-12 00:11) [4]


> Eraser ©   (11.05.12 23:47) [1]

Идея здравая, но, на практике не реализуема по всем трем пунктам.
1. Блэкбокс на железе компроментируется эмуляторами
2. Это очень плохой подход - любая контора решившая сделать онлйан блэкбокс наказыается DDOS, что очень сильно влияет на репутацию...\
3.1. Если работаем с физическими данными, то нам подменят путь при чтении образа на неизмененный бинарник.
3.2 Если работаем с распакованными в памяти данными, то обходится на этапе самой проверки, а именно снимается алго ЦП участка кода и вносятся изменения в блок данных, с которым идет проверка. Алго страхующие сами себя на уровне секций кода, обходятся банально полной копей защищаемого участка в контролируемую память (стаб) и правкой адресов на оффсет стаба. (я так гвардонтовскую схему защиты снимал - требуется написание допсофта дампящее образ и несколько раз запускающее результат под отладчиком с протектом всех выделеных страниц, куда чекер образа лезет).

В итоге не фонтан...
А кто-то еще более интересное делал?


 
alexdn ©   (2012-05-12 00:14) [5]

> Rouse_ ©   (11.05.12 23:42)  
opens, гулять так гулять)..


 
Rouse_ ©   (2012-05-12 00:17) [6]


> opens, гулять так гулять)..

Что за opens ?  :)


 
wicked ©   (2012-05-12 00:31) [7]


> А кто-то еще более интересное делал?

свою маленькую стековую виртуальную машинку, которая молотила проверку серийника
для усложнения жизни взломщика она имела очень маленький набор операций, которые выполнала много раз - например, все булевы операции реализовывались через две базовые - или И-НЕ, или ИЛИ-НЕ
то есть, можно было и на одной И-НЕ, просто для усложнения кода было насколько наборов "макросов", каждый на своей операции

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


 
Rouse_ ©   (2012-05-12 00:59) [8]


> wicked ©   (12.05.12 00:31) [7]
>
> > А кто-то еще более интересное делал?
>
> свою маленькую стековую виртуальную машинку, которая молотила
> проверку серийника
> для усложнения жизни взломщика она имела очень маленький
> набор операций, которые выполнала много раз - например,
> все булевы операции реализовывались через две базовые -
> или И-НЕ, или ИЛИ-НЕ

Очень знакомая конструкция...
Морф криптора, собственно на базе стрелки Пирса сделан (банальный стэковый стакан). А что у тебя за софт, можно линк?


 
Германн ©   (2012-05-12 01:02) [9]


> А что у тебя за софт, можно линк?

Так он же по утверждению автора "савсэм не взлетел". Значит и линка никакого нет.


 
Rouse_ ©   (2012-05-12 01:02) [10]

ЗЫ:
> но программировать её было нудно, ибо "компилятор" я сделать
> поленился, а в результате все эти проверки набивались ручками
> в длинную цепочку команд

Та-же ерунда, отладчик для ВМ так и не написан, Jack128 оч сильно смеялся когда я пикод из под нее пытался отлаживать :)))


 
Jeer ©   (2012-05-12 01:02) [11]

не хуже будет интерпретатор форта использовать для в этом случае :)


 
oxffff ©   (2012-05-12 01:24) [12]

Любые надстройки так или иначе изучаются и разворачиваются в нужную (обратную) сторону автоматически или полуавтоматически. Бо умных людей на планете хватает. А сделать обратное преобразование неоднозначным сложнее(даже если набор команд разный, можно рассуждать на более высоком уровне семантическом, и так или иначе свести к однозначности).
Следуют подумать, как оградить от анализа кода, но тут
видимо нужно реализовать ВМ на аппаратном уровне с недокументированным набором команд. Это дорого и не защищает на 100%. Это тоже надстройка. И тоже ломается. Уже другими ребятами.
Которые тоже есть на белом свете. :)


 
oxffff ©   (2012-05-12 01:30) [13]

Rouse, как вариант, облачные вычисления.
Вы сдаете ваши сервисы в аренду в вашем облаке.
И тебе голову не придется ломать.

Это решение. IMHO.


 
oxffff ©   (2012-05-12 01:33) [14]

Rouse, я думаю, что проблем с доступом в инет у Ваших заказчиков нет.
Да за идею 1%. :)
Можно пивом.


 
oxffff ©   (2012-05-12 01:50) [15]


> 2. Это очень плохой подход - любая контора решившая сделать
> онлйан блэкбокс наказыается DDOS, что очень сильно влияет
> на репутацию...\


Не заметил. Ну наказываться она может как угодно.
Это к самому раскрытию сервиса отношения не имеет.


 
Rouse_ ©   (2012-05-12 01:54) [16]


> oxffff ©   (12.05.12 01:30) [13]

Серег, спасибо за предложение, но не надо :)
Ветка вообще планировалась как обмен идеями, а не толщиной его самого...
ЗЫ: кстати, что есть "ВМ на аппаратном уровне с недокументированным набором команд".
Судя по всему имелся АРМ, ибо что-то быстроработающее в плане ВМ можно конечно на ПИк-ах с шлюзовым препроцессором изобразить...


 
Германн ©   (2012-05-12 02:01) [17]


> Rouse_ ©   (12.05.12 01:02) [10]
>
> ЗЫ:
> > но программировать её было нудно, ибо "компилятор" я сделать
> > поленился, а в результате все эти проверки набивались
> ручками
> > в длинную цепочку команд
>
> Та-же ерунда, отладчик для ВМ так и не написан, Jack128
> оч сильно смеялся когда я пикод из под нее пытался отлаживать
> :)))

Чё то все мы постоянно работаем используя "недоинструменты" :)
Я постоянно (правда достаточно редко) пишу на ассемблере новые процедуры/перевожу на ассемблер с паскаля старые процедуры, но подключать я их в программу могу только с использованием старой доброй паскалевской inline. Ибо линкер мне не доступен. (((
P.S. Я как всегда о своём, о девичьем. Т.е. о микропроцессорах.


 
Германн ©   (2012-05-12 02:04) [18]


> Ветка вообще планировалась как обмен идеями

Я так и понял. Но...


 
Eraser ©   (2012-05-12 02:32) [19]


> Rouse_ ©   (12.05.12 00:11) [4]

по поводу online - DDOS это, во многом, домыслы. кому оно надо, да и уголовно наказуемо. лет через 10 вообще все там будет.

по поводу ЭЦП и аппаратного ключа - наверно я не совсем точно описал суть задумки. бороться непосредственно с патчерами и эмуляторами, imho, пустая трата времени. важно, чтобы в случае проверки ОБЭП ломанный софт было сразу видно. в т.ч. чтобы такой софт автоматически легко вычислялся спец. утилитами, которые есть в наличии у "органов".


 
Rouse_ ©   (2012-05-12 02:43) [20]


> Eraser ©   (12.05.12 02:32) [19]
> по поводу online - DDOS это, во многом, домыслы. кому оно
> надо, да и уголовно наказуемо. лет через 10 вообще все там
> будет.

Да нет - это вполне действенный метод, есть примеры и практика...

> по поводу ЭЦП и аппаратного ключа - наверно я не совсем
> точно описал суть задумки. бороться непосредственно с патчерами
> и эмуляторами, imho, пустая трата времени. важно, чтобы
> в случае проверки ОБЭП ломанный софт было сразу видно. в
> т.ч. чтобы такой софт автоматически легко вычислялся спец.
>  утилитами, которые есть в наличии у "органов".

Ну в кратце так оно и должно работать по задумке :)


 
wicked ©   (2012-05-12 04:13) [21]


> Очень знакомая конструкция...
> Морф криптора, собственно на базе стрелки Пирса сделан (банальный
> стэковый стакан). А что у тебя за софт, можно линк?


Германн прав - софт не взлетел, поэтому в интернете его и нету
да и писался он лет 6-7 назад, для клиента, найденного на eLance


> по поводу online - DDOS это, во многом, домыслы. кому оно
> надо, да и уголовно наказуемо. лет через 10 вообще все там
> будет.


и кого ты будешь ловить?
хомячков, у кого комп с букетом троянов и пожизненным членством в ботнете?


 
oxffff ©   (2012-05-12 11:38) [22]


> Rouse_ ©   (12.05.12 01:54) [16]
>
> > oxffff ©   (12.05.12 01:30) [13]
>
> Серег, спасибо за предложение, но не надо :)
> Ветка вообще планировалась как обмен идеями, а не толщиной
> его самого...
> ЗЫ: кстати, что есть "ВМ на аппаратном уровне с недокументированным
> набором команд".
> Судя по всему имелся АРМ, ибо что-то быстроработающее в
> плане ВМ можно конечно на ПИк-ах с шлюзовым препроцессором
> изобразить...


Я имел ввиду некий процессор с системой команд(для усложнения можно реализовать алгоритм который меняет коды операций в зависимости от предыдущей последовательности команд) известной только разработчикам и реализация такого процессора аппаратно. Такое устройство выполняет код(в том числе и обращение к СУБД например через основное устройство(x86) в память кладется SQL, шифрование, ..
), как и обычный процессор, а результаты вычислений кладет в память. Соответственно устройство выполняет полную логику работы с крит. данными. Для защиты от снятия дампа любая логика по крит. данным исполняется на этом устройстве.

То есть вся бизнес логика на устройстве.


 
Eraser ©   (2012-05-12 11:52) [23]


> Rouse_ ©   (12.05.12 02:43) [20]


> wicked ©   (12.05.12 04:13) [21]

за вполне вменяемые деньги сейчас можно разместить свой сервер в облаке того же amazon. в общем, думаю контора, достигшая такого уровня, что её захотят за DDOSить конкуренты может себе позволить фактически непотопляемый "сервер". если контора не занимается политикой, а рассчитывает, к примеру, строительные сметы, то глобально, как дядюшку Билли или же Эхо москвы её DDOSить никто не станет.


 
oxffff ©   (2012-05-12 11:59) [24]


> а рассчитывает, к примеру, строительные сметы,


+100500. :)


 
KSergey ©   (2012-05-12 12:57) [25]

Защита для чего нужна? чтобы не взломали? чтобы не скопировали?
Нет.

Защита нужна для того, чтобы получить деньги со всех (или максимально большого числа) пользователей.

А потому самая надежная защита - это
- невозможность развернуть и эксплуатировать ПО без участия разработчика
- качественная работа саппорта в таких условиях.


 
ZeroDivide ©   (2012-05-12 13:17) [26]

Тут я думаю нужно разделять, как минимум:
1. Софт для юр. лиц
2. Массовый софт

Для юр.лиц. катит лицензия и наезды, а вот для хомячков катит только защита. Из реально работающих и не взломанных популярных программ "Guitar FXBox". Защита такая: Есть прога, которая выполняет определенный набор функций и показывает прямо в интерефейсе, чего еще можно там сделать... Но функции не работают, то есть это демо-версия, то есть кода там вообще нет и крякать просто нечего! Полная копия отсылается с уникальным ключем после покупки. Если копия утекает, ключ заносится в черный список. Сейчас что-то демо-версии не сильно распространены, но вообще защита хорошая в плане эффективности.

   Еще вариант ((с) by me) делать фуфлыжную функциональность глобального масштаба. То есть при окончании триального периода, допустим, для примера, пользователь запускает прогу, открывает какие-то окошки, выполняет какие-то действия и все вроде бы нормально но натыкается, допустим, при нажатии какой-то кнопки на сообщение о невозможности выполнения операции в связи с окончанием триального периода.
   Причем на коде кнопки никаких проверок на окончание триала, никаких проверок на какие-то флажки, а просто что то типа ShowMessage("trial perid expired"); и всё. Сама проверка была вообще хрен знает где, и по результатам ее создавались фуфлыжные объекты, то есть такие же, но не содержащие кода обработок каких-то кнопок в принципе.
  Если сделать таких разветвлений штук 15, то взломать программу будет очень трудоемко. Мозги любого крякера заточены на то, что копать нужно где-то рядом с тем местом, где пошло ответвление от нетриальной функциональности. Для пущей надежности и защиты от особо продвинутых: Защищаем отрезанные фуфлыжную функциональность от дебага теми же виртуальными стековыми машинами. Если крякер раздебажит машину и расковыряет код, потратив на это кучу пота, то будет удивлен отсутствию каких либо проверок и условных переходов, а наличию одного лишь ShowMessage, окруженного мусорным кодом.


 
Rouse_ ©   (2012-05-12 13:28) [27]


> ZeroDivide ©   (12.05.12 13:17) [26]

Угу, отложенные проверки есть большое зло, только на практике встречал такой подход в одной единственной программе... Ленится народ...


 
Rouse_ ©   (2012-05-12 13:34) [28]

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


 
KSergey ©   (2012-05-12 14:07) [29]

> Rouse_ ©   (12.05.12 13:34) [28]

Здесь сама суть защиты фуфлыжная.
Вообще, если честно, прямо не понятно как отвечать в ветке, созданной Rouse_ по такому стандартному вопросу...

Помнится самая толковая защита была в VentaFax: по сути так и не было сделано нормальной крякнутой весии, на сколько мне известно.
Суть в множественности внедренных проверок на лицензионность и использование проверок (видимо каким-то неявным опять же образом, не через одну точку) в алгоритмах. Например, в ломанных вента-факс на печать выводилась "шахматная доска" вместо принятого текста, хотя на экран выводилось корректно, это ломали.

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

но ведь то, что я пишу сейчас - это и так всем известно... (это опять же в разрезе имени ТС), так что прямо и не знаю


 
KSergey ©   (2012-05-12 14:13) [30]

> KSergey ©   (12.05.12 12:57) [25]
> - невозможность развернуть и эксплуатировать ПО без участия  разработчика

Уточню: здесь речь вовсе не о технических каких-то защитах, нет!

Надо просто сделать две-три сотни ключей ini-файлов в разных компонентах комплекса ПО (разумеется, у каждой компоненты свой iniшник), в программе не делать особой защиты от некорректных значений и их комбинаций, при поведение модулей этой многокомпонентной системы в существенной степени зависит от сделанных настроек, а работать это все может  только при весьма согласованных и отюстированных взаимных настройках в ini-файлах разных компонент.
В документацию включать только те настройки, которые действительно есть смысл трогать конечному пользователю и только те, влияние которых  можно как-то более-менее лаконично и однозначно описать.

Некоторые говорят, что мы пишем "говнософт", но у меня подозрение, что это лицензионная политика )


 
Rouse_ ©   (2012-05-12 14:22) [31]


> но ведь то, что я пишу сейчас - это и так всем известно..

Не, ну почему - всегда есть шанс что кто-то выдаст на гора стоящую идею :)
Я вот сколько раз заводил подобного плана ветки - постоянно что-то для себя в плане направления куда пощупать находил :)

А по поводу самой интересной защиты, мне из всех встреченных понравилась защита сервера Ventrillo. Там никаких навесняков, но с технической точки зрения так красиво сделано, что в некоторых местах даже не понятно, толи ручками правился нативный код, то-ли реально разработчик заставил выдать на гора такой результат.


 
Rouse_ ©   (2012-05-12 14:23) [32]


> то-ли реально разработчик заставил выдать на гора такой
> результат.

в смысле разработчик заставил компилер выдать результат :)


 
Anatoly Podgoretsky ©   (2012-05-12 14:31) [33]

> KSergey  (12.05.2012 14:13:30)  [30]

По образцу Самсунга, замучался их убивать и редактировать, особенно в HKCR


 
Sha ©   (2012-05-12 15:18) [34]

> Rouse_ ©   (12.05.12 14:23) [32]
> в смысле разработчик заставил компилер выдать результат :)

а что там было необычно?


 
Rouse_ ©   (2012-05-12 15:56) [35]

Из нюансов которые помню, изменяемые данные находились непосредственно в теле процедуры прямо посреди выполняемого кода, ну что-то вроде:

 asm
   call @1
 @1:
   pop eax
   add eax, 22
   jmp eax
   dd 1, 2, 3, 4
   // читаем например
   mov eax, [eax - 16]
   // что-то делаем, потом туда-же пишем
 end;

фишка в том, что в этот блок данных заносится указатель на данные по очередному подключению.
Изначально сервер ограничен восемью подключениями.
Соответственно если попробовать обойти первую проверку где происходит сверка с восьмеркой, то он попробует записать данные по девятому по оффсету этого буффера и затрет кусок кода, в данном примере имя является mov eax, [eax - 16]

ну и еще там много всего интересного...


 
Rouse_ ©   (2012-05-12 16:06) [36]

Вообще там вся фишка что для каждого увеличения кол-ва подключений взломщику приходится решать очередную головоломку.
Я, если не изменяет память остановился на 12 подключениях, с 13-ым была заморочка в рамках winsock.select() с буффером. Терпения не хватило и забросил на время, вот до сих пор дома лежит никак не закончу этот кроссворд :)


 
Sha ©   (2012-05-12 16:26) [37]

> Rouse_ ©   (12.05.12 15:56) [35]

Такой call - ассемблерная вставка скорее всего,
такой jump иногда соответствует case.

> для каждого увеличения кол-ва подключений взломщику
> приходится решать очередную головоломку

Вот не лень им было )


 
Rouse_ ©   (2012-05-12 16:28) [38]

Не - это я код для примера написал, в оригинале конечно по другому было, просто кода под рукой нема :)


 
QAZ   (2012-05-12 18:44) [39]


> Помнится самая толковая защита была в VentaFax: по сути
> так и не было сделано нормальной крякнутой весии, на сколько
> мне известно

неправильно помница,ее никто и не крякал ибо она хавает серийник и работает :) лежит на любом трекере


 
Anatoly Podgoretsky ©   (2012-05-12 19:17) [40]

> Rouse_  (12.05.2012 15:56:35)  [35]

Обычная ассемблерная ручная или автоматическая вставка, известная в технике
защиты.
Эффективно, но нового ничего.



Страницы: 1 2 3 4 5 6 вся ветка

Текущий архив: 2013.03.22;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.097 c
8-1230712152
Программер
2008-12-31 11:29
2013.03.22
Как узнать кодек и разрешение видеофайла?


6-1261579139
ZV
2009-12-23 17:38
2013.03.22
Client и Server. Как сделать надежно и просто ?


15-1332156687
alexdn
2012-03-19 15:31
2013.03.22
Фотошоп?..


2-1331031997
Scott Storch
2012-03-06 15:06
2013.03.22
приводить к типу DWORD


15-1350926092
Дмитрий С
2012-10-22 21:14
2013.03.22
Электрический натягиватель троссика?