Avatar billede juggalo Nybegynder
22. marts 2002 - 11:20 Der er 9 kommentarer og
1 løsning

Beskytte sit program

Jeg er ved at lave et program som skal sælges. Jeg vil derfor gerne vide hvad jeg kan gøre, for at "beskytte" mit program og min copyright.

Jeg har tænkt over flere modeller, bl.a.;
- indtastning af nøgleværdi (men hvor skal den gemmes så folk ikke kan se den? Kan måske på en eller anden måde skrives tilbage ind i .exe filen?!)

- generere en specifik .exe til hver kunde og så hardkode kundens oplysninger ind i programmet

Jeg ved godt, at det er (næten) umuligt at forhindre at folk kopierer programmet og/eller bytter nøgler - men man kan jo lige så godt gøre det så bøvlet som muligt ;)

Er der nogen som har nogle guldkorn til mig? :)

PFT
Avatar billede tekniskdesigner Nybegynder
22. marts 2002 - 11:33 #1
Hej.

Hej. Der findes jo et hav af muligheder for at beskytte sine programmer men hvad nytter dette når den første hacker f0or programmet i hånden ??? han fixer lige en crack fil også er programmet åbnet for alle. Og dette er nok bare en af de ting som man må leve med.

Men se det på den lyse side jo flere der får dit program jo mere populært bliver det også kan det jo være at der er flere som vil købe den næste version vis sådan en kommer frem. !.

Vh. Thomas Nielsen
Avatar billede juggalo Nybegynder
22. marts 2002 - 11:35 #2
det er jeg principielt enig med dig i, men det er jo ikke det mit spørgsmål går på....

"Der findes jo et hav af muligheder for at beskytte sine programmer " - jo tak, men hvad er disse muligheder?
Avatar billede tekniskdesigner Nybegynder
22. marts 2002 - 11:36 #3
Hej.

copyright, skrivebeskyttelse, password funktioner med tilhørende "tal kode" osv. er ikke så god til dette her da jeg kun laver programmer for sjov som alle må bruge !.

Vh. Thomas Nielsen
Avatar billede juggalo Nybegynder
22. marts 2002 - 11:40 #4
fint nok, men som jeg startede med at skrive, så skal det her sælges og så har jeg jo også en rent økonomisk interesse i at beskytte mit arbejde.
Avatar billede tekniskdesigner Nybegynder
22. marts 2002 - 11:44 #5
Hej.

Ja vist det forstår jeg da godt, mener bare personligt at sådan noget beskyttelse er meget svært og alt for tidskrævende forholds til hvad man for ud af det.

Lige lidt nysgerrighed, hvad er det for et program ???

Vh. Thomas Nielsen
Avatar billede juggalo Nybegynder
22. marts 2002 - 11:52 #6
Tidtagnings/deltageregistrerings/løbsafviklings -program
Avatar billede scb Praktikant
22. marts 2002 - 12:14 #7
Det skulle vel aldrig være til f.eks rallyesprint ?

Jeg beskytter nogle af mine vb programmer med en dongle der isættes printerporten, hver dongle har sin egen krypterede kode, kan programmet ikke finde donglen (og koden) starter det ikke.
Jeg importerer selv donglerne fra England, ca pris ved 1 stk 750,00 Excl moms.
-SCB
Avatar billede juggalo Nybegynder
22. marts 2002 - 12:33 #8
Glimrende forslag SCB - nu tænkte jeg godt nok mere på en softwareløsning... men tak alligevel
Avatar billede jens_nuuk Nybegynder
22. marts 2002 - 13:09 #9
Hvis ikke du kender SoftLocx fra Bitart så prøv at finde den på nettet, der er alle mulighed for beskyttelse. her er en link http://www.softlocx.com

mvh  Jens_Nuuk
Avatar billede sjh Nybegynder
22. marts 2002 - 18:23 #10
Du kunne lave det som hardwarenøgle.

Problem:
hvis brugeren udskifter hardwar skal brugeren have en ny kode.

GetSoundCart
GetProcessor
GetHarddisk (hvis brugeren formater disk eller setter en harddisk mere i computeren, ny kode)
GetDisplay
GetMemmory  (Funker ikke)

'------------------------------------------------ Form1 ------------------------------------------------
Option Explicit

Private Sub Form_Load()
Dim aKey As String
Dim cValu As Long
Dim i As Long

Text1.Text = "" 'Hardwarenøgle
Text2.Text = "" 'Bruger kode ud fra hardwarenøgle

Text1.Text = GetSoundCart + GetProcessor + GetHarddisk + GetDisplay '+ GetMemmory

aKey = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"

  For i = 1 To Len(Str(Text1.Text))
    cValu = Val(Mid(Text1.Text, i, 1)) '+ 1
    Text2.Text = Text2.Text & Mid(aKey, cValu + i, 1)
  Next i
End Sub
'------------------------------------------------ Form1 ------------------------------------------------



'------------------------------------------------ Module1 ------------------------------------------------

Option Explicit
'GetMemmory
Private Type MEMORYSTATUS
    dwLength As Long
    dwMemoryLoad As Long
    dwTotalPhys As Long
    dwAvailPhys As Long
    dwTotalPageFile As Long
    dwAvailPageFile As Long
    dwTotalVirtual As Long
    dwAvailVirtual As Long
End Type
Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
'GetMemmory

'GetProcessor
Private Type SYSTEM_INFO
    dwOemID As Long
    dwPageSize As Long
    lpMinimumApplicationAddress As Long
    lpMaximumApplicationAddress As Long
    dwActiveProcessorMask As Long
    dwNumberOrfProcessors As Long
    dwProcessorType As Long
    dwAllocationGranularity As Long
    dwReserved As Long
End Type
Private Declare Sub GetSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)
'GetProcessor

'GetDisplay
Private Type DISPLAY_DEVICE
    cb As Long
    DeviceName As String * 32
    DeviceString As String * 128
    StateFlags As Long
    DeviceID As String * 128
    DeviceKey  As String * 128
End Type

Private Declare Function ChangeDisplaySettingsEx Lib "user32" Alias "ChangeDisplaySettingsExA" (lpszDeviceName As Any, lpDevMode As Any, ByVal hWnd As Long, ByVal dwFlags As Long, lParam As Any) As Long
Private Declare Function EnumDisplayDevices Lib "user32" Alias "EnumDisplayDevicesA" (Unused As Any, ByVal iDevNum As Long, lpDisplayDevice As DISPLAY_DEVICE, ByVal dwFlags As Long) As Boolean
'GetDisplay

'GetHarddisk
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
'GetHarddisk

'GetSoundCart
Private Type MIDIOUTCAPS
    wMid As Integer
    wPid As Integer
    vDriverVersion As Long
    szPname As String * 32
    wTechnology As Integer
    wVoices As Integer
    wNotes As Integer
    wChannelMask As Integer
    dwSupport As Long
End Type

Private Type WAVEINCAPS
        wMid As Integer
        wPid As Integer
        vDriverVersion As Long
        szPname As String * 32
        dwFormats As Long
        wChannels As Integer
End Type

Private Type WAVEOUTCAPS
        wMid As Integer
        wPid As Integer
        vDriverVersion As Long
        szPname As String * 32
        dwFormats As Long
        wChannels As Integer
End Type

Private Type MIXERCAPS
  wMid As Integer
  wPid As Integer
  vDriverVersion As Long
  szPname As String * 32
  fdwSupport As Long
  cDestinations As Long
End Type

Private Declare Function midiOutGetDevCaps Lib "winmm.dll" Alias "midiOutGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As MIDIOUTCAPS, ByVal uSize As Long) As Long
Private Declare Function midiOutGetNumDevs Lib "winmm" () As Integer
Private Declare Function waveInGetDevCaps Lib "winmm.dll" Alias "waveInGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As WAVEINCAPS, ByVal uSize As Long) As Long
Private Declare Function waveInGetNumDevs Lib "winmm.dll" () As Long
Private Declare Function waveOutGetDevCaps Lib "winmm.dll" Alias "waveOutGetDevCapsA" (ByVal uDeviceID As Long, lpCaps As WAVEOUTCAPS, ByVal uSize As Long) As Long
Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
Private Declare Function mixerGetDevCaps Lib "winmm.dll" Alias "mixerGetDevCapsA" (ByVal uMxId As Long, pmxcaps As MIXERCAPS, ByVal cbmxcaps As Long) As Long
Private Declare Function mixerGetNumDevs Lib "winmm.dll" () As Long
'GetSoundCart

Function GetMemmory() As Long 'GetMemmory
Dim MemStat As MEMORYSTATUS
Dim Phys, File, Virtual As Long
GlobalMemoryStatus MemStat
  Phys = Val(MemStat.dwTotalPhys)
  File = Val(MemStat.dwTotalPageFile)
  Virtual = Val(MemStat.dwTotalVirtual)
GetMemmory = Val((Phys / 1024) + (File / 1024) + (Virtual / 1024))
End Function

Function GetProcessor() As Long 'GetProcessor
Dim SInfo As SYSTEM_INFO
Dim dwNumber, dwProcessor, Min, Max, dwActive, dwAllocation, dwOem, dwPage, dwReserved As Long
GetSystemInfo SInfo
  dwNumber = Val(SInfo.dwNumberOrfProcessors)
  dwProcessor = Val(SInfo.dwProcessorType)
  Min = Val(SInfo.lpMinimumApplicationAddress)
  Max = Val(SInfo.lpMaximumApplicationAddress)
  dwActive = Val(SInfo.dwActiveProcessorMask)
  dwAllocation = Val(SInfo.dwAllocationGranularity)
  dwOem = Val(SInfo.dwOemID)
  dwPage = Val(SInfo.dwPageSize)
  dwReserved = Val(SInfo.dwReserved)
GetProcessor = Val((dwNumber / 1024)) + Val((dwProcessor / 1024)) + Val((Min / 1024)) + Val((Max / 1024)) + Val((dwActive / 1024)) + Val((dwAllocation / 1024)) + Val((dwOem / 1024)) + Val((dwPage / 1024)) + Val((dwReserved / 1024))
End Function

Function GetHarddisk() As Long 'GetHarddisk
Dim Serial, cDrive, i, dTemp As Long
Dim nDrive As String
  For i = 65 To 90
    nDrive = Chr(i) & ":\"
    cDrive = GetDriveType(nDrive)
    If cDrive = 3 Then
      GetVolumeInformation nDrive, 0&, 0&, Serial, 0&, 0&, 0&, 0&
      dTemp = dTemp + Serial
    End If
  Next i
GetHarddisk = Val(dTemp / 1024)
End Function

Function GetDisplay() As Long 'GetDisplay
Dim DD As DISPLAY_DEVICE
Dim Display As String
Dim i, fDisplay As Long
DD.cb = Len(DD)
  If EnumDisplayDevices(ByVal 0&, 0, DD, ByVal 0&) Then
    Display = Left$(DD.DeviceString, InStr(1, DD.DeviceString, Chr$(0)) - 1)
      Else
    Display = "Display Information"
  End If
  For i = 1 To Len(Display)
    fDisplay = fDisplay + Asc(Mid(Display, i, 1))
  Next i
GetDisplay = Val(fDisplay)
End Function

Function GetSoundCart() As Long 'GetSoundCart
Dim numDevices, TempSound2, i As Long
Dim ocaps As WAVEOUTCAPS
Dim icaps As WAVEINCAPS
Dim mcaps As MIDIOUTCAPS
Dim xcaps As MIXERCAPS
Dim TempSound As String
  numDevices = waveOutGetNumDevs()
  For i = 0 To (numDevices - 1)
  waveOutGetDevCaps i, ocaps, Len(ocaps)
  TempSound = TempSound & ocaps.szPname
  Next
  numDevices = waveInGetNumDevs()
  For i = 0 To (numDevices - 1)
  waveInGetDevCaps i, icaps, Len(icaps)
  TempSound = TempSound & icaps.szPname
  Next
  numDevices = midiOutGetNumDevs()
  For i = 0 To (numDevices - 1)
  midiOutGetDevCaps i, mcaps, Len(mcaps)
  TempSound = TempSound & mcaps.szPname
  Next
  numDevices = mixerGetNumDevs()
  For i = 0 To (numDevices - 1)
  mixerGetDevCaps i, xcaps, Len(xcaps)
  TempSound = TempSound & xcaps.szPname
  Next
  For i = 1 To Len(TempSound)
  TempSound2 = TempSound2 + Asc(Mid(TempSound, i, 1))
  Next i
GetSoundCart = Val(TempSound2)
End Function
'------------------------------------------------ Module1 ------------------------------------------------
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester