|
серийный номер диска
|
|||
---|---|---|---|
#18+
есть вопрос...в проге есть защита от запуска на чужом компе с помощью...проверки серийного номера диска...использовал...маленький 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 .. ни фига не дает просто так получить серийник...подскажите варианты мож кто сталкивался с таким? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2010, 13:52 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
А зачем столько наворотов с WinAPI для привязки? Сделай GetVolumeInformation() от диска на который ОС поставлена. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Этот серийный номер - это не номер железяки проставленный на заводе, а 4 байта сгенеренные от текущего времени при форматировании. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2010, 16:03 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
audioalex1, Идея интересная, но я бы не стал привязывать софт к серийнику винчестера. Дело в том что винт могут заменить, а деньги за софт уплачены. Опять звонить разработчику поднимать панику? Есть более гуманные способы защиты. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2010, 16:17 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
Eugenkru10Идея интересная, но я бы не стал привязывать софт к серийнику винчестера. Дело в том что винт могут заменить, а деньги за софт уплачены. Опять звонить разработчику поднимать панику? Есть более гуманные способы защиты.Если разработчики сидят на стороне,- то все верно. Если разработчик(и) свой(свои) и прога заточена под себя, то есть смысл подвязаться именно к серверному винчестеру как один из способов защиты от "кротов". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2010, 13:43 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
igorbikEugenkru10Идея интересная, но я бы не стал привязывать софт к серийнику винчестера. Дело в том что винт могут заменить, а деньги за софт уплачены. Опять звонить разработчику поднимать панику? Есть более гуманные способы защиты.Если разработчики сидят на стороне,- то все верно. Если разработчик(и) свой(свои) и прога заточена под себя, то есть смысл подвязаться именно к серверному винчестеру как один из способов защиты от "кротов". Как понять фразу "разработчики сидят на стороне,- то все верно" 1. На какой стороне? За Дунаем чтоли? ))) 2. Что верно? ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2010, 14:01 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
Eugenkru10Как понять фразу "разработчики сидят на стороне,- то все верно" 1. На какой стороне? За Дунаем чтоли? ))) 2. Что верно? ))) Перефразируем. Если разработчики - сторонняя организация или программер,- то Ваше мнение полностью справедливо. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2010, 15:50 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
igorbik, Рзаработчик это всегда сторонняя организация или программер. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2010, 17:30 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
Eugenkru10igorbik, Разработчик это всегда сторонняя организация или программер. уточняю: Если разработчик- сторонняя организация или сторонний программер... (далее по тексту). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2010, 18:14 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
igorbik, Странные люди, в открытую обсуждают защиту своих программ. Это, в общем то, довольно интимный вопрос. Подсказка : 1) BIOS 2) WMI 3) Если позволяет приложение, то привязка к названию клиента. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2010, 21:31 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
Всем спасибо за помощь. Dima T твой вариант попробовал но к сожалению тож не сработал 000000 выдал серийник на моем компе доступ к винту легаси усб на том котором тестирую AHCI фишка именно в том что у меня работают все варианты а там нет. Вариант защиты с помощью серийника винта я и сам понимаю что никакой так чтобы был. Прога написана для своих юзеров просто раньше везде у себя так делал все работало а сейчас вот попал такой вариант что не работает. Можно конечно и просто тупо убрать проверку на серийник но это получится отступить а отступление не даст новых знаний и опыта. По мне лучше помучаться поискать варианты и в конце концов найти способ решения задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 07:26 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
еще варианты пробовал.... такой.... 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 показывает.. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 08:51 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
да забыл....примеры брал http://forum.foxclub.ru/read.php?29,157781,158140,quote=1 и отсюда http://prog-gate.pp.ru/fido7.ru.visual.foxpro/5414.html ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 08:56 |
|
серийный номер диска
|
|||
---|---|---|---|
#18+
audioalex1специальной сегейтовской утилитой SeaTools тоже номер диска 000000 показывает.. Скорее всего GetVolumeInformation() так всем возвращает. Попробуй еще чем-нибудь посмотреть, например в Far`e Ctrl+L возможно это диск так отформатирован что серийный номер по нулям. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2010, 10:03 |
|
|
start [/forum/topic.php?fid=41&msg=36695122&tid=1585170]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
43ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 363ms |
total: | 513ms |
0 / 0 |