Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++ > Разработка LIB

Ответ
 
Опции темы
Старый 04.07.2007, 13:02   #16
jimon
 
Сообщений: n/a
Re: "Защита" *.DLL

Cyan
я кстати имперу в асе предлагал такой вариант
для ООП языков ето самое оно
либа с одной функцией ... и что юзер с ней делать то будет ?

impersonalis
что мешает закапать ето все в exe с нормальным названием
а потом при открытии банально распоковать в левую папку и запустить ?
 
Ответить с цитированием
Старый 17.02.2015, 03:33   #17
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: "Защита" *.DLL

Хотелось бы узнать мнение Knightmare по этому вопросу.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 17.02.2015, 03:37   #18
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Re: "Защита" *.DLL

Сообщение от Platon Посмотреть сообщение
*Ключ отпадает однозначно если либа используется Блицем, ибо ключ как строку можно посмотреть HEX или блокнотом в exe или просто выдрав машинный код из exe и так-же посмотрев его HEX или блокнотом.
Конечные ключи (надо было только для одного проекта) встраивал не в явном виде, а в виде кода, генерируемого другой программой. На выходе получался синтетический набор массивы/функции, результатом взаимодействия которых был создаваемый в памяти ключ. Для паранойи можно ключ в памяти не держать, а создавать ровно на время работы с ним.
Конечно, можно было разобрать и этот код и восстановить ключ, но это совсем не то же, что прогнать фильтр chr()>31.
Ну и, "уязвимости" подвластны не только блитцевые exe.
Сообщение от Platon Посмотреть сообщение
Если либа не в блице используется, то можно попросту использовать интерфейсы - либа передает интерфейс одной функцией (как Блицевский runtime.dll), а через него уже используются все необходимые функции. Юзеру изрядно попотеть прийдется чтобы узнать структуру такого интерфейса.
То есть в роли интерфейса оставить только одну функцию, рассказывающую о внутренностях? Возвращающую по команде указатели на остальные методы? Ну это больше кодирование, чем шифрование (в плане - много возни, но если делать хорошо, то и пользователь быстро разберётся; не ясно как здесь обфусцировать код). Подобным приходилось маяться при изготовлении MATLAB-овских mex-файлов (DLL с фиксированным интерфейсом в одну функцию): функция получала на вход команду что_делать (инициализация, очистка ресурсов, рассчёт, прочее) и необходимый (для данной операции) набор данных. Ситуация упрощалась тем, что при написании используются matlab-овские контейнеры, что придаёт интерфейсу довольно масштабируемый характер.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 17.02.2015, 04:29   #19
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: "Защита" *.DLL


В дополнении к генерации ключей, можно использовать приёмы антиотладки чтобы лучше защитить сам генератор.

А вообще всё советы выше это скорее отправные точки, далее нужно подходить конкретно в зависимости от
особенностей кода DLL. Для этого нужно сказать какому-нибудь челу чтобы он только и делал что взламывал
эту DLL и на каждую уязвимость пилить патчи. В общем по возможности работать на опережение.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Samodelkin за это полезное сообщение:
impersonalis (17.02.2015), St_AnGer (17.02.2015)
Старый 17.02.2015, 14:31   #20
Knightmare
Дэвелопер
 
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений
(для 2,920 пользователей)
Ответ: "Защита" *.DLL

Сообщение от impersonalis Посмотреть сообщение
Хотелось бы узнать мнение Knightmare по этому вопросу.
Ну для начала немного кэпства: все можно поломать (ну исключая разве что какие-нибудь веб-сервисы, но и то возможности некоторые есть), скорость поломания зависит от популярности.
Если ты делаешь что-то не особо популярное (или очень узконаправленное) и врядли над этим будет пыхтеть куча людей чтобы изломать и выкинуть на торренты, то можно особо не заморачиваться с защитой изощренной, потому как лишняя работа (ну разве что для лулзов, для лулзов как я уже писал можно хоть что делать без каких-либо обоснований). Если кого-то приспичит очень сильно, то все равно сломают, а большинство юзеров и с весьма простой защитой соснут.
В целом обфусцированный кусок кода для проверки ключей, который в целях отдельного извращения можно размазать по функционалу либы, и частично на результат проверки завязать функционал (ну там из правильного куска ключа получается правильная константа и все работает верно), у нас был код который крашил не до конца поломанную (если остановится на проверке ключа и не втыкать что дальше в движке происходит) либу, например. Антидебаггерная защита тож полезной будет, потому как одно дело с дебаггером ковырять ассемблерную мешанину, а другое дело медитировать на этот самый ассемблер без возможности запуска. Плюс всегда можно написать свой упаковшик с самопальным шифрованием (но тут я не уверен насколько возможно в современных вендах с наглой мордой запихать в память код и сказать что его надо выполнять), тогда соответственно при инициализации DLL с верным ключом в память развернется уже непосредственно код с функционалом либы, но даже при возможности загрузки левого кода задача не самая тривиальная.
А вообще по возможности можно все вынести на сервер, а в либе будет только связь с ним, типа отправить запрос, распарсить ответ. Тогда хоть заломайся в либе нихера толкового не будет, надо ломать уже сервер, что несколько сложнее, а если он правильно анально огорожен, то и практически невозможно (ну всякие там Heartbleedы всегда могут нарисоваться). Хотя этот вариант не везде подойдет (интернет сейчас есть в любом зажопинске, но для чего-то реалтаймового не подойдет очевидно). Алсо при этом подходе легко выпиливаются скомпрометированные ключи. Ну а если функционал либы уникальный и нужный кому-то, то этот кто-то согласится и на такие условия. И плюсом сюда крайне просто под разные платформы все это растиражировать, а если под какую-то и нет официальной либы, то кому надо сами запилят по документации к API.
(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Knightmare за это полезное сообщение:
ABTOMAT (17.02.2015), Arton (21.02.2015), impersonalis (17.02.2015), moka (17.02.2015), RegIon (18.02.2015), St_AnGer (17.02.2015)
Старый 22.02.2015, 15:27   #21
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: "Защита" *.DLL

Сообщение от Knightmare Посмотреть сообщение
Антидебаггерная защита тож полезной будет, потому как одно дело с дебаггером ковырять ассемблерную мешанину, а другое дело медитировать на этот самый ассемблер без возможности запуска.
Это, к сожалению, не сработает. Любой ламер "обходит" такую защиту поставив пару плагинов на отладчик (порог вхождения слишком низок).
Сообщение от Knightmare Посмотреть сообщение
Плюс всегда можно написать свой упаковшик с самопальным шифрованием (но тут я не уверен насколько возможно в современных вендах с наглой мордой запихать в память код и сказать что его надо выполнять), тогда соответственно при инициализации DLL с верным ключом в память развернется уже непосредственно код с функционалом либы, но даже при возможности загрузки левого кода задача не самая тривиальная.
Так делает ASProtect. Он шифрует часть кода, а в часть рег. кода запихивает ключ для расшифровки.
Еще больше проблем взломщику принесет виртуальная машина.
То есть она ничего отлаживать не запрещает (присутствует пара методов, но они легко обходятся), однако вместо ассемблера у вас в отладчике непонятная каша, вследствие чего отладка становится попаболью (нет авт. анализа (IDA идет лесом), нет брейкпоинтов, никаких "констант" в коде и т.д.). Единственное решение для таких ВМ - заниматься распаковкой, но это задачка совсем не тривиальная и в принципе ВМ это лучшее из решений "на стороне клиента".
__________________
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо h1dd3n за это полезное сообщение:
impersonalis (22.02.2015), Samodelkin (22.02.2015)
Старый 22.02.2015, 18:03   #22
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: "Защита" *.DLL

Сообщение от h1dd3n Посмотреть сообщение
Это, к сожалению, не сработает. Любой ламер "обходит" такую защиту поставив пару плагинов на отладчик (порог вхождения слишком низок).
Нет, в той статье на которую я давал ссыль, есть приёмы которые не отлавливаются и плагинами. Зависит от количества применяемых тобой приёмов -- чем больше их сделаешь -- тем больше работы придется сделать ламеру, а значит не все ламеры захотят делать столько действий.

С виртуальной машиной интересная штука, однако я считал что машины как раз наоборот помогают отлаживать код.
(Offline)
 
Ответить с цитированием
Старый 22.02.2015, 18:37   #23
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: "Защита" *.DLL

Сообщение от h1dd3n Посмотреть сообщение
Еще больше проблем взломщику принесет виртуальная машина.
Судя по описанию вся фишка в том что она работает под администратором, а также требуется ставить эту самую виртуальную машину отдельно, как дополнительный софт. Я то в игры на юнити не играю, просто потому что нехочу ставить юнити плеер, а вы предлагаете для запуска какой-то длл ставить целую машину, да ещё разрешать ей такие привилегии? А что если сама эта машина уязвима и вирус запущенный на ней, прямо через неё разнесёт систему?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
impersonalis (22.02.2015)
Старый 22.02.2015, 21:42   #24
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: "Защита" *.DLL

Сообщение от Samodelkin Посмотреть сообщение
Судя по описанию вся фишка в том что она работает под администратором, а также требуется ставить эту самую виртуальную машину отдельно, как дополнительный софт. Я то в игры на юнити не играю, просто потому что нехочу ставить юнити плеер, а вы предлагаете для запуска какой-то длл ставить целую машину, да ещё разрешать ей такие привилегии? А что если сама эта машина уязвима и вирус запущенный на ней, прямо через неё разнесёт систему?
Где ты вычитал такое описание хз. Как и все другие пакеры темида просто изменяет входной файл (меняет точку входа, зашифровывает область кода и т.д.). Просто в темиде одной из дополнительных фишек является виртуальная машина. Кроме этого там есть антиотладка, crc-check процедур (на изменение) и еще просто дохренища чего угодно. Виртуальную машину отдельно ставить не нужно. Она запаковывается вместе с исполняемым файлом.

Там есть демка в разделе Downloads.
С виртуальной машиной интересная штука, однако я считал что машины как раз наоборот помогают отлаживать код.
Каким это образом ?
__________________
(Offline)
 
Ответить с цитированием
Старый 22.02.2015, 22:56   #25
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: "Защита" *.DLL

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

Там есть демка в разделе Downloads.
SecureEngine® is an innovative and revolutionary technology for protecting Microsoft Windows applications against modern cracking. Its architecture and design is a completely new idea, never seen before in the software security-world. Other software protectors use normal application privileges, supervised and restricted by the operating system kernel. Most of modern crackers tools are also running in the operating system (kernel) level making it very easy to study and attack their protection routines, since they are running in a lower level (application level).

SecureEngine® has been designed with a different approach to avoid this common scenario. Its code is running on the same level as the operating system (kernel) with all privileges enabled. That allows the executing of any kind of protection technique without being restricted by the operative system. On the other hand, current cracker tools are unable to detect, study and attack protection routines that have designed for and run on the same level (kernel). This innovative technology is compatible with all popular Windows versions, 98, ME, 2000, XP and 2003.
The SecureEngine® VirtualMachine is a powerful technology that allows the execution of code compiled for an imaginary CPU. When this compiled code is executed, a cracker cannot recognize the code that is being executed and cannot understand what a specific algorithm is doing. Current software protectors do not include this protection technique due to its complexity to implement.
Даже если идти по ссылке на не_SecureEngine методы, когда начинаешь тыкать на объяснение как это работает, они всё равно переходят на SecureEngine.

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

Демку посмотрю.

Каким это образом ?
Ну как, получаешь контекст процесса, значения регистров, дамп памяти виртуальной машины в случае падения кода прямо с удалённого компьютера пользователя, без каких либо привелегий и отвлекания пользователя предоставить какой-то доступ. Да и пользователю спокойнее что программа изолировано работает в обычном приоритете. Удобно когда всё внутри.
(Offline)
 
Ответить с цитированием
Старый 23.02.2015, 01:03   #26
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: "Защита" *.DLL

Виртуальные машины бывают разные.
У jvm, например, команд мало и они вполне очевидные (положить в стек, достать из стека, сложить два верхних и положить результат на стек)- такой код с чётким разделением на методы разбирать действительно проще.

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

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

P.S. где-то читал, что в лаборатории Касперского есть софт, который умеет анализировать работу таких виртуальных машин без помощи человека.

Its code is running on the same level as the operating system (kernel) with all privileges enabled. That allows the executing of any kind of protection technique without being restricted by the operative system. On the other hand, current cracker tools are unable to detect, study and attack protection routines that have designed for and run on the same level (kernel).
Эм, а в виртуальной машине что будет? Их софт попытается догадаться, что он в виртуалке, и откажется запускаться, что ли?
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 23.02.2015, 01:41   #27
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: "Защита" *.DLL

Ага всё попробовал демку.
Ну вроде работает но нагромождений дофига.
Из ограничений: платная и только для Windows.

Вот ещё кстати статейка, но правда старая, её смысл в том что нужно макросами указывать внутри своего кода что и как защитнику делать, т. к. полностью автоматический режим не очень хорошо справляется с задачей.

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

Сообщение от Igor
Эм, а в виртуальной машине что будет? Их софт попытается догадаться, что он в виртуалке, и откажется запускаться, что ли?
Нет имеется ввиду что запущенные процессы с одинаковым приоритетом не могут внедрятся друг в друга по своему желанию. В то время как запущенный из под админа дебагер может потрошить приложение с привилегиями обычного пользователя. Это не относится к виртуальной машине, просто кроме такого подхода там ещё и машина и много чего ещё.
(Offline)
 
Ответить с цитированием
Старый 23.02.2015, 02:01   #28
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,218
Написано 438 полезных сообщений
(для 790 пользователей)
Ответ: "Защита" *.DLL

В то время как запущенный из под админа дебагер может потрошить приложение с привилегиями обычного пользователя. Это не относится к виртуальной машине, просто кроме такого подхода там ещё и машина и много чего ещё.
Они там пишут о своём "революционном решении" запускать код с повышенными привилегиями, как будто никто до него добраться не сможет.
Но если запустить код в виртуальной машине (я имею в виду что-то типа VirtualBox, а не те, которые обфусцируют код), то можно будет спокойно приостанавливать, читать память и делать прочие непотребства.
Либо у них есть какие-то фишки, которые позволяют обнаружить факт выполнения кода в виртуальной машине, либо они тупо забили на этот вариант, что маловероятно
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Старый 23.02.2015, 03:39   #29
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 978
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: "Защита" *.DLL

Сообщение от Igor Посмотреть сообщение
Либо у них есть какие-то фишки, которые позволяют обнаружить факт выполнения кода в виртуальной машине, либо они тупо забили на этот вариант, что маловероятно
А ты имеешь ввиду что можно запустить дебагер прямо внутри той же виртуальной машины что и защищаемый софт? Ну там да защищено от этого -- на компьютере разработчика Themida конвертирует настоящий машинный код приложения, в код виртуальной машины, которая сгенерировалась специально для этого приложения. Поэтому крэкеру нужно сначала разобрать как работает данная машина, а уже потом он сможет написать конвертер для своего дебагера, чтобы теоретически он смог работать на той же виртуальной машине. Но там есть также защита памяти, обфускация и множество других вещей которые сильно затруднят процесс. К тому же разработчик может при обновлении своего софта заново сгенерить машину и крэкер не будет успевать её разреверсить.

Кстати демка которую я запускал не требовала инсталляции и не требовала прав администратора на запуск защищаемого софта, так что похоже действительно есть вариант, который работает в режиме пользователя. Единственное что меня смутило у Themid'ы нет цифровой подписи и Windows даёт соответствующее предупреждение при её запуске.
(Offline)
 
Ответить с цитированием
Старый 23.02.2015, 09:26   #30
h1dd3n
Бывалый
 
Аватар для h1dd3n
 
Регистрация: 19.06.2008
Сообщений: 679
Написано 264 полезных сообщений
(для 450 пользователей)
Ответ: "Защита" *.DLL

Сообщение от Samodelkin Посмотреть сообщение
Ну как, получаешь контекст процесса, значения регистров, дамп памяти виртуальной машины в случае падения кода прямо с удалённого компьютера пользователя, без каких либо привелегий и отвлекания пользователя предоставить какой-то доступ. Да и пользователю спокойнее что программа изолировано работает в обычном приоритете. Удобно когда всё внутри.
Это можно сделать и без виртуальной машины.

Ты все время говоришь про какие-то там привелегии. Что ты имеешь в виду под "привелегиями" ? Отсутствие каких конкретно привелегий является проблемой для пакеров вроде темиды (исключая вариант с ring0 защитой) ?
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли сделать так чтобы при нажатии "вверх" и "вниз" двигалась одна картинка, а при нажатии "вправо" и "влево" - другая Total_Nube_&_Lamo Основной форум 2 13.12.2009 22:00
"Кодирование/декодирование изображений", или "Давайте попробуем скрыть ресурсы мидлетов" Richik Библиотеки 17 03.06.2009 14:18
"DarkWing Duck" aka "Черный Плащ" Chrono Syndrome Болтовня 19 04.12.2007 16:05
Игра "Три слова". Рассказ "Время планет" Ilyich Юмор 77 02.04.2007 17:49
"Пополнение рядов" или "Слава роботам!" impersonalis Юмор 1 15.08.2006 23:54


Часовой пояс GMT +4, время: 11:02.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com