Programierung in C mit der heutigen Vorlesung abgeschlossen
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.
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.
Eine Datei besitzt die Zustände
- geöffnet
- geschlossen . Sie kann nur bearbietet werden, wenn sie geöffnet ist. Reihenfolge der Operationen daher:
- öffnen
- bearbeiten
- 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);
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