Узнать ID компьютера
По долгу службы требуется узнать уникальный код компьютера, например md5(серийник_матери). Нужно для "регистрации" - то есть чтобы войти в приложение можно было по ключу, уникальному для каждого компьютера.
Встаёт вопрос, как это сделать и какую оболочку выбрать. Знающие люди говорят, что зинк - кривой и бажный, что то сделать без костылей на нём не получится и говорят смотреть в сторону air`а, однако проблема в том что запускаться ехешник (разработка только под вин) должен одним кликом, а установка эира и приложения сразу запрещена лицензией. Встаёт вопрос, как бы это делали Вы? Про то, что любая защита ломается я знаю. Выбор остался на флеше потому что из фич, недоступных флешу мне нужно только это. Добавлено через 2 часа 2 минуты По сути, самыми вменяемыми способами которые я смог нагуглить - это выборка из реестра, только не совсем понятно, откуда же. HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/SYSTEM говорит гугл, однако там нету серийников. Разве что Configuration data, только я в этом сомневаюсь. Другой способ - это WMI, вроде zinc поддерживает работу с ним. Будем пытаться, буду рад информации по теме. Добавлено через 4 часа 55 минут Выбор пал на расширение проектора от alexcon`а, однако нечто то что нужно мне у него не реализовано, разве что PSystem.getComputerInfo(), но это не совсем то. Цитата:
Добавлено через 7 часов 28 минут Да, получилось! Вызов WMI из VBScript, работает как надо. script.txt Код:
Option Explicit Код AS3:
Цитата:
|
Psycho Tiger, спасибо за информацию.
Баги поправил. По теме: WMI, да, рулит. Но, на моем компе скрипт не выводит серийник мамки, выводит пустоту. Так что закладываться на этот серийник не стоит. Почему так - видимо, модель мамки старовата или еще что-то. Вот objItem.Product выводит, но это типа модель. Наверно, будет правильней сгенерить свой уникальный ид на основе информации о нескольких девайсах, получить которую можно с помощью того же WMI, и записать этот ид в реестр или еще куда-то. Потом сверять. Еще можно как основу уникального ид взять какой-то системный GUID(это практически уникальная штука) из реестра, например HKCU\Identities\Default Udser ID или еще чего-нибудь.. Еще PScript.call("getSerial()");(скобки рекомендуется писать) Есть так же PFileSystem.getDiskInfo("c:"); возвратит объект, поле serial которого содержит серийник диска. И да, инфу о железе просто и безболезненно вынимать только через WMI. Есть и другие способы, но реализовать их на все случаи жизни я не счел нужным. Впрочем, если есть конкретный пожелания - озвучьте, рассмотрим и если гуд - внесем. UPD Добавил метод PRegistry.enumKey() для перечисления ключей в ветке |
Отлично, спасибо за фиксы. Можно на "ты" перейдём? Не первый и не второй год на флешере общаемся.
Идея получить серийник материнки мне кажется наиболее правильной, т.к. это почти единственная неизменяемая часть компьютера, но видимо придется отказаться в сторону диска. По сути, инфу о железе вынимать периодически нужно, наверное, было бы здорово увидеть какой-нибудь интерфейс для WMI. Проще говоря, метод, который принимает строку SQL запрос. В итоге один метод для всего чего только можно. Добавлено через 12 минут Кстати, а PFileSystem.getDiskInfo("c:") содержит именно серийный номер диска, или серийный номер тома? Второе в моём случае совсем непригодно... У меня диск один, разбитый на 2 логических диска. Серийники для них разные, похоже, это правда серийник тома... |
Насчет интерфейса для запросов WMI, ну что ж.. вобщем-то можно свой AS-класс-обертку написать, который юзает (или расширяет) PScript, формируя по какоЙ-то схеме стандартизованный запрос и вставляет его в шаблон скрипта)).
WMI - необъятная штука, сделать что-то лучше, чем имеющийся скриптовый интерфейс не представляется возможным. Вот кстати неплохая реализация на C# http://www.codeproject.com/KB/system...formation.aspx Собственно, я изначально старался уйти от "оберток", предоставляя доступ к АПИ системы на возможно низком уровне. Надо что-то свое - расширяйтесь. Примеры http://www.script-coding.info/WMI_HardWare.html Но идея с GUID мне кажется не менее плодотворной. GUID'ы назначаются при установке винды (или каких-то последующих глобальных пертурбациях, типа установки девайса, создания пользователей и т.п.). Так что уникальность тут тоже хорошая. И да, на ты, конечно. Добавлено через 3 часа 3 минуты Что-то зацепило меня.. вот еще фришная тулза http://www.winsim.com/diskid32/diskid32.html юзать примерно так: var str:String = PSystem.execStdOut("diskid32.exe"); и распарсить строку. Строка получается такого вида: Цитата:
Кстати и сорцы это штуки есть на сайте, можешь скомпилить под себя и юзать чисто то, что тебе нужно без лишнего мусора. Насколько я понял Цитата:
Думаю, это то, что надо. |
Ага, спасибо, буду пробовать.
|
Еще небольшой довесок. Как Microsoft генерит коды активации.
|
Ребята, вы как докопаете, в чем я не сомневаюсь, то пожалуйста, поделитесь информацией в доступном виде. Это же не дело, что Air-приложения не имеют протектора. Захочешь продать, а никак:)
|
Ну, мы не для Air`а копаем. Если Air имеет какой нибудь шелл для запуска exe или скриптов как здесь - то без проблем, а так сомнительно)
|
Цитата:
|
Самое лучшее, что сейчас нам пришло в голову (точнее alexcon`у :)) - это компилировать сишный код в exe, и через его обёртку вызывать метод, который выполнит этот exe и перехватит то, что он выплюнет, отдав во флешку. Air так не умеет. Ровно как и не умеет вызывать VBScript`ы для доступа к WMI...
|
А разве Air не может запустить сторонний exe (например созданный с помощью AutoIt), который запишет где-то в реестре уникальный ID машины? Ну а потом Air прочитает это значение в реестре.
|
Я не знаток AIR`а, но если он может сделать эти 2 операции - то в чем проблема? В теме всё остальное уже расписали, даже с примером программы =)
|
Astraport, откройте хэлп по последней версии AIR, там было что-то новенькое и интересное в связи с запуском ехе и перенаправлением вывода stdout консольных утилит, где-то мелькало, сейчас прсото не найду.
Здесь речь идет совсем не об айре. Сейчас думаю вбацать-таки фичу с серийником винта и ID проца (cpuid call) в оболочку. Я туда пихаю все, что спрашивают на форуме :), традиционно. |
air может запустить сторонний exe файл.
http://help.adobe.com/ru_RU/Flash/CS...veProcess.html |
Возвращаясь к теме.
Смысл в том чтобы получить уникальный идентификатор компьютера пользователя. Самый лучший вариант - это привязаться к материнской плате, т. к. её намного реже меняют (апгрейдят) по сравнению с жесткими дисками или процессорами. Другой простой вариант - это привязка к Hardware address (он же MAC), но тут проблема в том, что юзер может его легко поменять и опять же зависит от материнки. Значит задача сводится к получению ID материнки, при этом желательно без сторонних файлов или скриптов по причине чрезвычайной жесткости антивирусов ко всяким подобным вещам. Так что вариант с другим exe или dll тоже не подходит. alexcon314, вы не добавили функцию получения ID материнки в вашей библиотеке? Планируете? |
Серийный номер жкесткого диска добавил давно уже.. ID СPU по моим представлениям вещь тоже весьма условная, возможность получения оного весьма зависитот семейства, линейки, производителей и т.п.
Единообразного общего способа его получить я не вижу. К серийнику мамки я не подступался. Но это тоже не самая тривиальная задача, по моим представлениям, если опять же искать что-то общее и работоспособное. Так что не планирую, вряд ли.. не буду обещать.. Можно попробовать покопаться в биосе из проги, но опять же это не дает гарантий... MS использует информацию о нескольких девайсах для генерации серийника. Причем, замена материнки, к примеру, равносильна потере лицензии на винду (OEM-версии). Мое имхо - привязаться к серийнику винта вполне достаточно в подавляющем большинстве ситуаций. Форсмажорная смена оного не такой уж частый случай. А разные там фокусы - ну, что уж там.. Нормальную защиту может дать свой драйвер и свой девайс типа usb-ключа. Но это уже несколько выходит за рамки.. Если кто-то предложит внятный алгоритм получения ID компа, можно подумать и о реализации, пока мне ничего толкового в голову не ришло, корме серийника винта. |
Цитата:
Цитата:
А что скажите насчет MAC? Я правильно понял, что это уникальный номер для материнки? |
Цитата:
Цитата:
Ну, ваша практика с винтами - не показатель, согласитесь? Потом, буква диска (логического тома) тут не при чем. Серийник - характеристика именно железяки. О нем речь. Он не меняется с изменением структуры логических разделов. Есть серийник тома, он назначается при создании логических разделов, это совсем другое. MAC - это имеется в виду MAC сетевого интерфейса? Что сказать.. нормальный вариант, но послабее варианта с винтом, явно. Значение MAC адреса указанное в настройках драйвера сетевой карты имеет приоритет перед аппаратным адресом. Лично мне никогда не приходилось менять мак сетевухи, думаю, многим "нормальным" пользователям тоже это ни о чем не говорит. Но все же, поменять его несложно при желании. Да, про привязку к мамке интересно, расскажите, жду. |
Подскажите как получить идентификатор диска C: (аналог команды vol из командной строки). Из swf как я понял этого не сделать, устроит AIR.
|
Либо вызывать консольные утилиты как дочерний процесс, либо писать native ext под AIR.
|
Часовой пояс GMT +4, время: 15:19. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.