Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / серийный номер диска / 13 сообщений из 13, страница 1 из 1
18.06.2010, 13:52
    #36694722
audioalex1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
есть вопрос...в проге есть защита от запуска на чужом компе с помощью...проверки серийного номера диска...использовал...маленький prg-шник с таким кодом
PUBLIC m.sn
Declare Integer CloseHandle in kernel32 Integer hObject
Declare Integer CreateFile in kernel32 String lpFileName, ;
Integer dwDesiredAccess, Integer dwShareMode, ;
Integer lpSecurityAttributes, Integer dwCreationDisposition, ;
Integer dwFlagsAndAttributes, Integer hTemplateFile

Declare Integer DeviceIoControl in kernel32 Integer hDevice, ;
Integer dwIoControlCode, String @lpInBuffer, ;
Long nInBufferSize, String @lpOutBuffer, ;
Long nOutBufferSize, Integer @lpBytesReturned, ;
Integer lpOverlapped

Declare Integer GetLogicalDriveStrings in Win32API ;
Integer buflen, String @buf
Declare Integer GetDriveType in Win32API String &&m.path
Declare Integer GetVolumeInformation in Win32API ;
String lpRootPathName, String @lpVolumeNameBuffer, ;
Integer nVolumeNameSize, Long @lpVolumeSerialNumber, ;
Integer @lpMaximumComponentLength, Integer @lpFileSystemFlags, ;
String @lpFileSystemNameBuffer, Integer nFileSystemNameSize

clear
m.buflen=104
m.buf=replicate(chr(0),m.buflen)
GetLogicalDriveStrings(m.buflen, @m.buf)
m.buf=chrtran(m.buf,chr(0)+"\:","")
m.str1=""
for m.i=1 to len(m.buf)
m.drvtype=GetDriveType(substr(m.buf,m.i,1)+":\")
if m.drvtype=3
m.str1=m.str1+substr(m.buf,m.i,1)
endif
next

for m.i=1 to len(m.str1)
m.vnb=replicate(chr(0),64)
m.vnbs=64
m.vsn=0
m.mcl=0
m.fsf=0
m.fsnb=replicate(chr(0),10)
m.fsnbs=10

GetVolumeInformation(substr(m.str1,m.i,1)+":\", ;
@m.vnb,m.vnbs,@m.vsn,@m.mcl,@m.fsf,@m.fsnb,m.fsnbs)

if m.vsn<0
m.vsn=m.vsn+16^8
endif
m.vsn=padl(allt(substr(Transform(m.vsn,"@0"),3)),8,"0")

m.drivenumber=asc(substr(m.str1,m.i,1))-asc("C")
handle = CreateFile("\\.\"+chr(asc("c")+m.drivenumber)+":", ;
0xC0000000, 3, 0, 3, 0, 0)

m.sn=""
m.mod=""
m.rev=""
if handle<>-1
m.sci=""
m.sci=m.sci+chr(0)+chr(2)+chr(0)+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(1)
m.sci=m.sci+chr(1)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(0xA0)
m.sci=m.sci+chr(0xEC)
m.sci=m.sci+chr(0)
m.sci=m.sci+chr(0)
m.sci=m.sci+repl(chr(0),499)

m.sco=replicate(chr(0),2048)
m.ret_buffersize=0
m.otv=DeviceIoControl(handle, 0x7C088, @m.sci, len(sci), ;
@m.sco, len(sco), @m.ret_buffersize, 0)

CloseHandle(handle)
if m.otv<>0
m.sn=chrtran(allt(conv21(substr(m.sco,37,20))),chr(0),"")
m.rev=chrtran(allt(conv21(substr(m.sco,63,8))),chr(0),"")
m.mod=chrtran(allt(conv21(substr(m.sco,71,40))),chr(0),"")
endif
endif
*SET PRINTER TO file volum.txt additive
*SET PRINTER on
*? substr(m.str1,m.i,1)+":\ VolSN: "+m.vsn+" "+ ;
chrtran(m.fsnb,chr(0),"")+" Model: "+m.mod+ ;
" Revision: "+m.rev+" Serial: "+m.sn
*? substr(m.str1,m.i,1)+":\ VolSN: "+m.vsn+" "+ ;
chrtran(m.fsnb,chr(0),"")+" Model: "+m.mod+ ;
" Revision: "+m.rev+" Serial: "+m.sn
*SET PRINTER TO
*SET PRINTER off
num_p=ALLTRIM(m.sn)
r_psw=STR(LEN(ALLTRIM(num_p)),1)+ALLTRIM(num_p)

tr_psw=" "
FOR i=1 TO LEN(r_psw)
code_sym=ASC(SUBSTR(r_psw,i,1))+10+LEN(r_psw)
code_sym=IIF(code_sym>255,code_sym-223,code_sym)
tr_psw=tr_psw+CHR(code_sym)
ENDFOR
num_p=ALLTRIM(tr_psw)
next


function conv21
lparameter m.str
if len(m.str)%2=1
m.str=m.str+" "
endif
local m.i, m.str2
m.str2=""
for m.i=1 to len(m.str)
m.str2=m.str2+substr(m.str,m.i+iif(m.i%2=0,-1,1),1)
next
return m.str2

в общем все работало пока не столкнулся с проблемой...сата диски с доступом AHCI ..
ни фига не дает просто так получить серийник...подскажите варианты мож кто сталкивался с таким?
...
Рейтинг: 0 / 0
18.06.2010, 16:03
    #36695072
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
А зачем столько наворотов с WinAPI для привязки?
Сделай GetVolumeInformation() от диска на который ОС поставлена.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare integer GetVolumeInformation in win32api string,integer,integer,integer @,integer,integer,integer,integer
lnSn =  0 
lcDrive = getenv('SystemDrive')
GetVolumeInformation(lcDrive,  0 ,  0 , @lnSn,  0 ,  0 ,  0 ,  0 )
if lnSn <  0 
	lnSn =  2 ^ 32  + lnSn
endif
? substr(Transform(lnSn,"@0"),  3 )
return
GetVolumeInformation() получает серийный номер логического диска, на каком он железе ей все-равно.
Этот серийный номер - это не номер железяки проставленный на заводе, а 4 байта сгенеренные от текущего времени при форматировании.
...
Рейтинг: 0 / 0
18.06.2010, 16:17
    #36695122
Eugenkru10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
audioalex1,

Идея интересная, но я бы не стал привязывать софт к серийнику винчестера.
Дело в том что винт могут заменить, а деньги за софт уплачены.
Опять звонить разработчику поднимать панику?
Есть более гуманные способы защиты.
...
Рейтинг: 0 / 0
19.06.2010, 13:43
    #36696205
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
Eugenkru10Идея интересная, но я бы не стал привязывать софт к серийнику винчестера.
Дело в том что винт могут заменить, а деньги за софт уплачены.
Опять звонить разработчику поднимать панику?
Есть более гуманные способы защиты.Если разработчики сидят на стороне,- то все верно.
Если разработчик(и) свой(свои) и прога заточена под себя, то есть смысл подвязаться именно к серверному винчестеру как один из способов защиты от "кротов".
...
Рейтинг: 0 / 0
19.06.2010, 14:01
    #36696219
Eugenkru10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
igorbikEugenkru10Идея интересная, но я бы не стал привязывать софт к серийнику винчестера.
Дело в том что винт могут заменить, а деньги за софт уплачены.
Опять звонить разработчику поднимать панику?
Есть более гуманные способы защиты.Если разработчики сидят на стороне,- то все верно.
Если разработчик(и) свой(свои) и прога заточена под себя, то есть смысл подвязаться именно к серверному винчестеру как один из способов защиты от "кротов".
Как понять фразу "разработчики сидят на стороне,- то все верно"
1. На какой стороне? За Дунаем чтоли? )))
2. Что верно? )))
...
Рейтинг: 0 / 0
19.06.2010, 15:50
    #36696334
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
Eugenkru10Как понять фразу "разработчики сидят на стороне,- то все верно"
1. На какой стороне? За Дунаем чтоли? )))
2. Что верно? ))) Перефразируем.
Если разработчики - сторонняя организация или программер,- то Ваше мнение полностью справедливо.
...
Рейтинг: 0 / 0
19.06.2010, 17:30
    #36696409
Eugenkru10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
igorbik,

Рзаработчик это всегда сторонняя организация или программер.
...
Рейтинг: 0 / 0
19.06.2010, 18:14
    #36696435
igorbik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
Eugenkru10igorbik,
Разработчик это всегда сторонняя организация или программер. уточняю:
Если разработчик- сторонняя организация или сторонний программер... (далее по тексту).
...
Рейтинг: 0 / 0
20.06.2010, 21:31
    #36697348
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
igorbik,
Странные люди, в открытую обсуждают защиту своих программ. Это, в общем то, довольно интимный вопрос. Подсказка :
1) BIOS
2) WMI
3) Если позволяет приложение, то привязка к названию клиента.
...
Рейтинг: 0 / 0
21.06.2010, 07:26
    #36697581
audioalex1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
Всем спасибо за помощь. Dima T твой вариант попробовал но к сожалению тож не сработал 000000 выдал серийник на моем компе доступ к винту легаси усб на том котором тестирую AHCI фишка именно в том что у меня работают все варианты а там нет. Вариант защиты с помощью серийника винта я и сам понимаю что никакой так чтобы был. Прога написана для своих юзеров просто раньше везде у себя так делал все работало а сейчас вот попал такой вариант что не работает. Можно конечно и просто тупо убрать проверку на серийник но это получится отступить а отступление не даст новых знаний и опыта. По мне лучше помучаться поискать варианты и в конце концов найти способ решения задачи.
...
Рейтинг: 0 / 0
21.06.2010, 08:51
    #36697617
audioalex1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
еще варианты пробовал....
такой....
LOCAL lcRemoteComputer,;
loSWbemLocator, loSWbemServices,lcolSWbemObjectSet,loSWbemObject
lcRemoteComputer = "."

lcComputer="."

loSWbemServices = GetObject("winmgmts:\\" + lcComputer + "\root\cimv2")

lcolSWbemObjectSet = loSWbemServices.InstancesOf("Win32_PhysicalMedia")
for Each loSWbemObject In lcolSWbemObjectSet
? loSWbemObject.SerialNumber
next

и такой....
Local loSWbemLocator, loSWbemService, loItem

loSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
loSWbemService = loSWbemLocator.ConnectServer()

For each loItem in loSWbemService.Get("Win32_PhysicalMedia").Instances_
? loSWbemObject.SerialNumber
Endfor

loSWbemLocator = null

не работают оба....
да еще прикол...специальной сегейтовской утилитой SeaTools тоже номер диска 000000 показывает..
...
Рейтинг: 0 / 0
21.06.2010, 08:56
    #36697618
audioalex1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
да забыл....примеры брал http://forum.foxclub.ru/read.php?29,157781,158140,quote=1 и отсюда
http://prog-gate.pp.ru/fido7.ru.visual.foxpro/5414.html
...
Рейтинг: 0 / 0
21.06.2010, 10:03
    #36697696
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
серийный номер диска
audioalex1специальной сегейтовской утилитой SeaTools тоже номер диска 000000 показывает..
Скорее всего GetVolumeInformation() так всем возвращает.
Попробуй еще чем-нибудь посмотреть, например в Far`e Ctrl+L
возможно это диск так отформатирован что серийный номер по нулям.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / серийный номер диска / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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