Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zastita access baze?!

[es] :: Access :: Zastita access baze?!

[ Pregleda: 6638 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DJ_IGGY

Član broj: 74850
Poruke: 121
80.93.242.*

Sajt: www.hitzona.com


Profil

icon Zastita access baze?!09.04.2008. u 00:23 - pre 145 meseci
Pre svega pozdrav svima! Potrebna mi je pomoc oko zastite access baze. Trazio sam po ES, ali nisam naisao na ono sto mi treba!
Uradio sam neku bazu podatka za lokalne izbore koja je potrebna nama za televiziju, ali ce se nalaziti u Opstini, i ne bih zeleo da je neko kopira jer sam mnogo truda i vremena ulozio u to. Potrebna mi je neka zastita na foru da ja uzmem broj hard diska iz Opstine i da unesem to u svoju bazu ili kako vec, i da baza ne moze raditi na drugim racunarima osim na tom od kojeg sam uzeo broj od hard diska.
Iskreno se nadam da cete mi "dati" neko resenje!
Hvala unapred svima koji mi budu pomogli!
Drugarski pozdrav!!!
 
Odgovor na temu

Catch 22

Član broj: 148083
Poruke: 6176
*.SMIN.panline.net.



+21 Profil

icon Re: Zastita access baze?!09.04.2008. u 03:29 - pre 145 meseci
Napraviš proceduru koja će prilikom svakog startovanja baze proveravati neki podatak (npr. taj ser. br. diska) i porediti ga sa upisanim u bazi. U slučaju da se provera rezultata ne poklapa onda procedura trajno ošteti bazu npr. brisanjem svih tabela.
Obično se baza pravi iz dva dela:
1. Tabele sa podacima i definisanim relacijama se čuvaju u jednom mdb fajlu, koji je zaključan šifrom. U tom mdb fajlu postoji modul sa kodom koji sprečava "shift obilaznicu" i koji prilikom pokušaja otvaranja istog ispisuje poruku upozorenja i zatvara fajl.
2. Forme, izveštaji, upiti, makroi i moduli (glavni kod aplikacije -zaključan šifrom) se čuvaju u mde fajlu u kom postoje samo linkovi ka tabelama iz gornjeg mdb fajla. Prilikom linkovanja tabela unosi se šifra mdb fajla (samo jednom) i ona ostaje zapamćena. Ovde takođe postoji kod za sprečavanje "shift obilaznice"...

Trikovi za zaštitu su razni... jedan od standardnih je da se negde na disku snimi neki fake fajl... napraviš neki bezveze fajl i daš mu ime kao npr. mdbctrl.dll, taj fajl snimiš u Windows/System32 folder... E sad, kod svakog pokretanja aplikacije (mde) procedura proverava da li postoji taj tvoj fajl na zadatoj putanji, pa ako ga nema onda poziva proceduru koja obriše onaj mdb fajl u kome su svi podaci, čime je onda cela baza onesposobljena...
Prednosti ove metode su što nije moguće importovanje tabela i relacija u novu praznu bazu iz tvojih, jer su zaštićene šifrom i kodom koji sprečava "shift obilaznicu"... još ako u mde fajlu sakriješ sve makroe, izveštaje, upite i module (a module zaključaš šifrom)... onda si prilično siguran, jer ni odatle ništa ne može da se ukrade importovanjem...

Imaj na umu da se za "svaku bravu nađe ključ", ali bar napravi stvari tako da ne može baš svaki bravar da je otključa.

PS
Vodi računa da uvek imaš sveže kopije svega što radiš, da ti se ne desi da samog sebe zaključaš tokom testiranja i "bravarisanja"


Drugi način bi bio da je mde fajl na hard disku, a mdb fajl na USB sticku - pa ga svaki put staviš u džep i poneseš sa sobom... (USB stick nije baš pouzdan medijum na duže staze!)

PPS
Primeri zaštite bazirani na čitanju serijskog broja hard diska nisu dobri iz prostog razloga što postoje tweak programčići kojima se taj serijski broj veoma lako pročita i po želji promeni...

[Ovu poruku je menjao Catch 22 dana 10.04.2008. u 04:56 GMT+1]
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Zastita access baze?!14.04.2008. u 22:01 - pre 145 meseci
Pogledaj na: http://www.icentar.com/showthread.php?t=6234

takodje pogledaj i moj primer zastite aplikacije od kopiranja na:
http://www.elitesecurity.org/t285974-0#1714647

kao i moj primer dobijanja fabrickog serijskog broja hard diska na: http://www.elitesecurity.org/t...ji-cita-seriski-broj-harddiska
rgdrajko
 
Odgovor na temu

Catch 22

Član broj: 148083
Poruke: 6176
*.SMIN.panline.net.



+21 Profil

icon Re: Zastita access baze?!15.04.2008. u 04:54 - pre 145 meseci
Da ponovimo postoje programi kojima se lako iščita / promeni ser. br. diska



Prikačeni fajlovi
 
Odgovor na temu

Boban122
Podgorica

Član broj: 40495
Poruke: 28
85.94.121.*



Profil

icon Re: Zastita access baze?!15.04.2008. u 15:24 - pre 145 meseci
Pozdrav

Mijenjanjem broja HD nece niko nista postici ako uradis sledece:

Napravis formulu kojom ces ocitani broj HD podjeliti , pomnoziti, kvadrirati , dodati 3.33356544 , sta ti vec padne na pamet. Dobijeni broj je kljuc.

Dakle kad se prvi put pokrene tvoja apl. na nekom racunaru ona ocitava broj HD preracuna ga i ako se dobijeni br ne slaze sa onim u bazi , onda apl. zove 92 , tj izbacuje dialog za upis novog broja, a posto taj zlocesti vuk ne zna tvoju formulu tj.vidi samo broj tvog telefona na dialogu moze samo da place. I samo nek mijenja broj HD dok ne pogodi pravi broj

 
Odgovor na temu

Catch 22

Član broj: 148083
Poruke: 6176
*.SMIN.panline.net.



+21 Profil

icon Re: Zastita access baze?!15.04.2008. u 20:17 - pre 145 meseci
Ovaj... pa poenta programa je valda da prvo očitaš ser. br. jednog hard diska, pa onda drugom hard disku dodeliš isti takav ser. broj (?!?)

Što se cele priče iz naslova teme tiče, preporuka je kombinovanje raznih vrsta zaštite... jer ako se za "svaku bravu nađe ključ", onda bar nije problem postaviti više različitih brava pa nek se bravar više preznojava...

 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 516
*.dynamic.sbb.rs.



+4 Profil

icon Re: Zastita access baze?!19.04.2008. u 09:34 - pre 145 meseci
Tvrdim da je nemoguće izmeniti FIZIČKI broj diska, osim ako ne promeniš nalepnicu na hard disku (još jedna moja neuspela šala, ha ha). Taj broj se može pročitati uz kod koji se može uz malo kopanja naći na internetu.
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Boban122
Podgorica

Član broj: 40495
Poruke: 28
77.222.16.*



Profil

icon Re: Zastita access baze?!22.04.2008. u 14:03 - pre 145 meseci
Ne znam koji serijski broj skida i mijenja pomenuti programcic, jer broj koji ja dobijam ovom procedurom nema veze sa njim.

Dim fs, D
Set fs = CreateObject("Scripting.FileSystemObject")
Set D = fs.GetDrive(fs.GetDriveName _
(fs.GetAbsolutePathName(drvPath)))
MsgBox Abs(D.SERIALNUMBER)

Provjerite pa javite moze li se i on promjeniti.

Pozdrav
 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 63



+3 Profil

icon Re: Zastita access baze?!08.05.2013. u 18:34 - pre 84 meseci
Vise se i ne sjecam odakle sam skinuo ovaj gotov kod za zastitu baze ali vjerno me sluzio do danas.

Naime, danas sam svoj "uradak" baze postavio na server (mislim na back end) i pokusao sa implementacijom front end tzv.baze na ostalim racunarima.

Prvi problem na koji sam naisao, bio je nemogucnost ocitavanja serijskog broja diska pomocu ovog koda.

ovaj modul se zove modCopyProtection i vjerujem da je mnogima dobro poznat

Code:
Option Explicit
Option Compare Database

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

Function IsRegistered() As Boolean
    IsRegistered = (GetPropertyValue("registration", "") = GetDiskData(vbDriveSerialNumber))
End Function

Sub RegisterProgram()
    SetPropertyValue "registration", dbText, GetDiskData(vbDriveSerialNumber)
End Sub

Sub UnRegisterProgram()
    RemoveProperty "registration"
End Sub


koji je takodje na neki nacin vezan sa ovim kodom (modul se zove modMDBProperties)

Code:
Option Compare Database
Option Explicit

Function PropertyExists(PropertyName As String) As Boolean
    On Error GoTo PropertyExists_Error
    PropertyExists = False
    If CurrentDb.Properties(PropertyName).Name <> PropertyName Then GoTo PropertyExists_Error
    PropertyExists = True
PropertyExists_Error:
End Function

Function GetPropertyValue(PropertyName As String, Default As Variant) As Variant
    On Error GoTo GetPropertyValue_Error
    GetPropertyValue = Default
    If PropertyExists(PropertyName) Then GetPropertyValue = CurrentDb.Properties(PropertyName).Value
GetPropertyValue_Error:
End Function

Function SetPropertyValue(PropertyName As String, ValueType As Integer, Value As Variant) As Boolean
    'On Error GoTo SetPropertyValue_Error
    SetPropertyValue = False
    If PropertyExists(PropertyName) Then
        CurrentDb.Properties(PropertyName).Value = Value
        SetPropertyValue = True
    Else
        Dim NewProperty As Property
        Set NewProperty = CurrentDb.CreateProperty(PropertyName, ValueType, Value)
        CurrentDb.Properties.Append NewProperty
        SetPropertyValue = True
    End If
SetPropertyValue_Error:
End Function

Function RemoveProperty(PropertyName As String) As Boolean
    On Error GoTo RemoveProperty_Error
    RemoveProperty = False
    If PropertyExists(PropertyName) Then CurrentDb.Properties.Delete PropertyName
    RemoveProperty = True
RemoveProperty_Error:
End Function



a sve ovo je "zacinjeno" sljedecim kodom na formi registracija

Option Compare Database

Private Sub ButtonProvjeraSifra_Click()
If EditSifra.Value = "ovdje je neka moja sifra" Then
Call RegisterProgram
DoCmd.Close
DoCmd.OpenForm "frmStartUp"
Else
MsgBox "Žao mi je ali Vaš aktivacijski kôd nije ispravan!", vbCritical, "Registracija nije uspjela!"
End If

End Sub

Ovo sve funkcionise super na racunarima sa administratorskim pravima, medjutim kada se ovo pokusa pokrenuti na accauntima koji nemaju ta prava onda u polju (gdje se inace pojavi broj diska) nema nista. i nakon unosa one moje sifre za registraciju opet se nista ne desava.
Pokusao sam i sa logovanjemi na administratorski acc. tamo odradi sve OK ali kad se ponovo vratim na korisnicki opet nista.
Sljedeci pokusaj je bio "rucno" pokretanje registracije u VB ali opet nista jer zaglavi u pola procedure.

Ako moze neko da mi "protumaci" ove moje nocne more i pokusa pomoci shvatiti gdje se ustvari smjestaju ti podaci o registraciji kako bih je mogao zaobici, bio bih veoma zahvalan jer nisam programer pa ruku na srce i ne razumijem dosta ovog koda.

Iskreno ne znam kakve ovo ima veze sa HDD jer je ista sifra bez obzira koji broj ucitao ali napominjem da je to sve radilo i ta
Citat:
If EditSifra.Value = "ovdje je neka moja sifra" Then
je nekim dijelom zasticena sifrom na VB projektu.

Hvala na svakoj pomoci
 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 63



+3 Profil

icon Re: Zastita access baze?!11.05.2013. u 09:06 - pre 83 meseci
Poredio sam promjene u registry-ju prije i nakon aktivacije ali nisam nasao nista vrijedno spomena.

Zanima me da li je neko radio zastitu pomocu dll-a i kako bi glasila procedura provjere da li je taj dll na svom mjestu. ako nije da se ne moze pokrenuti forma.

Naravno, napravio bih instalaciju koji bi kopirao taj neki xx fajl (hidden) na neko mjesto.
tako da ako neko i kopira FE i BE formu, postaje neupotrebljiva na njegovom racunaru.

Samo da napomenem, ne radi se ni o kakvoj komercijalnoj upotrebi ovog "programa" to je moj volonterski rad za internu upotrebu na poslu kako bi olaksao rad sebi i kolegama.


 
Odgovor na temu

srdrazic

Član broj: 187994
Poruke: 508



+13 Profil

icon Re: Zastita access baze?!11.05.2013. u 17:08 - pre 83 meseci
Možda ti ovo pomogne.
Code:

Private Sub Command0_Click()
If Len(Dir("f:\readme.txt")) = 0 Then

DoCmd.Quit
Else
Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Zbirna tabela"
DoCmd.OpenForm stDocName, , , stLinkCriteria

End If
End Sub

Ovo sam samo probao da se izvršava na command dugme .
Ovo može da radi kada prilikom otvaranja access baze na startup formu na akciju on load ili on open postaviš ovaj code.
On će proveriti ima li ili nema fajla na toj putanji.
Naravno probaj taj fajl sakriti a u bazi zaštiti svoje code-ove ili šifrom ili napravi *.mde fajl

stDocName = "Zbirna tabela" neka bude tvoja forma za unos podataka ili login forma

Dobra fora za zaštitu..
Teško je biti direktor a još teže ne biti!?
 
Odgovor na temu

Miki2013
Sarajevo

Član broj: 313952
Poruke: 63



+3 Profil

icon Re: Zastita access baze?!11.05.2013. u 18:52 - pre 83 meseci
Code:
Private Sub Command0_Click()
If Len(Dir("f:\readme.txt")) = 0 Then

DoCmd.Quit
Else
Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Zbirna tabela"
DoCmd.OpenForm stDocName, , , stLinkCriteria

End If
End Sub



Bravo majstore!

Radi bas onako kako sam i zamislio, a ovaj kod sam ubacio na on_load forme.

U C++ sam napravio jedan dll fajl u kojem nema nista drugo osim mog "potpisa" :-}

E sad posto na serveru imam poseban folder za backup tabela (kojem samo ja imam pristup) zamisao je da ga pozivam sa te putanje,
medjutim javlja se jedan "problemcic" , mada ni to ne mora biti problem jer mogu jednostavno mapirati "zajednicki" folder u kojem su tabele
sa istom slovnom oznakom na svim ostalim racunarima recimo sa X:\i to bi po mom misljenju trebalo funkcionisati. Ako ipak ne bude, onda jednostavno
kopirati taj fajl u sistem32 medju more drugih dll-ova i to bi trebalo biti rijeseno jer sam iskljucio i shift kao alternativu.

Hvala ti mnogo drugar!
 
Odgovor na temu

srdrazic

Član broj: 187994
Poruke: 508



+13 Profil

icon Re: Zastita access baze?!11.05.2013. u 20:47 - pre 83 meseci
Služimo narodu ;-)
Teško je biti direktor a još teže ne biti!?
 
Odgovor na temu

[es] :: Access :: Zastita access baze?!

[ Pregleda: 6638 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.