AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein (C++) Zeiger ein Sicherheitsrisiko?

(C++) Zeiger ein Sicherheitsrisiko?

Ein Thema von Dannyboy · begonnen am 10. Sep 2004 · letzter Beitrag vom 10. Sep 2004
Antwort Antwort
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#1

(C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 09:21
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:
#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
PS: Seit lieb zu Euren Tutoren.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#2

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 09:24
Na und?
Nur weil die Variable privat ist heißt das nicht dass sie völlig geschützt ist

Aber danke für den Code!
Lukas
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 09:46
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;
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Wathlon

Registriert seit: 20. Feb 2004
39 Beiträge
 
#4

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 10:00
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
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#5

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 10:00
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.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 10:02
Zitat von Wathlon:
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
Das ist gewollt. Bei C++ gibts dafür das "Friends"-Konzept, bei ObjectPascal sind alle Klassen eines Moduls, sprich Unit, "Freunde".
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Wathlon

Registriert seit: 20. Feb 2004
39 Beiträge
 
#7

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 10:03
Das Friends-Konzept von C++ kenne ich, stimmt.

Gruß Walter
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#8

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 10:08
Zitat von Wathlon:
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
Ja, das ist mir gerade vor einer Woche erschreckenderweise aufgefallen, ist aber laut Delphi-Hilfe
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.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#9

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 10:12
Zitat von Chewie:
Zitat von Wathlon:
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
Das ist gewollt. Bei C++ gibts dafür das "Friends"-Konzept, bei ObjectPascal sind alle Klassen eines Moduls, sprich Unit, "Freunde".
Ich habe in meinem Beispiel keine Friends verwendet. Übrigens funktioniert mein Quelltext auch
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?
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Dannyboy

Registriert seit: 4. Aug 2003
Ort: Delphi-Heaven
418 Beiträge
 
Delphi 7 Personal
 
#10

Re: (C++) Zeiger ein Sicherheitsrisiko?

  Alt 10. Sep 2004, 10:15
Ciao, ich geh' jetzt meine gesponsorte Pizza essen.
How much wood would a wood-chuck chuck if a wood-chuck would chuck wood?
Check this out.
DANNYBOY
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:17 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