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ářů: 2723
| Unikátních: 2671
|
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říkladNa 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
|