Плоттер Redsail Без Usb Ключа
Anti. HASP: эмулируем ключ аппаратной защиты HASPВ этой статье описаны способы обхода аппаратных систем защиты. В качестве примера рассмотрена технология HASP (Hardware Against Software Piracy), разработанная компанией Aladdin Knowledge Systems Ltd. В прошлом данная технология являлась одной из самых популярных аппаратных систем защиты ПО. Мощью аппаратной защиты HASP пользуются многие серьезные разработчики софта, которые не хотят, чтобы их продукт несанкционированно распространялся. Хаспом, например, защищаются пакеты «1.
С. Бухгалтерия» или «1. С. Предприятие», без которых не может прожить ни одно более или менее организованное дело. Популярный юридический справочник «Консультант.
Плюс» также защищает доступ к данным с помощью электронных ключиков. Чтобы воспользоваться вышеупомянутым или другим не менее дорогостоящим софтом, не платя никому ни копейки, недостаточно просто полазить по Сети в поисках txt’шника с ключиками. Однако хакер всегда разберется, что делать с защитой, пусть и аппаратной. И паяльник ему для этого не понадобится. Взглянем. Утрируя, можно сказать, что HASP состоит из двух частей: аппаратной и программной.
Предприятие», без которых не может прожить ни одно более или. Аппаратная часть — это электронный ключик в виде USB-брелка, .
Аппаратная часть — это электронный ключик в виде USB- брелка, PCMCIA- карты, LTP- девайса или вообще внутренней PCI- карты. Установленный софт будет работать только на той машине, в которую воткнут электронный ключ. Собственно, неплохо было бы отучить софт от такой неприятной для кошелька привычки. Программная часть — это драйвера электронного ключа и различный софт, привязывающий электронные ключи с их драйверами непосредственно к защищаемому продукту или к каким- то зашифрованным данным. В статье мы рассмотрим и обойдем защиту, использующую USB- брелок — наверное, наиболее популярный электронный ключ на сегодня. Механизм системы защиты. Сам брелок нас почти не интересует, в отличие от ПО в его комплекте.
Redsail производит режущие плоттеры (каттеры), плоттеров для резки. 2.3 с USB защитным ключом для прямого вывода на плоттер из графической .
Для нас наибольший интерес представляет модуль hardlock. Не углубляясь в подробности, отмечу, что этот драйвер отвечает за взаимодействие с аппаратным ключом. Он имеет два объекта устройства, один из которых обладает символьным именем Device. FNT0. Используя этот объект, защищенное приложение посредством диспетчера ввода- вывода проверяет лицензию на использование данного ПО.
Главным недостатком такой системы защиты является возможность перехвата вызовов диспетчера ввода- вывода и эмулирования аппаратного ключа. Существует также вариант разработки драйвера виртуального ключа, но это гораздо более сложная техническая задача, нежели перехват вызовов.
Как тебе известно, модель драйвера описывается в структуре DRIVER. Она хранит массив обработчиков сообщений. Причем никто не мешает переписать эти адреса и получить управление, выполнив наш код. Таким образом, можно перехватывать и подменять IRP- пакеты, подставляя лицензионные данные. Другими словами, имея дамп ключа защиты, можно передать его программе, проверяющей верность лицензионных данных! Для эксплуатации другого метода также требуется дамп ключа, но подстановка данных осуществляется иначе, а именно — в программной эмуляции. То есть драйвер защиты сможет обращаться с виртуальным ключом так же, как и с физическим.
- Не получается подключить плоттер Redsail RS1120C! Говорят есть программа которая режит и без него называется Eascy cut.
- Рулонный, режущий-пишущий плоттер Redsail RS-1360C.
Перехват и эмуляция. Как уже отмечалось, идея перехвата состоит в перезаписи обработчиков IRP- пакетов. Для этого необходимо иметь возможность изменять поля структуры DRIVER. К счастью, существует функция Io. Get. Device. Pointer, которая возвращает указатель на объект вершины стека именованных устройств и указатель на соответствующий файловый объект. Вот фрагмент кода функции, устанавливающей ловушку: NTSTATUS Hook.
Device(LPWSTR lp. Device)UNICODE. Теперь заменим адреса обработчиков и функций выгрузки драйвера на свои: NTSTATUS Hook. Device(LPWSTR lp.
Device)g. Driver. Object = Device. Object- > Driver. Object; g. Device. Зебра Для Письма.
Control = g. Driver. Object- > Major. Function. Это необходимо делать для корректной выгрузки драйвера, чтобы не было утечки ресурсов и аналогичных ошибок. Так как указатель на объект драйвера защиты сохранeн, то чтобы снять ловушку, нужно просто восстановить прежние обработчики IRP- пакетов: void Unhook. Device(void)g. Driver.
Object- > Major. Function. Так как система защиты по каким- либо причинам может закончить свою работу раньше нашего драйвера, то чтобы избежать краха системы из- за неверных указателей, обработаем это событие в функции Hook. Unload: void Hook. Unload(PDRIVER. Только нужно высвободить захваченные ресурсы и не вызывать сохранeнный g.
Hook. Unload. Принцип работы эмулятора. Резистор Конденсатор Катушка Индуктивности Ключ. Перехватчик. Зная основные принципы простейшего перехвата IRP- пакетов, приступим к реализации пока только самого перехватчика для дальнейшего анализа.
Для этого создадим объект драйвера, который содержит символьное имя (например Dos. Devices. Hook) и точки входа CREATE, CLOSE, READ.
Io. Create. Device(Driver. Object, 0, & us. Device. Name, FILE.
При такой реализации обмена данными между приложением и перехватчиком невозможно сразу же отправить их пользовательской программе, поэтому необходимо создать некоторую структуру для хранения необходимых данных о пойманном пакете. Например односвязный список, как это реализовано мной. Теперь следует определиться, какую информацию нужно буферизировать. Это общая информация о пакете (тип, флаги, прочее) и, конечно, буферы. Также можно добавить время перехвата. При копировании содержимого буферов нужно помнить об их типе, иначе — крах.
Забегая вперед, отмечу, что драйвер защиты использует буферизированный ввод- вывод, это немного упрощает код. Код Hook. Dispatchif (idl. Tail- > Irp. Data.
Input. Length). Так как пакет содержит буферы, чье содержимое представляет интерес, то размер сообщений заранее не известен. Поэтому поступим следующим образом: при первом чтении получаем общую информацию о пакете и размере буферов; при повторном читаем содержимое, удаляем звено из списка пакетов и не забываем про спиновые блокировки для последовательной работы с данными: Код Driver.
Dispatch. Length = Io. SL- > Parameters. Read. Length; if (Length == sizeof(IRP.