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] Tutorials
Autor
Nachricht
ZiG
Überflieger
Überflieger

Anmeldedatum: 16.04.2008
Beiträge: 421

Antileak mit CRC32
Verfasst am: 17.04.2008, 11:53

Thema: Antileak mit CRC32
Autor: Helo


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<br /><br />' Polynom-Tabelle<br />Dim bCRC32Init As Boolean<br />Dim nCRC32LookUp() As Long<br /><br />Public Sub CRC32_Init()<br />  ' Polynom-Tabelle erstellen<br />  ' Hier wird das offizielle Polynom verwendet, das<br />  ' auch von WinZip/PKZip verwendet wird<br />  <br />  ' Falls die LookUp-Tabelle bereits erstellt...<br />  If bCRC32Init Then Exit Sub<br />  <br />  Const nPolynom = &HEDB88320<br />  <br />  Dim i As Long<br />  Dim u As Long<br />  <br />  ReDim nCRC32LookUp(255)<br />  Dim nCRC32 As Long<br /><br />  For i = 0 To 255<br />    nCRC32 = i<br />    For u = 0 To 7<br />      If (nCRC32 And 1) Then<br />        nCRC32 = (((nCRC32 And &HFFFFFFFE)  2&) And &H7FFFFFFF) _<br />          Xor nPolynom<br />      Else<br />        nCRC32 = ((nCRC32 And &HFFFFFFFE)  2&) And &H7FFFFFFF<br />      End If<br />    Next u<br />    nCRC32LookUp(i) = nCRC32<br />  Next i<br />  bCRC32Init = True<br />End Sub<br /><br />' Der optionale Parameter "nResult" sollte nur von<br />' CRC32_File verwendet werden!<br />Public Function CRC32(ByRef Bytes() As Byte, _<br />  Optional ByVal nResult As Long = &HFFFFFFFF) As Long<br />  <br />  Dim i As Long<br />  Dim Index As Long<br />  Dim nSize As Long<br />  <br />  ' ggf. LookUp-Tabelle erstellen...<br />  If Not bCRC32Init Then CRC32_Init<br /><br />  nSize = UBound(Bytes)<br />  For i = 0 To nSize<br />    Index = (nResult And &HFF) Xor Bytes(i)<br />    nResult = (((nResult And &HFFFFFF00)  &H100) And 16777215) _<br />      Xor nCRC32LookUp(Index)<br />  Next i<br /><br />  CRC32 = Not (nResult)<br />End Function<br /><br />' CRC32-Checksumme einer Datei berechnen<br />Public Function CRC32FromFile(ByVal sFile As String) As Long<br />  ' Um die Verarbeitung von großen Dateien zu beschleunigen,<br />  ' wird der Inhalt blockweise ausgelesen. Hierbei hat sich<br />  ' eine Blockgröße von 4096 Bytes (4 KB) als sehr gut erwiesen<br />  Const BlockSize As Long = 4096<br />  <br />  Dim FileSize As Long<br />  Dim FilePos As Long<br />  Dim BytesToRead As Long<br />  Dim nResult As Long<br />  Dim Bytes() As Byte<br />  Dim F As Integer<br />  <br />  On Error GoTo ErrHandler<br />  <br />  ' Datei binär öffnen<br />  F = FreeFile<br />  Open sFile For Binary Access Read Shared As #F<br />  <br />  ' Dateigröße<br />  FileSize = LOF(F)<br />  <br />  ' Datei blockweise einlesen und verarbeiten<br />  nResult = &HFFFFFFFF<br />  ReDim Bytes(BlockSize - 1)<br />  While FilePos < FileSize<br />    If FilePos + BlockSize > FileSize Then<br />      BytesToRead = FileSize - FilePos<br />      ReDim Bytes(BytesToRead - 1)<br />    Else<br />      BytesToRead = BlockSize<br />    End If<br />    <br />    Get #F, , Bytes()<br />    nResult = Not (CRC32(Bytes, nResult))<br /><br />    FilePos = FilePos + BytesToRead<br />  Wend<br />  Close #F<br />  <br />  CRC32FromFile = Not (nResult)<br />  On Error GoTo 0<br />  Exit Function<br />  <br />ErrHandler:<br />  If F > 0 Then Close #F<br />  CRC32FromFile = -1<br />End Function


Ok das war das Modul aber jetzt müssen wir noch
die sachen auslesen, jetzt die PC Name funktion.

Code:
'Funktion:<br />Public Function GetComputerName() As String<br /> GetComputerName = Environ$("ComputerName")<br />End Function<br /><br />'Aufruf<br />Text1.Text = GetComputerName()<br />'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<br />Private Declare Function GetUserName Lib "advapi32.dll" Alias _<br />  "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long<br />  <br />'Aufruf<br /> Dim RetVal As Long<br />  Dim Puffer As String * 256<br />  Dim UserName As String<br />  <br />  RetVal = GetUserName(Puffer, Len(Puffer))<br /><br />  If RetVal <> 0 Then<br />    UserName = Left$(Puffer, InStr(1, Puffer, vbNullChar) - 1)<br />   Text2.Text = UserName 'z.b. nur ne textbox<br />  End If


So und jetzt nehmen wir noch die festplattennummer von "C:"


Code:
' API<br />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<br />Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long<br /><br />'Noch eine Funktion<br />Private Function CleanString(ByVal txt As String) As String<br />Dim pos As Integer<br />    pos = InStr(txt, vbNullChar)<br />    If pos > 0 Then txt = Left$(txt, pos - 1)<br />    CleanString = Trim$(txt)<br />End Function<br /><br />'und der aufruf<br /><br /> Dim serial_number As Long<br /><br />    DoEvents<br /><br />    volume_name = Space(256)<br />    file_system_name = Space(256)<br /><br />    drive_name = "c:"<br />    pos = InStr(drive_name, ":")<br />    If pos > 0 Then drive_name = Left$(drive_name, pos)<br />    If Right$(drive_name, 1) <> "" Then drive_name = drive_name & ""<br />    drive_type = GetDriveType(drive_name)<br /><br />    info_status = GetVolumeInformation(drive_name, _<br />        volume_name, Len(volume_name), serial_number, _<br />        max_component_length, file_system_flags, _<br />        file_system_name, Len(file_system_name))<br /><br />     volume_name = CleanString(volume_name)<br />     file_system_name = CleanString(file_system_name)<br /> <br />    txt = serial_number<br />    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<br />Dim sText2 As String<br />Dim sText3 As String<br />sText = Text1.Text<br />sText2 = Text2.Text<br />sText3 = Text3.Text<br /><br />Dim nCRCSum As Long<br /> nCRCSum = CRC32(StrConv(sText, vbFromUnicode)) 'hier wird es immer umgerechnet!<br /><br />Dim nCRCSum2 As Long<br /> nCRCSum2 = CRC32(StrConv(sText2, vbFromUnicode))<br /><br />Dim nCRCSum3 As Long<br /> nCRCSum3 = CRC32(StrConv(sText3, vbFromUnicode))<br /><br /><br />Text6.Text = CStr(nCRCSum)<br />Text7.Text = CStr(nCRCSum2)<br />Text8.Text = CStr(nCRCSum3)<br /><br />' 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 ^^<br />Function summe(a As Double, b As Double, c As Double) As Double<br />summe = a - b - c<br />End Function<br /><br />' und jetzt noch rechnen ^^<br />Text4.Text = summe(Text6.Text, Text7.Text, Text8.Text)<br /><br />'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
_________________
 
mastermaefju
Newbie
Newbie

Anmeldedatum: 06.05.2008
Beiträge: 12


Verfasst am: 13.05.2008, 13:07

als kleiner verbesserungsvorschlag:

wenn man die hwid mit einer if abfrage ausliest braucht man als cracker nur ein paar bytes patchen. als etwas sicherer wird die select case abfrage befunden!

man darf im source keine strings (zb msgbox wenn erfolgreich registriert) hinterlassen, da diese alle hinweise sind wo ein cracker anfangen soll zu arbeiten!

am besten man schreibt seine variablen usw in chr()!

mfg

mastermaefju
 
Neues Thema eröffnen   Neue Antwort erstellen    Visual Basic Forum Foren-Übersicht -> [VB6] Tutorials

Tags: crc32, antileak, hwid, festplattennummer

 
 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.1652s ][ Queries: 85 (0.0253s) ][ GZIP on - Debug on ]