Защита кода
От: α Российская Империя  
Дата: 22.10.15 08:03
Оценка:
Про обфускацию я в курсе, а других способов защиты вроде бы и нет?
Думаю вынести определенный функционал в C++ DLL, защитить ее VMProtect-ом и наладить общение с ней через pinvoke.
Какой функционал можно переложить с .NET на С++? Навскидку: функции работы со строками, константы, перечисления, определения интерфейсов. Что бы еще такое придумать, чтобы сборка .NET прям вот жить не могла без нативной защищёной DLL и чтобы работа по эмулированию функционала из нативной DLL под .NET оказалась максимально трудоёмкой?
http://files.rsdn.org/67021/op.jpg
Re: Защита кода
От: Doc Россия http://andrey.moveax.ru
Дата: 22.10.15 08:14
Оценка: 1 (1) -1
Здравствуйте, α, Вы писали:

α>Что бы еще такое придумать, чтобы сборка .NET прям вот жить не могла без нативной защищёной DLL и чтобы работа по эмулированию функционала из нативной DLL под .NET оказалась максимально трудоёмкой?


Ключевые функции бизнес-логики.

α>функции работы со строками, константы, перечисления


Думаю все это легко отлавливается в полной версии и при желании легко эмулируется. А вот переписать BL это по сути что и переписать половину приложения.
Re: Защита кода
От: Sharov Россия  
Дата: 22.10.15 10:01
Оценка: +1 :)
Здравствуйте, α, Вы писали:

А чего сразу весь managed код не заобфусцировать? Ну или часть.
Кодом людям нужно помогать!
Re[2]: Защита кода
От: Sinix  
Дата: 22.10.15 10:40
Оценка: 12 (1) +8
Здравствуйте, Sharov, Вы писали:

S>А чего сразу весь managed код не заобфусцировать? Ну или часть.

А смысла никакого нет.

Во-первых, в 99% случаев идеально работает защита неуловимого Джо.

Ну ок — добыли конкуренты исходники продукта, что они с ним делать будут?
Продавать впрямую — палево. Развивать самостоятельно — не потянут, ибо воспроизвести весь процесс разработки малореально, а без него от кода толку 0. Заимствовать куски инфраструктурного кода — в большинстве случаев проще с гитхаба/stackoverflow оригинал взять.

Во-вторых, обходится оно элементарно, unpackme для того же .net reactor — дело пары часов, вот относительно свежий пример.
Пока есть managed-код — есть возможность без особых проблем его поменять.
Пытаемся перевести в натив — начинаются веселейшие баги, от падений биндинга и до повреждения сериализуемых данных (как правило тут вина не самого обфускатора, а некорректной настройки, но тем не менее).

В третьих, как показывает практика, те, кто готовы использовать взломанный вариант, покупать не будут всё равно.


В общем, лучше потратить время на то, что реально нужно клиентам — всяко больше пользы будет.
Re[3]: Защита кода
От: Sharov Россия  
Дата: 22.10.15 10:52
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Во-первых, в 99% случаев идеально работает защита неуловимого Джо.


S>В общем, лучше потратить время на то, что реально нужно клиентам — всяко больше пользы будет.


Так я все это прекрасно понимаю и полностью согласен. Я не понял в чем фишка обфусцировать unmanagend код, по сравнению с managed? Мож как фундаментальная разница есть, и деобфусцировать managed проще. Вот и спросил.
Кодом людям нужно помогать!
Re[4]: Защита кода
От: α Российская Империя  
Дата: 22.10.15 11:06
Оценка:
Здравствуйте, Sharov, Вы писали:

S>Так я все это прекрасно понимаю и полностью согласен. Я не понял в чем фишка обфусцировать unmanagend код, по сравнению с managed? Мож как фундаментальная разница есть, и деобфусцировать managed проще. Вот и спросил.


Да речь шла не об обфускации unmanaged, а об усложнении взлома выносом туда части функционала
http://files.rsdn.org/67021/op.jpg
Re[5]: Защита кода
От: Sharov Россия  
Дата: 22.10.15 11:08
Оценка:
Здравствуйте, α, Вы писали:

α>Да речь шла не об обфускации unmanaged, а об усложнении взлома выносом туда части функционала


И чем это усложнит? Разве что "защита от дурака".
Кодом людям нужно помогать!
Re: Защита кода
От: aloch Россия  
Дата: 22.10.15 17:34
Оценка:
Здравствуйте, α, Вы писали:

Я бы на С++ написал не DLL, а EXE, в котором "поднял" хост .Net и загрузил нужные сборки.

EXE может предоставить сборкам при при инициализции ссылки на несколько функций, важных для программы, и реализованных на C++. К этим функциям обращаться по мере надобности из .Net.

Свою .Net сборку можно вообще в ресурсы EXE положить в "зашифрованном" виде, потом загрузить из памяти.

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


http://files.rsdn.org/1366/MCP(rgb).jpg
Re[3]: Защита кода
От: Sharowarsheg  
Дата: 22.10.15 21:49
Оценка: +2
Здравствуйте, Sinix, Вы писали:

S>В третьих, как показывает практика, те, кто готовы использовать взломанный вариант, покупать не будут всё равно.


Моя практика показывает, что если взломанного варианта нет, то будут.
Re[5]: Защита кода
От: Sharowarsheg  
Дата: 22.10.15 21:50
Оценка:
Здравствуйте, α, Вы писали:

α>Да речь шла не об обфускации unmanaged, а об усложнении взлома выносом туда части функционала


Самое доброе, что можно сделать, это часть функционала вынести на сервер, если это хоть как-то возможно.
Re[4]: Защита кода
От: GlebZ Россия  
Дата: 23.10.15 14:52
Оценка: 8 (1)
Здравствуйте, Sharov, Вы писали:

S>Так я все это прекрасно понимаю и полностью согласен. Я не понял в чем фишка обфусцировать unmanagend код, по сравнению с managed? Мож как фундаментальная разница есть, и деобфусцировать managed проще. Вот и спросил.

Обсфукация unmanaged — это нонсенс. Это как мужика обследовать на беременность. Обсфукация — это запутываи имен и метаданных. В unmanaged все хуже, потому что имен и метаданных нет (ну по крайней мере человекочитабельных). Обсфуцировать нечего.
Re: Защита кода
От: GlebZ Россия  
Дата: 23.10.15 15:00
Оценка:
Здравствуйте, α, Вы писали:

α>Про обфускацию я в курсе, а других способов защиты вроде бы и нет?

α>Думаю вынести определенный функционал в C++ DLL, защитить ее VMProtect-ом и наладить общение с ней через pinvoke.
α>Какой функционал можно переложить с .NET на С++? Навскидку: функции работы со строками, константы, перечисления, определения интерфейсов. Что бы еще такое придумать, чтобы сборка .NET прям вот жить не могла без нативной защищёной DLL и чтобы работа по эмулированию функционала из нативной DLL под .NET оказалась максимально трудоёмкой?
Неплохо бы узнать цель. Например: я хочу чтобы мою библиотеку никто не мог использовать. Или хочу чтобы программу не могли нелицензионно использовать. Или не хочу чтобы поняли какой алгоритм заложен в программу.

По конкретному, не использование библиотеки, двойной xor возвращает то же значение. Берешь хеш сборки, ксоришь с определенным числом, получаешь ключ. А затем по алгоритмам некоторые числа получаешь другим ксором с полученным ключом. Если сборка была изменена — то работать будет не так.
Re[5]: Защита кода
От: Sharov Россия  
Дата: 23.10.15 15:57
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Sharov, Вы писали:


S>>Так я все это прекрасно понимаю и полностью согласен. Я не понял в чем фишка обфусцировать unmanagend код, по сравнению с managed? Мож как фундаментальная разница есть, и деобфусцировать managed проще. Вот и спросил.

GZ>Обсфукация unmanaged — это нонсенс. Это как мужика обследовать на беременность. Обсфукация — это запутываи имен и метаданных. В unmanaged все хуже, потому что имен и метаданных нет (ну по крайней мере человекочитабельных). Обсфуцировать нечего.

Да, это я маху дал... Для unmanaged есть всяческие PE-упаковщики заголовков и т.д., вот их я имел в виду.

ЗЫ: Для ТС -- http://stackoverflow.com/questions/10637993/obfuscation-vs-unmanaged-assembly
Кодом людям нужно помогать!
Re[5]: Защита кода
От: Sharowarsheg  
Дата: 23.10.15 16:59
Оценка: 10 (2)
Здравствуйте, GlebZ, Вы писали:

GZ>Здравствуйте, Sharov, Вы писали:


S>>Так я все это прекрасно понимаю и полностью согласен. Я не понял в чем фишка обфусцировать unmanagend код, по сравнению с managed? Мож как фундаментальная разница есть, и деобфусцировать managed проще. Вот и спросил.

GZ>Обсфукация unmanaged — это нонсенс.

Нет, это прекрасная штука тоже.

Берем исходники на С, запихиваем в них в сто раз больше по объему, чем было, автогенерированного когда, который ничего не делает, и компилируем. Добавляет массу удовольствия дизассемблирующему. Строки шифровать, опять же, полезно независимо от языка и среды.
Re[6]: Защита кода
От: GlebZ Россия  
Дата: 23.10.15 17:17
Оценка:
Здравствуйте, Sharowarsheg, Вы писали:

S>Берем исходники на С, запихиваем в них в сто раз больше по объему, чем было, автогенерированного когда, который ничего не делает, и компилируем. Добавляет массу удовольствия дизассемблирующему. Строки шифровать, опять же, полезно независимо от языка и среды.

В этом случае проще шифровать и дешифровывать код в процессе исполнения. Те же яйца — но покруче. В managed такое невозможно.
Re[7]: Защита кода
От: Sharowarsheg  
Дата: 23.10.15 17:22
Оценка:
Здравствуйте, GlebZ, Вы писали:



S>>Берем исходники на С, запихиваем в них в сто раз больше по объему, чем было, автогенерированного когда, который ничего не делает, и компилируем. Добавляет массу удовольствия дизассемблирующему. Строки шифровать, опять же, полезно независимо от языка и среды.

GZ>В этом случае проще шифровать и дешифровывать код в процессе исполнения. Те же яйца — но покруче.

Одно другому не мешает.
Re: Защита кода
От: MozgC США http://nightcoder.livejournal.com
Дата: 23.10.15 17:55
Оценка:
Имхо лучше задайте этот вопрос на крэкерском форуме, там люди постоянно взломом занимаются и лучше знают как сделать сильную защиту.
http://www.brainbench.com/images/certlogo/color/mastercert/csharp50.gif
Re[7]: Защита кода
От: Sharov Россия  
Дата: 24.10.15 09:11
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>В этом случае проще шифровать и дешифровывать код в процессе исполнения. Те же яйца — но покруче. В managed такое невозможно.


Почему? Если есть соотв. поддержка со стороны jit(clr).
Кодом людям нужно помогать!
Re[8]: Защита кода
От: Sharowarsheg  
Дата: 24.10.15 10:59
Оценка: +1 :))
Здравствуйте, Sharov, Вы писали:

GZ>>В этом случае проще шифровать и дешифровывать код в процессе исполнения. Те же яйца — но покруче. В managed такое невозможно.


S>Почему? Если есть соотв. поддержка со стороны jit(clr).


Хочется самомодифицирующего кода — всегда можно написать виртуальную машину форта, на форте самомодифицирующуюся виртуальную машину брейнфака, на брейнфаке переписать части алгоритма (типа, полиморфный компилятор си в брейнфак), и угорать. Проверенный годами надежный способ. Если не хочется ходить неделю с головой задом наперед, можно поменять форт на мадлен или ассемблер м20.
Re[3]: Защита кода
От: Somescout  
Дата: 26.10.15 12:09
Оценка:
Здравствуйте, Sinix, Вы писали:

S>В третьих, как показывает практика, те, кто готовы использовать взломанный вариант, покупать не будут всё равно.


Знаю несколько не самых бедных компаний, если долгосрочный постоянно используемый софт ещё купят, опасаясь проверок, то редко используемый, при наличии кряка ... хотя деньги есть.
ARI ARI ARI... Arrivederci!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.