Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Security Software (https://www.delphipraxis.net/115830-security-software.html)

blender 18. Jun 2008 16:30


Security Software
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich habe eine, ziemlich einfache, Security "Software" Programmiert.

Hier der Quellcode (Ich weiß, Uralt Konsolenanwendung. Passt aber dazu. Visuell.):

Delphi-Quellcode:
program Security1Beta;

{$APPTYPE CONSOLE}

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  shellapi;

var Passwort, compname, test: String;
    Wrongcount: Integer = 0;
label anfang, ende, EnterComputerName;
begin
if DirectoryExists(test+'_Desktop') then WrongCount := 4;
anfang:
 Write('Please enter Password to access: ');
 ReadLn(Passwort);
 writeln;
 if (passwort = 'passwort1') and (wrongcount < 4) then begin writeln('Access...'); goto ende; end else if wrongcount < 4 then begin writeln('Access denied!!! You can try one more.'); inc(wrongcount); end else
 begin
 writeln('Access to all functions of the program will be blocked...');
 writeln('Another entering the password is no longer possible.');
 EnterComputerName:
 CreateDir(test+'_Desktop');
 writeln('Please identify yourself as the owner of this computer.');
 writeln;
 write('Please enter the computer name: ');
 ReadLn(compname);
 if compname = GetEnvironmentVariable('USERDOMAIN') then
 begin
 writeln;
 writeln('Computer name is checked...');
 writeln;
 writeln('Computer name confirmed.');
 RemoveDir(test+'_Desktop');
 wrongcount:= 0;
 writeln;
 goto anfang;
 end
 else
 begin
 writeln;
 writeln('Computer name is checked...');
 writeln;
 writeln('Wrong input.');
 writeln('Full closure is initialized...');
 writeln('Full closure in Progress...');
 CreateDir(test+'_Lokale Einstellungen');
 writeln('Full closure complete.');
 goto EnterComputerName
 end;
 end;
 writeln;
 goto anfang;
ende:
writeln;
write('To end the program press enter.');
ReadLn;
end.
Das funktioniert soweit auch ganz gut.

Nun wollte ich allerdings, damit sich das Programm nicht so einfach beenden lässt das Programm im Vollbild starten. Wie geht das?
Kann man das Programm sonst noch weiter absichern?

Das Programm ist im Anhang.

Medium 18. Jun 2008 20:57

Re: Security Software
 
Auweiauwei. Labels/Gotos, "test" nirgends initialisiert, haufenweise nicht gebrauchte Units, schwabbeliges Englisch, keine Einrückung, und "sicher" dürfte man auch nicht mit dem Codestück in einem Satz nennen. Viel du musst lernen, junger Delphi-Padawan.

Die Muhkuh 18. Jun 2008 21:11

Re: Security Software
 
Du solltest Dir außerdem bewusst sein, dass man das Programm einfach per Taskmanager abschießen kann.

Neutral General 18. Jun 2008 21:16

Re: Security Software
 
Zitat:

Zitat von Die Muhkuh
Du solltest Dir außerdem bewusst sein, dass man das Programm einfach per Taskmanager abschießen kann.

Wieso so umständlich... Das [x] tuts auch :mrgreen:

Luckie 18. Jun 2008 22:24

Re: Security Software
 
Die Umgebungsvariable USERDOMAIN enthält den Computernamen? :gruebel:

Christian Seehase 18. Jun 2008 22:27

Re: Security Software
 
Zitat:

Zitat von Luckie
Die Umgebungsvariable USERDOMAIN enthält den Computernamen? :gruebel:

Wenn der User lokal angemeldet ist schon.

RavenIV 19. Jun 2008 08:33

Re: Security Software
 
Zitat:

Zitat von Medium
Viel du musst lernen, junger Delphi-Padawan.

/offtopic
Wenn schon, dann richtig:
"Viel lernen Du musst, junger Delphi-Padawan."

/Zum Thema
<Ironie on>
Mülltonne auf, "Security1Beta" rein, Mülltonne zu.
<Ironie off>

Tyrael Y. 19. Jun 2008 09:04

Re: Security Software
 
Zitat:

Zitat von RavenIV
/Zum Thema
<Ironie on>
Mülltonne auf, "Security1Beta" rein, Mülltonne zu.
&lt;Ironie off&gt;

-.- dein Post ist völliger Müll

Der junge Mann ist 13.
13 Jahre alt Mann, er versucht sich an Delphi und du
schreibst so einen Mist.

Schreib doch einfach nix, wenn du nix zu sagen hast oder
beantworte seine Frage.

blender 24. Jun 2008 15:43

Re: Security Software
 
Das Programm könnte eine Batch erzeugen und ausführen.
Die verhindert den Taskmanager. (Taskkill /im Taskmgr.exe)
Das funktioniert auch soweit.
Allerdings ist die Batch dann im Vordergrund.

Die Muhkuh 24. Jun 2008 15:44

Re: Security Software
 
Schließe die Batch doch per "exit" wieder?

Der.Kaktus 24. Jun 2008 15:49

Re: Security Software
 
Zitat:

Zitat von Tyrael Y.
Zitat:

Zitat von RavenIV
/Zum Thema
<Ironie on>
Mülltonne auf, "Security1Beta" rein, Mülltonne zu.
&lt;Ironie off&gt;

-.- dein Post ist völliger Müll

Der junge Mann ist 13.
13 Jahre alt Mann, er versucht sich an Delphi und du
schreibst so einen Mist.

Schreib doch einfach nix, wenn du nix zu sagen hast oder
beantworte seine Frage.

voll zustimme :thumb: ..Dachte, dieses "sommerlochgeschnatter" waere nun endlich genug nach ca. 800 Beitraegen *kobbschuettel*


Nun noch zum Thema:

versuch mal Deinem Quelltext bissl Form zugeben.."einruecken Begin End etc." macht es uebersichtlicher
und Fehler lassen sich auch besser finden.

blender 24. Jun 2008 16:17

Re: Security Software
 
Die Batch soll ja laufend nach dem Taskmanager suchen und ihn beenden.

Code:
:anfang
taskkill /im taskmgr.exe
GoTo anfang
Was ist an GoTo´s eigentlich so schlimm?

NormanNG 24. Jun 2008 16:42

Re: Security Software
 
Hi,

ich hab´dir mal den Code etwas formatiert...
Dann hat man bessere Übersicht, weiß wo ein
begin anfängt und wo das dazugehörige end steht etc.

Das mit dem goto ist ein no-go :lol:
Wird im allgemeinen als schlechter Programmierstil angesehen,
weil der Programmfluss nicht mehr so einfach zu durchschauen ist.

Versuch doch mal, das Programm in einzelne Prozeduren/Funktionen zu
unterteilen. Dann wird der Hauptteil übersichtlicher und du brauchst
(hoffentlich) keine goto´s mehr :wink:

Delphi-Quellcode:
program Security1Beta;

{$APPTYPE CONSOLE}

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls,
  shellapi;

var Passwort, compname, test: String;
    Wrongcount: Integer = 0;
label anfang, ende, EnterComputerName;
begin
  if DirectoryExists(test+'_Desktop') then WrongCount := 4;
anfang:
  Write('Please enter Password to access: ');
  ReadLn(Passwort);
  writeln;
  if (passwort = 'passwort1') and (wrongcount < 4) then
  begin
    writeln('Access...');
    goto ende;
  end else if wrongcount < 4 then
  begin
    writeln('Access denied!!! You can try one more.');
    inc(wrongcount);
  end else begin
    writeln('Access to all functions of the program will be blocked...');
    writeln('Another entering the password is no longer possible.');
    EnterComputerName:
    CreateDir(test+'_Desktop');
    writeln('Please identify yourself as the owner of this computer.');
    writeln;
    write('Please enter the computer name: ');
    ReadLn(compname);
    if compname = GetEnvironmentVariable('USERDOMAIN') then
    begin
      writeln;
      writeln('Computer name is checked...');
      writeln;
      writeln('Computer name confirmed.');
      RemoveDir(test+'_Desktop');
      wrongcount:= 0;
      writeln;
      goto anfang;
    end else begin
      writeln;
      writeln('Computer name is checked...');
      writeln;
      writeln('Wrong input.');
      writeln('Full closure is initialized...');
      writeln('Full closure in Progress...');
      CreateDir(test+'_Lokale Einstellungen');
      writeln('Full closure complete.');
      goto EnterComputerName
    end;
  end;
  writeln;
  goto anfang;
ende:
  writeln;
  write('To end the program press enter.');
  ReadLn;
end.

lbccaleb 24. Jun 2008 17:50

Re: Security Software
 
du kannst auch ne menge units aus deinem programm verbannen, um die datei grösse zu reduzieren...
du verwendest eh keine befehle aus diesen units...

hab sie mal markiert:

Delphi-Quellcode:
program Security1Beta;

{$APPTYPE CONSOLE}

uses
  Windows,
  SysUtils; // das sind die einzigen verwendeten units, der rest ist nicht in verwendung
             // das verringert deine dateigrösse von rund 361kb auf rund 43kb
//  Messages,
//  Variants,
//  Classes,
//  Graphics,
//  Controls,
//  Forms,
//  Dialogs,
//  StdCtrls,
//  shellapi;

var
  Passwort,
  compname,
  test: String;
  Wrongcount: Integer = 0;

label anfang, ende, EnterComputerName;

begin
  if DirectoryExists(test+'_Desktop') then WrongCount := 4;
anfang:
  Write('Please enter Password to access: ');
  ReadLn(Passwort);
  writeln;
  if (passwort = 'passwort1') and (wrongcount < 4) then
    begin
      writeln('Access...');
      goto ende;
    end
  else if wrongcount < 4 then
    begin
      writeln('Access denied!!! You can try one more.');
      inc(wrongcount);
    end
  else
    begin
      writeln('Access to all functions of the program will be blocked...');
      writeln('Another entering the password is no longer possible.');
      EnterComputerName:
      CreateDir(test+'_Desktop');
      writeln('Please identify yourself as the owner of this computer.');
      writeln;
      write('Please enter the computer name: ');
      ReadLn(compname);
      if compname = GetEnvironmentVariable('USERDOMAIN') then
        begin
          writeln;
          writeln('Computer name is checked...');
          writeln;
          writeln('Computer name confirmed.');
          RemoveDir(test+'_Desktop');
          wrongcount:= 0;
          writeln;
          goto anfang;
        end
      else
        begin
          writeln;
          writeln('Computer name is checked...');
          writeln;
          writeln('Wrong input.');
          writeln('Full closure is initialized...');
          writeln('Full closure in Progress...');
          CreateDir(test+'_Lokale Einstellungen');
          writeln('Full closure complete.');
          goto EnterComputerName
        end;
    end;
    writeln;
    goto anfang;
ende:
  writeln;
  write('To end the program press enter.');
  ReadLn;
end.

eine frage aber noch:
wozu soll dieses programm genau sein, und was hat das mit sicherheit zu tun??

fLaSh11 24. Jun 2008 18:17

Re: Security Software
 
Außerdem solltest du bedenken, dass man die Zeile

Delphi-Quellcode:
{...} if (passwort = 'passwort1') {...}
mit jedem guten Disassembler auslesen kann und somit das Passwort in Null Komma nichts herausfinden kann!

smallsmoker 24. Jun 2008 19:01

Re: Security Software
 
Zitat:

mit jedem guten Disassembler auslesen kann und somit das Passwort in Null Komma nichts herausfinden kann!
stichwort: dec 5.1

lbccaleb 24. Jun 2008 19:08

Re: Security Software
 
Zitat:

Zitat von fLaSh11
Außerdem solltest du bedenken, dass man die Zeile

Delphi-Quellcode:
{...} if (passwort = 'passwort1') {...}
mit jedem guten Disassembler auslesen kann und somit das Passwort in Null Komma nichts herausfinden kann!

sicher ist das so, aber ich glaube er fängt gerade erst an, da ist das vllt erstmal ausreichend für den anfang ;-)

mit disasm kann er sich dann später einfriemeln ...

fLaSh11 24. Jun 2008 19:39

Re: Security Software
 
@ lbccaleb:
Haste natürlich recht! Klar muss man nicht alles perfekt sein. Mein Vorschlag war für die weiterführende Arbeit. Sozusagen für Version 2 :-D

blender 26. Jun 2008 15:34

Re: Security Software
 
Wie kann man es denn Verhindern, dass das Passwort eingelesen werden kann?

DeddyH 26. Jun 2008 15:35

Re: Security Software
 
Du müsstest es verschlüsseln oder irgendwie außerhalb des Kompilats ablegen oder besser beides.

RavenIV 26. Jun 2008 15:36

Re: Security Software
 
Zitat:

Zitat von blender
Wie kann man es denn Verhindern, dass das Passwort eingelesen werden kann?

Passwort verschlüsseln.
Siehe Beitrag #16

Macci 26. Jun 2008 16:15

Re: Security Software
 
Verschlüsseln reicht nicht, weil, wenn dein Programm in der Lage ist, es zu entschlüsseln, auch jeder sofort selbst nachsehen kann, was dein Programm tut, und es dann entschlüsseln kann.

Bessere wäre ein Hash, also z.B. MD5. Dafür gibt es bereits fertige Funktionen, die für dich so einen Hash erzeugen.

blender 26. Jun 2008 16:18

Re: Security Software
 
Was ist denn ein Hash?

Das mit dem Verschlüsseln hatte ich mir auch gedacht, bin aber zu dem gleichen Schluss gekommen wie Macci.

Die Muhkuh 26. Jun 2008 16:37

Re: Security Software
 
Hash bedeutet "Verwischen". Der Vorteil eines solchen ist, dass man aus dem Hash das Original nicht mehr reproduzieren kann.

MD5 wäre ein solcher Hash. Dazu findest Du einiges hier in der Forensuche.

Zitat:

Verschlüsseln reicht nicht, weil, wenn dein Programm in der Lage ist, es zu entschlüsseln, auch jeder sofort selbst nachsehen kann, was dein Programm tut, und es dann entschlüsseln kann.
Du kannst hashen, verschlüsseln etc. pp. wie Du willst. Es wird immer einen schlauen Cracker (?) geben, der die Entschlüsselungsroutine nachbilden kann.

Valle 26. Jun 2008 17:01

Re: Security Software
 
Hi blender! :hi:

Scheinbar bist du ziemlich neu, was Delphi angeht, habe ich Recht? :) Wie einige hier schon geschrieben haben: Aller Anfang ist schwer. Also mach die keinen Kopf um manch böse Bemerkungen hier. Der Wille zählt, und der scheint vorhanden zu sein.

Um mal zu deinem Projekt zu kommen: Zwei Dinge solltest du an deinem Source unbedingt ändern. Zum einen sind es die gotos. Selbstverständlich funktioniert ein Programm auf mit Gotos einwandfrei, aber gotos haben einen großen Nachteil: Die Übersichtlichkeit leidet total. Wenn dein Projekt mal mehr als 500 Zeilen haben sollte, dann siehst weder du noch einer der Community-Mitglieder hier noch dabei durch. ;-)

Das andere ist die Codeeinrückung. NormanNG war so freundlich und hat deinen Code mal sehr schon eingerückt. Vielleicht kannst du dir das ja angewöhnen. Gut eingerückter Code macht den Code noch lesbarer und der Programmierer wirkt auch viel professioneller! Und schließlich muss man auch auf sein Image achten. :zwinker:

Nun, du hast mit deinem Programm das Thema "Security" in Angriff genommen. Ich will dir wirklich nichts aufdrücken, aber ganz persönlich würde ich dir was anderes empfehlen. Security ist ein großen, sehr kompliziertes Thema. Wie wäre es, wenn du dir mal was anderes vornimmst? Hier in der DP gibt es viele Threads, mit derartigen Vorschlägen. Hier mal ein paar einfache und auch teilweise interessante Dinge:
  • Einen Taschenrechner.
  • Eine Adressverwaltung, mit welcher du Telefonnummern verwalten kannst.
  • Oder vielleicht eine andere Verwaltung? Für Filme, MP3s oder so?
  • Wie wäre es mit einem kleinen Spiel? Breakout, Tetris, Pong?

Viel Spaß und Erfolg noch auf deinem weiteren Werdegang.
Und lass dich nicht klein kriegen! ;-)

Mit freundlichen Grüßen,

Valle

blender 26. Jun 2008 17:24

Re: Security Software
 
Hallo,
danke.

Nochmal so: Dieses Projekt habe ich in rund 10 Minuten programmiert. Normalerweise achte ich auch auf einrückung.
Mir geht es bei dem Projekt in erster Linie darum etwas mehr über Sicherheit und Konsolenanwendungen herauszufinden.
Normalerweise programmiere ich auch keine Konsolen Anwendung.
Aber zu so einem Programm passt es einfach. (Im Vollbild sieht es ganz gut aus.)

Ich programmiere schon ein bisschen länger in Delphi.

Zum Thema:

1. Wie bekomme ich die Anwendung automatisch in den Vollbild Modus?
2. Wie verhindere ich effektiv den Taskmanager, ohne dass der Benutzer es merkt? Die Verhinderung muss natürlich nach Eingabe des Passwortes aufgehoben werden.
3. Mann KÖNNTE als Sperrung gezielt einen Registry Schlüssel ändern. Das würde bewirken, dass beim nächsten Neustart die Maus oder Tastatur abgeschaltet ist
4. Wie könnte das Programm in den Autostart kopieren, ohne dass der Benutzer es dort ohne das Passwort wieder raus bekommt?

Ich denke 3. ist eh nur rein Theoretisch.

Edit: Gotos benutze ich sonst auch selten. (Bisher ein mal.)

Valle 26. Jun 2008 17:32

Re: Security Software
 
Nun, da du deine Software ja schon Security nennst: Ich denke mal, das Ziel ist wirklich absolut Sicherheit, oder? Also so richtig sicher. *g* Wenn es wirklich richtig sicher haben willst, dann ist das schon ein total falscher Ansatz. Such mal im Forum nach GINA.dll, das dürfte in die richtige Richtung gehen. ;-)

Allerdings ist Sicherheit etwas allgemein. Was genau willst du denn sicher haben? Beschränke dich mit deiner Software doch erstmal auf ein Themengebiet. Mach eine Firewall draus, da hat man schon gegnug zutun. Wenn die Firewall dann noch Features hat, wie NAT, iptables-Style usw. würde ich sie sogar benutzen. :mrgreen:

Also nochmal Zusammenfassung: An deinem Programm fehlt das Konzept. Mir wird nicht ganz klar, was das Ziel des Programms sein soll. Auch Konzept und Umsetzung sind nicht wirklich der Kracher. Vielleicht denkst du doch besser mal über etwas anders nach? :)

Mit freundlichen Grüßen,

Valle

Macci 26. Jun 2008 18:19

Re: Security Software
 
Zitat:

Zitat von Die Muhkuh
Du kannst hashen, verschlüsseln etc. pp. wie Du willst. Es wird immer einen schlauen Cracker (?) geben, der die Entschlüsselungsroutine nachbilden kann.

Hä, wie soll man denn einen Hash "entschlüsseln" ?
Beispiel einer SEHR einfachen Hashfunktion: Die Quersumme. Sei mein Passwort z.B. 1234, dann ist die Quersumme 1+2+3+4 = 10.
Wenn du jetzt nur die 10 weisst, wie willst du dann auf mein Passwort schließen? 1234 könnte genauso stimmen wie z.B. 19, oder noch unendlich - naah, endlich aber verdammt viele - andere Möglichkeiten.

Natürlich verwendet man in der Praxis nicht so einen dummen Hash-Algo. sondern einen besseren.

Die Muhkuh 26. Jun 2008 18:21

Re: Security Software
 
Sorry, ich bezog das mit der Entschlüsselungsroutine nur auf verschlüsseln und nicht auf hashen. Bisschen blöde ausgedrückt.

Jedoch kann der Cracker, wenn er weiß, wie der Hash berechnet wird, diesen Nachbilden (also wenn er weiß, dass der MD5 Hash aus Vorname und Nachname gebildet wird).

dominikkv 26. Jun 2008 18:25

Re: Security Software
 
Zitat:

Zitat von Macci
1234 könnte genauso stimmen wie z.B. 19, oder noch unendlich - naah, endlich aber verdammt viele - andere Möglichkeiten.

Genau, und man muss nur eine Möglichkeit finden. zB über Bruteforce mit Rainbowtabellen
Zitat:

Zitat von Macci
Natürlich verwendet man in der Praxis nicht so einen dummen Hash-Algo. sondern einen besseren.

Der dann die Wahrscheinlichkeit von Kollisionen vermindert und damit wieder sicherer ist.

BUG 26. Jun 2008 18:29

Re: Security Software
 
Zitat:

Zitat von Macci
Wenn du jetzt nur die 10 weisst, wie willst du dann auf mein Passwort schließen? 1234 könnte genauso stimmen wie z.B. 19, oder noch unendlich - naah, endlich aber verdammt viele - andere Möglichkeiten.

Und genau das ist das Problem bei Hashs, da man das echte Passwort garnicht wissen muss ... der böse Cracker gibt 19 ein, die Software berechnet die Quersumme (= 10) und nimmt an das es das richtige Passwort war.

Auch für MD5 geht das!

Aber diese Suppe kann man dem Angreifer auch versalzen ...

MfG,
Bug


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.

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