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
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()!