Vytvoření dema / trial verze   zodpovězená otázka

VB.NET, Bezpečnost

Zdravím,

rád bych dal uživatelům možnost vyzkoušet si program. Nejradši bych vytvořil trial verzi např. na 30 dnů, protože kdybych udělal demo, který ořežu, tak skoro nic nezbyde.

Otázka je, jak toho nejlépe docílit. Napadlo mně použít tento kód, ale není moc bezpečný. Proto kdyby se hodnota zašifrovala a uložila jednak do registru, a jednak do ini, bylo by to relativně nenabouratelné řešení?

Option Explicit

Private Const TRIAL_PERIOD_DAYS As Integer = 30

Private Function TrialPeriodDaysLeft(DaysTrial As Integer) As Integer
Dim DateStart As Date

DateStart = GetSetting(App.Title, "Trial Period", "Date Start", 0)
If DateStart = 0 Then
   SaveSetting App.Title, "Trial Period", "Date Start", Date
Else
   TrialPeriodDaysLeft = DateDiff("d", DateStart, Date) > DaysTrial
End If
End Function

Private Sub AppSetRegistered(Registered As Boolean)
SaveSetting App.Title, "Trial Period", "Registered", Registered
End Sub

Private Function AppRegistered() As Boolean
AppRegistered = GetSetting(App.Title, "Trial Period", "Registered", False)
End Function

Private Sub Form_Load()
If Not AppRegistered Then
   Dim DaysLeft As Integer
   
   DaysLeft = TrialPeriodDaysLeft(TRIAL_PERIOD_DAYS)
   If DaysLeft < 0 Then
       If MsgBox("The trial period for " & App.Title & " has expired." & vbCrLf & _
         "Would you like to register to continue using this program?", vbQuestion + vbYesNo) = vbYes Then
           ' Open up order form here
           ' Use: 'AppSetRegistered True' to register program
       Else
           ' Exit your program here
       End If
   Else
       MsgBox "You have " & DaysLeft & " " & IIf(DaysLeft = 1, "day left", "days left") & " to use this program.", vbInformation
   End If
End If
End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nemám moc času, takže stručně. Tím, že informaci uložíte na dvě různá místa, nic nevyřešíte. Není problém ji na těch dvou místech změnit.

Rozhodně bych spíš zvolil možnost uložit datum instalace do INI souboru a k němu uložit i jeho digitální podpis. Ten toto datum nezašifruje, takže si jej každý může přečíst. Ale zajistí, že jej nikdo nemůže změnit. Pokud by se tak stalo, digitální podpis nevyjde a Vaše aplikace tak zjistí, že to datum někdo změnil.

Pěkný článek o digitálních podpisech je na adrese http://www.aspnet.cz/Articles/146-hmac-h....

Autor sice ukazuje, jak to napsat v jazyce C#, ale pokud najdete knihovnu pro VB6, která umí spočítat SHA-512 hash, můžete si digitální podepisování napsat sám. Není to nic těžkého, princip je popsán v tom článku.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Jenže pořád je tu ten problém, že uživatel změní datum...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Hashovací funkce pro VB .NET je v článku:

http://archive.aspnetwork.cz/art/clanek.... - autorem je: Michal Altair Valášek

Function HashMD5(ByVal S As String) As String
    Dim MD5 As New System.Security.Cryptography.MD5CryptoServiceProvider()
    Dim Hash As Byte(), I As Int16

    Hash = MD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(S))
    S = ""
    For I = 0 To Hash.Length - 1
        S = S & Hex(Hash(I)).PadLeft(2, "0").ToLower()
    Next
    Return S
End Function

Na svém vstupu funkce předpokládá libovolný řetězec, vrací 32 (16 bajtů *2) znaků dlouhý řetězec s MD5 hashem. Úprava pro použití algoritmu SHA1 je triviální, stačí použít třídu SHA1CryptoServiceProvider.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuju za reakce, ještě jsem nad tím přemýšlel a napadlo mně to případnému útočníkovi ztížit - ale rád bych si přečetl názor i někoho jiného.

Uložit si do ini souboru a do registru hash data instalace a pak hash cisla kdy vyprsi (pripadne pocet spusteni, pokud by to bylo, kolikrat se smi program spustit) Dále si v programu v settings vytvořit novou proměnnou typu "user" a tam taktéž uložit tyto dvě hodnoty - jsou téměř nepřístupné.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud to datum instalace případně počet spuštění programu digitálně podepíšete, zamezíte tím možné změně tohoto údaje. Nemusíte ho kvůli tomu zapisovat na více míst. Už z principu ovšem nelze zamezit tomu, aby si uživatel změnil datum. Uložení údaje na víc míst sice prolomení zkomplikuje, ale stejně mu nezabrání.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Největší problém při ochraně .NET aplikace je stejný jako u Javy - naprosto primitivní reverse engineering, který by pomocí např. .NET Reflectoru zvládla i cvičená opice za banán. Software jako Dotfuscator sice znepříjemní, ale nezabrání kompletnímu reverse engineeringu. Jediné řešení je psát kritické části ve Win32.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback