Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verhindern, dass eigenes Programm von außen gesteuert wird?? (https://www.delphipraxis.net/66910-verhindern-dass-eigenes-programm-von-aussen-gesteuert-wird.html)

romber 6. Apr 2006 12:26


Verhindern, dass eigenes Programm von außen gesteuert wird??
 
Hallo!

Wie kann ich verhindern, dass eine andere Anwenung mein Programm steuern kann, ich meine Buttons klicken, Textfelder ausfüllen etc. Das geht relativ einfach, wenn man das Handle des Objektes erhalten kann. Aber wie kann ich das verhindern?

Danke!

Sidorion 6. Apr 2006 12:35

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Entweder, Du sorgst dafür, dass sich dein Handle ständig ändert (Form neu machen), oder Du sorgst dafür, dass die gesamte Oberfläche ein einziges Handle hat (z.b.: ein TImage nehmen und alles selber da draufzeichnen), oder Du ignorierst alle Windows-Nachrichten.

MathiasSimmack 6. Apr 2006 12:51

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von Sidorion
oder Du ignorierst alle Windows-Nachrichten.

Würde mich mal interessieren, wie das in der Praxis aussieht. Immerhin sendet das eigene Programm auch ja Nachrichten. :stupid:

Robert Marquardt 6. Apr 2006 12:54

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Ich glaube Sidorion verarscht dich ein bischen.
Nicht auf Windows-Messages zu reagieren bedeutet das das Programm nicht auf Eingaben reagieren kann.
Eine Fernsteuerung mittels Messages laesst sich praktisch nicht verhindern. Zusaetzlich gibt es noch die Moeglichkeit der Fernsteuerung mittels synthetisierter Maus- und Keyboardmessages (mouse_event bzw keybd_event).

romber 6. Apr 2006 22:36

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Wie kann man solche Fernsteuerung maximal erschweren?

Luckie 6. Apr 2006 22:52

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Warum willst du es eigentlich verhindern? Gibt es einen besonderen Grund dafür? :?

romber 7. Apr 2006 00:10

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Ich habe ein Programm geschrieben für eine Gruppe von Autohändlern. Das Programm bietet allen Benutzern gleiche Vorteile. Jetzt hat einer der Händler einen anderen Entwickler beauftragt ein Programm zu entwickeln, mit dem man bestimmte Funktionen meines Programms so manipulieren kann, dass es für andere Benutzer keinen Sinn mehr macht, mein Programm zu benutzen. Er hat das auch erreicht. Ich möchte das verhindern.

Daniel G 7. Apr 2006 00:22

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von romber
Er hat das auch erreicht. Ich möchte das verhindern.

Wie sind deine Lizenzbedingungen formuliert? Oder anders gefragt:
Besteht die Möglichkeit einer Unterlassungsklage?

Luckie 7. Apr 2006 00:22

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Das verstehe ich nicht. Das Programm läuft doch wohl lokal auf einem PC bei dem Autohändler oder?Und was kümmert es dich, wenn jemand dein Programm für andere unbenutzbar macht? Das sollten dann die anderen Benutzer mit dem einem Autohädler klären.

romber 7. Apr 2006 00:30

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Juristisch lässt sich einiges machen, ich habe schon eine Unterlassungserklärung beauftragt, dann kommt noch die Einstweilige Verfügung und die Schadenersatzanspruche, unter anderem auch für die betrofenen Autohändler. Aber das alles gehört hier nicht.

Technisch gesehen muss jetzt ein Update her, die die Manipulationen verhindert. Was kann man da machen?

Das Problem verursacht nur ein Button in der ToolBar meines Programs. Es wird mit einem Interval von 1-3 Sekunden einen Klick auf diese Button simuliert. Das muss verhindert werden.

cruiser 7. Apr 2006 04:55

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Geht es um einen Online-Abgleich? Dann bau doch ein server- oder clientseitiges Delay ein, so dass die Taste nach dem Drücken für 5-10 Sekunden funktionsuntüchtig bleibt (oder am Server einfach nichts für diesen Client gemacht wird in der Zeit)

Nicht schön, aber wirkungsvoll...

Noch ein Edit: Wie kanns überhaupt passieren, dass ein einzelner mit sowas einfach alles lahmlegen kann? Rein interessehalber...

SirThornberry 7. Apr 2006 05:43

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
wie cruiser schon schrieb könnte man bei deinem problem einfach im ButtonClick prüfen dass, das letzte ButtonClick schon eine weile her ist. Desweiteren könntest du überprüfen ob dein Programm den Focus hat während der Eingabe. Wenn man der WM_Click etc. gearbeitet wird könntest du eventuell auch global abfragen ob die Maustaste gedrückt ist.

romber 7. Apr 2006 09:38

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Kann ich es z. B. so machen, dass während des Mausklicks auf die Schaltfläche eine Code dynamisch erstellt wird, die dann in der OnClick-Procedure überprüft wird? Würde das helfen? Oder kann man auch den Mausklick von außen simulieren?

Matze 7. Apr 2006 09:40

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von romber
Oder kann man auch den Mausklick von außen simulieren?

Jupp, natürlich geht das auch. Das ist also dann keine Lösung für dein Problem.

romber 7. Apr 2006 09:44

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Hat jmand noch Ideen?

DerDan 7. Apr 2006 09:52

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Du könntest Hook Funktionen für Maus und Tastatur schreiben und deren Informationen auswerten,

das wäre mal ne Hürde, diese Informationen zu simulieren.

Aber wenn der andere Programmier schlau ist schaut er auch in die DP und findete den Tipp und muss nur deine Hook-DLL gegen eigene tauschen!


Also man kann die Latte nur höher legen, aber wenn einer will springt er drüber.


Sollt dein Programm nicht mehr knackbar sein schreibt der andere halt ein Eigenes. wo "nur" die Funktionalität diese einen Button drin steckt.



Den Vorschlag mit dem Verhindern das in alzu kurzen Klick Abständen was passiert findi ich auch sehr gut.

Vor allem wenn es der Server auswertet.

MathiasSimmack 7. Apr 2006 09:53

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Dazu müsstest du wenigstens mal kurz anreißen, was dieser eine Button denn macht? Wie kann eine einzige Person durch einen Buttonklick das System/Programm für andere unbenutzbar machen? Du solltest vllt. an dieser Stelle ansetzen.

mkinzler 7. Apr 2006 09:56

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Du könntest auf den Button noch eine weitere Sichrheitsabfrage legen, z.B. Eingabe von Passwort ( könnte er umgehen :-() oder Eingabe eines dynamisch erzeugte Prüfcodes.

himitsu 7. Apr 2006 10:37

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von mkinzler
oder Eingabe eines dynamisch erzeugte Prüfcodes.

kann man auch umgehen -.-''

DevilsCamp 7. Apr 2006 10:48

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Wenn ich das hier richtig verstanden habe, dann muss der Bentzer normalerweise SELBER auf den Button klicken.
Prüfe doch einfach, ob dein Fenster aktuell den Fokus besitzt, wenn auf den Button geklickt wurde. Wenn ja, dann wird der Code ausgeführt, ansonsten nicht...

Vjay 7. Apr 2006 10:49

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von DevilsCamp
Wenn ich das hier richtig verstanden habe, dann muss der Bentzer normalerweise SELBER auf den Button klicken.
Prüfe doch einfach, ob dein Fenster aktuell den Fokus besitzt, wenn auf den Button geklickt wurde. Wenn ja, dann wird der Code ausgeführt, ansonsten nicht...

Naund, dann setzt das andere Prog eben den Focus auf ihn, wo ist das Problem...?

*EDIT*

Aus diesem Kampf kann man nicht als Sieger hervorgehen, man kann es nur schwerer machen. Naja, bald haben wir ja TCPA etc., dann geht das zwar, aber zu welchem Preis ;)

Klaus01 7. Apr 2006 10:51

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
eine Prüfcode wie bei Ebay,
da wird eine Zahlenkombination als Bild (bitmap)
dargestellt.

Eingegben werden muß sie hingegen als Ziffernfolge.
Das Bitmap sollte von extern nicht so leicht zu analysieren sein.

Grüße
Klaus

DevilsCamp 7. Apr 2006 10:52

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von Vjay
Zitat:

Zitat von DevilsCamp
Wenn ich das hier richtig verstanden habe, dann muss der Bentzer normalerweise SELBER auf den Button klicken.
Prüfe doch einfach, ob dein Fenster aktuell den Fokus besitzt, wenn auf den Button geklickt wurde. Wenn ja, dann wird der Code ausgeführt, ansonsten nicht...

Naund, dann setzt das andere Prog eben den Focus auf ihn, wo ist das Problem...?

Würdest du es mögen, wenn dein aktuelles Programm regelmäßig den Fokus verliert?

Vjay 7. Apr 2006 10:55

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von DevilsCamp
Würdest du es mögen, wenn dein aktuelles Programm regelmäßig den Fokus verliert?

Sagen wir ein 2 Gigaherz Rechner mit aktueller Grafikkarte.
Lass uns mal überlegen, Focus setzen, Click, Focus zurückholen = 70 Millisekunden? Das siehst du kaum, und wenn doch sperre ich dir vorher noch deine GDI Refresh-Routine, somit wird garnichts gezeichnet während dieser Zeit.

Klaus sein Vorschlag ist gut, das Bild muss allerdings serverseitig erzeugt werden.
Die anderen Nutzer werden sich darüber sicherlich nicht freuen, aber da das Programm ansonsten wie beschrieben unbrauchbar ist, werden sie es wohl in kauf nehmen müßen.

Die einzige Chance ist irgendetwas serverseitig zu machen, denn der Client ist IMMER manipulierbar.

brechi 7. Apr 2006 10:58

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Wie bei den online games: Ein Bild mit Zahlen und Buchstaben erstellen die man dann in ein Editfeld eintragen muss.

Wenn übrigens, keine Hooks verwendet wurden sondern nur due normalen windows Befehle zum steuer des Programms (keybd_event usw) wirste mit ner Klage nicht durchkommen.

DevilsCamp 7. Apr 2006 10:58

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von Vjay
Zitat:

Zitat von DevilsCamp
Würdest du es mögen, wenn dein aktuelles Programm regelmäßig den Fokus verliert?

Sagen wir ein 2 Gigaherz Rechner mit aktueller Grafikkarte.
Lass uns mal überlegen, Focus setzen, Click, Focus zurückholen = 70 Millisekunden? Das siehst du kaum, und wenn doch sperre ich dir vorher noch deine GDI Refresh-Routine, somit wird garnichts gezeichnet während dieser Zeit.

dann wäre noch ein eigener Button mut OnMouseEnter und OnMouseLeave ;)

Oder wird OnMouseEnter durch SetCursorPos() ausgelöst?

Vjay 7. Apr 2006 11:00

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Devil wir können dieses Spiel bis zur Unendlichkeit treiben, du kannst nicht gewinnen.

Und wenn du mit irgendwelchen Funktionen sonstwas abfragst, ich bieg dir sie dir alle um ;)

mkinzler 7. Apr 2006 11:03

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
das mit Prüfcode war so gemeint wie brechi es beschrieben hat. Prüfcode in ein nicht maschienelesbarem Bild erzeugen, un den abfragen.

DevilsCamp 7. Apr 2006 11:03

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von Vjay
Und wenn du mit irgendwelchen Funktionen sonstwas abfragst, ich bieg dir sie dir alle um ;)

Und begibst dich immer mehr ins illegale...

Vjay 7. Apr 2006 11:06

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von DevilsCamp
Und begibst dich immer mehr ins illegale...

Selbst da widerspreche ich dir, denn entweder ist es legal oder illegal ;)

DevilsCamp 7. Apr 2006 11:15

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
na gut, getreu dem Motto der Klügere gibt nach, beende ich dies hiermit.


Sollten wirklich Daten zu einem Server gesendet werden, so hat dieser sicher irgendwo eine Benutzerauthentifizierung. Diese kann man im Extremfall für eine bestimmte Zeit deaktivieren, wenn zuviele Anfragen kommen oder komplett entfernen....

cruiser 7. Apr 2006 17:59

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Hum... bleibt mal beim Prakmatischsten.. sichern kann ers nur dadurch, dass er verhindert, dass ein einziger User das System blockieren kann. Das hat weniger etwas mit der GUI als mit der Abfrage(routine) an sich zu tun. Aber um da wirklich helfen zu können bräuchte man ein paar mehr Infos.

negaH 7. Apr 2006 18:18

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Du musst die Intelligenz des Menschen vor dem Rechner abfragen, sprich eine Abfrage die mit heutigen Mitteln nicht automatisiert werden kann.

Zb. hast du statt 1 Bestätigungsbutton 3 solcher Buttons. Den Text/Grafik auf diesen Buttons zeichnest du über das GDI selber, zb. Text als Grafik -> "Abbruch" "Bestätigen". Nun wählst du per Zufall nun 1 der 3 Buttons als Bestätigen Button aus und die anderen beiden als Abbruch Button. Im Program überprüfst du das in einer Zeitspanne von zb. 100-500 Millisekunden nur einer der 3 Button gedrückt wurde.

Eine "Angreifer" müsste nun schon entweder

1.) eine Schrift/Bilderkennungssoftware programmieren können, die meisten schaffen das nicht.
2.) das komplette GDI System hooken, oder
3.) gleich dein Program dynamisch patchen/Code injezieren

Gruß Hagen

Nicodius 7. Apr 2006 18:57

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
die logischte und einfachste variante ist wie gesagt schon die zu prüfen wann der letzte buttonklick erfolgt ist ... zb alle sek macht dei programm einen klick - dann fügst du ne zeile ein die das prüft ob der letzte klick auc hschon 5 ske her ist und dann erst wird der klick simuliert ;)


grüße Nico

DGL-luke 8. Apr 2006 15:14

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Irgendwie muss der pöhse Haxor ja an dein Fensterhandle - also kannst du ganz einfach alle Funktionen, mit denen das geht (EnumWindows, GetWindowFromPoint, GetActiveWindow etc.) hooken und dein eigenes Programm verstecken (oder gleich den aufrufer killen, Exception sollte reichen :gruebel: ). Ach ja, wie wärs mit nem rootkit? :mrgreen:

Ansonten wäre es gut etwas mehr über die Archtitektur deines Programmes zu wissen. Ich gehe jetzt mal davon aus, dass alles lokal abläuft. Das störende Programm scheint ja dein Programm mit Ereignissen zuzukloppen, so dass kein sinnvolles arbeiten mehr möglich ist.
Eventuell kannst du dieses Programm finden und zerstören. Ausserdem fragt sich, wie kommt das Programm da hin? Es ist ja eigentlich bereits als Virus einzustufen. Alle Sicherheitsmaßnahmen gegen Viren können also auch hier helfen.
Ausserdem solltest du versuchen, einen infizierten Rechner zu kriegen, damit du den untersuchen kannst und sehen, wo das gegnerische Programm herkommt.

Nikolas 8. Apr 2006 18:50

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Eventuell kannst du dieses Programm finden und zerstören.
Was aber eine strafbare Datenmanipilation wäre.

Zitat:

Ausserdem fragt sich, wie kommt das Programm da hin? (...)Ausserdem solltest du versuchen, einen infizierten Rechner zu kriegen, damit du den untersuchen kannst und sehen, wo das gegnerische Programm herkommt.
Dieses Programm wurde vom Besitzer des Rechners bestellt und installiert...

Zitat:

Es ist ja eigentlich bereits als Virus einzustufen. Alle Sicherheitsmaßnahmen gegen Viren können also auch hier helfen.
Als Mensch kann man das so sehen, aber ein Virensuchprogramm dürfte es da schwerer haben.

DGL-luke 8. Apr 2006 19:20

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Dieses Programm wurde vom Besitzer des Rechners bestellt und installiert...
Ok... also sind fünf verschiedene Autohändler am selben Rechner? Und der, dem der Rechner gehört, manipuliert rum?
Glaube ich nicht. Ich weiss nicht, woraus du deine Informationen ziehst, toxman, aber dieses szenario erscheint mir als unrealistisch.

Was sind das eigentlich für "Vorteile", die das Programm bringt? :gruebel:

Wie bereits gesagt, ohne weiteres Wissen über die Architektur der Softwarelösung, des Systems(ok... MS Windows...) und wie beide interagieren(man kann mit Windows messages dran schrauben... aber wann kann man das nicht?), kann ich nicht mehr sagen.

Am wahrscheinlichsten ist das Szenario, dass es ein PC ist, und man über verschiedene Benutzerkonten (programmintern oder auf Systemebene) auf verschiedene Datenstrukturen Zugriff bekommt. Ein Jammer blockiert nun das Interface, indem z.B. jeder "Abbruch"-Button, der erscheint geklickt wird.

Wenn das das Programm merkt, gleichzeitig feststellen kann, dass ein (genügend) autorisierter user am PC sitzt und sich gestört fühlt, kann es dem user die Option anbieten, den Störenfried abzuschießen - wäre das dann illegal?
Natürlich muss man dazu des Störenfrieds habhaft werden. Man kann dem User dann auch eine PID anbieten und ein Programm, dass diese abschießt...

Also noch einmal: was macht das programm? wie genau wird es gestört?

Hallo_Thomas 8. Apr 2006 19:26

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Bloss mah so ein Gedanke von nehm Ahnungslosen.

Meiner Meinug nach bei nehm lokalen Programm stimme ich DGL-luke zu.

Wenn es aber übers Netz läuft, müsste sich doch feststellten von welcher IP die angriffe kommen, und dann müsste es doch gehen diese IP zu ignorieren.

Nikolas 8. Apr 2006 20:28

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Ok... also sind fünf verschiedene Autohändler am selben Rechner? Und der, dem der Rechner gehört, manipuliert rum?
Glaube ich nicht. Ich weiss nicht, woraus du deine Informationen ziehst, toxman, aber dieses szenario erscheint mir als unrealistisch.
Ich ziehe meine Informationen aus den Aussagen der Threaderstellers...
Zitat:

Jetzt hat einer der Händler einen anderen Entwickler beauftragt ein Programm zu entwickeln, mit dem man bestimmte Funktionen meines Programms so manipulieren kann, dass es für andere Benutzer keinen Sinn mehr macht, mein Programm zu benutzen.
Ich habe das so verstanden, dass es sich um irgendein Informationssystem handelt, dass einer der Nutzer durch eine Denial-of-Service Attacke lahmlegt.

DGL-luke 9. Apr 2006 12:24

Re: Verhindern, dass eigenes Programm von außen gesteuert wi
 
Zitat:

Zitat von Toxman
Ich habe das so verstanden, dass es sich um irgendein Informationssystem handelt, dass einer der Nutzer durch eine Denial-of-Service Attacke lahmlegt.

Stimmt. Möglich. Das sollte man dann aber nicht auc client-ebene, sondern auf server-ebene regeln. iptables sollte schon reichen... einfach eine bestimmte höchstzahl von requests pro stunde oder ähnliches.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 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