![]() |
(C++) Zeiger ein Sicherheitsrisiko?
Hallo Freunde der sicheren Speicherverwaltung,
einer meiner überheblichen Tutoren war doch tatsächlich der Ansicht, dass es KEINE Möglichkeit gibt, von außerhalb einer Klasse (C++) auf deren private Attribute zuzugreifen. Da musste ich natürlich dagegen wetten um ihn eines besseren zu belehren. Der Mann ist ohnehin einer der arroganteren Sorte (kurz: Klugscheißer), meine Lektion war einfach nötig, um ihn am Boden der Tatsachen zu halten. Ging um nix Großes, nur um eine Pizza, die ich gleich in vollen Zügen genießen werde, da er wohl oder übel einsehen musste, dass ich diese Wette gewonnen habe. Ich werd’ jetzt meine Pizza genießen gehen und wünsche Euch viel Spass mit meinem erdrückenden Argument, das mich diese Wette gewinnen lies. Also, hier mein Quelltext, der einen externen Zugriff auf ein privates Attribut ermöglicht: Check this out. DANYBOY
Code:
PS: Seit lieb zu Euren Tutoren. :mrgreen:
#include <iostream.h>
#include <string.h> /* Hinweis: Folgende Klasse enthält KEINE publike (explizite) Möglichkeit um das Passwort lesen zu können! Es kann lediglich geschrieben werden! */ class AnyClass { private: // privates Passwort char password[50]; public: // öffentliche Methode, um privates Passwort zu setzen void setPassword(char*); }; void AnyClass::setPassword(char *p) { strcpy(password, p); }; int main(void) { // Objekt instanziieren AnyClass secret; // Passwort setzen secret.setPassword("If you're seeing this text, YOU'VE ALREADY LOST OUR BET!"); // Char-Zeiger auf Anfang von Objekt im Speicher (explizieter Typecast). char *PChar = (char*)&secret; // Char-Zeiger ausgeben cout<<"Cracked Password --> "<<PChar; // Warten auf Keypress cin.get(); cin.get(); // result auf Null setzen return 0; }; (C) Dannyboy 2004 |
Re: (C++) Zeiger ein Sicherheitsrisiko?
Na und?
Nur weil die Variable privat ist heißt das nicht dass sie völlig geschützt ist :zwinker: Aber danke für den Code! |
Re: (C++) Zeiger ein Sicherheitsrisiko?
Gleiches geht natürlich auch mit Delphi-Klassen ;)
Habs grad eben mal ausprobiert:
Delphi-Quellcode:
TMyString = String[50];
TMyClass = class(TObject) private MyText: TMyString; public procedure SetText(s: TMyString); end; procedure TForm1.Button1Click(Sender: TObject); var o: TMyClass; s: PChar; begin o := TMyClass.Create; o.SetText('Wer das sieht, weiß alles' + #0); s := Pointer(Integer(o) + 4 + 1); //VMT-Zeiger + Längenbyte ShowMessage(s); o.Free; end; { TMyClass } procedure TMyClass.SetText(s: TMyString); begin MyText := s; end; |
Re: (C++) Zeiger ein Sicherheitsrisiko?
Ich weiß nicht ob das grundsätzlich so ist, aber bei Delphi 5 und 7 kann ich immer auf alle privaten Variablen innerhalb einer Unit von allen Klassen dieser Unit aus zugreifen.
Weiß nicht, ob das gewollt oder ein Bug ist. Gruß Walter |
Re: (C++) Zeiger ein Sicherheitsrisiko?
Geht wohl in fast allen OOP-Sprachen außer in Java. Und selbst dort müssten sich die geschützten Elemente aus dem RAM auslesen lassen. Das zeigt uns, dass wir private Elemente vielleicht verschlüsseln sollten, je nach dem, wie entscheident Performance ist.
|
Re: (C++) Zeiger ein Sicherheitsrisiko?
Zitat:
|
Re: (C++) Zeiger ein Sicherheitsrisiko?
Das Friends-Konzept von C++ kenne ich, stimmt.
Gruß Walter |
Re: (C++) Zeiger ein Sicherheitsrisiko?
Zitat:
gewollt. Deshalb packe ich immer nur eine Klasse in eine Unit und muss dann die Elemente, die ich vererben möchte, tatsächlilch als <protected> deklarieren. |
Re: (C++) Zeiger ein Sicherheitsrisiko?
Zitat:
in unterschiedlichen Units. Es dürfte also in beiden Fällen ungewollt sein. Macht aber nix, denn wer kommt schon auf eine so kranke Idee und setzt einen Zeiger auf das Offset eines Objektes und liest von dort an den Speicher aus? :mrgreen: |
Re: (C++) Zeiger ein Sicherheitsrisiko?
Ciao, ich geh' jetzt meine gesponsorte Pizza essen. :mrgreen: :mrgreen: :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:49 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