Skip to content

Latest commit

 

History

History
79 lines (56 loc) · 2.64 KB

150112-V.md

File metadata and controls

79 lines (56 loc) · 2.64 KB

Programierung in C mit der heutigen Vorlesung abgeschlossen

Ein- und Ausgabe

Lesen von der Eingabe

     | int scanf(Format, Parameter)

---------|---------------------- Format | Formatstring wie bei printf Parameter| ein oder mehrere Parameter als Zeiger int | Anzahl erfolgreich eingelesene Argumente (Bezug auf Formatstring)

Bsp. char string[5]; //4 Zeichen + \0 als Terminator scanf("%s",&string); //kein check auf stack smashing -> buffer overflow scanf("%4s",&string); //abschneiden der überzähligen Zeichen -> nur noch unschöne Anzeige der Eingabe //alternativ kann eine sichere Eingabemethode verwendet werden, die das Überschreiben des Arrays nicht zulässt.

Buffer Overflow Attacke

Häufigste Methode um Server anzugreifen. Prinzip wie bei scanf, Benutzer übergibt eine Variable, die zu lang ist und das Ende eines Array in der vom Programmierer vorgeshenen Dimension überschreibt. Folge: Die vom Benutzer eingegeben Zeichen werden in einen Speicherbereich geschrieben, der ggf. nicht zu Programm, zu einer anderen Variable gehört oder der Benutzer des Programmes root-Rechte erhält.

Zwei Möglichkeiten:

  • Das Programm stürzt ab, der Nutzer erhält administrative Rechte
  • der Stack wird verändert mit einer anderen Rücksprungadresse, die auf Schadcode zeigt, den der Angreifer eingegeben hat

Unpassende Bemerkung des Professors zu "hacken" statt "angreifen" und "wenn Sie mehr wissen wollen, können sie sich zum Hacker ausbilden lassen". Offensichtlich hat er eine falsche Auffassung von fachlichen Begriffen oder führt gewollt in die falsche Richtung.

Datei Ein-/Ausgabe

Eine Datei besitzt die Zustände

  • geöffnet
  • geschlossen . Sie kann nur bearbietet werden, wenn sie geöffnet ist. Reihenfolge der Operationen daher:
  1. öffnen
  2. bearbeiten
  3. schließen

Bearbietungsmodi einer Datei

  • Lesen
  • Schreiben
  • Lesen und Schreiben

Bsp. s. v23.c

Dateizeiger = fopen(Datei, Modus);

Dateizeiger Zeiger als Handler für die Datei im Programm Datei Zeichenkette mit Pfad/Dateiname Modus "r","w"(,"a","r+","w+","a+")

Beim Lesen zeigt die Rückgabe EOF das Ende der Datei an EOF != fscanf(Dateizeiger, Formatstring, Parameterzeiger);

Beim Schrieben fprintf(Dateizeigerm Formatstring, Parameterzeiger);

Schließen fclose(Dateizeiger);

Anwendung Text entschlüsseln

Nach dem Prinzip der Cäsar-Chiffre

Text: TEXT ABCDEFGHIJKLMNOPQRSTUVWXYZ Schlüssel: 3 Chiffrat: WHAW DEFGHIJKLMNOPQRSTUVWXYZABC

In C lassen sich die benötigten Verschiebeoperationen einfach durch Rechnen mit char implementieren. Bsp.: 'a' + 1 == 'b'

Videnère-Chiffre

Text: VIGENERE Schlüssel: 5 2 1 Chiffrat: AKHJPFWG