Автор | Сообщение |
|
| |
Пост N: 23
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
|
|
Отправлено: 31.12.11 10:40. Заголовок: Перенос кода в библиотеку DLL .....
Здравствуйте ! Интересует перенос куска кода из стандартного советника в библиотеку DLL с целью защиты кода от взлома ..... Покажите пожалуйста пример как это делается ..... И дайте по возможности какой то мануал......
|
|
|
Ответов - 17
, стр:
1
2
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 279
Зарегистрирован: 03.09.09
|
|
Отправлено: 03.01.12 13:27. Заголовок: Добрый день. Если с..
Добрый день. Если ставить цель именно так (защита от взлома), то только ради этого переносить код не стоит. Будет, конечно, некоторый эффект, т.к. воспользоваться существующим декомпилятором MQL4 у злоумышленников уже не получится. Это приведет только к тому, что уменьшится количество людей, способных взломать вашу программу. Если же в вашем коде есть что-то действительно уникальное и стоящее, то помещение кода в DLL не спасет программу от взлома. Найдутся умельцы. Теперь по сути. Сами модули DLL пишутся на любом доступном вам языке высокого уровня. В свое время я пробовал писать их на Delphi, но в конце концов пришел к написанию на C++, т.к. сам терминал МТ4 (и МТ5 тоже) написан на этом языке. О том, как это делается, очень хорошо описано в статье Как за 10 минут написать DLL библиотеку и обмениваться данными. Для Delphi есть похожая статья: Руководство по написанию DLL для MQL5 на Delphi. Принципы, описанные в этих статьях, подходят и для MQL4. Есть, конечно, небольшие отличия (работа со строками, например, различается), но в целом подход одинаковый. Также не забудьте заглянуть в папку терминала experts\samples. Там как раз приведен код эксперта, использующего DLL (проект для C++ тоже имеется).
|
|
|
|
| |
Пост N: 25
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
|
|
Отправлено: 15.02.12 20:53. Заголовок: Хорошо я понял что д..
Хорошо я понял что длл не выход ! Тогда как ??? Что лучше сделать ??? Может сделать обфускацию ??? Тогда как и какие принципы использовать ???
|
|
|
|
| постоянный участник
|
Пост N: 303
Зарегистрирован: 03.09.09
|
|
Отправлено: 16.02.12 12:11. Заголовок: voldemar227 пишет: ..
voldemar227 пишет: цитата: | Хорошо я понял что длл не выход ! Тогда как ??? |
| Ну почему же? Очень даже выход. Необходимо хорошо подумать в этом направлении. Не ищите распространенных путей, придумайте что-то свое. Чем оригинальнее решение, тем меньше шансов у взломщиков. И, конечно же, не стоит трубить на весь свет о найденном решении. voldemar227 пишет: цитата: | Может сделать обфускацию ??? |
| Это тривиальный способ, который лишь немного затруднит жизнь взломщикам. Самый лучший способ защиты программы - не распространять ее. Если речь идет об эксперте, то пользуйтесь им сами для получения прибыли, не поддавайтесь желанию получить быструю, но не постоянную прибыль от его продажи. Если же речь идет о программе, которая приносит прибыль именно своим распространением, то стоит задуматься о правильно поставленном способе продажи. Лучше всего ориентироваться на корпоративных, а не на частных клиентов, т.к. корпорации вряд ли будут опускаться до банального взлома (репутация дороже). О взломе больше думают частные лица. Если частникам предоставлять программу бесплатно, то и мыслей о взломе ни у кого не возникнет.
|
|
|
|
| |
Пост N: 28
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
|
|
Отправлено: 28.07.12 21:25. Заголовок: Как с помощью длл сд..
Как с помощью длл сделать проверку демо или реал ????
|
|
|
|
| постоянный участник
|
Пост N: 430
Зарегистрирован: 03.09.09
|
|
Отправлено: 29.07.12 10:49. Заголовок: voldemar227 пишет: ..
voldemar227 пишет: цитата: | Как с помощью длл сделать проверку демо или реал ???? |
| Прямого способа нет, т.к. из DLL невозможно обращение к терминалу без использования элементов MQL4. Поэтому передавайте в DLL результат исполнения функции IsDemo.
|
|
|
|
| |
Пост N: 29
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
|
|
Отправлено: 30.07.12 12:23. Заголовок: то есть if ( IsDemo..
то есть if ( IsDemo()) { int a=1; } мы передадим в длл переменную "а" ... и длл дальше работает но при декомпиляции человеку достаточно сделать if (1 == 1) { int a=1; } и эффект будет тот же. как сделать так что бы человек не мог вырезать длл ?? Не мог удалить все обращения в длл ? и в тоже время как получить в длл то что счет демо или реал ???
|
|
|
|
| постоянный участник
|
Пост N: 432
Зарегистрирован: 03.09.09
|
|
Отправлено: 30.07.12 13:10. Заголовок: voldemar227 пишет: ..
voldemar227 пишет: цитата: | но при декомпиляции человеку достаточно сделать |
| Такая проблема была в ранних билдах МТ4. Сейчас (во всяком случае, на 432-ом билде) такой финт уже не проходит. Другое дело, что взломать файл могут и без использования декомпилятора. На эту проблему можно посмотреть под другим углом. Вы же собираетесь распространять только ex4-версию? Значит, файл у любого пользователя должен быть неизменным. В этом случае достаточно из DLL проверить контрольную сумму (CRC) ex4 файла. Если она не совпадает с той контрольной суммой, которую Вы получили при компиляции на своей машине, значит, советник был декомпилирован. Контрольную сумму при изменениях в программе подделать будет достаточно тяжело (но не значит, что невозможно!). Для этого взломщику, как минимум, нужно будет знать, что контрольная сумма проверяется сторонней программой.
|
|
|
|
| |
Пост N: 30
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
|
|
Отправлено: 30.07.12 13:48. Заголовок: Scriptong пишет: ..
Scriptong пишет: да нет проходит такой финт ....
|
|
|
|
| постоянный участник
|
Пост N: 433
Зарегистрирован: 03.09.09
|
|
Отправлено: 30.07.12 17:22. Заголовок: Очень хорошо вы нато..
цитата: | Очень хорошо вы натолкнули на хорошую мысль!!! А как из длл проверить контрольную сумму советника ??? |
| 1. Открыть ex4-файл. 2. Считать его побайтно. 3. Рассчитать CRC для массива байт. Методов расчета CRC существует множество. Вот, например, несколько стандартизированных методов. Но для такого рода защиты я бы использовал свой собственный алгоритм, который бы никому и нигде не показывал. Это, заодно, усложнило бы взломщикам жизнь. voldemar227 пишет: цитата: | да нет проходит такой финт .... |
| Не понял, что это вы показали? Декомпилятор не может знать, что переменная имеет имя "а". Он ставит что-то типа "li_1". Вы уверены, что показали код, генерированный декомпилятором?
|
|
|
|
| |
Пост N: 31
Зарегистрирован: 19.11.10
Откуда: Россия, Новочеркасск
|
|
Отправлено: 30.07.12 19:27. Заголовок: я показал вам что т..
я показал вам что то есть 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 ???
|
|
|
Ответов - 17
, стр:
1
2
All
[только новые]
|
|