Visual Basic Forum

Visual Basic Forum
für VB6 und VB.NET Programmierer
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks
Autor
Nachricht
Helo_
Tutorial Leser
Tutorial Leser



Anmeldedatum: 06.07.2007
Beiträge: 35

[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

'und der aufruf

 Dim serial_number As Long

    DoEvents

    volume_name = Space(256)
    file_system_name = Space(256)

    drive_name = "c:\"
    pos = InStr(drive_name, ":")
    If pos > 0 Then drive_name = Left$(drive_name, pos)
    If Right$(drive_name, 1) <> "\" Then drive_name = drive_name & "\"
    drive_type = GetDriveType(drive_name)

    info_status = GetVolumeInformation(drive_name, _
        volume_name, Len(volume_name), serial_number, _
        max_component_length, file_system_flags, _
        file_system_name, Len(file_system_name))

     volume_name = CleanString(volume_name)
     file_system_name = CleanString(file_system_name)
 
    txt = serial_number
    Text3.Text = txt ' auch wieder nur zum z.B.!!!




so habt ihr jetzt in der textbox1 ist der PC NAME
Textbox2 = Username
Textbox3 = Festplattennummer

wenn ihr wollt könnt ihr natürlich auch noch mehr auslesen!

so aber jetzt müssen wir ja die ganzen sachen mit der CRC32
konvertiren in zahlen, das geht so:


Code:

Dim sText As String
Dim sText2 As String
Dim sText3 As String
sText = Text1.Text
sText2 = Text2.Text
sText3 = Text3.Text

Dim nCRCSum As Long
 nCRCSum = CRC32(StrConv(sText, vbFromUnicode)) 'hier wird es immer umgerechnet!

Dim nCRCSum2 As Long
 nCRCSum2 = CRC32(StrConv(sText2, vbFromUnicode))

Dim nCRCSum3 As Long
 nCRCSum3 = CRC32(StrConv(sText3, vbFromUnicode))


Text6.Text = CStr(nCRCSum)
Text7.Text = CStr(nCRCSum2)
Text8.Text = CStr(nCRCSum3)

' 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
Ü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
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
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.

mfg Helo
_________________


 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Texte und Ebooks

Tags: crc32, antileak, festplattennummer, auslesen

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Problem mit always on top funktion 1038 30.10.2009, 11:26
Keine neuen Beiträge IntStr()funktion 1176 11.10.2007, 08:49
Keine neuen Beiträge TopMost Funktion unter DirectX 921 27.07.2007, 10:48
Keine neuen Beiträge Wie Funktion nutzen ? 1098 29.06.2007, 20:59
Keine neuen Beiträge update funktion einbauen 1341 28.01.2007, 23:11
 



[ Time: 0.3632s ][ Queries: 93 (0.1737s) ][ GZIP on - Debug on ]