Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Come proteggere i nostri software?

    Salve a tutti!
    Dovrei vendere un programmino che ho fatto...
    Quando l'utente paga il programma vorrei dargli un codice (come alla fine fatto tutti i programmi shareware), però se alla fine uno compra il prog... e gli altri si passano il codice???
    Quale sarebbe il miglior sistema per proteggerlo?

  2. #2
    Il migliore in assoluto è basarsi su qualcosa di hardware, per riconoscere il pc su cui è installato.

    Il metodo più semplice, se il pc è dotato di una scheda di rete, è quello di leggere (con apposite chiamate alle API Win32) il codice MAC della scheda di rete: ogni scheda di rete presente nel mondo ha un diverso codice MAC, e se all'interno del codice dell'applicazione mettete un controllo per un dato MAC address, potete fare in modo che il programma funzioni SOLO se c'è quella data scheda di rete.

    Questo è MOLTO sicuro, in pratica a meno che il cliente non sia un provetto programmatore a sua volta e si scriva un crack, è praticamente impossibile che possa riuscire nell'intento, ma ha anche lo svantaggio che è strettamente legato ad un dato hardware, e che quindi dovrai ricompilare e riinviare il programmino al cliente se cambia PC o anche solo scheda di rete.

    Altrimenti, potresti procedere così:
    Durante l'installazione (o al primo avvio) generi un numero casuale molto grande e lo scrivi nel registro, poi chiedi all'utente di scrivere un codice e gli mostri il numeraccio che hai generato.
    Lui ti telefona, ti legge il numeraccio, e tu che hai sottomano un programmino con cui trasformare il numeraccio in codice di sblocco, gli dai il suo codice di sblocco, che lui inserisce e sblocca il programma. Il tutto funziona perchè nel tuo programma che gli hai dato c'è lo stesso algoritmo con cui hai generato il codice di sblocco, e ad ogni avvio il programma prenderà il numeraccio e, con quell'algoritmo, otterrà il codice di sblocco e lo confronterà con quello, salvato, che tu hai dato al cliente, facendo avviare il programma solo se combaciano.

    Questo secondo metodo, pur più comodo per l'utente, è molto più facilmente scavalcabile, però, perchè basta che l'utente trovi dove sono stati scritti i due dati, numeraccio e sblocco, per poterli passare a qualcun'altro e sorpassare così la protezione.

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  3. #3
    non c'è un numero dell'hard disk a cui fare riferimento?

  4. #4
    Si, ma è più difficile da leggere ed essendo un'attività a basso livello sul disco molti antivirus la considerano attività virale...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    quindi le possibilità sono solo quelle che hai descritto prima...?!

  6. #6
    No, certo che no; quelle che ti ho detto sono quelle più facili da attuare, e la seconda può essere migliorata crittografando i due dati prima di salvarli nella registry, in modo che sia molto difficile riconoscerli in mezzo ad altri mille parametri.

    Un'altra possibilità sono le chiavi hardware, ma sono costose per chi scrive il programma...
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  7. #7
    Originariamente inviato da Shores
    Durante l'installazione (o al primo avvio) generi un numero casuale molto grande e lo scrivi nel registro, poi chiedi all'utente di scrivere un codice e gli mostri il numeraccio che hai generato.
    Lui ti telefona, ti legge il numeraccio, e tu che hai sottomano un programmino con cui trasformare il numeraccio in codice di sblocco, gli dai il suo codice di sblocco, che lui inserisce e sblocca il programma. Il tutto funziona perchè nel tuo programma che gli hai dato c'è lo stesso algoritmo con cui hai generato il codice di sblocco, e ad ogni avvio il programma prenderà il numeraccio e, con quell'algoritmo, otterrà il codice di sblocco e lo confronterà con quello, salvato, che tu hai dato al cliente, facendo avviare il programma solo se combaciano.
    Scusa ma se il povero utente deve formattare il pc deve ripagare il programma? non mi sembra molto corretto

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    261
    Il sistema migliore è usare il seriale dall'Hard disk usando la kernel32 in modo molto semplice. Se il cliente riformatta tutto ha sempre lo stesso codice di attivazione visto che l'hard disk è sempre lo stesso....

    Public Declare Function GetVolumeInformation Lib "Kernel32" Alias "GetVolumeInformationA" _
    (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As System.Text.StringBuilder, ByVal nVolumeNameSize As Int32, _
    ByRef lpVolumeSerialNumber As Int32, ByVal lpMaximumComponentLength As Int32, _
    ByVal lpFileSystemFlags As Int32, ByVal lpFileSystemNameBuffer As System.Text.StringBuilder, _
    ByVal nFileSystemNameSize As Int32) As Int32

    questa è per vb net, se usi vb6 cambia int32 con long e system.text.stringbulider con string

  9. #9
    teflo questo non trova il seriale dell'HD ma del volume di partizione se l'utente modifica le partizioni non avrà un codice identico
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    261
    Perfettamente ragione Xegallo, comunque serve allo scopo per generare un codice univoco in grado di non essere intercettato dai vari antivirus, se qualcuno cambia qualcosa ... beh via mail richiede il nuovo codice di attivazione ..... oppure , purtoppo lo so fare solo con vb net si usano le WMI Win32_Service, per esempio per produrra un elenco di tutti i servizi

    Imports System
    Imports System.Management
    Imports System.IO
    Dim Query As New ObjectQuery("SELECT * FROM Win32_Service")
    Dim Searcher As New ManagementObjectSearcher(Query)
    Dim Service As ManagementObject
    For Each Service In Searcher.Get()
    Console.WriteLine(service.GetPropertyValue("Name") )
    Next

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.