Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > Flash Приложения: AIR, Zinc и тд.

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.07.2010, 17:44
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 1  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
По умолчанию Узнать ID компьютера

По долгу службы требуется узнать уникальный код компьютера, например md5(серийник_матери). Нужно для "регистрации" - то есть чтобы войти в приложение можно было по ключу, уникальному для каждого компьютера.

Встаёт вопрос, как это сделать и какую оболочку выбрать. Знающие люди говорят, что зинк - кривой и бажный, что то сделать без костылей на нём не получится и говорят смотреть в сторону air`а, однако проблема в том что запускаться ехешник (разработка только под вин) должен одним кликом, а установка эира и приложения сразу запрещена лицензией. Встаёт вопрос, как бы это делали Вы?

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

Добавлено через 2 часа 2 минуты
По сути, самыми вменяемыми способами которые я смог нагуглить - это выборка из реестра, только не совсем понятно, откуда же.
HKEY_LOCAL_MACHINE/HARDWARE/DESCRIPTION/SYSTEM говорит гугл, однако там нету серийников. Разве что Configuration data, только я в этом сомневаюсь.

Другой способ - это WMI, вроде zinc поддерживает работу с ним. Будем пытаться, буду рад информации по теме.

Добавлено через 4 часа 55 минут
Выбор пал на расширение проектора от alexcon`а, однако нечто то что нужно мне у него не реализовано, разве что PSystem.getComputerInfo(), но это не совсем то.

Цитата:
name=>MICROSOF-CA89DF
platformId=>500
lanRoot=>
loggedUsers=>2
lanGroup=>WORKGROUP
Буду биться дальше, подумываю над вызовом VBScript.

Добавлено через 7 часов 28 минут
Да, получилось! Вызов WMI из VBScript, работает как надо.
script.txt
Код:
Option Explicit
Function getSerial()
Dim objWMIService, objItem, colItems
Set objWMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")
For Each objItem in colItems
getSerial=objItem.SerialNumber
Next
End Function
Возвращаем первый из тех, что берём перебором. Пахнет быдлокодом, но VBScript я не знаю и это работоспособно. Это уже хорошо.

Код AS3:
PScript.initEngine();
if (!PScript.addScriptFromFile("script.txt")) PDialogs.msgBox(PScript.getScriptError());
var res:String = PScript.call("getSerial");
someTextField.text=res;
PScript.terminateEngine();
При закрытии всё равно всплывает ошибка:
Цитата:
Инструкция по адресу "0x10020a15" обратилась к памяти по адресу "0x58761460". Память не может быть "read".
Заодно заметил, что если не сделать initEngine перед тем, как добавлять скрипт - это крашит флешплеер)


Последний раз редактировалось Psycho Tiger; 26.07.2010 в 01:42.
Старый 26.07.2010, 12:17
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 2  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Psycho Tiger, спасибо за информацию.
Баги поправил.
По теме:
WMI, да, рулит. Но, на моем компе скрипт не выводит серийник мамки, выводит пустоту. Так что закладываться на этот серийник не стоит. Почему так - видимо, модель мамки старовата или еще что-то. Вот objItem.Product выводит, но это типа модель.
Наверно, будет правильней сгенерить свой уникальный ид на основе информации о нескольких девайсах, получить которую можно с помощью того же WMI, и записать этот ид в реестр или еще куда-то. Потом сверять.

Еще можно как основу уникального ид взять какой-то системный GUID(это практически уникальная штука) из реестра, например
HKCU\Identities\Default Udser ID или еще чего-нибудь..

Еще PScript.call("getSerial()");(скобки рекомендуется писать)
Есть так же PFileSystem.getDiskInfo("c:");
возвратит объект, поле serial которого содержит серийник диска.
И да, инфу о железе просто и безболезненно вынимать только через WMI. Есть и другие способы, но реализовать их на все случаи жизни я не счел нужным. Впрочем, если есть конкретный пожелания - озвучьте, рассмотрим и если гуд - внесем.

UPD
Добавил метод PRegistry.enumKey() для перечисления ключей в ветке


Последний раз редактировалось alexcon314; 26.07.2010 в 13:57.
Старый 26.07.2010, 12:38
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 3  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Отлично, спасибо за фиксы. Можно на "ты" перейдём? Не первый и не второй год на флешере общаемся.
Идея получить серийник материнки мне кажется наиболее правильной, т.к. это почти единственная неизменяемая часть компьютера, но видимо придется отказаться в сторону диска.
По сути, инфу о железе вынимать периодически нужно, наверное, было бы здорово увидеть какой-нибудь интерфейс для WMI. Проще говоря, метод, который принимает строку SQL запрос. В итоге один метод для всего чего только можно.

Добавлено через 12 минут
Кстати, а PFileSystem.getDiskInfo("c:") содержит именно серийный номер диска, или серийный номер тома? Второе в моём случае совсем непригодно...
У меня диск один, разбитый на 2 логических диска. Серийники для них разные, похоже, это правда серийник тома...


Последний раз редактировалось Psycho Tiger; 26.07.2010 в 12:54.
Старый 26.07.2010, 14:08
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Насчет интерфейса для запросов 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");
и распарсить строку. Строка получается такого вида:
Цитата:
To get all details use "diskid32 /d"

Trying to read the drive IDs using physical access with admin rights

Drive 0 - Primary Controller - - Master drive

Drive Model Number________________: [ST3200422AS]
Drive Serial Number_______________: [ 3LJ2PGE1]
Drive Controller Revision Number__: [3.01]
Controller Buffer Size on Drive___: 8388608 bytes
Drive Type________________________: Fixed
Drive Size________________________: 200048565760 bytes

Trying to read the drive IDs using the SCSI back door

Drive 2 - Secondary Controller - - Master drive

Drive Model Number________________: [ST3200422AS]
Drive Serial Number_______________: [ 3LJ2PGE1]
Drive Controller Revision Number__: [3.01]
Controller Buffer Size on Drive___: 8388608 bytes
Drive Type________________________: Fixed
Drive Size________________________: 200048565760 bytes

Trying to read the drive IDs using physical access with zero rights

**** STORAGE_DEVICE_DESCRIPTOR for drive 0 ****
Vendor Id = []
Product Id = [ST3200422AS]
Product Revision = [3.01]
Serial Number = []

**** DISK_GEOMETRY_EX for drive 0 ****
Disk is fixed
DiskSize = 200048565760

Trying to read the drive IDs using Smart

Drive 0 - Primary Controller - - Master drive

Drive Model Number________________: [ST3200422AS]
Drive Serial Number_______________: [ 3LJ2PGE1]
Drive Controller Revision Number__: [3.01]
Controller Buffer Size on Drive___: 8388638 bytes
Drive Type________________________: Fixed
Drive Size________________________: 200048565760 bytes

Hard Drive Serial Number__________: 3LJ2PGE1

Hard Drive Model Number___________: ST3200422AS

Computer ID_______________________: 652946811

MAC Address: 00-17-9A-C3-91-C2

1
1
не хочется расширение .ехе - переименуй в .dll, var str:String = PSystem.execStdOut("diskid32.dll"); тоже будет работать.
Кстати и сорцы это штуки есть на сайте, можешь скомпилить под себя и юзать чисто то, что тебе нужно без лишнего мусора.
Насколько я понял
Цитата:
Computer ID_______________________: 652946811
это действительно ид компа. В сорсах значение этой переменной хитро сформировано и она имеет тип __int64, если что.
Думаю, это то, что надо.


Последний раз редактировалось alexcon314; 26.07.2010 в 17:30.
Старый 26.07.2010, 22:08
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ага, спасибо, буду пробовать.

Старый 10.08.2010, 13:00
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 6  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Еще небольшой довесок. Как Microsoft генерит коды активации.

Старый 21.08.2010, 01:51
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 7  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Ребята, вы как докопаете, в чем я не сомневаюсь, то пожалуйста, поделитесь информацией в доступном виде. Это же не дело, что Air-приложения не имеют протектора. Захочешь продать, а никак

Старый 21.08.2010, 12:32
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 8  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Ну, мы не для Air`а копаем. Если Air имеет какой нибудь шелл для запуска exe или скриптов как здесь - то без проблем, а так сомнительно)

Старый 22.08.2010, 13:22
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 9  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
Цитата:
Ну, мы не для Air`а копаем.
Ну какая разница кто будет проверять ID материнки? Главное - как. Разве Air это не сможет?

Старый 22.08.2010, 15:07
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 10  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Господи пожалуйста не Новосибирск
Сообщений: 6,598
Записей в блоге: 17
Самое лучшее, что сейчас нам пришло в голову (точнее alexcon`у ) - это компилировать сишный код в exe, и через его обёртку вызывать метод, который выполнит этот exe и перехватит то, что он выплюнет, отдав во флешку. Air так не умеет. Ровно как и не умеет вызывать VBScript`ы для доступа к WMI...

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:31.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 19:31.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.