Dobrej pokec   Lišanská šlapka   MSDN   VB na Microsoft.cz   NCHAT Nový design
   Portál  O firmě  Profil  Reference  Produkty  Odkazy  Diskuse  Tisková verze 



  Novinky e-mailem
Pokud chcete být informováni o změnách ,přihlašte se k odběru novinek!
  
  
  Nejčtenější články
 Seznam všech českých hubů abecedně. (32160)
 Seznam hubů nad 100 uživatelů (20875)
 Konfigurovatelné rozbalovací menu (17499)
 Jak na makra (14371)
 Rozbalovací menu v JavaScriptu (2.) (12702)
  Nejstahovanější soubory
 Action Meter (1846)
 Slovní Fotbal (777)
 IE Boss Guard (484)
 zdroják slovní fotbal (383)
 Folder Watcher (370)
  Anketa

  Nabídka portálu

 Adobe Premiere
    Jak se dá udělat
 Alternativní prohlížeče
    FireFox
 ASP
    Tipy a triky
 Direct Connect
    Huby
    Scripty pro HUB
    Tipy a triky CZDC++
 Game Maker
    Tipy a triky
 Hry
    Akční
    Logické
 HTML
    Scripting (VBS,JS)
    Tipy a triky
 Internet
    Užitečné triky
 Microsoft Office
    Tipy, triky, návody
    Užitečná makra
    VBA Tipy a triky
 MS SQL Server
    Nastavení
    Seriály
    Tipy a triky
 Multimedia
    Návody
 Oracle
    PL/SQL
 PHP
    Jak na to
    Tipy a triky
 Užitečné odkazy
    Grafické programy
    Programátorské
 Visual Basic
    DirectX
    Formuláře
    Jak se dá udělat ...
    Užitečné funkce
    Win32Api
    Zdroje
 Visual Basic .NET
    Užitečné funkce
 Vtípky
    Vtipy a anekdnoty
 Vypalování
    DVD Shrink
    Tipy a triky
 Windows
    Jak se dá ...
    Tipy a triky pro XP
    Triky pro IE


Nabídka portálu se při zobrazení článku přesouvá na konec pravého sloupce nabídek.

 Ochrana aplikace ve VB podruhé

Autor: Kočí Marek
Zdroj: 
Vytvořeno: 10.1.2003
Publikováno: 10.1.2003
Čtenářů: 2680
Unikátních: 2628


Použití sériového čísla k dalšímu zabezpečení aplikace a způsoby ochrany aplikace před craknutí.

V prvním článku jsem nastínil možnost, jak se dá jednoduše chránit aplikace pomocí sériového čísla. To však neznamená, že aplikace nepůjde "cracknout". Proti craknutí se musíme nějak dále bránit. Jak tedy k takovému cracknutí dochází? Cracker krokuje aplikaci a ve chvíli, kdy dochází k ověření správnosti sériového čísla, mohou nastat dvě varianty:

a) SČ je zadáno správně, potom program pokračuje dál.
b) SČ je zadáno špatně, poté dojde ke skoku někam.

V případě b) cracker NOPne (přeruší?) skok, takže se program tváří, jako by bylo SČ zadáno správně.

Jak se tedy takovému cracknutí bránit?

Ideální je použít sériové číslo k různým výpočtům, jako konstantu. Příkladem může být kódování řetězců, kde bude SČ zadáno jako šifrovací klíč.

Setkal jsem se i s vytvořením ověřovací rutiny (funkce) která byla přidána do všech důležitých funkcí, událostí v aplikaci, pokud ověření selhalo, aplikace vypsala porušení registračního ujednání a skončila.

Dále je možné vytvořit komponentu nebo knihovnu (OCX, DLL, ActiveX), která je funkční do zaregistrování a po zaregistrování (zaplacení) se dodá knihovna nová. (přitom pozor na binární kompatibilitu).

Další je možnost sledování uplynulé doby mezi určitým úsekem programu. Pokud se program krokuje, trvá vše až několikrát déle.

Dosti však teorie a přistupme k příkladu.

Příklad

Na formulář dejte tři textová pole a jedno tlačítko. Vložte tento kód a můžete experimentovat s algoritmem v těle funkcí.

Option Explicit
Const sRC As String = "ABC-123456" 'Registracni cislo
Private Sub Command1_Click()
  Text2.Text = CodeStr(Text1.Text)
  Text3.Text = CodeStr(Text2.Text)
End Sub

Function CodeStr(ByVal sInString As String) As String
  Dim sTmp As String
  Dim lByt, i
  Dim lngRCPoz As Long
  lngRCPoz = 1
  For i = 1 To Len(sInString)
   lByt = Asc(Mid(sInString, i, 1))
   lByt = lByt + Asc(Mid(sRC, lngRCPoz, 1))
   If lByt > 255 Then
     lByt = lByt - 255
   End If
   sTmp = sTmp & Chr(lByt)
   If lngRCPoz > Len(sRC) Then lngRCPoz = 1
  Next i
  CodeStr = sTmp
End Function

Function DeCodeStr(ByVal sInString As String) As String
  Dim sTmp As String
  Dim lByt, i
  Dim lngRCPoz As Long
  lngRCPoz = 1
  For i = 1 To Len(sInString)
   lByt = Asc(Mid(sInString, i, 1))
   lByt = lByt - Asc(Mid(sRC, lngRCPoz, 1))
   If lByt < 10 Then
     lByt = 255 + lByt
   End If
   sTmp = sTmp & Chr(lByt)
   If lngRCPoz > Len(sRC) Then lngRCPoz = 1
  Next i
  DeCodeStr = sTmp
End Function



Příspěvky ke článku:



© Swit.cz, Marek Kočí 2003