Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Passwortschutz (https://www.delphipraxis.net/39303-passwortschutz.html)

tom1002 31. Jan 2005 16:48


Passwortschutz
 
Hallo,

ich habe soeben mein 1. großes Prog fertiggestellt. Jetzt hab ich micht Schrecken gesehen, dass in der EXE-Datei irgendwo(aber trotzdem da) meine Zugangsdaten für den SQL Server liegen (hinterlegt in ZEOS-Komponente)

Habe mich wegen Schutz schon schlau gemacht und was gefunden, dass die Datei komprimiert. Dann ist das zwar weg, aber wenn ich diese Datei öffne wird eine irgendwas.tmp erzeugt. Da steht's dann wieder drin.

Gibt es da irgendeine Möglichkeit, dass die Sachen nicht so offen in der EXE stehen?

Dax 31. Jan 2005 16:50

Re: Passwortschutz
 
Du könntest die Daten verschlüsselt speichern, den Schlüssel verstecken/auch verschlüsseln und speichern und dann beim laden des Programms die Daten wieder entschlüsseln. Aber was du auch tust: Die Daten sind immer irgendwie knackbar oder man kann sie finden und knacken..

demo13 31. Jan 2005 16:51

Re: Passwortschutz
 
Du kannst doch anstatt
Delphi-Quellcode:
server:='sqlserver'
schreiben:

Delphi-Quellcode:
a:='sq'
b:='l'
c:='server'
server:=a+b+c
Das wird dann bestimmt nicht aus der exe Datei sichtbar

tata1 31. Jan 2005 16:52

Re: Passwortschutz
 
Du kannst als erstes mal versuchen, die Daten zur Laufzeit in die Komponente zu geben.
Und zur Laufzeit kannst Du die ja per

Code:
passwort := 't' + 'e' + 's' + 't';
zusammenbauen.
Das sollte kurzfristig helfen.

Gruß
Jörn

tom1002 31. Jan 2005 16:54

Re: Passwortschutz
 
stimmt, da bin ich noch gar nicht drauf gekommen. Danke für die SUPERSCHNELLEN ANTWORTEN

PierreB 31. Jan 2005 16:59

Re: Passwortschutz
 
Zitat:

Zitat von demo13
Du kannst doch anstatt
Delphi-Quellcode:
server:='sqlserver'
schreiben:

Delphi-Quellcode:
a:='sq'
b:='l'
c:='server'
server:=a+b+c
Das wird dann bestimmt nicht aus der exe Datei sichtbar

Ist das wirklich ein sinnvoller Schutz ? Wird dann nicht in der Exe anstatt sqlserver einfach sq l server angezeigt ??

demo13 31. Jan 2005 17:03

Re: Passwortschutz
 
dann probier es mal aus...
ich hatte mal das gleiche problem, aber mit einem normalen hexeditor wie ultraedit oder so wird man wirklich nicht aus den ganzen zeichen schlau.

tom1002 31. Jan 2005 17:06

Re: Passwortschutz
 
nee, nee. geht alles nicht.
dass es keinen 100%-schutz gibt weiß ich auch.
aber so offensichtlich sollten die zugangsdaten auch nicht dort stehen!

Dax 31. Jan 2005 17:11

Re: Passwortschutz
 
Dann nimm dir doch die Daten und verschlüssele sie mit einem kleinen XOR-Algorithmus..

NicoDE 31. Jan 2005 17:12

Re: Passwortschutz
 
Zitat:

Zitat von tom1002
dass es keinen 100%-schutz gibt weiß ich auch.

Der Schutz sollte darin bestehen, dass der Datenbank-Account nicht mehr Rechte besitzt als notwendig...

malo 31. Jan 2005 17:16

Re: Passwortschutz
 
Zitat:

Zitat von NicoDE
Zitat:

Zitat von tom1002
dass es keinen 100%-schutz gibt weiß ich auch.

Der Schutz sollte darin bestehen, dass der Datenbank-Account nicht mehr Rechte besitzt als notwendig...

Da hätt ich auch mal so ne Idee:

Man könnte ja mehrer Accounts dafür erstellen. Also für jede "Arbeit" einen anderen (falls genug verschiedene Arbeiten vorhanden sind, dass die Übersicht nicht völlig drunter leidet). Dann könnte man die Benutzernamen und Passwörter für die Accounts jeweils einzeln verschlüsseln und bei jedem eine andere Verschlüsselung benutzen. Macht dann zwar etwas mehr Arbeit, ist aber wenigstens etwas sicherer :mrgreen:


jaja, ich hab wieder blöde Ideen :wall:

NicoDE 31. Jan 2005 17:21

Re: Passwortschutz
 
Zitat:

Zitat von malo
Da hätt ich auch mal so ne Idee:

Der arme Admin der Datenbank ;)
Ich meinte eher, dass der 'Standardbenutzer'-Account für das Programm sicherlich nicht in der Lage sein sollte beliebige Tabellen und/oder Benutzer anzulegen oder zu löschen, etc...

Ultimator 31. Jan 2005 17:54

Re: Passwortschutz
 
Du könntest vielleich den String aus den einzelnen ASCII-Codes zusammensetzen :gruebel:

Meflin 31. Jan 2005 18:13

Re: Passwortschutz
 
Zitat:

Zitat von Ultimator
Du könntest vielleich den String aus den einzelnen ASCII-Codes zusammensetzen :gruebel:

dann bleibt immernoch das problem dass man den traffic capturen kann (z.B. mit ethereal) und dann da das passwort im klartext zu sehen ist... oder?

Ultimator 31. Jan 2005 18:17

Re: Passwortschutz
 
Tja, das wäre in der Tat ein weiteres Problemchen, aber ich denke mit ner XOR-verschlüsselung wäre er in dem Fall ganz gut bedient, oder? :-)

NicoDE 31. Jan 2005 18:24

Re: Passwortschutz
 
Zitat:

Zitat von Ultimator
Tja, das wäre in der Tat ein weiteres Problemchen, aber ich denke mit ner XOR-verschlüsselung wäre er in dem Fall ganz gut bedient, oder? :-)

Es geht eher darum, das Problemm generell (auf dem Server) zu lösen - dann kann das Passwort auch im Klartext im Programm stehen (alles andere ist nur Vortäuschung von Sicherheit).

tom1002 2. Feb 2005 03:54

Re: Passwortschutz
 
wie funzt das mit der xor-verschlüsselung

malo 2. Feb 2005 11:41

Re: Passwortschutz
 
Zitat:

Zitat von tom1002
wie funzt das mit der xor-verschlüsselung

Die Suche hätte auch geholfen ;)

Beispielcode

//edit: ich hab übrigens auch ein kleines Verschlüsselungsprogramm geschrieben (hier nicht veröffentlicht). Wenn du Interesse hast, dann schreib mich einfach per PN an und ich schick dir den Source :thumb:

tom1002 2. Feb 2005 14:17

Re: Passwortschutz
 
also ich glaube das hat so keinen wert. steht immer irgendwie was in der exe. Gibt es nicht eine Möglichkeit die EXE-Datei zu verschlüsseln?

Meflin 2. Feb 2005 14:24

Re: Passwortschutz
 
Zitat:

Zitat von tom1002
also ich glaube das hat so keinen wert. steht immer irgendwie was in der exe. Gibt es nicht eine Möglichkeit die EXE-Datei zu verschlüsseln?

was soll das bringen? dann kann man wieder die pakete sniffen, da das passwort zwar ni der exe verschlüsselt ist, aber zur übertragung entschlüsselt wird. sicher wäre es wenn man eine verschlüsselte verbindung zum server aufbaut (ssl) und das passwort nciht an einem stück in der exe speichert. dann dürfte sich ein angreifer doch recht schwer tun.

malo 2. Feb 2005 14:31

Re: Passwortschutz
 
Zitat:

das passwort nciht an einem stück in der exe speichert.
Doch könnte man ja prinzipiell jedes Zeichen des Passworts verschlüsseln, einfach ein paar "sinnlose" Zeichen an den Anfang und ans Ende setzen, und dann vom Server aus nur das Zeichen an einer bestimmten Stelle auslesen. Ich glaube, das wird zumindest einen "Angreifer" verwirren. (jaja, ich weiß, ich hab bescheuerte Ideen ;) ).


Einen unknackbaren Schutz kann es wohl gar nicht geben, da man ja selbst noch wissen muss, wie man darauf zugreifen kann (bzw. das Programm muss es wissen). Und das kann ein "Angreifer" auch herausfinden. Die Kunst besteht wohl nur darin, es einem potentiellen Angreifer möglichst Schwer zu machen ;)

moritz 2. Feb 2005 14:35

Re: Passwortschutz
 
Zitat:

Zitat von tata1
Du kannst als erstes mal versuchen, die Daten zur Laufzeit in die Komponente zu geben.
Und zur Laufzeit kannst Du die ja per

Code:
passwort := 't' + 'e' + 's' + 't';
zusammenbauen.
Das sollte kurzfristig helfen.

Gruß
Jörn

Das hilft dir nicht weiter! Der Compiler setzt das zu einem 'test' zusammen. Genauso wenig hilft dir Komprimierung, weil man das auch wieder entpacken kann. Letztendlich gibt es keinen 100%igen Schutz, irgendwie wird man ihn knacken können.

Meflin 2. Feb 2005 14:36

Re: Passwortschutz
 
Zitat:

Zitat von moritz
Zitat:

Zitat von tata1
Du kannst als erstes mal versuchen, die Daten zur Laufzeit in die Komponente zu geben.
Und zur Laufzeit kannst Du die ja per

Code:
passwort := 't' + 'e' + 's' + 't';
zusammenbauen.
Das sollte kurzfristig helfen.

Gruß
Jörn

Das hilft dir nicht weiter! Der Compiler setzt das zu einem 'test' zusammen. Genauso wenig hilft dir Komprimierung, weil man das auch wieder entpacken kann. Letztendlich gibt es keinen 100%igen Schutz, irgendwie wird man ihn knacken können.

so vielleicht, aber nicht so:
Delphi-Quellcode:
pwchars := 'abcdefghijklmnopqrstuvwxyz';
IdWasAuchImmer.Password := pwchars[4] + pwchars[1]...
oder :?:

moritz 2. Feb 2005 14:40

Re: Passwortschutz
 
Zitat:

Zitat von Meflin
so vielleicht, aber nicht so:
Delphi-Quellcode:
pwchars := 'abcdefghijklmnopqrstuvwxyz';
IdWasAuchImmer.Password := pwchars[4] + pwchars[1]...
oder :?:

Da bin ich mir nicht sicher. Im Zweifelsfall: Ausprobieren!
Du könntest dir einen String bauen, der nur aus Sonderzeichen besteht, den mit einer for-schleife durchlaufen, und jeden Buchstaben des erstens in den zweiten String kopieren, dabei aber von seinem ASCII-Code i+30 abzeiehen.
Das ist nicht besonders aufwendig und toll, aber um einiges sicher, als den String so reinzuschreiben. Es gibt viele solche Methoden, die man auch verknüpfen kann. Man schaue sich nur mal die letzten Level der HackIt's an, die man - bwohl sier OpenSource sind, schwer knacken kann.

Gruß

Binärbaum 2. Feb 2005 15:04

Re: Passwortschutz
 
Also ich würde da wohl eine XOR-Verschlüsselung bemühen. Gegebenenfalls kann man den Schlüssel ja auch
noch verschlüsseln. Das ist auf alle Fälle sicherer, als zu irgendwelchen Sonderzeichen nur einen bestimmten Wert dazuzuaddieren (siehe Post von moritz).

MfG
Binärbaum

Meflin 2. Feb 2005 15:06

Re: Passwortschutz
 
Zitat:

Zitat von Binärbaum
Also ich würde da wohl eine XOR-Verschlüsselung bemühen. Gegebenenfalls kann man den Schlüssel ja auch
noch verschlüsseln. Das ist auf alle Fälle sicherer, als zu irgendwelchen Sonderzeichen nur einen bestimmten Wert dazuzuaddieren (siehe Post von moritz).

MfG
Binärbaum

ich kann mich nur wiederhohlen: solange die daten unverschlüsselt übertragen werden, ist das für den popo! der server entschlüsselt ja das passwort nicht, oder hab ich was verpasst?

tom1002 2. Feb 2005 15:46

Re: Passwortschutz
 
also ich hab das jetzt so gelöst

ini-datei
zeichensatz=abcdef....
ziffern.....

und daraus les ich dann die daten. FUNZT

DANKE FÜR ALLE ANTWORTEN

Igotcha 2. Feb 2005 16:09

Re: Passwortschutz
 
Du machst Dir da ein Problem, wo eigentlich keins sein sollte ;-)

In meinen Anwendungen stecke ich die DB-Zugangsdaten meist sogar in eine INI-Datei und die kann jeder lesen... kann er ja auch, denn der dort spezifizierte Datenbankuser hat

a) nur Zugriff auf die vom Programm benötigte Datenbank
b) nur die mindest-notwendigen Rechte auf den benötigten Tabellen

Sprich: Ein "Cracker" kann nichts anderes mit den Zugangsdaten machen, als der legitime User des Programms auch -> es ist gar kein Schutz notwendig.

Gruß Igotcha

P.S. Wenn Dein Anwendungs-DB-User natürlich User="root" und Password="" ist, dann würde ich da schnellstens etwas daran ändern ;-)

Elite 2. Feb 2005 16:45

Re: Passwortschutz
 
Auch wenn ich euch zustimme, dass eine Verschlüsselung der Daten ein falscher Ansatzpunkt ist, habe ich dennoch mal zwei Funktionen ausgegraben, die einen Text zumindest für Anfänger relativ unkenntlich machen. Das ist natürlich kein vergleich zu wirklichen Verschlüsselungsalgorythmen, aber vielleicht kannst du es ja gebrauchen, Tom:
Delphi-Quellcode:
// verschlüsseln
function Encrypt(text: string): string;
const
  adder = 30; // kann beliebig sein, ändert Erscheinungsbild d. verschlüsselt. Textes,
              // muss gleich dem adder in Decrypt sein
var
  loop, counter, key:Integer;
begin
  counter := 0;
  key := Length(Text) mod 10 + 5;
  for loop := 1 to length(text) do
  begin
    Inc(counter, key);
    if (ord(text[loop])+(adder+key+counter)) > 255 then
      result:=result + (chr(ord(text[loop])+(adder+key+counter)-255))
    else
      result:=result + (chr(ord(text[loop])+(adder+key+counter)));
    If Counter > 150 then
    Counter := 0;
  end;
end;


// entschlüsseln
function Decrypt(text: string):string;
const
  adder = 30;
var
  loop, counter, key: Integer;
begin
  counter := 0;
  key := Length(Text) mod 10 + 5;
  for loop := 1 to length(text) do
  begin
    Inc(counter, key);
    if (ord(text[loop])) <= (adder+key+counter) then
      result:=result + (chr(ord(text[loop])-adder-key-counter+255))
    else
      result:=result + (chr(ord(text[loop])-adder-key-counter));
    If Counter > 150 then
      Counter := 0;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:05 Uhr.

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