HISPASEC. Praktyczne podejście do testowania bezpieczeństwa implementacji obsługi formatów danych. by Gynvael Coldwind

Podobne dokumenty
Formaty plików graficznych - wprowadzenie

Bitmapy - format i zastosowanie. Podstawowy format plików bitmapowych, dogodność zastosowania bitmap w prostych animacjach 2D.

Do obsługi plików BMP należy stworzyć klasę przechowującą zawartość obrazu i udostępniającą następujące metody:

Format BMP okiem hakera

Reprezentacje danych multimedialnych - grafika. 1. Terminologia 2. Obrazy czarno-białe 3. Obrazy kolorowe 4. Paleta 5.

Return-oriented exploiting

Interfejs graficzny w systemie Windows (GDI - Graphics Device Interface)

OBRAZY ZDJĘĆ LOTNICZYCH W POSTACI CYFROWEJ JAKO WARSTWA INFORMACYJNA W GIS WSPIERAJĄCYM GOSPODARKĘ PRZESTRZENIĄ W GMINIE.

MS Visual Studio 2005 Team Suite - Performance Tool

Laboratorium Podstaw Informatyki Strona 1. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie Graf

Klasyfikacja metod kompresji

Instytut Teleinformatyki

Konfiguracja po czenia pomi dzy serwerem OPC, a sterownikiem PLC dla sieci Profibus

s FAQ: 24/PL Data: DD/MM/RRRR

Klasyfikacja metod kompresji

Promotor: dr inż. Adam Piórkowski. Jakub Osiadacz Marcin Wróbel

Krok po kroku... (czyli jak stworzyć i wydrukować krzyżówkę)

Wprowadzenie do laboratorium. Zasady obowiązujące na zajęciach. Wprowadzenie do narzędzi wykorzystywanych podczas laboratorium.

Liczby losowe i pętla while w języku Python

Rozszerzenia plików graficznych do publkacji internetowych- Kasia Ząbek kl. 2dT

Architektura komputerów. dr inż. Sławomir Samolej D108 A, tel: , WWW: ssamolej.prz-rzeszow.

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Obsługa blędów i zewnętrznych plików

dr hab. inż. Lidia Jackowska-Strumiłło, prof. PŁ Instytut Informatyki Stosowanej, PŁ

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie II. Formaty plików graficznych

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Formaty plików graficznych

Grafika komputerowa Wykład 1 Wprowadzenie do grafiki komputerowej

Instrukcja obsługi User s manual

DATABASE SNAPSHOT GEEK DIVE. Cezary Ołtuszyk Blog: coltuszyk.wordpress.com

Pobieranie argumentów wiersza polecenia

Wprowadzenie Algorytm ByteRun ByteRun - przykład Algorytm RLE Przykład działania RLE Algorytm LZW Przykład kompresji LZW

Zasady programowania Dokumentacja

SEO Audit for domain blog.rabinek.pl

Modelowanie numeryczne w fizyce atmosfery Ćwiczenia 3

Cała prawda o plikach grafiki rastrowej

Aplikacje WWW - laboratorium

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

SEO Audit for domain zdrowewidzenie.pl

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

SSI Web 8. (badania.kozminski.edu.pl) Instrukcja logowania i uruchamiania ankiety

1. Ustanawianie ograniczeń na użycie zasobów

Grafika Komputerowa Wykład 1. Wstęp do grafiki komputerowej Obraz rastrowy i wektorowy. mgr inż. Michał Chwesiuk 1/22

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

Operatory cd. Relacyjne: ==!= < > <= >= bool b; int i =10, j =20; dzielenie całkowitych wynik jest całkowity! Łączenie tekstu: + string s = "Ala ma ";

Rozdział 7. Przedstawienie formatu graficznego BMP.

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

kdpw_stream Struktura komunikatu: Status komunikatu z danymi uzupełniającymi na potrzeby ARM (auth.ste ) Data utworzenia: r.

Baner internetowy w standardzie GIF - metoda tworzenia tandemem aplikacji Illustrator - ImageReady.

OSI Network Layer. Network Fundamentals Chapter 5. ITE PC v4.0 Chapter Cisco Systems, Inc. All rights reserved.

Kurs programowania. Wykład 7. Wojciech Macyna. 25 kwietnia 2017

ApSIC Xbench: Szybki start wydanie Mariusz Stępień

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Ataki na aplikacje WWW. Łomem, czy wytrychem? Jak dobrać się do aplikacji WWW

Języki i metody programowania Java Lab1 Zofia Kruczkiewicz

IT Security vs GameDev. IGK'8 2011, Siedlce / Poland

SEO Audit for domain gryfnie.com

Program szkoleniowy. 24 h dydaktycznych (18 h zegarowych) NAZWA SZCZEGÓŁY CZAS

Podstawowe części projektu w Javie

WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

4. Wyrzuć wyjątek jeśli zmienna ist nie istnieje bloki: try, catch i wyrzucanie wyjątku

Lekcja VI. Otwieranie plików typu BINARY FLAT FILES (.bin) w BILKO.

GRAFIKA RASTROWA. WYKŁAD 2 Oprogramowanie i formaty plików. Jacek Wiślicki Katedra Informatyki Stosowanej

WYMAGANIA EDUKACYJNE. Witryny i Aplikacje Internetowe klasa I

16) Wprowadzenie do raportowania Rave

Język ludzki kod maszynowy

Internetowe bazy danych

Optimizing Programs with Intended Semantics

Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu

trainxx tramxx

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Kraków, ver

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Konfiguracja drukarki AdobePS w systemie Windows

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Laboratorium Programowania Kart Elektronicznych

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Budowa aplikacji wielowarstwowych zastosowanie szablonów. Laboratorium 2 Programowanie komponentowe Zofia Kruczkiewicz

Delphi Laboratorium 3

Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).

I.Wojnicki, Tech.Inter.

Multimedialne bazy danych - laboratorium

Automatyzacja testowania oprogramowania. Automatyzacja testowania oprogramowania 1/36

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

LibreOffice Calc VBA

Geis Point SOAP WebService Interface

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Laboratorium Programowania Kart Elektronicznych

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

Helena Boguta, klasa 8W, rok szkolny 2018/2019

Wstęp. Ale po co? Implementacja

Przygotowanie plików do druku

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Zasady rejestracji i instrukcja zarządzania kontem użytkownika portalu

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

INFORMATYKA WSTĘP DO GRAFIKI RASTROWEJ

Transkrypt:

HISPASEC Praktyczne podejście do testowania bezpieczeństwa implementacji obsługi formatów danych by Gynvael Coldwind

Dramatis Personæ Gynvael Coldwind - obecnie spec. ds. bezp. IT @ Hispasec - wcześniej ArcaBit - autor kilku artykułów (Hakin9 i Xploit) - prowadzi bloga technicznego (http://gynvael.coldwind.pl) - team Vexillium (http://vexillium.org) Praktyczne podejście... 2 /

Menu 1. Budowa aplikacji a wektory ataku 2. Jak szukać błędów? 3. Różnice w interpretacji dokumentacji 4. Case study BMP 5. Case study GIF 6. Inne RAR, ZIP, FTP 7. Podsumowanie Praktyczne podejście... 3 /

Budowa aplikacji IN IN IN OUT OUT IN IN APLIKACJA OUT IN OUT IN Praktyczne podejście... 4 /

Aplikacja składa się z wielu modułów IN IN IN OUT OUT IN IN APLIKACJA OUT IN OUT IN Praktyczne podejście... 5 /

Wejście, przetwarzanie, wyjście DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 6 /

Wszystko co pochodzi z zewnątrz stanowi potencjalne zagrożenie DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 7 /

Wszystko co pochodzi z zewnątrz stanowi potencjalne zagrożenie DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 8 /

Wszystko co pochodzi z zewnątrz stanowi potencjalne zagrożenie DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 9 /

Wszystko co pochodzi z zewnątrz stanowi potencjalne zagrożenie DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 10 /

Wszystko co pochodzi z zewnątrz stanowi potencjalne zagrożenie DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 11 /

Wszystko co pochodzi z zewnątrz stanowi potencjalne zagrożenie DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 12 /

Jak szukać błędu? DB NET KEYB HTML SCR BMP MP3 APLIKACJA NET PHP...... Praktyczne podejście... 13 /

Jak szukać błędu? BMP APLIKACJA Praktyczne podejście... 14 /

Jak szukać błędu? BMP Praktyczne podejście... 15 /

Jak szukać błędu? BMP OBSŁUGA BMP Praktyczne podejście... 16 /

Jak szukać błędu? Metoda A: (app oriented) Czytając kod obsługujący format BMP OBSŁUGA BMP Praktyczne podejście... 17 /

Jak szukać błędu? Metoda B: (data oriented) Analizując format wejściowy BMP OBSŁUGA BMP Praktyczne podejście... 18 /

Jak szukać błędu? Zorientowanie na format wejściowy pozwala naraz testować kilka-kilkanaście aplikacji BMP OBSŁUGA BMP OBSŁUGA BMP OBSŁUGA BMP Praktyczne podejście... 19 /

Jak szukać błędu? KROK 1 Wybierz format/protokół który chcesz analizować Metoda 1: mam ulubioną aplikację... Metoda 2: format XYZ brzmi fajnie! Metoda 3: rand() Praktyczne podejście... 20 /

Jak szukać błędu? KROK 2 Zdobądź dokumentacje! http://www.wotsit.org http://en.wikipedia.org http://www.faqs.org/rfcs/ Use google, Luke! Praktyczne podejście... 21 /

Jak szukać błędu? KROK 3 Napisz program tworzący prawidłowy pakiet/plik C/C++/Java/Python/etc Praktyczne podejście... 22 /

Jak szukać błędu? KROK 4 Rozpocznij analizę dokumentacji (o tym za chwilę), modyfikując stworzony wcześniej program tak, aby generował poprawione pakiety/pliki Praktyczne podejście... 23 /

Jak szukać błędu? KROK 5 Sprawdź jak zachowują się wybrane aplikacje gdy zjedzą poprawiony pakiet/plik (exception monitor, debugger) Praktyczne podejście... 24 /

Różnice w interpretacji Programista vs Bughunter Praktyczne podejście... 25 /

Różnice w interpretacji Programista vs Bughunter...cytat z dokumentacji... Co myśli programista Co myśli bughunter Praktyczne podejście... 26 /

Różnice w interpretacji Programista vs Bughunter Bezpośrednio po nagłówku znajdują się dane obrazu... Praktyczne podejście... 27 /

Różnice w interpretacji Programista vs Bughunter Bezpośrednio po nagłówku znajdują się dane obrazu... Po nagłówku na pewno będą dane obrazu Praktyczne podejście... 28 /

Różnice w interpretacji Programista vs Bughunter Bezpośrednio po nagłówku znajdują się dane obrazu... Po nagłówku na pewno będą dane obrazu Utnę plik po nagłówku ;F Praktyczne podejście... 29 /

Różnice w interpretacji Programista vs Bughunter Wartość pola SIZE musi być mniejsza lub równa 16 Praktyczne podejście... 30 /

Różnice w interpretacji Programista vs Bughunter Wartość pola SIZE musi być mniejsza lub równa 16 Wartość pola SIZE zawsze będzie <= 16 Praktyczne podejście... 31 /

Różnice w interpretacji Programista vs Bughunter Wartość pola SIZE musi być mniejsza lub równa 16 Wartość pola SIZE zawsze będzie <= 16 Ustawie SIZE na 55 i zobaczę co się stanie... Praktyczne podejście... 32 /

Różnice w interpretacji Programista vs Bughunter Pole NR_KOLOR określa ilość kolorów w palecie Praktyczne podejście... 33 /

Różnice w interpretacji Programista vs Bughunter Pole NR_KOLOR określa ilość kolorów w palecie Wszystkie numery kolorów w obrazie są <= NR_KOLOR Praktyczne podejście... 34 /

Różnice w interpretacji Programista vs Bughunter Pole NR_KOLOR określa ilość kolorów w palecie Wszystkie numery kolorów w obrazie są <= NR_KOLOR Powiem że paleta ma 20 kolorów, po czym użyje koloru numer 55 w obrazie! Praktyczne podejście... 35 /

Różnice w interpretacji Programista vs Bughunter Chunk PALETA zawiera paletę kolorów dla całego obrazu Praktyczne podejście... 36 /

Różnice w interpretacji Programista vs Bughunter Chunk PALETA zawiera paletę kolorów dla całego obrazu Chunk PALETA wystąpi tylko raz, bo nikt nie używa więcej niż jednej palety Praktyczne podejście... 37 /

Różnice w interpretacji Programista vs Bughunter Chunk PALETA zawiera paletę kolorów dla całego obrazu Chunk PALETA wystąpi tylko raz, bo nikt nie używa więcej niż jednej palety Wrzucę 10 palet! Praktyczne podejście... 38 /

Różnice w interpretacji Programista vs Bughunter Chunk PALETA zawiera paletę kolorów dla całego obrazu Chunk PALETA wystąpi tylko raz, bo nikt nie używa więcej niż jednej palety Wrzucę 10 palet! Albo żadnej! Praktyczne podejście... 39 /

Różnice w interpretacji Programista vs Bughunter Implementacja powinna sprawdzać czy XYZ jest poprawne Praktyczne podejście... 40 /

Różnice w interpretacji Programista vs Bughunter Implementacja powinna sprawdzać czy XYZ jest poprawne Nie chcę mi się... Praktyczne podejście... 41 /

Różnice w interpretacji Programista vs Bughunter Implementacja powinna sprawdzać czy XYZ jest poprawne Nie chcę mi się... Ciekawe czy programiście się chciało... Praktyczne podejście... 42 /

Różnice w interpretacji Programista vs Bughunter Pole OFFSET zawiera offset danych w pliku Praktyczne podejście... 43 /

Różnice w interpretacji Programista vs Bughunter Pole OFFSET zawiera offset danych w pliku Wartość OFFSET pokazuje gdzieś w środku pliku na dane Praktyczne podejście... 44 /

Różnice w interpretacji Programista vs Bughunter Pole OFFSET zawiera offset danych w pliku Wartość OFFSET pokazuje gdzieś w środku pliku na dane Ustawie OFFSET ujemne lub większe od wielkości pliku Praktyczne podejście... 45 /

Różnice w interpretacji Programista vs Bughunter Każdy chunk ma pole NEXT które mówi gdzie jest następny chunk Praktyczne podejście... 46 /

Różnice w interpretacji Programista vs Bughunter Każdy chunk ma pole NEXT które mówi gdzie jest następny chunk O! lista chunków! Przejdę sobie po niej w pętli Praktyczne podejście... 47 /

Różnice w interpretacji Programista vs Bughunter Każdy chunk ma pole NEXT które mówi gdzie jest następny chunk O! lista chunków! Przejdę sobie po niej w pętli O! Zapętlona lista chunków! Niech któryś wskazuje sam na siebie! Praktyczne podejście... 48 /

Różnice w interpretacji - podsumowanie Programista vs Bughunter ZDANIE Praktyczne podejście... 49 /

Różnice w interpretacji - podsumowanie Programista vs Bughunter ZDANIE ZDANIE na pewno jest prawdziwe i wszyscy wg niego tworzą pliki / pakiety! Praktyczne podejście... 50 /

Różnice w interpretacji - podsumowanie Programista vs Bughunter ZDANIE ZDANIE na pewno jest prawdziwe i wszyscy wg niego tworzą pliki / pakiety! :) Praktyczne podejście... 51 /

Różnice w interpretacji - podsumowanie Co jest złe? Formaty czy implementacje? Praktyczne podejście... 52 /

Enter teh BMP Case study - BMP Praktyczne podejście... 53 /

Enter teh BMP BMP w skrócie: - bardzo prosty format graficzny - brak kompresji lub kompresja RLE - znany z duużych plików - znany z Windowsa :) - obsługuje do 8 bitów z paletą - obsługuje od 16 do 32 bitów RGB Praktyczne podejście... 54 /

Enter teh BMP Budowa BMP BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Praktyczne podejście... 55 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA UINT bftype; DWORD bfsize; UINT bfreserved1; UINT bfreserved2; DWORD bfoffbits; Praktyczne podejście... 56 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA UINT bftype; DWORD bfsize; UINT bfreserved1; UINT bfreserved2; DWORD bfoffbits; Specifies the size of the file, in bytes. Praktyczne podejście... 57 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA UINT bftype; DWORD bfsize; UINT bfreserved1; UINT bfreserved2; DWORD bfoffbits; Specifies the byte offset from the BITMAPFILEHEADER structure to the actual bitmap data in the file. (demo 001 002) Praktyczne podejście... 58 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA DWORD bisize; (1 of 2) LONG biwidth; LONG biheight; WORD biplanes; WORD bibitcount; DWORD bicompression; Praktyczne podejście... 59 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA DWORD bisize; (1 of 2) LONG biwidth; LONG biheight; WORD biplanes; WORD bibitcount; DWORD bicompression; Specifies the width/height of the bitmap, in pixels. (SZ = biwidth * biheight * bibitcount/8) (memory DoS, Int Overflow, Sig/UnSig) Praktyczne podejście... 60 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA DWORD bisize; (1 of 2) LONG biwidth; LONG biheight; WORD biplanes; WORD bibitcount; DWORD bicompression; Specifies the number of planes for the target device. This member must be set to 1. Praktyczne podejście... 61 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA DWORD bisize; (1 of 2) LONG biwidth; LONG biheight; WORD biplanes; WORD bibitcount; DWORD bicompression; Specifies the number of bits per pixel. This value must be 1, 4, 8, or 24. (32 bits?) Praktyczne podejście... 62 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA (2 of 2) DWORD bisizeimage; LONG bixpelspermeter; LONG biypelspermeter; DWORD biclrused; DWORD biclrimportant; Praktyczne podejście... 63 /

Bitmap File Header BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA (2 of 2) DWORD bisizeimage; LONG bixpelspermeter; LONG biypelspermeter; DWORD biclrused; DWORD biclrimportant; Specifies the number of color indexes in the color table actually used by the bitmap. [ ] the biclrused member must be set to zero or to the actual size of the color table. Praktyczne podejście... 64 /

Bitmap File Header biclrused = 3 00 01 02 03 04 05 Random data 00: #121212 01: #AB1111 02: #009900 Random data Random data #000000 #000000 #000000 #000000 #000000 #000000 Praktyczne podejście... 65 /

Bitmap File Header biclrused = 3 00 01 02 03 04 05 Random data 00: #121212 01: #AB1111 02: #009900 Random data Random data 00: #000000 #121212 #000000 #000000 #000000 #000000 #000000 Praktyczne podejście... 66 /

Bitmap File Header biclrused = 3 00 01 02 03 04 05 Random data 00: #121212 01: #AB1111 02: #009900 Random data Random data 00: #000000 #121212 01: #000000 #AB1111 #000000 #000000 #000000 #000000 Praktyczne podejście... 67 /

Bitmap File Header biclrused = 3 00 01 02 03 04 05 Random data 00: #121212 01: #AB1111 02: #009900 Random data Random data 00: #000000 #121212 01: #000000 #AB1111 02: #000000 #009900 #000000 #000000 #000000 Praktyczne podejście... 68 /

Bitmap File Header biclrused = 3 00 01 02 03 04 05 Random data 00: #121212 01: #AB1111 02: #009900 Random data Random data 00: #000000 #121212 01: #000000 #AB1111 02: #000000 #009900 Random #000000 data #000000 #000000 Praktyczne podejście... 69 /

Bitmap File Header biclrused = 3 00 01 02 03 04 05 Random data 00: #121212 01: #AB1111 02: #009900 Random data Random data 00: #000000 #121212 01: #000000 #AB1111 02: #000000 #009900 Random #000000 data Random #000000 data #000000 Praktyczne podejście... 70 /

Bitmap File Header Demo 003 Praktyczne podejście... 71 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4... Praktyczne podejście... 72 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 AAAAAAAAAABBBBCCCCCABCABCAAAAA Praktyczne podejście... 73 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 AAAAAAAAAABBBBCCCCCABCABCAAAAA 10 'A' Praktyczne podejście... 74 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 AAAAAAAAAABBBBCCCCCABCABCAAAAA 10 'A' 04 'B' Praktyczne podejście... 75 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 AAAAAAAAAABBBBCCCCCABCABCAAAAA 10 'A' 04 'B' 05 'C' Praktyczne podejście... 76 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 AAAAAAAAAABBBBCCCCCABCABCAAAAA 10 'A' 04 'B' 05 'C' 00 06 'ABCABC' Praktyczne podejście... 77 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 AAAAAAAAAABBBBCCCCCABCABCAAAAA 10 'A' 04 'B' 05 'C' 00 06 'ABCABC' 05 'A' Praktyczne podejście... 78 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 AAAAAAAAAABBBBCCCCCABCABCAAAAA 10 'A' 04 'B' 05 'C' 00 06 'ABCABC' 05 'A' 00 01 Praktyczne podejście... 79 /

RLE BITMAPFILEHEADER BITMAPINFOHEADER PALETTE IMAGE DATA Run Length Encoding: bicompression = BI_RLE8 bicompression = BI_RLE4 00 02 XX YY: Delta. The two bytes following the escape contain unsigned values indicating the horizontal and vertical offsets of the next pixel from the current position. Praktyczne podejście... 80 /

RLE 00 02 02 04 Praktyczne podejście... 81 /

RLE 00 02 02 04 00 02 02 04??? Praktyczne podejście... 82 /

RLE 00 02 02 04 00 02 02 04 Demo 004 Praktyczne podejście... 83 /

BMP podsumowanie... Praktyczne podejście... 84 /

Enter teh GIF Case study - GIF Praktyczne podejście... 85 /

Enter teh GIF Krótko o GIF: - bezstratna kompresja (LZW,?) - 8 bitów, paleta kolorów (>256) - animacje! (WEB 1.0 ;>) - oparty o chunki - logical screen vs image(s) - GIF87 vs GIF89 Praktyczne podejście... 86 /

Enter teh GIF HEADER LSD GLOBAL PALETTE IMAGE DESC. LOCAL PALETTE IMAGE DATA......... TRAILER Budowa GIF Praktyczne podejście... 87 /

Enter teh GIF??? Budowa GIF??? HEADER LSD GLOBAL PALETTE IMAGE DESC. LOCAL PALETTE IMAGE DATA......... TRAILER Praktyczne podejście... 88 /

Enter teh GIF HEADER LSD GLOBAL PALETTE IMAGE DESC. LOCAL PALETTE IMAGE DATA......... TRAILER??? DEMO 005??? Praktyczne podejście... 89 /

Enter teh GIF HEADER LSD GLOBAL PALETTE IMAGE DESC. LOCAL PALETTE IMAGE DATA......... TRAILER Budowa GIF LZW MIN. CODE SZ. BLOCK SIZE DATA BLOCK SIZE DATA...... TERMINATOR Praktyczne podejście... 90 /

Enter teh GIF Budowa GIF The output codes are of variable length, starting at <code size>+1 bits per code, up to 12 bits per code. This defines a maximum code value of 4095 (hex FFF). LZW MIN. CODE SZ. BLOCK SIZE DATA BLOCK SIZE DATA...... TERMINATOR Praktyczne podejście... 91 /

Enter teh GIF SDL_Image... unsigned char c; code size... LWZReadByte(src, TRUE, c) Praktyczne podejście... 92 /

Enter teh GIF SDL_Image LWZReadByte(..., int input_code_size)... static int table[2][(1 << MAX_LWZ_BITS)];... set_code_size = input_code_size;... clear_code = 1 << set_code_size;... for (i = 0; i < clear_code; ++i) { } table[0][i] = 0; table[1][i] = i; Praktyczne podejście... 93 /

Enter teh GIF SDL_Image DEMO 006 Praktyczne podejście... 94 /

Escape teh GIF GIF - podsumowanie Praktyczne podejście... 95 /

Inne FTP, RAR, ZIP FTP Nazwy plików w listingu LIST (LIST) If the pathname specifies a directory or other group of files, the server should transfer a list of files in the specified directory. Praktyczne podejście... 96 /

Inne FTP, RAR, ZIP FTP Nazwy plików w listingu LIST (LIST) If the pathname specifies a directory or other group of files, the server should transfer a list of files in the specified directory. DEMO 007! Praktyczne podejście... 97 /

Inne FTP, RAR, ZIP RAR, ZIP, etc... (RAR) File name - string of NAME_SIZE bytes size Praktyczne podejście... 98 /

Inne FTP, RAR, ZIP RAR, ZIP, etc... (ZIP) [local file header 1] VS [central directory] Praktyczne podejście... 99 /

EOF Podsumowanie... Praktyczne podejście... 100/

The End Dziękuje za uwagę! Czas na pytania ;> -=(* e-mail *)=gynvael@coldwind.pl michael@hispasec.com -=(* blog *)=http://gynvael.coldwind.pl Praktyczne podejście... 101/