How To Fix Hardlock Api Error Code 19 Errors - Windows XP, Vista; Windows 7, 8

Hardlock api error code 19 смета ру Все о Windows 10

Ошибка hardlock not found в Smeta 9

Ошибка hardlock not found в Smeta 9

Добрый день! Уважаемые читатели и гости крупного IT блога рунета Pyatilistnik.org. Продолжаем с вами заниматься устранением различных неполадок связанных с USB-ключами (Токенами). В прошлый раз я вам показал решение проблемы с работой токена и кодом 28. Сегодня ко мне прилетела заявка от второй линии, о том, что перестала работать программа Smeta.ru, это такой строительный софт сметной документации. Зайдя в утилиту она показала ошибку “hardlock not found“, мол у вас ключик то не определен. Давайте разбираться в чем собственно дело.

И так опишу физическую инфраструктуру, для понимания картины. Есть терминальный сервер с Windows Server 2008 R2, на котором установлен программный комплекс Smeta.ru 9, данный сервер виртуальный и крутится на гипервизоре VMware ESXI 6.5, USB ключ SafeNet Inc. (Aladdin Knowledge Systems) и подключен по локальной сети, через оборудование Digi.

Ошибка hardlock not found выглядит вот таким образом и в клиентском приложении AnywhereUSB Remote Hub Configuration Utility, видно что соединение с хостом выдает ошибку “Can not find Remote Hub”, о которой я уже писал и показывал, как она устраняется.

Начав изучать логи операционной системы, я обнаружил несколько сообщение с ошибками. Первое было “Код события 1000”

Второе событие выглядело вот так

Алгоритм устранения ошибки hardlock not found

Так как утилита AnywhereUSB Remote Hub Configuration Utility показывает, что ей не удалось произвести подключение ключа и она не смогла достучаться до оборудования, то пробуем перезапустить две службы :

  • Digi AnywhereUSB Network Service
  • Digi RealPort Network Service

Если эффекта не дало и в клиенте AnywhereUSB Remote Hub Configuration Utility у вас ключик не подключился, то придется производить перезагрузку сервера, после чего проверяем отсутствие проблем с запуском Смета и кодом ошибки hardlock not found.

Лично в моем случае, это помогло, и потом я выяснил из мониторинга, что перед этой проблемой был сетевой сбой и сбой на самой DigiAnywhere, она зависала, поэтому сервер и ловил ошибки с кодом события 1000 и 41.

Если у вас ключик в клиенте AnywhereUSB Remote Hub Configuration Utility подключен или локально, но Смета все так же не работает, то следует зайти в диспетчер устройств Windows и посмотреть нет ли там ошибок с оборудованием. У меня там оказалось, что у данного USB-токена бала ошибка с кодом 43 , ее я устранил в итоге.

Еще наблюдал такую ситуацию, что на сервере был антивирус Касперского, после его удаления появилась ошибка hardlock not found, ключ в AKS Monitor виделся, лицензии были доступны, но смета не работала.

В итоге оказалось, что в момент удаления антивируса, он сбросил сетевые настройки и в результате сервер после перезагрузки получил другой ip-адрес от DHCP сервера. В итоге в переменных средах старая системная переменная HLS_IPADDR ссылалась на предыдущий адрес. Тут вариант, либо возвращать старый IP-адрес или прописывать в HLS_IPADDR новый, а лучше поменять HL_SEARCH с IP на NAME. Перезагружаем сервер после изменений.

Почему Смета РУ не запускается

Трудности с Ключом защиты Смета РУ, чаще всего, решаются самостоятельно. Достаточно скачать официальный драйвер Смета РУ последней версии и обновить его. Если это плавающая ошибка и периодически возникает снова или Вам не удалось разобраться в причине отказа запуска программы, тогда мы проведем диагностику и предложим вариант исправления, а Вы сэкономите время и быстро вернетесь к работе.

Позвоните в нашу Службу заботы по номеру +7 (495) 374 88 79 или отправьте запрос через мессенджер, нажав кнопку справа внизу.

О ключе защиты Смета РУ и драйверах

Лицензионная ПК Смета РУ имеет надежную программно-аппаратную систему идентификации пользователя. Система запускается подключением электронного ключа в порт-USB компьютера и функционирует через драйверы программы.

Sentinel HASP – это драйверы для электронного ключа Hardlock USB для программ Смета РУ и Система ПИР.

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

В микросхему ключа прошита информация о пользовательских лицензиях к версиям и релизам программы, а также ко всем нормативным базам, индексам (закупленным в течение периода пользования).

Драйверы электронного ключа требуются для запуска полной версии программы и при работе взаимодействуют с некоторыми компонентами операционной системы. Периодические обновления ОС Windows могут повлиять на корректную работу драйверов и тогда их нужно переустановить.

Как обновить драйверы Смета РУ или заменить ключ защиты

Ниже приводим перечень причин, по которым ПК Смета РУ может не запуститься, а также способы восстановления работоспособности:

Читайте также:  Как сделать электроды по алюминию своими руками

    Ошибка запуска драйвера ключа защиты Смета РУ, ошибки в программе ключа: код 19, ключ не найден (Cannot open driver, Hardlock API error code 19, Hardlock not found) либо: «попытка вмешательства в программу! Работа с программой невозможна».

Подобные ошибки часто возникают у пользователей ОС Windows 7 и Windows 10 из-за несовместимости обновленных компонентов с установленными драйверами Hardlock HASP, Sentinel HASP.

Чтобы установить или обновить драйвер Sentinel HASP самостоятельно нужно обладать правами администратора; при этом условии:

  • Скачайте и распакуйте архив;
  • Запустите файл HASPUserSetup.exe;
  • Следуйте подсказкам инсталлятора: он проведет процедуру установки автоматически;
  • После завершения установки желательно перезагрузить компьютер.

Физическое повреждение Ключа защиты Смета РУ (перелом микросхемы, короткое замыкание схемы при сбое электропитания или при отключении Ключа при запущенной программе).

При физической поломке, лицензии на сметную программу переносятся на другой ключ (если удастся распознать код микросхемы). Его номер остается прежним и все лицензии без изменений продолжают действовать.

Заменить Ключ защиты стоит 3500 рублей.

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

Восстановить поврежденный Ключ защиты стоит 17700 рублей.

Примечание: нам понадобится Ваше письменное обращение и сломанный ключ.

Потеряли Ключ защиты Смета РУ (при переездах с объекта на объект, при уборке помещений и т.п.) Мы сформируем новый пакет лицензий и Вы получаете новый лицензионный ключ, с прежними компонентами сметной программы.

Новый Ключ защиты стоит 17700 рублей.
Примечание: нам понадобится Ваше письменное обращение.

Не исключено, что Вы могли приобрести нелицензионную версию программы. Мы, как официальный представитель ООО «СтройСофт», можем проверить Ваш пакет лицензий и проконсультировать по этому вопросу. Позвоните в нашу Службу заботы по номеру +7 (495) 374 88 79 или отправьте запрос через мессенджер, нажав кнопку справа внизу.

Купил на Горбушке Smeta.ru.
А установить не получается.

Инструкция по установке:
1.Устанавливать программу только на диск «С»
2. При выборе компонентов установки снять галочку «Драйвер сетевого ключа»
3. После установки программы обновить отчёты
4. Установить эмулятор ключа
5. Запустить программу и ввести пароль.

Инструкция по обновлению отчетов:
1. После установки программы скопируйте файлы из папки «C:StroySoftUserData
в папку «C:StroySoftSmeta.ruClientExcelShabl»
И нажмите кнопку «да для всех».

И инструкция по эмуляции:
Ключ эмулируеться только на 32 разрядном процессоре, на 64 разрядном процессоре эмуляция невозможна.
Установка эмулятора:

1. Из папки “HASPInstall” файл “Install”
2. Из папки “HASPInstall” файл “hinstall”
3. Из папки “Emul” файл “0019957”
4. Из папки “Emul” файл “install”

Появиться сообщение Обнаружено новое устройство “Aladdin USB Key”

ВСЕ ЭТО Я СДЕЛАЛ, НО ПРОГА НЕ РАБОТАЕТ.

Выдавала ошибку, я скачал обновленный драйвер теперь выдает ошибку “Hardlock API error code 19”

Поискал по нету, но решения проблемы так и не нашел.

Может кто-нибудь объяснить доступным языком что делать.

Да, еще есть два файла, тока хрен его знает как с ними работать:

Techyv.com

The Hardlock Api Error Code 38

What does hardlock API error code indicate? What causes this error to occur? How can I solve this problem?

  • Status: Open
  • Question Views: 16
  • Answer Count: 1
  • Vote Up 0 Vote Down
  • Answer Accepted: No
  • Question Category: OS
  • Question Tags: Windows
  • tweet

The Hardlock Api Error Code 38

The hardlock API error code 38 arises as a result of some files being missing or may be corrupted from the system. At times when you try to upgrade it or your files which is not letting you upgrade it. This error code 38 can result in lock-ups, slow PC performance freezing of your system, suddenly shutdown.

Never the less you can fix this problem by downloading “smart PC fixes” when it’s done downloading ‘smart PC fixes’ then Click on fix this will fix all the grid that you face in the hard lock API error, code 38. When you see this type of error it’s better to solve it at the earliest to protect computer security and information. Smart expert fixes cleaner software. It helps you by reminding you that it’s time to fix your package. It gives you tips to keep your computer safe.

AntiHASP: эмулируем ключ аппаратной защиты HASP

Содержание статьи

  • Взглянем
  • Механизм системы защиты
  • Перехват и эмуляция
  • Перехватчик
  • Обработчик
  • Заключение

В этой статье описаны способы обхода аппаратных систем защиты. В качестве примера рассмотрена технология HASP (Hardware Against Software Piracy), разработанная компанией Aladdin Knowledge Systems Ltd. В прошлом данная технология являлась одной из самых популярных аппаратных систем защиты ПО.

Мощью аппаратной защиты HASP пользуются многие серьезные разработчики софта, которые не хотят, чтобы их продукт несанкционированно распространялся. Хаспом, например, защищаются пакеты «1С.Бухгалтерия» или «1С.Предприятие», без которых не может прожить ни одно более или менее организованное дело. Популярный юридический справочник «КонсультантПлюс» также защищает доступ к данным с помощью электронных ключиков. Чтобы воспользоваться вышеупомянутым или другим не менее дорогостоящим софтом, не платя никому ни копейки, недостаточно просто полазить по Сети в поисках txt’шника с ключиками. Однако хакер всегда разберется, что делать с защитой, пусть и аппаратной. И паяльник ему для этого не понадобится.

Читайте также:  Нужны ли на мотособаку права - Юридическая помощь

Взглянем

Утрируя, можно сказать, что HASP состоит из двух частей: аппаратной и программной. Аппаратная часть — это электронный ключик в виде USB-брелка, PCMCIA-карты, LTP-девайса или вообще внутренней PCI-карты. Установленный софт будет работать только на той машине, в которую воткнут электронный ключ. Собственно, неплохо было бы отучить софт от такой неприятной для кошелька привычки.

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

Механизм системы защиты

Сам брелок нас почти не интересует, в отличие от ПО в его комплекте. Для нас наибольший интерес представляет модуль hardlock.sys. Не углубляясь в подробности, отмечу, что этот драйвер отвечает за взаимодействие с аппаратным ключом. Он имеет два объекта устройства, один из которых обладает символьным именем DeviceFNT0. Используя этот объект, защищенное приложение посредством диспетчера ввода-вывода проверяет лицензию на использование данного ПО.

Главным недостатком такой системы защиты является возможность перехвата вызовов диспетчера ввода-вывода и эмулирования аппаратного ключа. Существует также вариант разработки драйвера виртуального ключа, но это гораздо более сложная техническая задача, нежели перехват вызовов.
Как тебе известно, модель драйвера описывается в структуре DRIVER_OBJECT при загрузке модуля. Она хранит массив обработчиков сообщений. Причем никто не мешает переписать эти адреса и получить управление, выполнив наш код. Таким образом, можно перехватывать и подменять IRP-пакеты, подставляя лицензионные данные. Другими словами, имея дамп ключа защиты, можно передать его программе, проверяющей верность лицензионных данных!

Для эксплуатации другого метода также требуется дамп ключа, но подстановка данных осуществляется иначе, а именно — в программной эмуляции. То есть драйвер защиты сможет обращаться с виртуальным ключом так же, как и с физическим.

Перехват и эмуляция

Как уже отмечалось, идея перехвата состоит в перезаписи обработчиков IRP-пакетов. Для этого необходимо иметь возможность изменять поля структуры DRIVER_OBJECT. К счастью, существует функция IoGetDevicePointer, которая возвращает указатель на объект вершины стека именованных устройств и указатель на соответствующий файловый объект. Вот фрагмент кода функции, устанавливающей ловушку:

NTSTATUS HookDevice(LPWSTR lpDevice)

UNICODE_STRING DeviceName;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;

Получив указатель на структуру DEVICE_OBJECT, имеем указатель на DRIVER_OBJECT. Теперь заменим адреса обработчиков и функций выгрузки драйвера на свои:

NTSTATUS HookDevice(LPWSTR lpDevice)

gDriverObject = DeviceObject-> DriverObject;

gDeviceControl = gDriverObject-> MajorFunction[IRP_MJ_DEVICE_CONTROL];
gDriverObject-> MajorFunction[IRP_MJ_DEVICE_CONTROL] = HookDispatch;

gInternalDeviceControl = gDriverObject-> MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL];
gDriverObject-> MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = HookDispatch;

gDriverUnload = gDriverObject->DriverUnload;
gDriverObject->DriverUnload = HookUnload;

В последней строчке вызывается функция ObfDereferenceObject, которая уменьшает количество ссылок на файловый объект. Это необходимо делать для корректной выгрузки драйвера, чтобы не было утечки ресурсов и аналогичных ошибок.

Так как указатель на объект драйвера защиты сохранeн, то чтобы снять ловушку, нужно просто восстановить прежние обработчики IRP-пакетов:

gDriverObject-> MajorFunction[IRP_MJ_DEVICE_CONTROL] = gDeviceControl;
gDriverObject-> MajorFunction[IRP_MJ_INTERNAL_DEVICE_CONTROL] = gInternalDeviceControl;
gDriverObject->DriverUnload = gDriverUnload;

Конечно, надо добавить соответствующие проверки на валидность указателей и прочее.

Теперь необходимо реализовать правильную выгрузку драйверов. Так как система защиты по каким-либо причинам может закончить свою работу раньше нашего драйвера, то чтобы избежать краха системы из-за неверных указателей, обработаем это событие в функции HookUnload:

void HookUnload(PDRIVER_OBJECT DrvObj)

Здесь происходит восстановление полей структуры DRIVER_OBJECT, и передаeтся управление на оригинальный код выгрузки драйвера перехваченного устройства.

Аналогично поступаем, если наш драйвер завершает работу раньше системы защиты. Только нужно высвободить захваченные ресурсы и не вызывать сохранeнный gHookUnload.


Принцип работы эмулятора

Перехватчик

Зная основные принципы простейшего перехвата IRP-пакетов, приступим к реализации пока только самого перехватчика для дальнейшего анализа. Для этого создадим объект драйвера, который содержит символьное имя (например DosDevicesHook) и точки входа CREATE, CLOSE, READ.

DriverObject->MajorFunction[IRP_MJ_CREATE] = DriverDispatch;
DriverObject->MajorFunction[IRP_MJ_CLOSE] = DriverDispatch;
DriverObject->MajorFunction[IRP_MJ_READ] = DriverDispatch;
DriverObject->DriverUnload = DriverUnload;

Это нужно для того, чтобы работать с нашим перехватчиком как с файлом, используя функции CreateFileReadFileCloseHandle. При такой реализации обмена данными между приложением и перехватчиком невозможно сразу же отправить их пользовательской программе, поэтому необходимо создать некоторую структуру для хранения необходимых данных о пойманном пакете. Например односвязный список, как это реализовано мной. Теперь следует определиться, какую информацию нужно буферизировать. Это общая информация о пакете (тип, флаги, прочее) и, конечно, буферы. Также можно добавить время перехвата. При копировании содержимого буферов нужно помнить об их типе, иначе — крах. Забегая вперед, отмечу, что драйвер защиты использует буферизированный ввод-вывод, это немного упрощает код.

Читайте также:  Стартер ниссан примера p12

if (idlTail->IrpData.InputLength)
<
idlTail->InputBuffer = ExAllocatePool(NonPagedPool, idlTail->IrpData.InputLength);
RtlCopyMemory(idlTail->InputBuffer, Irp->AssociatedIrp.SystemBuffer, idlTail->IrpData.InputLength);
>

if (IoSL->MajorFunction == IRP_MJ_DEVICE_CONTROL)
Status = pHookedDriverDispatch[IRP_MJ_DEVICE_CONTROL]( DeviceObject, Irp);

if (idlTail->IrpData.OutputLength)
<
idlTail->OutputBuffer = ExAllocatePool(NonPagedPool, idlTail-> IrpData.OutputLength);
RtlCopyMemory(idlTail->OutputBuffer, lpBuffer, idlTail->IrpData.OutputLength);
>

Осталось реализовать чтение из драйвера. Так как пакет содержит буферы, чье содержимое представляет интерес, то размер сообщений заранее не известен. Поэтому поступим следующим образом: при первом чтении получаем общую информацию о пакете и размере буферов; при повторном читаем содержимое, удаляем звено из списка пакетов и не забываем про спиновые блокировки для последовательной работы с данными:

idlTemp = idlHead->ldlNext;
ExFreePool(idlHead);
idlHead = idlTemp;
if (!idlTemp)
idlTail = NULL;
>

Когда перехватчик готов, запускаем сначала его, а затем — защищенное приложение с ключами и без. Из полученных логов становится видно, какие управляющие коды посылаются и их результаты. Также можно видеть, что запросы и ответы на два различных кода (9c402450, 9c4024a0) не изменяются. Казалось бы, можно построить табличный эмулятор, но после серии запусков убеждаемся, что это невозможно, так как содержимое буферов различно, и неизвестно, как оно образуется.


Перехваченные пакеты без ключа


Перехваченные пакеты с ключом

Затем возможны несколько вариантов дальнейших действий:

  • изучать дебри драйвера защиты;
  • воспользоваться информацией самих разработчиков системы.

Оба варианта дают необходимую информацию. Итак, оказывается, содержимое пакетов шифруется публичным симметричным алгоритмом AES (Advanced Encryption Standard). Логичной целью является получение ключа шифрования.

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


Пример дампа ключа

Поэтому первое, что нужно сделать, это получить ключ. Поставленную задачу может решить обычный брутфорс:

unsigned short Key;
unsigned char RefKey[8], VerKey[8];

for (Key = 0; Key WORD HL_LOGIN(WORD ModAd, Word Access, Byte *RefKey, Byt *VerKey);
WORD HL_LOGOUT(void);

Первая функция служит для открытия сессии работы с ключом защиты посредством драйвера, вторая – завершает сессию. Это прототипы старых версий HASP SDK, но работают они и с новыми типами ключей, так как разработчики обеспечили обратную совместимость.

Новый API мало отличается от старого, и это никак не сказывается на принципе работы брутфорса. Подробную документацию Hasp API, готовые реализации брутфорса и дампера ключей можно найти на диске.

Обработчик

Теперь есть все необходимое для корректной работы модуля. Осталось реализовать подстановку лицензионной информации. Причем можно перехватывать лишь некоторые IRP-пакеты. Здесь все уже зависит от конкретной версии ключа и защищаемой программы.

Дамп ключа лучше не встраивать в драйвер, а загружать динамически из реестра. Лучше основываться на уже готовом перехватчике запросов, так будет проще отладить драйвер, отправляя перехваченные/подставленные пакеты на анализ пользовательскому приложению. Принципиально логика перехватчика будет иметь такой вид:

PIO_STACK_LOCATION Stack = Irp-> Tail.Overlay.CurrentStackLocation;
ULONG IoControlCode;
if (Stack->MajorFunction == 14)
<
IoControlCode = Stack.DeviceIoControl.IoControlCode;
If (IoControlCode != 0x9c402458)
<
Return gDeviceControl(DeviceObject, Irp);
>
else
<
Encrypt(Irp->AssociatedIrp.SystemBuffer);
Crypt(Irp->AssociatedIrp.SystemBuffer, Key, DumpMemory);
>
>

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

void Encrypt(BYTE * Buffer)
<
WORD Seed = ((WORD)Buffer + 0x5e);
WORD Ver = ((WORD)Buffer + 0xba);

if (Ver)
<
for (int i = 0; i > 15) | (Seed > 15) | (Seed void Decrypt(BYTE* Buffer)
<
WORD Seed = ((WORD)Buffer + 0x5e);
WORD Ver = ((WORD)Buffer + 0xba);

if (Ver) <
for (int i = 0xFE; i > 0xBD; i—) <
Seed -= (WORD)(Buffer + i) ^ i;
Seed = (Seed > 1);
(WORD)(Buffer + i) += Seed;
>

for (int i = 0xB8; i >= 0; i—) <
Seed += (WORD)(Buffer + i) ^ i;
Seed = (Seed > 1);
(WORD)(Buffer + i) -= Seed;
>

Затем следует ещe один этап преобразования данных, более сложный и уже полностью зависящий от структуры запроса. Тут не обойтись без дизассемблера, придется покопаться в бине и позаимствовать немного кода у создателей. Это непросто, так как код драйвера защиты сильно обфусцирован, но он не отличается разнообразием уловок. Достаточно будет декомпилировать драйвер не полностью, а только лишь некоторые кусочки кода.

В заключение отмечу, что построение табличного эмулятора, основанного на перехвате DeviceIoControl, — достаточно трудная задача. Но такой принцип эмулятора можно использовать и на другом уровне взаимодействия: создать виртуальную USB-шину.

Заключение

Это не единственный способ избавиться от системы защиты. Существуют и другие, более совершенные методы. Изложенные в статье принципы можно использовать и для анализа работы драйверов, перехватывая IRP-пакеты. Таким образом можно добавить неплохой инструмент в свой сделанный на коленке набор. Удачи!

Ссылка на основную публикацию
Adblock detector