Entwickler-Ecke
Windows API - "***" Enabler
derDoc - Fr 07.02.03 13:59
Titel: "***" Enabler
Kann mir jemand sagen, wie ich es schaffe, dass die "***" aus einem Eingabefeld in ihre richtigen Buchstaben und Zahlen verwandelt werden?
Delete - Fr 07.02.03 14:03
Könnte ich, aber ich glaube nicht dass ich will, weil ich nicht weiß, was du damit dann anstellst.
Anonymous - Fr 07.02.03 14:14
Luckie hat folgendes geschrieben: |
Könnte ich, aber ich glaube nicht dass ich will, weil ich nicht weiß, was du damit dann anstellst. |
Was kümmert dich es eigentlich was er damit "aqnstellt" ? Ist es den etwa Illegal? Finde ich nicht.... Mich Intressiert das auch =)
derDoc - Fr 07.02.03 14:21
Ich kann dir schon sagen, was ich damit vorhabe. Es ist nichts illegales. Ich will einen Enabler/Disabler schreiben und hatte vor, diese Funktion mit einzubauen. Dieser ist Teil eines Passwort Schutzes:
Ich habe ein Programm, in das ich Passwörter in Maskedits eingebe und sichere (als "****"). Um an diese Passwörter wieder heranzugelangen, will ich ein En/Dis schreiben (welcher auf eine Diskette passen sollte), der die "****" wieder zurückverwandelt.
Zudem sollten die Programme nur zusammen funktionieren. Also das eine nur mir diesem En/Dis zusammenarbeiten.
Delete - Fr 07.02.03 14:23
So? Ich denke, wenn man Wissen hat, hat man auch eine Verantwortung. Und ich kenne ihn nicht und weiß nicht wie verantwortungsbewußt er ist. Hier im Forum gibt es allerdings ein paar denen ich hier helfen würde, dann aber auch nicht öffentlich, so dass das Wisssen wieder jeden zugänglich ist. Aber bevor ich jetzt E-Mails oder PN's dies bezüglich bekomme, ich werde sie nicht beantworten.
Und wenn es darum geht Passwörter auszulesen, dann greift für mich diese Verantwortung.
Ich sage immer: "Wenn jemand Sch**ße programmieren will (Virus oder ähnliches, was die Systemsicherheit gefährdet), dann soll er sich das Wissen selber aneignen und nicht darauf bauen, dass ihm andere das Wissen auf dem Silbertablett präsentieren."
Wenn man an den richtigen Stellen sucht, dann wird man auch sehr schnell selber fündig. Zwei Tager recherchieren und das Problem sollte gelöst sein.
derDoc - Fr 07.02.03 14:23
@sCrAPt: Luckie hat schon recht, damit kann man viel Mist machen. Es bleibt schließlich ihm überlassen, ob er mir diesen Tipp gibt oder nicht. Und dann sollte er doch schon wissen, wofür das ist.
Delete - Fr 07.02.03 14:26
Schön dass du das einsiehst. Es ist wirklich nicht böse gemeint und sonst helfe ich dir auch gerne bei deinen Problemen.
derDoc - Fr 07.02.03 16:03
Das ist schon in Ordnung, man kommt ja auch anderweitig an solche Informationen ran.
Delete - Fr 07.02.03 16:08
derDoc hat folgendes geschrieben: |
Das ist schon in Ordnung, man kommt ja auch anderweitig an solche Informationen ran. |
Jupp. Kommt man. Nur weiß ich nicht was mit meinem Code dann passieren würden und ich möchte deswegen dazu nichts beitragen. OK? Eventuell sehe ich das ja etwas überspitzt. :wink:
ShadowCaster - Fr 21.03.03 11:37
ich weiß nur ungefähr wie es geht. Also ich will mich nicht outen. Aber ich finde nicht, dass es illegal ist, Passwörter so wieder sichtbar zu machen. Viele Anwendungen für Windows, die Passwörter benötigen haben bei der Erstellung von Benutzerdaten die Möglichkeit vorgesehen, dass das Passwort sichtbar gemacht werden kann. Nur bei der Eingabe im Programm später nicht mehr.
Das Prob hatte ich auch oft aber man könnte es tatsächlich missbrauchen um auf einem windows-server im benutzerverwaltungsdialog die Benutzerpasswörter auszulesen. Die Passwörter sind immer eine bestimmte Anzahl von zeichen lang was daher kommt, dass sie mit Leerzeichen aufgefüllt werden, damit man nichts über das Passwort erfährt.
Also du musst im Prinzip nur folgendes machen: Die Anwendung mit dem Passwortdialog aufrufen. Dann rufst du ein Delphiprogramm auf was du dir natürlich selbst schreiben musst, was den Handle des aktiven Passwortfensters rausfindet. Es gibt glaub ich ab Delphi5 ein Codebeispiel (in der Enterprise version), was die Handle von Anwendungen und aktiven formularen ermitteln kann (Angabe ohne Gewähr. Ich könnte mich auch irren). Dann ermittelst du den Handle des Editfeldes. Jetzt hast du die Möglichkeit über einen Pointer auf den Speicherbereich dieses Feldes zuzugreifen und das Passwort auszulesen.
So würde ich versuchen, das Passwort in dem Dialog zu ermitteln. Ob es funzt... ?! keine Ahnung.
Ich könnte das zwar proggen, aber kein Bock. Wofür auch? :(
DISCLAIMER - HAFTUNGSAUSSCHLUSS:
Oben genanntes Wissen darf nicht zu illegalen oder strafbaren Handlungen missbraucht werden. Der Author (ich) distanziert sich von jeglichem Missbrauch, der mit diesem Wissen angestellt wird.
Delete - Fr 21.03.03 13:42
ShadowCaster hat folgendes geschrieben: |
ich weiß nur ungefähr wie es geht. |
Hm ...
Zitat: |
Aber ich finde nicht, dass es illegal ist, Passwörter so wieder sichtbar zu machen. |
Ist es an sich auch nicht, wenn man überlegt, was derDoc eigentlich machen wollte:
derDoc hat folgendes geschrieben: |
Kann mir jemand sagen, wie ich es schaffe, dass die "***" aus einem Eingabefeld in ihre richtigen Buchstaben und Zahlen verwandelt werden? |
ShadowCaster hat folgendes geschrieben: |
Das Prob hatte ich auch oft aber man könnte es tatsächlich missbrauchen um auf einem windows-server im benutzerverwaltungsdialog die Benutzerpasswörter auszulesen. |
Wenn man nur ein Programm schreibt, dass in einer laufenden Anwendung die Sternchen eines Passwortfeldes abschaltet und statt dessen wieder die richtigen Zeichen anzeigt, dann hat das mit Spionage nicht viel zu tun.
Zitat: |
Also du musst im Prinzip nur folgendes machen: Die Anwendung mit dem Passwortdialog aufrufen. Dann rufst du ein Delphiprogramm auf was du dir natürlich selbst schreiben musst, was den Handle des aktiven Passwortfensters rausfindet. Es gibt glaub ich ab Delphi5 ein Codebeispiel (in der Enterprise version), was die Handle von Anwendungen und aktiven formularen ermitteln kann (Angabe ohne Gewähr. Ich könnte mich auch irren). Dann ermittelst du den Handle des Editfeldes. Jetzt hast du die Möglichkeit über einen Pointer auf den Speicherbereich dieses Feldes zuzugreifen und das Passwort auszulesen. |
Das allerdings schon.
Zitat: |
DISCLAIMER - HAFTUNGSAUSSCHLUSS: |
So heuchlerisch wie ein Disclaimer sind u.a. PC-Zeitschriften, die dir zwar sagen, dass das Downloaden und Brennen von Filmen illegal ist, gleichzeitig aber die benötigten Tools auf ihre CDs packen ...
Delete - Fr 21.03.03 13:54
ShadowCaster hat folgendes geschrieben: |
Also du musst im Prinzip nur folgendes machen: Die Anwendung mit dem Passwortdialog aufrufen. Dann rufst du ein Delphiprogramm auf was du dir natürlich selbst schreiben musst, was den Handle des aktiven Passwortfensters rausfindet. Es gibt glaub ich ab Delphi5 ein Codebeispiel (in der Enterprise version), was die Handle von Anwendungen und aktiven formularen ermitteln kann (Angabe ohne Gewähr. Ich könnte mich auch irren). Dann ermittelst du den Handle des Editfeldes. Jetzt hast du die Möglichkeit über einen Pointer auf den Speicherbereich dieses Feldes zuzugreifen und das Passwort auszulesen.
|
Unter Windows 9x geht das eventuell noch, aber nicht unter NT-basierenden Systemen.
Popov - Fr 21.03.03 14:22
Also, unter Win9x ff geht es, unter WinNT ff geht es nicht. Das hat schon Luckie gesagt.
Das Prinzip ist simpel, den Code mußt du dir aber selbst zusammensuchen. Ich sage es deshalb, weil es keine Zauberei ist, sondern fast so einfach ist wie ein Text an ein Editfeld zu schicken. Nur funktioniert das hier umgekehrt.
Zuerst erstellst du dir eine Routine mit der du das Handle eines Fensters unter deinem Cursor rausfindest. Mit Fenster sind nicht nur Programmfenster gemeint, sondern auch Buttons, Edits, usw. Das ist ein Fünfzeiler. Dann erstellst du dir ein Code mit dem du Texte aus dem Fenster (hier Editfeld-Text, es geht aber auch mit Captions) rausliest. Das ist ein Zweizeiler. Es hat etwas mit SendMessage und WM_GETTEXT zu tun.
Das wars schon. Der Text den du bekommst ist bei Win9x in Klarform.
Sorry Lucke und Mathias, aber es gibt tausende Programme im Internet die das mit Absicht können und etliche die das zufällig können (wie z.B. das EDA von Assarbad). Das ist also schon lange kein großes Geheimnis.
Delete - Fr 21.03.03 14:24
Popov hat folgendes geschrieben: |
Sorry Lucke und Mathias, aber es gibt tausende Programme im Internet die das mit Absicht können und etliche die das zufällig können (wie z.B. das EDA von Assarbad). Das ist also schon lange kein großes Geheimnis. |
Es gibt auch genug Key-Generatoren.
ShadowCaster - Fr 21.03.03 14:26
ist mir eigentlich egal ob es legal oder illegal ist, wenn man das zur Spionage missbraucht. Den Disclaimer hab ich nur angefügt, damit man sieht, dass ich es nicht für illegale Zwecke einsetzten würde ;) Ich hab eigentlich überhaupt keine negativen Absichten mit dem Posting des Codes gehabt und wer das Wissen (wenn man mein Posting überhaupt als das bezeichnen kann... kann man schließlich überall nachlesen wie es geht) missbraucht, hat in eigener Verantwortung gehandelt.
Im Internet werden überall Key-generatoren und Passwörter für Software freigegeben, um diese Anwendungen als Vollversion benutzen zu können. Wenn diese Seiten illegal wären, wären sie schon verboten worden. Diese Seiten sind aber laut Gesetz nicht illegal, weil die Leute im Disclaimer drinnenstehen haben, dass diese Passwörter nicht benutzt werden dürfen. Erst der, der diese Passwörter benutzt, macht sich strafbar.
So auch in diesem Falle. Im Prinzip ist es möglich im Internet Codeschnipsel zu veröffentlichen, mit denen man was weiß ich alles anstellen (kaputtmachen oder spionieren) kann. :roll: Man muss nur einen Disclaimer druntersetzen, dass sich derjenige der das einsetzt strafbar macht und dass das nicht legal ist. Ansonsten macht sich der Autor selbst unter Umständen strafbar. So ist nunmal das Gesetz.
Kann meine Postings auch wieder löschen, wenn einige Leute der Meinung sind, sie wären nicht ok oder würden Programmierer dazu verleiten, sie zu missbrauchen!? :lol: , dann könnt ihr auch gleich alle Warez-, Passwortgenerator-, Crack-, Filesharing- , Sniffer-, Spionage- etc. Sites und Programme auf allen PC'S des Planeten Erde löschen.
Also bis denne... :wink:
PS: Solltet ihr meinen Kommentar blöd finden, dann vergesst ihn oder der Forenmod soll ihn löschen ;)
Delete - Sa 22.03.03 09:54
Popov hat folgendes geschrieben: |
Sorry Lucke und Mathias, aber es gibt tausende Programme im Internet die das mit Absicht können und etliche die das zufällig können (wie z.B. das EDA von Assarbad). Das ist also schon lange kein großes Geheimnis. |
Warum Sorry? Warum Geheimnis? Du hast doch recht: es gibt mehr als genug Programme, die so etwas können.
1. Wenn man weiß, wie man Text aus fremden Fenstern ausliest, dann ist man auf der richtigen Spur.
2. Wenn man sich mal überlegt, wie ein Passwort-Eingabefeld eigentlich funktioniert (sprich: was ist nötig, um aus einem Editfeld ein Passwortfeld zu machen?), dann findet man sicher auch einen Weg, dies wieder umzukehren.
Ich persönlich finde nur diesen Grundtenor heuchlerisch (sorry, ShadowCaster, weil dein Posting jetzt herhalten muss):
Zitat: |
Also du musst im Prinzip nur folgendes machen
(...)
DISCLAIMER - HAFTUNGSAUSSCHLUSS:
Oben genanntes Wissen darf nicht zu illegalen oder strafbaren Handlungen missbraucht werden.Der Author (ich) distanziert sich von jeglichem Missbrauch, der mit diesem Wissen angestellt wird. |
Wenn man Illegales ausschließen will, darf man sein Wissen nicht preisgeben. Denn irgendwer findet sich immer, der genau das mal ausprobiert.
Wobei in dem speziellen Fall wohl doch eher Entwarnung gegeben werden kann. Das bisschen (in Bezug auf die Beschreibung!) Wissen, was bei dir und ShadowCaster vermittelt wird, ist bestenfalls für Fortgeschrittene interessant, die solche theoretischen Erläuterungen auch in Code umsetzen können.
Anfänger und so genannte Script-Kiddies sind eher an fertigem Code (Copy & Paste) interessiert, bei dem sie nicht noch nachdenken müssen.
Gruß.
hitstec - So 23.03.03 01:43
Ach du meine Güte, ich dachte hier im Forum wird über's Programmieren diskutiert. Stattdessen artet das ganze in eine höchst philosophische Diskussion auf moralischer Basis aus.
Das ist wirklich das falsche Forum dazu.
Aber trotzdem: Informationen stehen jedem gleichermaßen zur Verfügung - das ist ein Recht, das jedem Menschen zustehen sollte. Was manche bisher noch nicht kapiert hat, verdeutlicht dieses wunderbare Zitat:
"Die Wissenschaft hat keine moralische Dimension. Sie ist wie ein Messer. Wenn man sie einem Chirurgen und einem Mörder gibt, gebraucht es jeder auf seine Weise."
Werner von Braun
Information vorzuenthalten würde also bedeuten dem Mörder das Handwerk zu legen, aber auch dem Chirurgen sein Arbeitswerkzeug zu nehmen.
toms - So 23.03.03 03:11
Hab's mal so gemacht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure CancelPasswordChar(AHandle: HWND); var S: string; len: Integer; begin len := SendMessage(AHandle, WM_GETTEXTLENGTH, 0, 0); SetLength(S, len); SendMessage(AHandle, WM_GETTEXT, len + 1, lParam(@S[1])); SendMessage(AHandle, EM_SETPASSWORDCHAR, 0, 0); SendMessage(AHandle, WM_SETTEXT, 0, Integer(PChar(S))); end; |
ShadowCaster - Mo 24.03.03 11:05
toms, nicht schlecht ;)
Deine Lösung setzt nurnoch vorraus, dass man den Handle des Eingabefeldes hat.
Was diesen ganzen moralischen Firlefanz angeht, so behindert er doch beim Programmieren nur, oder findet ihr nicht? 8) Ich denke, wir sollten uns dem eigentlichen Thema wieder widmen.
ShadowCaster - Mo 24.03.03 13:00
wo wir gerade dabei sind. Wie ich den Handle auf Fenster ermitteln kann, das weiß ich mittlerweile. Aber wie kann ich den Handle auf einen Button eines Fensters, dessen Handle ich ja jetzt nun kenne ermitteln? Nehmen wir an, ich will mir alle Komponenten auf dem Fenster in eine TList schreiben. Wie mach ich das (nicht das in die TList schreiben ;) sondern das herausfinden aller Komponenten auf einem Window) ?
Motzi - Mo 24.03.03 13:43
Zum Auflisten von Fenstern:
Szichwörter: EnumWindows(), EnumChildWindows()
ShadowCaster - Mo 24.03.03 16:23
die Fenster hab ich doch schon und den Handle des entsprechenden Fensters? Hast mal wieder nicht richtig gelesen ;) Ich meinte wie krieg ich die Buttons, Listboxen, etc. auf einem Fenster und deren handles raus???
Delete - Mo 24.03.03 16:35
Nee, ShadowCaster, du hast nicht richtig gelesen - oder es nicht verstanden. Motzis Antwort enthält das, was du brauchst.
ShadowCaster - Mo 24.03.03 16:40
das heißt, dass das Handle der Fenster auch dem der Buttons auf dem Fenster ist? Aber wenn ich 20 Listboxen drauf habe und und einen Handle, wie soll dann das Programm wissen, mit welcher Listbox was gemacht werden soll? sorry, versteh ich nicht :oops:
Motzi - Mo 24.03.03 16:51
ShadowCaster hat folgendes geschrieben: |
Hast mal wieder nicht richtig gelesen :wink: |
Doch hab ich! :wink: Aber nachdem du es anscheinden nicht verstanden hast hier mal eine etwas ausführlichere Erklärung:
Buttons und Listviews sind auch Fenster bzw Child-Fenster. Wenn sie auf einem anderen Fenster "draufliegen", dann ist dieses Fenster der Parent und sie sind die Childs. Mittels EnumChildWindows kannst du dir nun die Child-Fenster eines Fenster auflisten lassen.
Delete - Mo 24.03.03 16:54
Das ist das Problem, du brauchst ein eindeutig identifizierbares Merkmal. Eventuell, wenn du Glück hast und es nicht in Delphi geschrieben ist, dann kommst du mit der ID des Kontrolls weiter.
Bei einer WinAPI Anwendung wird automatisch eine eindeutige ID vergeben. Die VCL überläßt das Windows und da wird die ID an Hand das Handles gebildet. Ein Handel ist zwar eindeutig, ändert sich aber bei jedem Programmstart.
Also Vorgehensweise:
Hol die mit EnumChildWindows das Handel, dann bestimmst du mit GetDlgCtrlID die ID. Diese vergleichst du mit der ID, die du vorher mit einem Tool (WinSight, ist bei Delphi dabei oder Spy++ vom VC) bestimmt hast. Hast du dein Controll gefunden, hast du es geschaft.
ShadowCaster - Mo 24.03.03 16:55
hey thx für die Hilfe :wink: Jetzt weiß ich auchmal, wie man mit den Fenstern umgehen kann. Wäre nämlich mal ganz funny einen Bildschirmschoner zu schreiben, der irgendwelche Sachen in den formularen auf dem Bildschirm verändert und das alles wieder rückgängig macht wenn er beendet wird. 8)
Popov - Mo 24.03.03 17:30
Hier ein kleines Programm mit dem man das Handle eines Fensters unter dem Cursor rausfindet. Für dieses Programm braucht man ein leeres Fenster auf das man einen Timer1 und ein Label1 ablegt.
Unter handle eines Fensters verstehe ich nicht nur die Applikationsfenster, sondern auch Buttons und Edits.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormCreate(Sender: TObject); begin Form1.FormStyle := fsStayOnTop; Timer1.Interval := 50; end;
procedure TForm1.Timer1Timer(Sender: TObject); var rPos: TPoint; hWnd: THandle; begin GetCursorPos(rPos); hWnd := WindowFromPoint(rPos);
Label1.Caption := 'Handle: ' + IntToStr(hWnd); end; |
F34r0fTh3D4rk - Do 06.01.05 20:16
ich weiß iss n bisschen veraltet schon *schlagtmichwennihrankommt*
aber so einfach ist das doch gar nich oder ich habe mal ein programmcode gehabt um captions usw zu lesen *kram*
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.Timer1Timer(Sender: TObject); const cMaxBuffer = 255; var p: TPoint; h: THandle; buf: array[0..cMaxBuffer] of Char; begin GetCursorPos(p); h := WindowFromPoint(p); if h<>0 then SendMessage(h, WM_GETTEXT, cMaxBuffer, Integer(@Buf)); Label1.Caption := Buf; left:= screen.width - width; end;
procedure TForm1.FormCreate(Sender: TObject); begin left:= screen.width - width; top:= 0; end; |
Damit geht es zum Beispiel nicht :)
Sprint - Do 06.01.05 20:20
F34r0fTh3D4rk hat folgendes geschrieben: |
ich weiß iss n bisschen veraltet schon
aber so einfach ist das doch gar nich oder ich habe mal ein programmcode gehabt um captions usw zu lesen
Damit geht es zum Beispiel nicht |
Hast du jetzt eine Frage dazu?
F34r0fTh3D4rk - Do 06.01.05 20:22
mir war langweilig und ich wollte meinen senf dazugeben :mrgreen:
Sprint - Do 06.01.05 20:24
F34r0fTh3D4rk hat folgendes geschrieben: |
mir war langweilig und ich wollte meinen senf dazugeben |
Aha...
PS: Das war jetzt nur ein Posting um die Anzahl meiner Beiträge zu erhöhen.
F34r0fTh3D4rk - Do 06.01.05 20:27
ok hab ich halt ne frage :D
*sagichabanich*
doch: wie ist das handle einzutragen ich krieg beim meinem formular beim edit feld das handle 01904C2 wi muss ich das jetzt verwenden (hab grad mit sowas angefangen edit felder lesen schreiben usw (weiß ich zwar auch noch net wie das funzt aber egal))
F34r0fTh3D4rk - Fr 07.01.05 16:42
habs scho trotzdem danke :D
F34r0fTh3D4rk - Sa 05.02.05 16:33
ok ich möchte das thema erneut aufgreifen.
Ich habe ein programm in dem das lösungswort in sternchen in einem edit ist.
der titel beginnt mit 'Galgenmännchen'
also habe ich den code genommen und so benutzt:
Delphi-Quelltext
1:
| CancelPasswordChar(FindWindowEx(findwindow(nil, 'Galgenmännchen'), 0, 'TEdit', 0)); |
aber das funktioniert nicht, wenn ich das mit dem handle mache was unter der maus ist, also alle 50ms abfragen geht das, aber so nicht, wo liegt der fehler (hab auch schon andere variationen ausproiert) :?
Delete - Sa 05.02.05 19:03
Liegt das Edit eventuell auf einem Panel oder so? Bzw. allgemeiner: Ist es auch ein direktes Child-Fenster von deinem Hauptfenster?
F34r0fTh3D4rk - Sa 05.02.05 20:50
es ist direktes child, mit der maus abfrage geht das, aber so net :?:
Delete - Sa 05.02.05 22:22
Ist es denn erin TEdit? Prüf mal die Rückgabewerte vom FindWindow und FindWindowEx.
F34r0fTh3D4rk - Sa 05.02.05 22:23
ja isses ich hab das programm selbst geschrieben
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!