Форум » Синтаксис языка » Перенос кода в библиотеку DLL ..... » Ответить

Перенос кода в библиотеку DLL .....

voldemar227: Здравствуйте ! Интересует перенос куска кода из стандартного советника в библиотеку DLL с целью защиты кода от взлома ..... Покажите пожалуйста пример как это делается ..... И дайте по возможности какой то мануал......

Ответов - 17, стр: 1 2 All

Scriptong: Добрый день. Если ставить цель именно так (защита от взлома), то только ради этого переносить код не стоит. Будет, конечно, некоторый эффект, т.к. воспользоваться существующим декомпилятором MQL4 у злоумышленников уже не получится. Это приведет только к тому, что уменьшится количество людей, способных взломать вашу программу. Если же в вашем коде есть что-то действительно уникальное и стоящее, то помещение кода в DLL не спасет программу от взлома. Найдутся умельцы. Теперь по сути. Сами модули DLL пишутся на любом доступном вам языке высокого уровня. В свое время я пробовал писать их на Delphi, но в конце концов пришел к написанию на C++, т.к. сам терминал МТ4 (и МТ5 тоже) написан на этом языке. О том, как это делается, очень хорошо описано в статье Как за 10 минут написать DLL библиотеку и обмениваться данными. Для Delphi есть похожая статья: Руководство по написанию DLL для MQL5 на Delphi. Принципы, описанные в этих статьях, подходят и для MQL4. Есть, конечно, небольшие отличия (работа со строками, например, различается), но в целом подход одинаковый. Также не забудьте заглянуть в папку терминала experts\samples. Там как раз приведен код эксперта, использующего DLL (проект для C++ тоже имеется).

voldemar227: Хорошо я понял что длл не выход ! Тогда как ??? Что лучше сделать ??? Может сделать обфускацию ??? Тогда как и какие принципы использовать ???

Scriptong: voldemar227 пишет: Хорошо я понял что длл не выход ! Тогда как ??? Ну почему же? Очень даже выход. Необходимо хорошо подумать в этом направлении. Не ищите распространенных путей, придумайте что-то свое. Чем оригинальнее решение, тем меньше шансов у взломщиков. И, конечно же, не стоит трубить на весь свет о найденном решении. voldemar227 пишет: Может сделать обфускацию ??? Это тривиальный способ, который лишь немного затруднит жизнь взломщикам. Самый лучший способ защиты программы - не распространять ее. Если речь идет об эксперте, то пользуйтесь им сами для получения прибыли, не поддавайтесь желанию получить быструю, но не постоянную прибыль от его продажи. Если же речь идет о программе, которая приносит прибыль именно своим распространением, то стоит задуматься о правильно поставленном способе продажи. Лучше всего ориентироваться на корпоративных, а не на частных клиентов, т.к. корпорации вряд ли будут опускаться до банального взлома (репутация дороже). О взломе больше думают частные лица. Если частникам предоставлять программу бесплатно, то и мыслей о взломе ни у кого не возникнет.


voldemar227: Как с помощью длл сделать проверку демо или реал ????

Scriptong: voldemar227 пишет: Как с помощью длл сделать проверку демо или реал ???? Прямого способа нет, т.к. из DLL невозможно обращение к терминалу без использования элементов MQL4. Поэтому передавайте в DLL результат исполнения функции IsDemo.

voldemar227: то есть if ( IsDemo()) { int a=1; } мы передадим в длл переменную "а" ... и длл дальше работает но при декомпиляции человеку достаточно сделать if (1 == 1) { int a=1; } и эффект будет тот же. как сделать так что бы человек не мог вырезать длл ?? Не мог удалить все обращения в длл ? и в тоже время как получить в длл то что счет демо или реал ???

Scriptong: voldemar227 пишет: но при декомпиляции человеку достаточно сделать Такая проблема была в ранних билдах МТ4. Сейчас (во всяком случае, на 432-ом билде) такой финт уже не проходит. Другое дело, что взломать файл могут и без использования декомпилятора. На эту проблему можно посмотреть под другим углом. Вы же собираетесь распространять только ex4-версию? Значит, файл у любого пользователя должен быть неизменным. В этом случае достаточно из DLL проверить контрольную сумму (CRC) ex4 файла. Если она не совпадает с той контрольной суммой, которую Вы получили при компиляции на своей машине, значит, советник был декомпилирован. Контрольную сумму при изменениях в программе подделать будет достаточно тяжело (но не значит, что невозможно!). Для этого взломщику, как минимум, нужно будет знать, что контрольная сумма проверяется сторонней программой.

voldemar227: Scriptong пишет: да нет проходит такой финт ....

Scriptong: Очень хорошо вы натолкнули на хорошую мысль!!! А как из длл проверить контрольную сумму советника ??? 1. Открыть ex4-файл. 2. Считать его побайтно. 3. Рассчитать CRC для массива байт. Методов расчета CRC существует множество. Вот, например, несколько стандартизированных методов. Но для такого рода защиты я бы использовал свой собственный алгоритм, который бы никому и нигде не показывал. Это, заодно, усложнило бы взломщикам жизнь. voldemar227 пишет: да нет проходит такой финт .... Не понял, что это вы показали? Декомпилятор не может знать, что переменная имеет имя "а". Он ставит что-то типа "li_1". Вы уверены, что показали код, генерированный декомпилятором?

voldemar227: я показал вам что то есть if ( IsDemo()) { int a=1; } легко переделывается в if (1 == 1) { int a=1; } а при декомпиле будет if ( IsDemo()) { int li_1=1; } тоесть мерзавец может в декомпилированном коде сделать if (1==1) { int li_1=1; } и условие волнится !!! Вопрос по ходу возникает если переменная меняется с а на li_1 библиотека длл примет переменную li_1 ???



полная версия страницы