[Text] Antileak mit CRC32 Verfasst am: 17.02.2008, 10:18
Also,
da ich hier öfters schon gelesen habe das viele hwid programme rausbringen
oder nur src wo man z.b. nur macadresse auslesen kann, hab ich mir gedacht bring ich mal ein src raus der 3 sachen ausliest damit kann man schon mehr anfangen.
Teorie:
1.
Man liest als erstes verschiedene sachen aus,
z.B. Festplattennummer, PC Name, User Name ....
somit hat man schonmal ne grundlage.
2.
Jetzt nimmt man die CRC32 zur verschlüsselung.
Die CRC32 wandelt die namen z.B. PC Name in ein 10 stellige
Zahl um.
3.
Wenn man nun diese 3 zehnstelligen zahlen nimmt kann man sie perfekt
entweder + oder - nehmen...
Dann hat man am ende 1 zahl.
4.
Dieses system baut man in sein programm ein und frägt mit if diese
zahl ab. davor muss natürlich auch wieder alles ausgelesen werden.
Somit hat man eine sehr gute grundlage für ein antileak.
Nun zum src:
Als erstens brauchen wir die crc32 Funktionen
dazu ein neues Modul und den src rein:
(Src von vbarchiv!)
Code:
Option Explicit
' Polynom-Tabelle
Dim bCRC32Init As Boolean
Dim nCRC32LookUp() As Long
Public Sub CRC32_Init()
' Polynom-Tabelle erstellen
' Hier wird das offizielle Polynom verwendet, das
' auch von WinZip/PKZip verwendet wird
' Falls die LookUp-Tabelle bereits erstellt...
If bCRC32Init Then Exit Sub
Const nPolynom = &HEDB88320
Dim i As Long
Dim u As Long
ReDim nCRC32LookUp(255)
Dim nCRC32 As Long
For i = 0 To 255
nCRC32 = i
For u = 0 To 7
If (nCRC32 And 1) Then
nCRC32 = (((nCRC32 And &HFFFFFFFE) \ 2&) And &H7FFFFFFF) _
Xor nPolynom
Else
nCRC32 = ((nCRC32 And &HFFFFFFFE) \ 2&) And &H7FFFFFFF
End If
Next u
nCRC32LookUp(i) = nCRC32
Next i
bCRC32Init = True
End Sub
' Der optionale Parameter "nResult" sollte nur von
' CRC32_File verwendet werden!
Public Function CRC32(ByRef Bytes() As Byte, _
Optional ByVal nResult As Long = &HFFFFFFFF) As Long
Dim i As Long
Dim Index As Long
Dim nSize As Long
' ggf. LookUp-Tabelle erstellen...
If Not bCRC32Init Then CRC32_Init
nSize = UBound(Bytes)
For i = 0 To nSize
Index = (nResult And &HFF) Xor Bytes(i)
nResult = (((nResult And &HFFFFFF00) \ &H100) And 16777215) _
Xor nCRC32LookUp(Index)
Next i
CRC32 = Not (nResult)
End Function
' CRC32-Checksumme einer Datei berechnen
Public Function CRC32FromFile(ByVal sFile As String) As Long
' Um die Verarbeitung von großen Dateien zu beschleunigen,
' wird der Inhalt blockweise ausgelesen. Hierbei hat sich
' eine Blockgröße von 4096 Bytes (4 KB) als sehr gut erwiesen
Const BlockSize As Long = 4096
Dim FileSize As Long
Dim FilePos As Long
Dim BytesToRead As Long
Dim nResult As Long
Dim Bytes() As Byte
Dim F As Integer
On Error GoTo ErrHandler
' Datei binär öffnen
F = FreeFile
Open sFile For Binary Access Read Shared As #F
' Dateigröße
FileSize = LOF(F)
' Datei blockweise einlesen und verarbeiten
nResult = &HFFFFFFFF
ReDim Bytes(BlockSize - 1)
While FilePos < FileSize
If FilePos + BlockSize > FileSize Then
BytesToRead = FileSize - FilePos
ReDim Bytes(BytesToRead - 1)
Else
BytesToRead = BlockSize
End If
Get #F, , Bytes()
nResult = Not (CRC32(Bytes, nResult))
FilePos = FilePos + BytesToRead
Wend
Close #F
CRC32FromFile = Not (nResult)
On Error GoTo 0
Exit Function
ErrHandler:
If F > 0 Then Close #F
CRC32FromFile = -1
End Function
Ok das war das Modul aber jetzt müssen wir noch
die sachen auslesen, jetzt die PC Name funktion.
Code:
'Funktion:
Public Function GetComputerName() As String
GetComputerName = Environ$("ComputerName")
End Function
'Aufruf
Text1.Text = GetComputerName()
'einfach z.b. in ne textbox ... dann wenn ihr aber euer prog mit antleak 'macht, nimmt lieber eine variable!!!
So jetzt mal der User name (Windows benutzer name):
Code:
' API
Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
'Aufruf
Dim RetVal As Long
Dim Puffer As String * 256
Dim UserName As String
RetVal = GetUserName(Puffer, Len(Puffer))
If RetVal <> 0 Then
UserName = Left$(Puffer, InStr(1, Puffer, vbNullChar) - 1)
Text2.Text = UserName 'z.b. nur ne textbox
End If
So und jetzt nehmen wir noch die festplattennummer von "C:\"
Code:
' API
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
'Noch eine Funktion
Private Function CleanString(ByVal txt As String) As String
Dim pos As Integer
pos = InStr(txt, vbNullChar)
If pos > 0 Then txt = Left$(txt, pos - 1)
CleanString = Trim$(txt)
End Function
' ist nur zum beispiel das alles in neue textboxen kommt !
so dann haben wir in 3 weitern textboxen die zahlen,
so jetzt müssen wir sie nurnoch verrechnen:
Code:
' Rechen Funktion ^^
Function summe(a As Double, b As Double, c As Double) As Double
summe = a - b - c
End Function
' und jetzt noch rechnen ^^
Text4.Text = summe(Text6.Text, Text7.Text, Text8.Text)
'z.b. auch wieder in ne textbox
So dann habt ihr alles in einer zahl .
Es kann vorkommen das die zahl dann im minus ist aber ich denke das ist nicht so schlimm!
Man kann natürlich noch viel mehr auslesen und verrechnen !!!
Falls ihr fehler findet bitte posten! ^^ hab das grad so schnell hingeschrieben.
Also Have Fun ^^
Tut by Helo _________________
ZiG_ Überflieger
Anmeldedatum: 07.03.2007 Beiträge: 1248
Verfasst am: 17.02.2008, 11:21
Also das du ein Tut daraus gemacht hast ist schonmal nice.
Können sicher auch einige was draus lernen.
Und irgendwie scheinen zur Zeit alle auf dem HardwareID Tripp zu sein.
Aber ich muß hier mal paar Dinge klarstellen.
1. Wenn man so einen Schutz einsetzen will, dann sollte man sich selbst was ausdenken, oder zumindest etwas am code verändern/tauschen.
Wenn alle die selbe Methode benutzen bringt es garnichts.
2. Man kann genauso MD5, SHA1 oder was weiß ich benutzen.
Ich würde auch dazu raten beide bzw. salts einzusetzen.
3. ComputerName, Username und besonders auch die VolumeID einer Festplatte sind alles keine fixen Bezeichnungen.
Man sollte min. eine fixe serial oder einen Namen mit einbeziehen.
So Sachen wie PCName oder Username kann man als zusätzliche Absicherung nehmen.
4. Die VolumeID für die Partitionen wird beim formatieren vergeben.
Und ich kann euch aus Erfahrung sagen, dass die Leute, denen ihr eure Programme verkaufen wollt (Besonders aus, nennen wir es mal unserer Szene), sehr oft formatieren (Viren, Trojaner, Panik) und es so ständig zu Beschwerden und Mehraufwand für euch kommt.
5. Sollte man vorsichtig sein, was man seinen Kunden verrät.
Natürlich wird man danach gefragt was bei der HardwareID mit einbezogen wird.
Aber besonders, wenn es kein richtig guter Schutz ist, sollte man nicht alles verraten.
6. Sollte man auch sehr darauf achten dann seinen code zu schützen.
Also wichtige Strings nicht als Klartext im Code speichern sondern "Chr()" benutzen.
Evt. paar Fake Functions noch einbauen usw.
Tipps hab ich schonmal im Board hier gegeben.
Und dann das Programm umbedingt noch crypten.
Denn sonst seht ihr euer Prog schnell gecracked im Umlauf. _________________ Wer nicht auf seine Weise denkt, denkt überhaupt nicht. (Oscar Wilde)
Five-Three-Nine_ Tutorial Leser
Anmeldedatum: 23.06.2007 Beiträge: 34
Verfasst am: 17.02.2008, 15:57
Die ganze mühe macht man sich wenn man das 1zu1 nimmt umsonst ^^
Ein Befehl in der Abfrage mit einem Debugger verändern und es rennt wieder. _________________
Helo_ Tutorial Leser
Anmeldedatum: 06.07.2007 Beiträge: 35
Verfasst am: 18.02.2008, 12:58
@Dr.Victim
Ja aber es gibt genug leute die haben keinen plan von Debuggern etc.
Ok da kann ja einer hergehen und es cracken ... aber trotzdem man kann das system ja weiter verbessern und an vielen stellen abfragen etc... so wird es dann schon schwieriger es zu cracken ^^.
@ Zig
jo danke nochmal für die tipps,
sind aufjedenfall gute Möglichkeiten um es zu verbessern.