Ich habe den Lösungsansatz von unix nicht weiter verfolgt, weil ich schon zwei alternative Lösungsmöglichkeiten von ts-soft und Froggerprogger hatte.
Schade, dass man in PureBasic das laufende EXE-Programm nicht verändern kann.
In PowerBasic für DOS konnte man die eigene EXE direkt ändern.
Ich habe mein Paßwortprogramm das ich 1992 geschrieben habe wieder gefunden.
Hier ein paar Auszüge aus dem Code:
Code: Alles auswählen
'----- Suchtext 'Ø=' und Code '[p' für Paßwort 'GEHEIM' definieren -----
originalcode$ = "Ø=[p" '[p wird bei Eingabe eines neuen Paßwortes verändert
Code: Alles auswählen
'----- Dateizeiger auf Paßwortcodes positionieren und Paßwort vergleichen -----
open passwortprogramm$ for binary as #1
get$ #1, 32000, block$
dateizeiger& = seek(1)
get$ #1, lof(1) - 32000, block$
suchtext$ = "Ø" + "="
dateizeiger& = dateizeiger& + instr( block$, suchtext$ ) + 1
seek #1, dateizeiger&
get$ #1, 2, dateicode$
if testcode$ <> dateicode$ then 'falsches Paßwort eingegeben
ergebnis% = %FALSE
incr zaehler%
end if
Code: Alles auswählen
seek #1, dateizeiger&
put$ #1, testcode$ 'Paßwortcode in PW.EXE ändern
Als Suchtext habe ich "Ø=" (Durchmesserzeichen, ASCII 157, nicht mit 0 verwechseln) verwendet, um die Position des Paßwortes in der PW.EXE zu finden. Diese Zeichenfolge kam sonst in der fertigen EXE nicht mehr vor.
Das vorgegebene Paßwort "GEHEIM" habe ich in zwei Zeichen verschlüsselt (hier zufällig "[p") und als Startpaßwort vorgegeben.
Zur Verschlüsselung habe ich einfach die Quersumme der ASCII-Zeichen des Paßwortes gebildet und mit zwei Rechenansätzen zerlegt.
In PowerBasic wurden die Strings am Ende der EXE gespeichert und weil die Stringlänge auf ca. 32000 Zeichen begrenzt war, habe ich einfach die letzten 32000 Zeichen der PW.EXE in einen String eingelesen, diesen mit instr nach Ø= durchsucht und die nachfolgenden zwei Zeichen mit der Umrechnung des eingegebenen Paßwortes verglichen.
Nach Änderung des Paßwortes durch den Benutzer konnte man den neuen Paßwortcode wieder direkt in die PW.EXE schreiben. Die Position ist ja noch vom Suchen bekannt.
Wichtig war nur, dass man die Zeichen in den durch den Platzhalter reserierten Platz schrieb. Ein Schreiben darüber hinaus hätte die PW.EXE beschädigt und evtl. zum Absturz gebracht.
Ich PowerBasic für DOS konnte man also wirklich die gestartete PW.EXE selbst ändern.
In PureBasic geht es nur mit Tricks.
Es ist schon interessant, wenn man sich nach so vielen Jahren die eigenen Quelltexte betrachtet und sieht, welche geistigen Klimmzüge man damals unternommen hat.
Heute würde man das garantiert anders und sicherer lösen, aber damals, ohne Vorlagen hat man eben nur programmiert, was einem gerade einfiel.