[ 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 ] @
vec smo o ovome diskutovali:

http://www.elitesecurity.org/t...em-serijskog-broja-ili-slicno-
[ 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 ] @
Citat:


pa pogledaj malo bolje
[ 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:
Citat:
WD-WMAM9UP89804

... 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.