|
[ obradorriuss @ 11.08.2004. 00:32 ] @
| Zanima me, kako Vi programeri koji pravite svoje aplikacije u Access-u (bilo kojoj verziji) uspevate da zastitite svoje aplikacije ne od krajnjih korisnika (sto se radi pretvaranjem MDB u MDE) vec od ljudi koji zele da iskoriste Vasu aplikaciju da bi je prodali nekom i zaradili neki dinar a nisu nista radili? Npr. napravite program za magacin jednoj firmi, u tu firmu upadnem ja, snimim Vas program na CD, odnesem ga kuci, provalim ga i prodajem ga po ceni duplo manjoj nego Vasoj? |
[ istok @ 11.08.2004. 21:36 ] @
Ja sam trazio istu stvar... Naleteh neki dan na webu na neki freware za zastitu, nesto kao copy protector za access 97, a link za 2000 ne radi...
Javicu ti se cim saznam nesto vise.
Ti si me pitao da budem detaljniji oko exe-a. Ali na moju temu nije bilo odgovora. Ja sam temu postavio da bih izbacio sve nedoumice oko toga sta taj exe treba da radi... No sacekacemo malo, pa cemo da vidimo.
Ovo za zastitu i ja jedva cekam da vidim... Ovde na forumu ima veoma dobrih strucnjaka, koji su meni do sada bar nekoliko puta spasavali reputaciju, tako da ce i ovo verujem biti vrlo brzo razjasnjeno...
[ DarkMan @ 06.09.2004. 23:51 ] @
Ja sam jos uvek pocetnik u accessu i tek pocinjem da shvatam neke stvari, zato neka me neko ispravi ako gresim.
Ja ovako na to gledam. Prvo sve pravis u mdb fajli a na kraju je konvertujes u mde iz kojeg ti drugi ne mogu prostupiti tvojem kodu (design view je onemogucen) ali i dalje mogu da citaju podatke iz same baze.
Ako se stvarno ne moze prostupiti kodu onda bi jedini nacin za zastitu od kopiranja bila ubacivanje koda u samu bazu koji ce je vezati za serijski broj hard diska, sto i nije neki problem (source kodovi se mogu naci na netu pa cak i u ovde na u c++ forumu). Tako kada se baza veze za serijski broj hd-a drugi ljudi ga mogu kopirati ali nece moci da ga pokrenu osim naravno ako mogu da pristupe kodu i izbrisu zastitu.
Da li je tacno ovo sto sam rekao za MDE fajlove ? Ja kod mene nemogu da pristupim design modu kada konvertujem iz mdb u mde.
Inace, malo sam cunjao po netu za slicnim stvarima oko zastite i naleteo na sledeci tekst (nemam trenutno vremena da isprobam pa bih zamolio da ako neko proba da izlozi svoje utiske).
Citat:
You can still "lock" the db down so that the users cannot get into the db objects (forms, tables, modules, etc...).
Create a new module and paste this code:
Sub SetStartupProperties()
ChangeProperty "StartupForm", dbText, "YourFormHere"
ChangeProperty "StartupShowDBWindow", dbBoolean, False
ChangeProperty "StartupShowStatusBar", dbBoolean, False
ChangeProperty "AllowBuiltinToolbars", dbBoolean, False
ChangeProperty "AllowFullMenus", dbBoolean, False
ChangeProperty "AllowBreakIntoCode", dbBoolean, False
ChangeProperty "AllowSpecialKeys", dbBoolean, False
ChangeProperty "AllowBypassKey", dbBoolean, False
ChangeProperty "AppTitle", dbText, "Application Title Here vs1.2"
Application.RefreshTitleBar
End Sub
Public Function ChangeProperty(strPropName As String, varPropType As Variant, varPropValue As Variant) As Integer
Dim dbs As Database, prp As Property
Const conPropNotFoundError = 3270
Set dbs = CurrentDb
On Error GoTo Change_Err
dbs.Properties(strPropName) = varPropValue
ChangeProperty = True
Change_Bye:
Exit Function
Change_Err:
If ERR = conPropNotFoundError Then ' Property not found.
Set prp = dbs.CreateProperty(strPropName, _
varPropType, varPropValue)
dbs.Properties.Append prp
Resume Next
Else
' Unknown error.
ChangeProperty = False
Resume Change_Bye
End If
End Function
The key line of code here is this
ChangeProperty "AllowBypassKey", dbBoolean, False
This turns off the shift key. It's a good idea to create yourself a back door by changing the line to this:
ChangeProperty "AllowBypassKey", dbBoolean, True
You can put that on the Double Click event of a label. You should try this out on a COPY of your database first.
This code does not prevent anyone from creating a new database and then importing all the objects from your database.
[ obradorriuss @ 07.09.2004. 00:38 ] @
Tako je Darko. Kada konvertujes MDB u MDE tada ne bi trebalo da se pristupi tvom kodu. Ali ja sam recimo skinuo neke programcice sa neta koji ti omogucavaju da vratis MDE u MDB, znaci sve tabele, upite, forme i reporte ali ne uspe da konvertuje code napisan u VB, tako da se slobodno moze reci da je nemoguce. Mozes prakticno samo masku da izvuces. Da to za HDD si upravu, cak ga treba i povezati za kapacitet hard diska, znaci ukoliko se kapacitet hdd-a razlikuje u 1 bajt i serijski broj se razlikuje da izadje iz aplikacije ili js bolje da ugasi racunar, tj. resetuje komp. pa ko hoce da ga provali a pri tom da mu se kompo gasi jedno 100 puta nek izvoli. Ali veruj mi ne isplati se. Najbolje ti je da krenes iz pocetka da radis fajlove. Probacu to sto si napisao. Javicu ti vec........
Pozdrav
[ DarkMan @ 07.09.2004. 15:39 ] @
Evo visual basic koda kojim se mogu procitati neke informacije o hard disku (cita informacije sa prvog primarnog diska sto je pretpostavljam u 99.99% slucajeva disk sa operativnim sistemom)
Code:
Option Explicit
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As
Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal
dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, ByRef
lpInBuffer As Any, ByVal nInBufferSize As Long, ByRef lpOutBuffer As Any, ByVal nOutBufferSize As Long, ByRef
lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Const GENERIC_READ = &H80000000
Private Const GENERIC_WRITE = &H40000000
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Private Const OPEN_EXISTING = 3
Private Const INVALID_HANDLE_VALUE = -1&
Public Const DFP_GET_VERSION = &H74080
Public Const DFP_SEND_DRIVE_COMMAND = &H7C084
Public Const DFP_RECEIVE_DRIVE_DATA = &H7C088
Public Const IDE_ATAPI_IDENTIFY = &HA1
Public Const IDE_ATA_IDENTIFY = &HEC
Public Const IDENTIFY_BUFFER_SIZE = 512
Public Type GETVERSIONOUTPARAMS
bVersion As Byte ' Binary driver version.
bRevision As Byte ' Binary driver revision.
bReserved As Byte ' Not used.
bIDEDeviceMap As Byte ' Bit map of IDE devices.
fCapabilities As Long ' Bit mask of driver capabilities.
dwReserved1 As Long ' For future use.
dwReserved2 As Long ' For future use.
dwReserved3 As Long ' For future use.
dwReserved4 As Long ' For future use.
End Type
Public Type IDEREGS
bFeaturesReg As Byte ' Used for specifying SMART "commands".
bSectorCountReg As Byte ' IDE sector count register
bSectorNumberReg As Byte ' IDE sector number register
bCylLowReg As Byte ' IDE low order cylinder value
bCylHighReg As Byte ' IDE high order cylinder value
bDriveHeadReg As Byte ' IDE drive/head register
bCommandReg As Byte ' Actual IDE command.
bReserved As Byte ' reserved for future use. Must be zero.
End Type
Public Type SENDCMDINPARAMS
cBufferSize As Long ' Buffer size in bytes
irDriveRegs As IDEREGS ' Structure with drive register values.
bDriveNumber As Byte ' Physical drive number to send command to (0,1,2,3).
bReserved1 As Byte ' Reserved for future expansion.
bReserved2 As Byte ' Reserved for future expansion.
bReserved3 As Byte ' Reserved for future expansion.
dwReserved1 As Long ' For future use.
dwReserved2 As Long ' For future use.
dwReserved3 As Long ' For future use.
dwReserved4 As Long ' For future use.
bBuffer() As Byte ' Input buffer.
End Type
Public Type DRIVERSTATUS
bDriverError As Byte ' Error code from driver, or 0 if no error.
bIDEStatus As Byte ' Contents of IDE Error register, only valid when bDriverError is SMART_IDE_ERROR.
bReserved1 As Byte ' Reserved for future expansion.
bReserved2 As Byte ' Reserved for future expansion.
dwReserved1 As Long ' Reserved for future expansion.
dwReserved2 As Long ' Reserved for future expansion.
End Type
Public Type SENDCMDOUTPARAMS
cBufferSize As Long ' Size of bBuffer in bytes
inDriveStatus As DRIVERSTATUS ' Driver status structure.
bBuffer() As Byte ' Buffer of arbitrary length in which to store the data read from the drive.
End Type
Public Enum vbDiskDataType
vbDriveModelNumber = 0
vbDriveSerialNumber = 1
vbDriveControllerRevisionNumber = 2
vbControllerBufferSize = 3
vbDriveType = 4
End Enum
Function ConvertToString(DiskData() As Byte, firstIndex As Long, lastIndex As Long) As String
Dim index As Integer
Dim s As String
index = firstIndex
While index <= lastIndex
s = s + Chr(DiskData(index + 1)) + Chr(DiskData(index))
index = index + 2
Wend
ConvertToString = Trim(s)
End Function
Function GetDiskData(DataType As vbDiskDataType) As String
GetDiskData = ""
Dim hPhysicalDriveIOCTL As Long
hPhysicalDriveIOCTL = CreateFile("\\.\PhysicalDrive0", _
GENERIC_READ Or GENERIC_WRITE, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, _
OPEN_EXISTING, 0, 0)
If hPhysicalDriveIOCTL <> INVALID_HANDLE_VALUE Then
Dim VersionParams As GETVERSIONOUTPARAMS
Dim cbBytesReturned As Long
If DeviceIoControl(hPhysicalDriveIOCTL, DFP_GET_VERSION, _
Null, 0, VersionParams, Len(VersionParams), cbBytesReturned, 0) <> 0 Then
If VersionParams.bIDEDeviceMap > 0 Then
Dim cmd_in As SENDCMDINPARAMS
Dim cmd_out As SENDCMDOUTPARAMS
Dim buf(Len(cmd_out) + IDENTIFY_BUFFER_SIZE - 1) As Byte
Dim bIDCmd As Byte
If (VersionParams.bIDEDeviceMap And &H10) = &H10 Then
bIDCmd = IDE_ATAPI_IDENTIFY
Else
bIDCmd = IDE_ATA_IDENTIFY
End If
cmd_in.cBufferSize = IDENTIFY_BUFFER_SIZE
cmd_in.irDriveRegs.bFeaturesReg = 0
cmd_in.irDriveRegs.bSectorCountReg = 1
cmd_in.irDriveRegs.bSectorNumberReg = 1
cmd_in.irDriveRegs.bCylLowReg = 0
cmd_in.irDriveRegs.bCylHighReg = 0
cmd_in.irDriveRegs.bDriveHeadReg = &HA0 ' 0xA0 | ((bDriveNum & 1) << 4);
cmd_in.irDriveRegs.bCommandReg = bIDCmd
cmd_in.bDriveNumber = 0 ' bDriveNum
cmd_in.cBufferSize = IDENTIFY_BUFFER_SIZE
cbBytesReturned = 0
If DeviceIoControl(hPhysicalDriveIOCTL, DFP_RECEIVE_DRIVE_DATA, _
cmd_in, Len(cmd_in) - 1, buf(0), _
Len(cmd_out) + IDENTIFY_BUFFER_SIZE - 1, _
cbBytesReturned, 0) <> 0 Then
If DataType = vbDriveModelNumber Then GetDiskData = ConvertToString(buf, 70, 108)
If DataType = vbDriveSerialNumber Then GetDiskData = ConvertToString(buf, 36, 54)
If DataType = vbDriveControllerRevisionNumber Then GetDiskData = ConvertToString(buf, 62, 68)
If DataType = vbControllerBufferSize Then GetDiskData = Str((CLng(buf(58)) + CLng(buf(59)) * 256) * 512)
If DataType = vbDriveType Then
If (buf(16) And &H80) = &H80 Then
GetDiskData = "Removable"
ElseIf (buf(16) And &H40 = &H40) Then
GetDiskData = "Fixed"
Else
GetDiskData = "Unknown"
End If
End If
End If
End If
End If
CloseHandle hPhysicalDriveIOCTL
End If
End Function
Sub Main()
MsgBox "Drive Model Number_________________: " + GetDiskData(vbDriveModelNumber) + vbLf + _
"Drive Serial Number_______________: " + GetDiskData(vbDriveSerialNumber) + vbLf + _
"Drive Controller Revision Number__: " + GetDiskData(vbControllerBufferSize) + " bytes" + vbLf + _
"Drive Type________________________: " + GetDiskData(vbDriveType)
End Sub
E sad, problem moze biti u sledecem:
- za ovo treba Win2K/XP (ne moze u 9x)
- potrebna su administratorska prava (nisam proverio ali prema originalnom kodu iz c++ potrebna su)
Naravno kako ce se kod iskoristiti zavisi od programera.
Jedna od mogucnosti je: po instalaciji na klijenta procitati neko od ovih podataka, kriptovati ih i smestiti u bazu, zatim napisati funkciju koja ce proveriti validnost ovih podataka i u slucaju ne poklapanja izbaciti neku poruku o gresci.
[ bobby63 @ 21.08.2005. 10:25 ] @
Vadim ovu temu iz naftalina ali da ne bih duplirao tred.
Seriski broj HD-a dobijam ovako:
Dim fs, d
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName _
(fs.GetAbsolutePathName(drvpath)))
HDDBroj = d.SerialNumber
Kako da dobijem velicinu Hard Diska, nisam se nesto snasao u gornjem postu?
Pozdrav svima i unapred hvala
[ kloktor @ 21.08.2005. 21:10 ] @
Evo izvod iz help-a:
TotalSize Property
Description
Returns the total space, in bytes, of a drive or network share.
Syntax
object.TotalSize
The object is always a Drive object.
Remarks
The following code illustrates the use of the TotalSize property:
Code:
Sub ShowSpaceInfo(drvpath)
Dim fs, d, s
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
s = "Drive " & d.DriveLetter & ":"
s = s & vbCrLf
s = s & "Total Size: " & FormatNumber(d.TotalSize/1024, 0) & " Kbytes"
s = s & vbCrLf
s = s & "Available: " & FormatNumber(d.AvailableSpace/1024, 0) & " Kbytes"
MsgBox s
End Sub
[ adenis @ 22.08.2005. 07:58 ] @
[ DarkMan @ 24.08.2005. 13:06 ] @
Citat: bobby63:
Dim fs, d
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName _
(fs.GetAbsolutePathName(drvpath)))
HDDBroj = d.SerialNumber
ovo nije dobar nacin za koriscenje zastite. Ovaj kod vraca VOLUME SERIAL NUMBER tj. serijski broj particije a ne HD. Ovaj broj se menja pri svakom formatiranju particije a moguce je izmeniti i odgovarajucim programom. Pravi serisjki broj HD-a je dosta duzi i, bar koliko ja znam, nije moguce izmeniti (ako je moguce sigurno je mnogo teze to izvesti nego promeniti volume serial number).
[ bobby63 @ 25.08.2005. 09:06 ] @
A kako se dobija taj broj?
[ DarkMan @ 27.08.2005. 22:14 ] @
Citat: bobby63: A kako se dobija taj broj?
U zadnjoj poruci, pre nego sto si ovu temu izvadio iz naftalina, sam ostavio poduzi kod za dobijanje tog broja. Iskopiraj dati kod u neki modul i koristi GetDiskData(vbDriveSerialNumber) za citanje serijskog broja HD-a.
[ pravi trenutak @ 28.08.2005. 16:27 ] @
'Ajde MOOOLIM TE DarkMan -e UPLOADUJ jedan, primer da to konkretno radi...
Ako moze FORMA na kojoj ce da ispise taj serijski broj u jednom polju, i broj pomnozen sa 2 u drugom... ako ti nije preterano tesko/ako imas vremena
Pokusao sam, ali kada iskopiram sav onaj kod koji si ostavio, uvodni deo bude crven (dakle kontam da je greska... u kodu ili kod mene nesto u ACCESS-u nije podeseno...)
Hajde molim te !!!
Bio sam na gomili foruma i tema...a nisam jedini... svi nesto pametuju/predlazu niko da konkretno pomogne i pokaze na primeru...
" evo ovaj primer radi ! "
Hvala ti unapred, u moje, i u ime svih onih koji nisu neki "gurui" ACCESS-a, a zele da uce !!!!
[ adenis @ 28.08.2005. 22:51 ] @
[ DarkMan @ 31.08.2005. 17:52 ] @
Citat: pravi trenutak: 'Ajde MOOOLIM TE DarkMan -e UPLOADUJ jedan
Primer moje zastite postoji u temi http://www.elitesecurity.org/tema/76325/0#484387
Okacicu ga ovde ponovo sa razlikom sto sada na vrhu forme ispisuje serijski broj HDD-a.
Na temi http://www.elitesecurity.org/t...em-serijskog-broja-ili-slicno- koju adenis spominje, se dosta diskutuje o zastiti i ima primera ali ih nisam gledao. Kako koji kod radi je veliko pitanje, kao i da li radi na svim racunarima. Kao sto sam i rekao ranije ne znam da li ce ovo raditi na svim racunarima i zato sam naglasio da je potrebno testirati ali ne vidim da se iko oglasio povodom toga.
[ darkog @ 22.03.2006. 15:33 ] @
On Open glavnog obrasca:
Private Sub Form_Open(Cancel As Integer)
Dim fs, d, s, t
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
Select Case d.DriveType
Case 0: t = "Unknown"
Case 1: t = "Removable"
Case 2: t = "Fixed"
Case 3: t = "Network"
Case 4: t = "CD-ROM"
Case 5: t = "RAM Disk"
End Select
s = "Drive " & d.DriveLetter & ": - " & t
s = s & vbCrLf & "SN: " & d.SerialNumber
If d.SerialNumber <> HDDBroj Then
msg
DoCmd.Close
End If
End Sub
********************************************************************************************
On Clik dugmeta na glavnom obrascu koji iscitava ser.br. HDD-a:
Private Sub Command23_Click()
Dim fs, d, s, t
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
Select Case d.DriveType
Case 0: t = "Unknown"
Case 1: t = "Removable"
Case 2: t = "Fixed"
Case 3: t = "Network"
Case 4: t = "CD-ROM"
Case 5: t = "RAM Disk"
End Select
s = "Drive " & d.DriveLetter & ": - " & t
s = s & vbCrLf & "SN: " & d.SerialNumber
MsgBox s
End Sub
Ovo mozda nije neka opaka zastita ali sljaka 100%
[ Trtko @ 23.03.2006. 09:59 ] @
Najbolja zastita je ime firme na listama ili na ekranu ispis firme.
Znaci napravio sam program za Videoteku "Tropicana" i na svim formama se ispisuje u cosku ime firme
I sad ako mi mazne program , *.mde ,a ne moze zaci u VBA kod ,
taj program ne moze prodat Videoteci "OSKAR" zato jer se ispisuje logo firme i na racunu i na ekranu
[ sbing @ 23.03.2006. 10:24 ] @
Citat: Trtko: Najbolja zastita je ime firme na listama ili na ekranu ispis firme.
Znaci napravio sam program za Videoteku "Tropicana" i na svim formama se ispisuje u cosku ime firme
I sad ako mi mazne program , *.mde ,a ne moze zaci u VBA kod ,
taj program ne moze prodat Videoteci "OSKAR" zato jer se ispisuje logo firme i na racunu i na ekranu
Ovo je definitivno najjača i najjednostavnija zaštita. Svaka čast na ideji! Nema nikakvih kemijanja sa serijskim brojem diska...
[ Vladimir Djuric @ 20.09.2006. 20:17 ] @
Citat: darkog: On Open glavnog obrasca:
If d.SerialNumber <> HDDBroj Then
Nisi definisao "HDDBroj", tako da meni ne sljaka...
Unapred hvala...
[ ilekicika @ 12.10.2010. 12:10 ] @
Pozdrav svima. Mene interesuje da li neko ima programski kod koji bi slovne simbole, odnosno stringovie koji su sastavni deo serijskog broja HD koji se dobija programskim kodom koji je postavio Darkog prevede u cifre i da od seriskog broja HD koji je kod mene na primer "WD-WMAM9UP89804" dobijem jedinsveni Number gde bi slovne simbole zamenio ciframa na kome mogu primeniti matematičke operacije kao što su korenovanje, deljenje ili množenje koa što se može primeniti na serijski broj particije koji je dat u istoj temi.
[ X Files @ 12.10.2010. 13:44 ] @
Ovo nije direktan odgovor na tvoje pitanje ali ti moze dati deju kako da resis taj problem.
Naime, zapis:
... se sastoji od:
* prefiksa proizvodjaca (WD-W) i
* alfanumerika koji cini jednistveni zapis (MAM9UP89804)
Tvoj zadatak bi bio da izolujes oba dela i na "univerzalan" nacin pretvoris u broj, koji bi obrbutim postupkom bio u mogucnosti da se vrati u pocetno stanje.
Problem je što je nekada lako utvrditi šta je proizvođač a šta broj:
Maxtor 86480D6
WDC AC2635F
FUJITSU MHK2120AT
... a nekada nije, kao u tvom slučaju (WD-W / MAM9UP89804). Zato kod koji se bavi pretvaranjem broja hard diska mora da ima i hardkodovane elemente.
Da ne pominjemo da je nemoguce unapred znati ko su sve (ili ce biti) proizvodjaci HD-a.
Za pocetak pogledaj kako izgledaju neki od hardverskih brojeva hard diskova:
http://www.winsim.com/diskid32/diskid32.html
... jer ti moze stvoriti sliku o eventualnim problemima.
Ako se ipak opredelis da i slova tretiraš kao broj diska, onda ostaješ bez potencijalne informacije o tome ko je proizvodjac.
Primer CPP koda mozes pogledati ovde:
http://www.winsim.com/diskid32/diskid32.cpp
... a ja cu izdvojiti karakteristicne detalje. Tebe zanima ovaj deo (par redova vise je petlja): case '0': id += 0; break;
Ukratko:
* potrebna ti je petlja koja ce ici od pocetka do kraja stringa
* izbeci slova koja se ticu proizvodjaca
* U svakom prolazu kroz petlju množiti trenutnu sumu sa odredjenom konstantom (oni su uzeli 10, ali ja mislim da treba da bude onoliko koliko ima mogucih slova i brojeva, to bi se zvala baza brojnog sistema)
* Svako pronadjeno slovo treba da ima svoj jedinstven broj koji se sabira sa ostatkom sume
* Konacno, sabrati pridruzenu konstantu za proizvodjaca sa sumom
[ ilekicika @ 15.10.2010. 00:30 ] @
Pogledao sam sve opcije o serijskim brojevima HD kao i drugim karakteristikama koje ste mi dali. Pomogli ste mi da donesem odluku u kom pravcu da rešim zadatak. Odlucio sam da kompletan serijski broj sa slovinim oznakama pretvorim u number, jer ono što je meni bitno jeste da ću uz pomoć tog numeričkog izraza moći da postavim drugi broj koji će biti regisracioni, a ovaj prvi retko može biti isti na dva kompa. U suštini završava posao. Lutajući po temama uspeo sam da pronađem način kako da serijski broj u kome se nalaze i slovne oznake postavim u numerički izraz evo primera. Ako neko ima bolje rešenje dobro došlo je.
Public Function HDBroj(ByVal inTekst As String) As String
Dim varInput_Value As Variant
Dim varResult As Variant
HDBroj = ""
If inTekst = "" Then Exit Function
ObradiSerBroj inTekst
If Not IsNumeric(inTekst) Then Exit Function
varInput_Value = CDec(inTekst)
varResult = CDec(varInput_Value)
varResult = Round(varResult, 2)
varResult = Round(varResult)
HDBroj = CStr(varResult)
If Len(HDBroj) = 1 Then
HDBroj = "0" & HDBroj
End If
End Function
Function ObradiSerBroj(ByRef inTekst As String)
Dim Slova
Dim Vrednosti
Dim intBrojac As Integer
Dim intBrojac2 As Integer
Dim strTMP As String
inTekst = UCase(inTekst)
strTMP = ""
Slova = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", _
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", _
"U", "V", "W", "X", "Y", "Z")
Vrednosti = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19", _
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29", _
"30", "31", "32", "33", "34", "35")
For intBrojac = 1 To Len(inTekst)
For intBrojac2 = 0 To UBound(Slova)
If Mid(inTekst, intBrojac, 1) = Slova(intBrojac2) Then
strTMP = strTMP & Vrednosti(intBrojac2)
End If
Next
Next
inTekst = strTMP
End Function
[ banem @ 15.10.2010. 00:51 ] @
EDIT: Izvinjavam se, sad vidim da je neko već postavio ovo
----
Hm, ima i kraće. :)
Function ShowDriveSN(drvpath)
Dim fs, d, s, t
Set fs = CreateObject("Scripting.FileSystemObject")
Set d = fs.GetDrive(fs.GetDriveName(fs.GetAbsolutePathName(drvpath)))
ShowDriveSN = Abs(d.SerialNumber)
End Function
[ Zoran.Eremija @ 15.10.2010. 09:17 ] @
Odavno sam odustao od teme zastite. Na tome su pali mnogo veci, npr. svojevremeno jedna od najvecih racunarskih firmi DEC (Digital Equipment Corporation http://en.wikipedia.org/wiki/Digital_Equipment_Corporation) je pala na temu zastite svojih softvera. Microsoft je poucen njihovim iskustvom promenio politiku zastite intelektualnog dela. Od tada sve sto sam uradio davao sam u 150% otvorenom obliku i veoma lepo se osecam.
Znaci od zlonamernih je tesko se stititi, tako sam pre nekoliko godina u nameri identifikacije racunara na kom je instalisan neka front end aplikacija zeleo, da vec pomenute metode u ovoj temi, iskoristim Serijski broj diska, doziveo totalni "SOK" i to iskustvo izneo u ovoj temi http://www.elitesecurity.org/t391848-0#2525153, verovali ili ne...:-) :-(
[ Getsbi @ 15.10.2010. 10:26 ] @
Slažem se sa Zoranom da za dobrog majstora nema dovoljno moćne brave. Odnos između realne cene aplikacije na tržištu i utrošenog vremena na implementiranju sigurnosnog sistema je prava mera. Nije baš dobro ni držati vrata kuće otvorena kad domaćin nije tu. To je otvoreni poziv za svakojake goste. Ako se malo potrudite, prosečni provalnik će odustati. Oni jako dobri, koji to rade iz koristi (ne iz egocentričnih pobuda kao što su izazov i avanturizam), vagaju da li im se napor isplati. Glavna maksima kod zaštite je Učiniti stepen naprezanja napadača većim od koristi koju on može da ostvari.
Što se Microsofta tiče, njihova je politika da određeni procenat prodaju, po cenu da i više od pola bude piratizovano, samo da ostanu lideri na tržištu. Mislim da će se, vrlo ubrzo, sav softver uključujući i OS koristiti preko neta, a intelektualna svojina će biti namirivana iz prodaje pristupa putem internet provajdera.
[ banem @ 15.10.2010. 11:22 ] @
Da, tačno, ali se aplikacija ne štiti od znalca, već od duduka tutumraka koji kad dobije pristup dizajnu svakakva čuda zna da napravi. Tu kombinacija mde (accde) + šifra na vba + autostart + custom interface + jedna mala custom zaštita jako pomaže. Ako to sve zaobiđe, onda i zaslužuje da priđe dizajnu. :)
Inače, nisam drveni advokat, ali to što pričaš nije politika Microsofta.
[ Zidar @ 15.10.2010. 14:14 ] @
Citat: Od tada sve sto sam uradio davao sam u 150% otvorenom obliku i veoma lepo se osecam. Potpisujem 100%.
Ovde nije bilo reci toliko o zastiti dizajna od destrukcije, nego o zastiti aplikacije od neovlascenog kopiranja. A zasto bih stitio aplikaciju od neovlascenog kopiranja? Da je neko ne ukrade i proda neovlasceno? Kome da proda? Kako da instalira i podesi sve kako treba?
Mene moze da zanima kako radi kod koji je napisao Getsbi ili Zoran (ili Banem, Trtko, Zonic, Small, Nikola iz Kragujevaca, Savke, BiloKoje, Vujkev, Catc22, izvinjavam se ako sam zabotravio nekoga, spisak bi bio predugacak), ali svakako necu uzeti celu aplikaciju i prodati je nekome. Svi majstori vec inace dele besplatno na forumima sta god hocete, nema sta da se ukrade, verujte mi. Zasto necu uzeti celu aplikaciju? Pa zato sto sam navikao da neke stvari radim na drugaciji nacin i jednostavno mi se cela postavka ne svidja, iako je sasvim dobra i sasvim dobro radi, cak i bolje nego nesto sto sam sam uradio. Tako rezonuje majstor - znaci majstor od masjtora nece ukrasti remek delo. Majstor ukrade znanje ili ideju, koje ionako dobijem na forumu, ovom ili nekom drugo, i ne kosta nista i ljudi sus recni da pomognu.
A neko ko nije majstor, ma moze da krade i gleda koliko hoce, moze i da proda i instalira sistem ako ume, ali nece umeti da ga pokrene.
Prema tome, vreme provedeno na ucenju kako da se zastiti remek delo od neovlacenog kopiranja je uzalud utroseno. No, ako neko ima vremena napretek, neka brate radi u tom smeru koliko hoce. Neko to radi iz ciste zabave ili da malo provezba mozak. I planinari se panju na planine bez nekog posebnog razloga i uzivaju u tome.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|