![]() |
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:
Das funktioniert soweit auch ganz gut.
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. 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. |
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.
|
Re: Security Software
Du solltest Dir außerdem bewusst sein, dass man das Programm einfach per Taskmanager abschießen kann.
|
Re: Security Software
Zitat:
|
Re: Security Software
Die Umgebungsvariable USERDOMAIN enthält den Computernamen? :gruebel:
|
Re: Security Software
Zitat:
|
Re: Security Software
Zitat:
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> |
Re: Security Software
Zitat:
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. |
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. |
Re: Security Software
Schließe die Batch doch per "exit" wieder?
|
Re: Security Software
Zitat:
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. |
Re: Security Software
Die Batch soll ja laufend nach dem Taskmanager suchen und ihn beenden.
Code:
Was ist an GoTo´s eigentlich so schlimm?
:anfang
taskkill /im taskmgr.exe GoTo anfang |
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. |
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?? |
Re: Security Software
Außerdem solltest du bedenken, dass man die Zeile
Delphi-Quellcode:
mit jedem guten Disassembler auslesen kann und somit das Passwort in Null Komma nichts herausfinden kann!
{...} if (passwort = 'passwort1') {...}
|
Re: Security Software
Zitat:
|
Re: Security Software
Zitat:
mit disasm kann er sich dann später einfriemeln ... |
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 |
Re: Security Software
Wie kann man es denn Verhindern, dass das Passwort eingelesen werden kann?
|
Re: Security Software
Du müsstest es verschlüsseln oder irgendwie außerhalb des Kompilats ablegen oder besser beides.
|
Re: Security Software
Zitat:
Siehe Beitrag #16 |
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. |
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. |
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:
|
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:
Viel Spaß und Erfolg noch auf deinem weiteren Werdegang. Und lass dich nicht klein kriegen! ;-) Mit freundlichen Grüßen, Valle |
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.) |
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 |
Re: Security Software
Zitat:
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. |
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). |
Re: Security Software
Zitat:
Zitat:
|
Re: Security Software
Zitat:
Auch für MD5 geht das! Aber diese Suppe kann man dem Angreifer auch ![]() MfG, Bug |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 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