Что нового

Система защиты и привязка к железу

Статус
Закрыто для дальнейших ответов.

NCsoft

Новичок
Сообщения
24
Репутация
0
Добро времени суток !

Возникла сложность к привязке программы к железу , тоесть сообосную от А до Я

существует некое ПО и оно нуждаеться в защите от распростанения , вопрос был решон и были приняты меры привязки к серийнику диска (C:\) , но и тут возникли новые проблемы ))) а имено с учётом того что когда пользователь переустанавливает ОС ну или подвергает локальную среду (С:\) под форматирование то серийный номер улетает (меняеться)

ранее использовался данный сценарий

Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstantsEx.au3>
#include <Constants.au3>
#include <Inet.au3>
#include <Misc.au3>
#Include <File.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

#include <resources.au3>
#include <File.au3>



$Width = 425
$Height = 95
GUISetBkColor(0xFFFFFF)
$hGUI = GUICreate("", $Width, $Height, -1, -1, BitOR($WS_POPUP, $WS_BORDER))
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetCursor(-1, 0)

$Label1 = GUICtrlCreateLabel("Введите ваш регистрационный электронный адрес", 24, 8, 382, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Input1 = GUICtrlCreateInput("", 38, 32, 353, 24)
$email=GUICTRLread($Input1)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Button1 = GUICtrlCreateButton("Подтвердить", 327, 64, 80, 25)
$Button2 = GUICtrlCreateButton("Отмена", 253, 64, 73, 25)
$Button3 = GUICtrlCreateButton("Проверка серийного номера", 23, 64, 200, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###



While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit



 Case $button3
   Run('KEY.EXE')



Case $button2
     Exit



Case $Button1

_ValidateSerial()

Func _ValidateSerial()

    Local $Serial, $Temp = @TempDir & '\~key.tmp'

    If Not InetGet('http://domain.ru/key.ini', $Temp) Then
        MsgBox(16, 'Ошибка', 'К сожалению неудалось подключиться к базе данных серийных номеров . Есть вероятность что ведутся технические работы , или база данных перезагружается !')
        Exit
    EndIf
    $Serial = IniRead($Temp, 'email', GUICTRLread($Input1), '?')
    FileDelete($Temp)
    If DriveGetSerial('C:') <> $Serial Then

Run('NoKEY.EXE')

    EndIf
EndFunc   ;==>_ValidateSerial



Run('MENU.EXE')


        Exit
	EndSwitch

WEnd


в общем на сайте существует файл где в нём указаны ключи таким образом
Код:
[email]
Admin=1100110011
[email protected]=1100110011
[email protected]=1100110011
[email protected]=1100110011

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

Сам вопрос(просьба)

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

мне нужно по сути такую вещь , при запуске ПО что бы не чего не вводить !!! что бы он автоматически защёл по адресу и там из всех серийников нашёл тот который на компе , тоесть при запуске ПО.EXE если номер проца подходит он выполнят один сценарий , если же нет то другой ...
возможно ли зделать так ? или всё же на Автоите возможно только с ручным вводом данных ?

если не чажело , помогите , люблю Автоит , но для его полного изучения очень много нужно выделить внимания , а времени очень малр ибо нужно исправить до конца дня :'(

--------
данную тему видел Привязка скрипта к одному компьютеру (железу)
не годиться , нужно что нибуть то что до автоматизма доведено , тоесть просто напросто пользователь запустил программу ему написало куда обращаться и его серийный номер процессора или материнки (хотябы) а затем уже он обращаеться к админу и пишет ему свой серийник после чего админ вручную вписывает его в domain.ru/key.ini ну или кудото !
 

Mur

Осваивающий
Сообщения
132
Репутация
32
как сделать привязку к железу
Прямо под твоим сообщением находится список тем, где всё это описано.
http://autoit-script.ru/index.php/topic,2474.45.html
http://autoit-script.ru/index.php/topic,11603.0.html
http://autoit-script.ru/index.php/topic,1919.0.html
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
NCsoft,
Посмотрите функцию _WinAPI_UniqueHardwareID из WinAPIEx.au3 (см. мою подпись).
 
Автор
N

NCsoft

Новичок
Сообщения
24
Репутация
0
да блин єто тоже самое только у меня лучше , и у меня на автомате , а тут можно это всё обойти , я это видел и читал , но что за защита если клиент сам привязывает ? с такими темпами можно и на другом компе запустить компилятор который введёт серийник в EXE

да и я же написал что привязка к харду это дно , потому что хард это самое меняемое в компе , а проц меняеться от силы у 15% пользователей компом .


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

Mur

Осваивающий
Сообщения
132
Репутация
32
Там описана не только привязка к HDD-шнику, так же обговаривалась и двух сторонняя привязка (по типу сервер-клиент), удачи, а мне пора на пары.
 
Автор
N

NCsoft

Новичок
Сообщения
24
Репутация
0
чёто посмотрел , теперь вообще понять не могу и склееть , чёто всё как то двухсторонее , есть простой альгоритм скрипта , а есть то что вообще не понятное

вот скачал архив из темы WinAPI.au3 и открыл файл _WinAPI_UniqueHardwareID.au3

дак и как это понять то что внутри там ?

#Include <APIConstants.au3>
#Include <WinAPIEx.au3>

Код:
ConsoleWrite('Hardware1: ' & _WinAPI_UniqueHardwareID() & @CR)
ConsoleWrite('Hardware2: ' & _WinAPI_UniqueHardwareID(BitOR($UHID_MB, $UHID_BIOS)) & @CR)
ConsoleWrite('Hardware3: ' & _WinAPI_UniqueHardwareID(BitOR($UHID_MB, $UHID_BIOS, $UHID_CPU)) & @CR)
ConsoleWrite('Hardware4: ' & _WinAPI_UniqueHardwareID($UHID_All) & @CR)


может всё же я дыбил и чёто не вкусываю ?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
NCsoft
Предупреждение За нарушение общих правил (пункт В.8):
Так как эта конференция называется "Русское сообщество AutoIt", язык общения на ней - Русский. Названия фирм или программных продуктов, аббревиатуры и т.д. должны быть написаны так, как они пишутся в оригинале, например не следует писать УСБ вместо USB. На форуме крайне не рекомендуется намеренно искажать русский язык и использовать "сетевой жаргон" на подобии "Аффтар выпей йадау!".


С уважением, ваш Глобальный модератор.
 
Автор
N

NCsoft

Новичок
Сообщения
24
Репутация
0
а в каком месте я это допустил ? чёт не наблюдаю ничего , может укажете ? что бы в дальнейшем такого не допускал ?а?


Добавлено:
Сообщение автоматически объединено:

по теме :

вот к примеру же есть программа для отображения серийника проца , вот скрипт , нарытый на офе

Код:
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$strComputer = "localhost"

$Output=""
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", _
										  $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) then
   For $objItem In $colItems
	  $Output = $Output & "ProcessorId: " & $objItem.ProcessorId & @CRLF
	  if Msgbox(1,"WMI Output",$Output) = 2 then ExitLoop
	  $Output=""
   Next
Else
   Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Processor" )
Endif


Func WMIDateStringToDate($dtmDate)

	Return (StringMid($dtmDate, 5, 2) & "/" & _
	StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
	& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc


скрин программы

00000.png


вот как мне сделать так что бы привязка была не к C:\ а к ProcessorId ?
я вообще не могу понять как и что устроено ? темы прочитав 2 раза , теперь даже понять не могу ихние алгоритмы ...
 

Mur

Осваивающий
Сообщения
132
Репутация
32
Пожалуй прогуляю...
а в каком месте я это допустил ? чёто не наблюдаю ничего , может укажете ? что бы в дальнейшем такого не допускал ?а?
чёто посмотрел , теперь вообще понять не могу и склееть , чёто всё как то двухстороНнее , есть простой альгоритм скрипта , а есть то что вообще не понятное

вот скачал архив из темы WinAPI.au3 и открыл файл _WinAPI_UniqueHardwareID.au3

дак и как это понять то что внутри там ?
может всё же я дыбил и чёто не вкусываю ?


Кстати, http://pbhack.ru/forum/topic/96846-dhn-dh-ndh-dhdh
 
Автор
N

NCsoft

Новичок
Сообщения
24
Репутация
0
по моему тебе пора на пары в тот день года не кто не учиться ) и вообщето попробуй побыть внимательней при прочтения следующих строк !

что значит кстате ? по поводу PBHack есть вопросы ? это относиться к теме ?
- Ну да отсутсвует граматика в моих диалогах , до плохо учил русский ибо его вообще не преподавали у нас в школе , да я Хахол так что теперь ? нужно гнобить ?

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


Добавлено:
Сообщение автоматически объединено:

"как правильно изменить

Код:
If DriveGetSerial('C:') <> $Serial Then


что бы он читал вот это

Код:
$objItem.ProcessorId
?

дописал впереди


Код:
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"

$Output=""
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", _
										  $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

If IsObj($colItems) then
   For $objItem In $colItems
	  $Output = $Output & "ProcessorId: " & $objItem.ProcessorId & @CRLF
	  $Output=""
   Next
Else
   Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_Processor" )
Endif


но чёто не хочет читать :stars:

прописал за место

Код:
If DriveGetSerial('C:') <> $Serial Then


вот что

Код:
If $objItem.ProcessorId <> $Serial Then


но ифекта 0
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Тема закрыта, т.к обсуждалась уже не раз.
 
Статус
Закрыто для дальнейших ответов.
Верх