Продолжаем рассмотрение… Судный день настал neftegas.info/engine/info…, впрочем, фильм с бюджетом телефильма на любителя, но разрушение мира присутствует… А что до нравится или нет, это дело вкуса… пока не посмотрите все равно не решите, не с чужих же слов составлять свое мнение. Двигаемся дальше по курсовой работе, реальная проблема-катастрофа, увы, для некоторых. Замечу, что некоторые не изучающие ПАСОИБ в Гидромете, а изучающие другую дисциплину в другом ВУЗе надеются, что я им всем курсовики, как одногруппник, так сказать, сделаю. Как говориться, щас, наивные люди…. Далее, продолжение текста по существу. Картинки я решил не давать, так как текст и так для одного поста получился слишком большим…
* * *

3.3 Вызов функции, хранящейся в dll библиотеке, из исполняемого ex4 файла

Для работы с dll библиотекой в исходный код программы на языке MQL необходимо добавить директиву вида:
#import «lib.dll»
int f(int a1, double a2, double a3);
#import

В приведенном фрагменте lib.dll – файл библиотеки, имя функции – f, (int a1, double a2, double a3) – список формальный параметров функции.
Код преобразованной программы на MQL, работающий с библиотекой имеет вид:

//+———————————————————————+
//| Magistr-protected.mq4
//| Copyright 2013, Igor V. Anantchenko
//| https://www.mctrewards.ru
//+———————————————————————+
#property copyright » Copyright 2013, Igor V. Anantchenko»
#property link «https://www.mctrewards.ru»
#import «PROTECTEDLIB.dll»
int signal(int nBars, double cl[],double lw[],double hh[]);
#import
int h,ii=0,flag=999;
extern int WavePeriod = 10;
extern int AvgPeriod = 21;
extern int SL = 137;
extern int TP = 97;
double cl[3000];
double lw[3000];
double hh[3000];
int n=3000;
int pr1 = -50;
int pr2 = 53;
int pr3;
int pr4 = 000000;
int nBars;
int m,i,s=0;
double ind;
int start()
{ h=TimeHour(TimeCurrent());
if(flag==h)return(0);
s=0;
nBars=iBars(NULL,0);
flag=h;
m=nBars;
if(Bars for(i=0;i { cl[i]=Close[i];
lw[i]=Low[i];
hh[i]=High[i];}
s=signal(n,cl,lw,hh);
if (s==1) {
Print(«Час «,TimeHour(TimeCurrent()),» «,Day( ),»:»,Month( ),»:»,Year( ), » Время (час)=»,h,» Buy «);
OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-SL*Point,Ask+TP*Point,»My order BUY»,16385,0,Green); }
if (s==2) {
Print(«Час «,TimeHour(TimeCurrent()),» «,Day( ),»:»,Month( ),»:»,Year( ), » Время (час)=»,h,» Sell «);
OrderSend(Symbol(),OP_SELL,0.1,Bid,3,Ask+SL*Point,Bid-TP*Point,»My order BUY»,16385,0,Green);
}
return(0);}

Полученный вариант программы с dll библиотекой был проверен на работоспособность. Тестирование программы в тестере стратегий MT4 и сравнение с данными полученными при тестировании исходной программы на одном и том же выбираемом временном интервале не выявило, каких либо расхождений в получаемых результатах. Выполненное тестирование подтверждает работоспособность преобразованного варианта программы. Полученная dll библиотека включает в себя критически важный для защищаемой программы код. На этом предварительные действия, связанные с разработкой тестированием dll библиотеки завершены, следующий этап – непосредственная защита dll файла с помощью ключа HASP HL.

3.4 Защита dll файла с использованием HASP SRM Envelope

Подготовленную dll библиотеку можно защитить ключом HASP, воспользовавшись одним из вариантов защиты: навесным, встроенным или комбинированным методом. По условию задания для организации защиты следует использовать инструментарий HASP SRM Envelope, позволяющий установить навесную защиту.
Рисунок 2 — окно интерфейса ввода информации разработчика
Для установки навесной защиты, реализуемой с помощью утилиты HASP SRM Envelope, необходимо установить программное обеспечение (ПО) Комплект разработчика. После установки следует выполнить процедуру получения информации для программирования ключей серии Hasp, записанной в мастер ключ разработчика (Master Hasp HL). Для выполнения работы использовался мастер ключ серии OKZAI, процесс получения информации о мастер ключе представлен на рисунке 2.
Схема функционирования навесной защиты приведена на рисунке 3.

Рисунок 3 — схема функционирования защиты

Под управлением терминала МТ4 запускается приложение пользователя, которое было написано на языке программирования MQL версии 4.0 – формат исходного файла mq4. Исходный файл с текстом программы (magistr.mq4) компилируется в исполняемый под управлением терминала МТ4 файл формата ex4 (magistr.ex4). Для получения информации о необходимости открытия ордера, осуществляется вызов функции signal(…), сохраненной в файле библиотеки protected.dll. Файл библиотеки protected.dll защищен установленной защитой и фактически находится в зашифрованном виде в программе-коконе, которая и получает вызов при обращении к функции signal(…). После получения вызова защитная оболочка проверяет наличие установленного на компьютере пользователя ключа HASP, проверяет, что ключ именно того разработчика, который требуется, и что в этом ключе хранится действующая на момент вызова лицензия на использование данной программы. Если все условия проверки на лицензионность использования ПО выполнены, то в оперативную память компьютера записывается расшифрованный исходный код файла protected.dll, который был до момента установки защиты, и на него передается управление. Если условия проверки лицензии не выполнены (отсутствует ключ, ключ HASP есть, но принадлежит другому разработчику, есть ключ разработчика, но на нем нет лицензии для проверяемого продукта, есть ключ разработчика, на нем есть лицензии для проверяемого продукта, но срок действия лицензии истек), то отображается информационное окно с информацией о возникшей проблеме, после чего выполнение программы завершается.

Рисунок 4 — установили Feature ID равным 45
Рассмотрим порядок выполнения действий по установке защиты. Сначала определяем Feature ID для продукта, который назовем fxpotected. Можно выбрать любой из свободных на момент использования Feature ID, выбрали Feature ID равным 45 (см. рисунок 4). Затем в настройках утилиты HASP SRM Envelope указываем место расположения защищаемого файла, место сохранения полученного защищенного файла, Feature ID, используемый для защиты. Можно определить дополнительные параметры, например, изменить используемый ключ шифрования, сообщения, которые отображаются пользователю при проблемах с лицензией (например, выполнить перевод и написать сообщение на русском языке вместо английского или дополнить сообщение телефоном службы поддержки и пр.) и т.д.). Вид интерфейса HASP SRM Envelope с пунктами настройки приведен на рисунке 5. После нажатия кнопки установки защиты, получаем сообщение о том, что защищенный вариант файла создан (рисунок 5) или сообщение с причиной ошибки (например, попытка сохранить создаваемый файл на носитель доступный только для чтения и не поддерживающий операции записи).

Рисунок 5 — интерфейс HASP SRM

Рисунок 6 — защита для файла protected.lib установлена успешно

После создания защищенного файла protected.lib необходимо подготовить файлы ПО для передачи (продажи) конечному пользователю (покупателю). Вместе с исполняемыми фалами программы protected.lib и magistr.ex4 необходимо передать и файл Hasp HL Pro, на который записана лицензия для пользователя. Программное обеспечение для работы с защитами Sentinel Hasp поддерживает не только функции установки защиты, но и многофункциональную систему менеджмента, в том числе возможность удаленного обновления лицензий на ключах Hasp (используется утилита RUS). Для поддержки пользователя и выдачи ему лицензии на программный продукт создается запись с информацией о пользователе. При оформлении ордера (рисунок 7) выбирается запись, идентифицирующая продукт. Следует отметить, что при создании записи о продукте (рисунок 8), можно указать, что продукт можно защитить только аппаратными ключами разных моделей (Hasp HL), программным ключом (Hasp Sl) или возможен выбор типа ключа аппаратный или программный по усмотрению менеджера, оформляющего заказ на продажу продукта.

Рисунок 7 — сформирован ордер для пользователя Igor Anantchenko

Рисунок 8 — создана запись о продукте fxprotected
Перед операцией записи информации о лицензии пользователя на ключ Hasp HL можно провести операцию очистки ключа от всех находящихся на нем ранее записанных лицензий (и другой возможной информации в области ключа, доступной для записи и чтения). Для этого следует выбрать подлежащий очистке ключ и нажать кнопку Recycle (рисунок 9). После этого можно записать на ключ лицензию для продукта (рисунок 10), который будет передан пользователю. Обязательным для успешной установки требованием является наличие на компьютере, который используем для записи лицензии о продукте в ключ Hasp HL Pro, мастер ключа (Master Hasp HL), в то время как для установки защиты на файл, можно использовать ключ Master Hasp HL или Developer Hasp HL.

Рисунок 9 — очистка памяти ключа выполнена успешно

Рисунок 10 — операция записи лицензии на ключ 1633894071 выполнена

Рисунок 11 — лицензия успешно записана в ключ Hasp HL Pro
После того, как файлы защищенной программы подготовлены и подготовлен ключ Hasp HL Pro с прописанной лицензией продукта, можно дополнительно (и это рекомендуется делать) подготовить файл с драйверами, необходимыми для использования ключа Hasp на компьютере пользователя. Сгенерировать такой файл можно, в пункте меню Development Tasks. Если драйвер поддержки ключа отсутствует, то операционная система Windows будет скачивать драйвер с Центра обновления Microsoft, но следует учитывать, что компьютер пользователя в момент установки ПО, может быть не подключен к сети Интернет, подключение выполнено по низкоскоростному каналу или пользователь оплачивает побайтно потребляемый трафик. По этой причине в поставляемое покупателю ПО рекомендуется всегда включать файл с драйверами ключа. Проверить, что лицензия была успешно записана в ключ Hasp HL Pro (рисунок 11), а так же посмотреть информацию о лицензиях других продуктов можно с помощью инструментария Sentinel Admin Control Center.
Описанная процедура установки HASP SRM Envelope позволяет быстро устанавливать надежную защиту на файлы exe и dll типа.

Выводы по работе

В работе рассмотрен один из возможных подходов по реализации программно-аппаратной защиты приложений, исполняемых под управлением терминала платформы МТ4. В соответствии с поставленным заданием приложение для терминала МТ4 было защищено с использованием навесной защиты с применением аппаратного ключа HASP HL Pro. Ключ HASP HL Pro один из наиболее часто используемых аппаратных ключей (Basic, Pro, Max, Time, Net) комплекса HASP. USB-ключи HASP HL компактны (38x16x8 мм или 52х16х8 мм — в зависимости от модели, масса — около 5 г). Все данные хранятся в памяти ключей HASP HL Pro в зашифрованном виде — используется встроенный алгоритм шифрования AES со 128-битным ключом. Каждый ключ HASP HL Pro имеет собственный уникальный номер, ключи HASP HL Pro до настоящего времени не удается подделать. Созданные взломщиками программы-эмуляторы для некоторых защит, использующих ключи HASP, использовали уязвимости в программном коде, но не уязвимости аппаратных средств. Взлом защищенной программы возможен, если при установке защиты (это относится в первую очередь к встраиваемой защите, когда программист интегрирует программных код обращения к ключу на уровне исходного кода программы) не были соблюдены рекомендации фирмы-производителя средств защиты HASP. Например, не использование механизмов функций неявного обращения к ключу, игнорирование возможности сокрытия точек входа вызовов функций и процедур обращения к ключу, не использование механизма отложенной реакции на отсутствие лицензии продукта в ключе HASP, отсутствие проверок на выполнение программы в среде отладчика программного кода и т.д.
По установленной системе защиты можно сделать следующие выводы:
1. Система защиты надежна, но эта надежность была достигнута с использованием аппаратного ключа, который можно купить в Санкт-Петербурге на момент выполнения работы по цене 800 руб. за один ключ. Если принять за основу рекомендации о том, что стоимость системы защиты в общей стоимости должна быть менее 25%, то получаем, что с использованием ключей HASP HL Pro экономически целесообразно защищать программы со стоимостью от 4000 руб. (от $120). С учетом того, что коммерческие приложения для МТ4 продаются в среднем по цене в диапазоне $100-$300, использование для защиты ключей HASP HL Pro видится целесообразным, возможно использование более дешевых ключей HASP HL Basic, но в этом варианте можно использовать только Feature ID равный 0, т.к. ключи HASP HL Basic не имеют области памяти для записи.
2. Так как установить защиту HASP непосредственно на исполняемые ex4 файлы технически невозможно, то приходится создавать dll библиотеку и защищать ее. Использование инструментария HASP SRM Envelope не требует знания языков программирования, но так как приходится создавать dll библиотеку, то от сотрудника, устанавливающего защиту, требуется достаточно высокая квалификация и умение создавать dll библиотеки, а так же знания в области того, как можно переписать код стандартных функций используемых MT4 на выбранном языке программирования.
3. Размер незащищенного файла protected.dll 116 Кб, после установки защиты 1622 Кб, то есть увеличился почти в 14 раз. Однако значительное увеличение размера файла не сказывается на скорости работы программы. Точные замеры оценки скорости работы программы на предмет увеличения времени отклика не проводились, так как тестирование защищенной и не защищенной версий программ не показывало изменения скорости работы. Возможная задержка обработки на 1-2 с. по причине установленной защиты не существенна, так как защищаемая программа работает на таймфрейме Н1 и проверяет ситуацию на предмет вхождения в рынок после закрытия предыдущего часа в начале нового часа. Алгоритм торговли среднесрочный, разница в открытии ордера в диапазоне 15-30 минут не существена для данного алгоритма, поэтому возможное увеличение времени обработки информации о сигнале на несколько секунд не принципиально. Однако возможное увеличение время отклика после установки защиты должно учитываться при установке защиты на приложения терминала МТ4, работающие на таймфрейме М1 (минуты) и реализующих скальпинговые стратегии.
Подводя общие итоги работы, следует отметить, что поставленная задача была выполнена в полном объеме. Исполняемое приложение для терминала МТ4 надежно защищено программным ключом HASP HL Pro, данное решение вполне конкурентоспособно по сравнению с возможным вариантом создания защит с использованием ключей серии GUARDANT. Современные аппаратные защиты надежны и просты в эксплуатации, установка защит рассматриваемого типа не вызывает больших сложностей, однако относительно высокая стоимость аппаратных ключей защиты в настоящее время делает нецелесообразным применение таких средств для защиты дешевого ПО и этот факт сдерживает широкое использование аппаратных средств защиты.

Ананченко Игорь Викторович Контактная информация Моб. телефон: +79213201586 ICQ: 361916132 Веб-сайт: http://anantchenko.ru E-mail: igor@anantchenko.ru Вконтакте: http://vkontakte.ru/id8574436 https://mcp.microsoft.com/authenticate/validatemcp.aspx Transcript ID 793398 and the Access Code 9213201586 Microsoft Certification Status: Microsoft Certified IT Professional, Microsoft Certified Technology Specialist, Microsoft Certified Desktop Support Technician, Microsoft Certified Professional, Microsoft Certified Trainer