Delphi-PRAXiS
Seite 3 von 3     123

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   String in Exe ändern (https://www.delphipraxis.net/199783-string-exe-aendern.html)

jacky213 21. Feb 2019 21:45

AW: String in Exe ändern
 
Erstmal vielen dank für die ausführliche Diskussion,

Zum einen habe ich auf den Einsatz von beispielsweise MD5 Hashes verzichtet, weil es Online schon einige sehr umfangreiche MD5 Datenbanken gibt. Sollte also ein User mal auf die Idee kommen und es für ratsam halten ein Passwort aus den Top 10 der beliebtesten Passwörter zu wählen, so währe auch der Hash im nu überwunden.

Zum anderen habe ich mich dazu entschlossen nun auch den Prüf String in einer Datei abzulegen. Die Sicherheit bleibt ja gleich. Da kann man meiner Meinung nach nur mit Brute Force ran und bei einer AES 128 Bit Verschlüsselung kann es eine weile dauern.

CCRDude 22. Feb 2019 12:07

AW: String in Exe ändern
 
MD5 ist dafür ungeeignet, mindestens SHA-2 würde ich empfehlen.

Das Gegenmittel gegen Rainbow Tables sind schon seit Ewigkeiten Salts. Hashes ohne Salts sind genau so nachlässig wie MD5.

Ich weiß nicht recht, was AES 128 bei einer Speicherung des Passworts helfen soll. Da nehme ich einen Debugger und debugge das Programm bis zu der Stelle, an der der String Compare stattfindet, dann lese ich das Passwort trotzdem im Klartext.

Sherlock 22. Feb 2019 12:31

AW: String in Exe ändern
 
Im Ernst und ganz konkret:
- Passwort nach einem Hashverfahren der letzten Dekade hashen und nur den Hash speichern
- Nach Drei Fehlversuchen das Konto sperren
--> Überhaupt kein Sicherheitsproblem, mit niemandem.

Und in einer Exe speichert niemand mit Sicherheitsanspruch irgendetwas. Sämtliche Sicherheitsprobleme der Gegenwart fußen auf einer irrigen Auffassung von Bequemlichkeit. Seit wann ist es bequem, dem User vierunddröflzig Fehleingaben zu erlauben? Seit wann ist es bequem eine Exe zur Laufzeit selbst zu patchen und damit alle Sicherheitsvorkehrungen zu alarmieren, die zum einen direkt Manipulationen von Exen überwachen und zum anderen nur Exen ausführen lassen, deren Hash einmalig abgenickt wurde.

Sherlock

PeterPanino 25. Feb 2019 10:01

AW: String in Exe ändern
 
Zitat:

Zitat von pesi (Beitrag 1426107)
Hmmm.... ist das ein "geheimer" String? Wenn nicht, wie wäre es denn wenn man dem Programm diesen String einfach als Startparameter übergibt?

Gute Idee! Obwohl man die Startparameter aus den Prozessdaten auslesen kann. Der übergebene String müsste dann schon verschlüsselt sein.

Moombas 25. Feb 2019 10:31

AW: String in Exe ändern
 
Also ich habe es immer so gemacht, das Programm-Passwörter als Parameter zu übergeben sind (jetzt mal vollkommen ab davon ob nun verschlüsselt oder nicht) und diese werden dann nicht mit einem fix einprogrammierten Wert verglichen, sondern mit einem Wert der in einer Datei im Netzwerk liegt.

Dadurch kannst du das Passwort jederzeit Zentral ändern, falls nötig und wenn du eine Logik (Verschlüsselung) hinterlegst mit der die beiden Werte abgeglichen werden, bist du schon auf einem guten Weg. Und(/Aber): Wenn kein Zugang zum Netzwerk besteht, kann die Anwendung (bei mir) daher nicht gestartet/ genutzt werden.

Natürlich ist dabei zu empfehlen eine Verschlüsselung zu nutzen, da der Wert ja im Netzwerk in einer Datei steht, weshalb ich selber auch nur den SHA2-Hash ablege.

DieDolly 25. Feb 2019 18:08

AW: String in Exe ändern
 
Zitat:

sollte der Nutzer das Passwort nicht kennen, kommt er nicht weiter.
Dann kennst du einige Profis aus diesem Forum hier nicht. Denen ist das Passwort vollkommen egal. Die wechseln in der Binary einfach ein if <> then mit if not <> then aus und schon sind sie drin.

Moombas 26. Feb 2019 08:43

AW: String in Exe ändern
 
Zitat:

Zitat von DieDolly (Beitrag 1426395)
Zitat:

sollte der Nutzer das Passwort nicht kennen, kommt er nicht weiter.
Dann kennst du einige Profis aus diesem Forum hier nicht. Denen ist das Passwort vollkommen egal. Die wechseln in der Binary einfach ein if <> then mit if not <> then aus und schon sind sie drin.

Das kommt drauf an wie gut man es verschachtelt bzw. welche Abhängigkeiten es noch gibt.
Bei meinem Beispiel z.B.:
1. Prüfen ob der Passwort-Parameter (mit der erwarteten Logik z.B. "/PasswordSecure XXXXX") übergeben wurde, wenn nicht z.B. Programm beenden (wenn es um die "Sicherung" des Programms geht). Wenn ja nächste Prüfung
1.b. Prüfen ob noch z.B. Versuche des Windoofbenutzers möglich sind, wenn nicht z.B. Programm beenden (wenn es um die "Sicherung" des Programms geht). Wenn ja nächste Prüfung
2. Prüfen ob die Datei mit dem Hash gefunden wird, wenn nein: z.B. Programm beenden (wenn es um die "Sicherung" des Programms geht). Wenn ja, nächste Prüfung.
3. Versuchen diese Datei auszulesen, wenn nicht möglich (oder kein Wert): z.B. Programm beenden (wenn es um die "Sicherung" des Programms geht). Wenn ja, nächste Prüfung
4. Den Passwort-Parameter hashen und mit dem hash aus der Datei vergleichen. Ist dieser nicht gleich: z.B. Programm beenden (wenn es um die "Sicherung" des Programms geht). Wenn ja: Freigabe erteilen.

Da reicht ein "einfaches" Ersetzen eines if then durch ein if not then nicht aus.

Das es auch dafür natürlich Mittel und Wege gibt das zu umgehen, ist sicherlich klar.

TurboMagic 26. Feb 2019 18:14

AW: String in Exe ändern
 
Es scheint mir, dass du den Unterschied von hash- und Verschlüsselungsfunktionen noch nicht ganz verstanden hast. Du solltest das Passwort nicht verschglüsselt sondern gehashed ablegen, wenn du es nur prüfen muss. Verschlüsseln wäre nur dann richtig, wenn du auch den Klartext des Passwortes wieder zurückgewinnen müsstest.

Zur Sicherheitsthematik: ja, MD5 gilt nicht mehr als sicher. Wie schon von jemandem vorgeschlagen BCrypt als Algorithmus nehmen und zusätzlich das Passwort versalzen! Was bedeutet das? Einen zufälligen Wert an das Passwort anhängen vor dem berechnen des Hash Wertes. Dein Programm muss diesen Wert kennen und wenn ein eingegebenes Passwort geprüft wird auch vor der Hash berechnung wieder dran hängen. Damit werden vorberechnete Hash Tabellen nutzlos.

Im Falle des Hashes kannst du den dann auch ruhig in der Registry oder einer Datei ablegen, da man ihn nicht zurück in das Klartextpasswort verwandeln kann.

DieDolly 25. Feb 2023 23:11

AW: String in Exe ändern
 
Das Thema ist schon alt aber ich habe im Prinzip eine ähnliche Frage rein aus Prinzip wie die die im Titel steht:
wie kann man einen String in einer Exe nachträglich ändern?

Ich dachte da grob an Datei in TBytesStream laden, die Bytes in einen String S schieben, Anfangsposition des Strings Needle in S finden und dann mit
Delphi-Quellcode:
Move(Needle[1], BS.Bytes[PosNeedle - 1], NeedleLengthInBytes);
danach die Bytes speichern.

jaenicke 26. Feb 2023 09:07

AW: String in Exe ändern
 
Zitat:

Zitat von DieDolly (Beitrag 1519146)
Das Thema ist schon alt aber ich habe im Prinzip eine ähnliche Frage rein aus Prinzip wie die die im Titel steht:
wie kann man einen String in einer Exe nachträglich ändern?

Hier gibt es eine Demo zu einer solchen Problemstellung:
https://www.delphipraxis.net/134855-...anhaengen.html

Zitat:

Zitat von DieDolly (Beitrag 1519146)
Ich dachte da grob an Datei in TBytesStream laden, die Bytes in einen String S schieben, Anfangsposition des Strings Needle in S finden und dann mit
Delphi-Quellcode:
Move(Needle[1], BS.Bytes[PosNeedle - 1], NeedleLengthInBytes);
danach die Bytes speichern.

Das würde zwar gehen, aber ich würde eher anhängen, manuell oder als Ressource, als die Exe anderswo zu ändern. (Unter anderem weil ich mir die Suche spare.)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
Seite 3 von 3     123

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz