re: Daten in EXE Speichern
Hy,
da ich sowas schon mal mit QuickBasic gemacht habe,
(weil man nicht auf Registry zugreifen kann mit dos anwendungen)
möchte ich hier mal beschreiben wie das geht:
Also mein Problemm war halt Serial Key, als eine TextDatei die Serial Nummer zu speichern ist wirklich ne schlechte Idee, deswegen habe ich eine Methode erfunden wie man sowas in einer EXE speichert!
Diese Methode ist eben für sowas kleines, nicht das jemand denkt dass man ganzen Lebenslauf so speichern könnte.
Dabei wird die EXE datei nicht beschädigt!
Als Erstes: Definiert man zwei Variablen als STRING, und andere..
------
Dim OFFSET as String
Dim AAData as String
Dim Buffer as String
Dim Adresse as Long
Dim FNr as Integer
------
jetzt füllen wir die Variablen:
------
OFFSET = "#012345" ' 6 Zeichen sollten wirklich reichen!
AAData = "qaywsxedcrfvtgbzhnujmikolp" ' 26 Zeichen für data
------
bei OFFSET Sollte erster zeichen "#" sein! um zu prüfen ob die Adresse gesezt wurde! Und es ist wichtig das bei der Variable AAData Verschiedene Zeichen stehen damit es nicht von Compiler gepackt wird!
Ja, da gibts ein Problemm: Die EXE Datei darf nicht gepackt werden! Ansonsten wird die beschädigt!
Nun brauchen wir ein inteligentes Code was erkennen kann ob die OFFSET (Adresse in der Datei) schon gesezt wurde oder nicht
------
If Left(AAData, 1) <> "#" then
Adresse = Val(AAData)
End If
...
' String Anzeigen:
MsgBox AAData
...
------
das war's schon mit der inteligenz!
also den String braucht man nicht zu laden, der ist automatisch in der Variable AAData!
Ok nun sind wir an der Stelle wo wir was in die EXE rein schreiben wollen:
wir schreiben mal die Uhrzeit in die EXE Datei..
------
...
' Buffer darf nicht länger als AAData sein sonst
' zerstören wir die EXE Datei!
Buffer = Time ' oder was anderes halt
' jetzt prüfen wir die länge:
If Len(Buffer) > Len(AAData) Then
Buffer = Left(Buffer, Len(AAData))
End If
' rest mit Leerzeichen füllen
If Len(Buffer) < Len(AAData) Then
Buffer = Buffer & String(Len(AAData)-Len(Buffer), chr(32))
End if
If Adresse>0 Then
FNr = FreeFile
' Speichern in EXE:
Open MyEXEName for binary as FNr
Put #FNr, Adresse, Buffer
Close FNr
' gespeichert!
End If
------
Bevor das Programm funktionieren kann muss es Kompiliert werden, und die Offset-Adresse gesetzt werden!
Hier dazu benötigte Functions:
------
Private Function MyPath() AS String
MyPath = iif(right(App.Path, 1) = "\", App.Path, App.Path & "\")
End Function
private Function MyEXEName() As String
MyEXEName = MyPath & App.EXEName & ".exe"
End Function
------
Wie?
Also zuerst kompilieren, danach die Datei mit einem HEX-Editor öffnen und den Inhalt der Variable AAData suchen, in diesem Fall wäre es "qaywsx"... also nach "qaywsx" suchen. Die Adresse an welcher der String beginnt merken!
Achting! Hexedezimale Zahlen sind nicht Dezimale Zahlen also zuerst mit dem Calc Umwandeln!
Jetzt den anderen String, aus der Variable OFFSET, suchen, also bei uns "#012345".
Nun diesen string ("#012345") durch die Adresse die wir uns gemerkt haben ersetzen, und zwar so dass am anfang nullen stehen!
Zum Beispiel ist die Offset Adresse = 1267, der OFFSET String vorher: "#012345" und nacher "0001267", also "#" auch ersetzen, sost denkt unser Programm dass die Adresse immer noch nicht gesetzt wurde!
Nun das Programm starten, und sehen ob das funzt :>
Ob der Source hier funzt hab ich keine Ahnung. Ich habe das ganze "on the fly" geschrieben, nicht mal getestet!
Es ist nur eine Theorie.
Der Rest bleibt Euch überlassen!
und bidde Mailt mir Falls es wirklich gefunzt hat!