powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Привязка к железу. WMI и другие способы.
14 сообщений из 14, страница 1 из 1
Привязка к железу. WMI и другие способы.
    #36841836
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет!
Собственно это не вопрос, а некоторые мои наработки по данному вопросу. Я не ставил задачи защиты программы с привязкой на железо, но с данным вопросом столкнулся.
Итак. На этом форуме, на фоксклубе и в интернете Вы найдете следующие решения:

1) Получить "серийный номер" логического диска винчестера, т.е. раздела на HDD. Этот способ существует в разных реализациях, однако у всех одно общее - использование GetVolumeInformation из Win32API:
Код: plaintext
Declare Integer GetVolumeInformation in Win32API 
Этот способ работает, но имеет следующие недостатки:
- собственно "серийный номер" логического диска винчестера - это не hardware serial. Это некий случайный набор чисел, получаемый разделом в результате форматирования
- не исключается повтор
- есть куча программ, которые могут выставлять заданный "серийный номер" любому логическму диску
- если производитель (сбощик) РС установит винду с помощью программ клонирования, очень большая вероятность того, что и "серийные номера" всех логических дисков так же будут клонированы
- пользователю достаточно отформатировать раздел, к "серийному номеру" которого привязана прога, и в результате этот самый "номер" изменится. Не говоря уже о переразбивке диска и переустановке винды.
Вывод: способ - ацтой!

2) Получить серийные номера различных устройств (компонентов) с помощью службы WMI. Выглядит примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
LOCAL lcRemoteComputer,;
loSWbemLocator, loSWbemServices,lcolSWbemObjectSet,loSWbemObject
lcRemoteComputer = "."
lcComputer="."
loSWbemServices = GetObject("winmgmts:\\" + lcComputer + "\root\cimv2")
lcolSWbemObjectSet = loSWbemServices.InstancesOf("Win32_PhysicalMedia")
* вместо Win32_PhysicalMedia можно пробывать Win32_BaseBoard для материнки или Win32_Processor для процессора и т.д.
* какие значения (классы) можно использовать можно найти в нете немяряно инфы
for Each loSWbemObject In lcolSWbemObjectSet
? loSWbemObject.SerialNumber
next
данный способ имеет просто массу недостатков:
- сама служба WMI у пользователя мб отключена или вообще недоступна
- Win98 + WMI = недюженный гемор
- если производитель (сбощик) РС установит винду с помощью программ клонирования, очень большая вероятность того, что и "серийные номера" для всех таких РС будут совпадать, даже если само железо другое. Просто клонируется реестр, откуда WMI черпает инфу
- WMI может у одних нормально работать, а у других тупо не выдавать серийник, т.е. возвращать .NULL.
- далеко не всякое железо всякого производителя вообще будет отдавать серийник, т.к. есть куча ньюансов именно по производителям. Скажем винты Seagate отдают серийники по одному способу, а WD имеют уже какие-то хитрости и т.д.
Вывод: способ - ацтой! Неважно на что "привязываться", хоть и на BIOS.

3) Получить некий GUID, основанный на данных реестра. Типа следующего примера на VB (на фокс смысла переводить не имело):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Attribute VB_Name = "modFag"
Option Explicit
Dim reg As Object, Pid As Variant, GUID As Variant
Dim LENGUID As Long, LENPID As Long, TempS As String
Dim x As Long, SPID As String, SGUID As String, HWID As String
Const regPID = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductId"
Const regGUID = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\MachineGuid"
Public Function CreateID() As String
On Error Resume Next
Set reg = CreateObject("wscript.shell")
Pid = Replace(reg.regread(regPID), "-", "")
GUID = Replace(reg.regread(regGUID), "-", "")
LENPID = Len(Pid)
LENGUID = Len(GUID)
For x =  1  To LENPID
TempS = Hex((Asc(Mid$(Pid, x,  1 )) Xor  23 ) Xor  14 )
SPID = SPID & TempS
Next x
SPID = StrReverse(SPID)
For x =  1  To LENGUID
TempS = Hex((Asc(Mid$(GUID, x,  1 )) Xor  23 ) Xor  14 )
SGUID = SGUID & TempS
Next x
SGUID = StrReverse(SGUID)
HWID = StrReverse(SGUID & SPID)
CreateID = HWID
Dim fagID As String
Dim i As Integer
For i =  1  To  5 
fagID = fagID & CStr(Mid(CreateID, Int(Len(CreateID) /  12 ) * i,  4 )) & "-"
Next
fagID = Mid(fagID,  1 , Len(fagID) -  1 )
CreateID = UCase(fagID)
End Function
данный способ имеет слудющие недостатки:
- необходим доступ к реестру, хз что с правами
- неизвестно от чего это все зависит вообще, меняется ли по жизни и почему
- если производитель (сбощик) РС установит винду с помощью программ клонирования, очень большая вероятность того, что этот способ выдаст одно и тоже на физически разных РС, т.к. клонируется и реестр, откуда черпается инфа.
Вывод: на мой взгляд, восновном из-за недостатка связанного с установкой винды клонированием, способ - ацтой!

4) Получить CPUID, т.е. идентификаионную иформацию процессора. Для реализации на фокспро не обойтись без сторонних программ, типа консольных ехе (например: getcpu.exe и различные одноименные cpuid.exe) или с помощью специальных библиотек fll/dll (можно найти на фоксклубе). Есть как бесплатные так и платные решения типа Hardware_IDExtractor и т.п. Все решения основаны на ассемблерной комманде CPUID.
данный способ имеет следующие недостатки:
- не каждое решение работает с правами юзера, т.е. некоторые только с правами администратора
- нельзя использовать индентификатор, строящися на принципе получения контрольной суммы типа CRC32/MD5 и тп от полученной информации (ответа), т.к. это влючает в себя номер задействованного в данный момент ядра и текущую частоту. Текущая частота процессора зачастую "плавает" в пределах нескольких МГц в реальном времени (не говоря уже о разгоне или наоборот, котода биос сбрасывает настройки на безопасные в случае сбоя), а номер ядра, когда в ходу многоядерные системы, в разный момент времени на одном и том же РС мб разным (проверено). Итого: будет разная инфа и соотв. кс в разные моменты времени на одном и том же РС!
- процессоры Intel, начиная с Pentium-III, действительно отдают сериник через CPUID, но на всех старших, современных моделях необходимо обязательно предварительно включать такую фичу в BIOS-е материнки, чего естественно никто не делает
- не все процессоры вообще имеют возможность получать серийные номера программно, в т.ч. через CPUID. Например, процессоры AMD - не имеют вообще. Об этом можно прочитать в нете, втч на вики.
- в итоге на типовой конфигурации в оффисе и т.п., когда несколько РС построены на одном и том же железе, CPUID отдаст одну и ту же инфу, т.е. неуникальную.
- наличие дополнительных файлов (библиотек, программ) сторонних производителей, повсеместная работоспособность которых не гарантируется
Вывод: способ - ацтой!

5) Получить реальный hardware HDD serial. Это опять же не решается средствами фокспро, а подобно предидущему варианту с помощью библиотек или программ сторонних производителей. Здесь восновном существуют практически исключительно только платные варианты, как то дллки Hardware_IDExtractor, RLByte HDDPhysic, AKRAM SOFT HardDiskSerial и т.п. и кряков к ним как правило просто не существует, т.к. спроса нет. Я находил лишь 2 бесплатных варианта - один в виде dll (AmoK GetIDE, который, однако, требует прав администратора, а у юзеров не работает вообще) и в виде консольной ехе - diskid32, которая таки работает с правами юзера.
данный способ имеет слудющие недостатки:
- наличие дополнительных файлов (библиотек, программ) сторонних производителей, повсеместная работоспособность которых не гарантируется
- возможные проблемы с правами доступа в виндах
- проблемы связанные с версией винды, т.е. может работать на XP, но не работать на Vista или 7
- подавляющее большинство удобных решений - платные
- наличие доп. проги/дллки легко заметно, для взлома потребуется "эмуль", который будет выдавать одно и тоже везде
Вывод: в принципе возможное решение, но непопулярное, а что до diskid32 - то и довольно легко взламываемое. Можно, конечно контрольную сумму запускаемого ехе спросить, но и это легко "подставить". Разве что переписать diskid32 (на оф. сайте выложены исходники) на фокспро, если такое вообще возможно.

6) Получать любые серийники любого железа позволяют различные программы типа старой AIDA32ю. К примеру Everest Corporate Edition имеет специальные функции, с помощью которых любую инфу о железе и не только можно получать даже удаленно, мониторить изменения в железе и все такое, может "сливать" отчеты в разном виде (CSV и тд) и даже заливать на SQL-сервер. Решение имеет лишь один очевидный недостаток - оно платное. И довольно дорогое. Т.к. даже не пробовал, больше ничего сказать не могу. Дома запускал, прога реально модная и весьма популярная в середе итешнегоф - инфу отдает любую, однако требует периодического обновления, связанного с появлением нового железа (чипсеты, процы, видяхи и тп).
Вывод: возможное решение, но зависит от материальных возможностей.

Глобальный вывод: защита программы, основывающаяся на серийниках железа сама по себе ущербна изначально. Весь софт, защищенный подобным образом - взламывается, защиты "обходятся". Единственной пока устойчивой защитой является онлайн-активация типа UbiSoft-овской DRM, т.е. когда для работы программы постоянно нужен выход в интернет, понятно для чего :)
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36842053
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самый главный вопрос - вот нафига это надо ?
Если всем известно, что лучшая защита - качественное сопровождение. А если надо сломать, то Defox ломается. Было бы что ломать
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36842382
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да незачем так мудрить, привязывайтесь к дате BIOS, извлекая её внешним 16-битным приложенеим (а иначе не сможете) . Все эти DECLARE тут вам не помощники.
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36846638
CTAC-KO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне какбэ фсиравно кому и зачем это надо. Сие является лишь кратким обзором вариантов собранные в одной "статье" для тех, кто этим интересуется.
Если есть что добавить - добавляйте, только подробнее. Потому как "дата из биоса" например мне мало о чем говорит, т.к. часы/календарь и так на "материнских" часах, т.е. какбэ из биоса, что там "вытаскивать"? Дату создания биоса? Дату прошивки биоса? Дату версии биоса? Опять же - какую б дату там не брать, необходима, как тут было сказано, внешняя прога, которая быстро "палится" простым просмотром содержимого каталога проги и пишется простецкий эмуль, выдающий всегда то, что "дохтур" (т.е. программёр) прописал .
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36848535
psj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
psj
Гость
CTAC-KO,-
Достаточно и первого метода.Нужно просто давать время на размышление потенциальному покупателю и не блокировать запуск программы ,а переводить ее в демо-режим.Поэтому в файл лицензии лучше спрятать ,кроме серийника винта, еще и название организации и дату окончания поддержки.Не сработает первое - будет часто напоминать второе.
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36848600
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
psjCTAC-KO,-
Достаточно и первого метода.Нужно просто давать время на размышление потенциальному покупателю и не блокировать запуск программы ,а переводить ее в демо-режим.Поэтому в файл лицензии лучше спрятать ,кроме серийника винта, еще и название организации и дату окончания поддержки.Не сработает первое - будет часто напоминать второе.
Имеется в виду API ? Это несерьезно. Я не имел в виду ответ участников про изготовление "простейшего эмуля", это дело уже хакеров с закатанными рукавами, вы попробуйте взломать старинное 16-битное внешнее приложение, тем более зашифрованное и включенное в проект. Друзья, не надо тут пальцы веером. На данный момент лучшее средство защиты - DefoxIII.
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36852400
Фотография Telum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CTAC-KO, я использовал WMI. Тупо запускал ShellExecute с такой программой (из командной строки не работает) msinfo32 /nfo info.nfo ВСЕЕЕЕ сведения, что необходимы.... даже не парься насчет всего остального. Правда парсер простенький нало написать. Решение внедрено мной на 3 предприятиях... не жалуются. Если какой-нить зверь спер память с компа... у меня тут же отчет выскакивает )))
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36852933
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TelumCTAC-KO, я использовал WMI. Тупо запускал ShellExecute с такой программой (из командной строки не работает) msinfo32 /nfo info.nfo ВСЕЕЕЕ сведения, что необходимы.... даже не парься насчет всего остального. Правда парсер простенький нало написать. Решение внедрено мной на 3 предприятиях... не жалуются. Если какой-нить зверь спер память с компа... у меня тут же отчет выскакивает )))
Вам повезло. Дело в том, что WMI на компе может не быть или оно есть, но отключено.
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #36872254
Фотография Telum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rewareTelumCTAC-KO, я использовал WMI. Тупо запускал ShellExecute с такой программой (из командной строки не работает) msinfo32 /nfo info.nfo ВСЕЕЕЕ сведения, что необходимы.... даже не парься насчет всего остального. Правда парсер простенький нало написать. Решение внедрено мной на 3 предприятиях... не жалуются. Если какой-нить зверь спер память с компа... у меня тут же отчет выскакивает )))
Вам повезло. Дело в том, что WMI на компе может не быть или оно есть, но отключено.
Почему повезло... я админ там )
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #37127534
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #37128203
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StQFoxreware,

ню-ню
http://www.foxclub.ru/sol/solution595.php
И что значит сие "ню-ню" ? Что полезного нам даёт приведенная ссылка ? Привязку проги к железу надо делать на низком нефоксовом уровне. Без внешнего 16-битного приложения здесь не обойтись. Только не надо сейчас про дампы памяти и эмуляторы, это уже для экстремалов.
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #37129666
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
reware,
например, то что предложенный Вами вариант не панацея. Как видите, с софтиной проблемы тоже имеются.
В остальном согласен с psj.
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #37129674
StQFox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
reware,

С другой стороны, каждый сам для себя определяет уровень защиты продукта. Выбор защиты ПО прямо пропорционален масштабности написанной софтины :)
...
Рейтинг: 0 / 0
Привязка к железу. WMI и другие способы.
    #37131433
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StQFoxreware,

С другой стороны, каждый сам для себя определяет уровень защиты продукта. Выбор защиты ПО прямо пропорционален масштабности написанной софтины :)
Ну, верно это. Можно ограничится программными средствами, можно электронный ключ где-то заказать.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Привязка к железу. WMI и другие способы.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]