Kas yra ZIP?
Zip yra failo formatas, sukurtas 1984 – iais metais. Šis formatas gali suglaudinti duomenis neprarandant kokybės, neiškraipant duomenų (lossless data compression). Taip pat jis leidžia naudoti skirtingus glaudinimo metodus:
- Store (saugoti; neglaudinimas)
- Shrink (sutraukti)
- Reduce (sumažinti, 1-4 lygiai)
- Implode
- Deflate
- Bzip2
- LZMA (EFS)
- WavPack, and PPMd
Kas yra Zip bomba?
Zip bomba yra kenksminga archyvo byla, sukurta sugadinti ar sutrikdyti programą, kuri bando šį archyvą atidaryti. Zip bomba dažnai naudojama siekiant išjungti antivirusinę programinę įrangą, kad tradiciniai virusai galėtų pakliūti į sistemą.
ZIP bombų rūšys
Paprasta ZIP bomba:
- 1 žingsnis: sukurk didelį failą su besikartojančiu turiniu (pvz., daug nulių)
- 2 žingsnis: suspausk į ZIP failą
- 3 žingsnis: profit
Sudėtinga ZIP bomba:
- 1 žingsnis: sukurk didelį failą su besikartojančiu turiniu (pvz., daug nulių)
- 2 žingsnis: suspausk į ZIP failą
- 3 žingsnis: padaryk šio failo kopijų tiek, kiek nori (5, 16, 99 kopijos)
- 4 žingsnis: suspausk visas kopijas į ZIP archyvą
- 5 žingsnis: pakartok šiuos žingsnius 3-4 kartus
- 6 žingsnis: profit
Pavyzdinis skaičiavimas:
Nesuspaustas failas = 4 GB
Suspaustu kopijų kiekviename lygyje = 16
Iš viso lygių = 5
4 GB × 16^5 = 4 194 304 GB = 4 PB (petabaitai) nesuglaudintų duomenų
Rezultato pavyzdys: http://www.unforgettable.dk/42.zip (42,838 baitų)
Rekursinė ZIP bomba:
Reikalavimai: negali būti tuščia ir turi išlaikyti savo suspaustą struktūrą ir turinį toje pačioje vietoje.
Pavyzdžiai:
Original Input → zip() → Compressed Input
Compressed Input → unzip() → (same) Compressed Output
Lempel-Ziv algoritmas:
literal(n) == Ln
repeat(d, n) => repeat(n, n) == Rn
Dekompresija:
L3 H E L R1 L1 O => H E L L O
L5 H E L L O => H E L L O
ZIP bomba (web edition)
PNG bomba
PNG formato kompresijos algoritmas:
- Taikomas vienas iš 5 PNG filtrų (0x00 – 0x04) kiekvienai pikselių eilutei
- Ankstesnio žingsnio rezultatai suspaudžiami naudojant Deflate algoritmą
Kaip sukurti daug sveriantį vaizdą su geriausiu glaudinimo santykiu?
- Naudokite 1 bito spalvų erdvę
- Padarykite visus pikselius tos pačios spalvos
Reikalinga RAM:
- plotis × aukštis × baitai vienam pikseliui
- RGB spalvų erdvė => 3 baitai vienam pikseliui
225 000 × 225 000 px = 50.625 gigapixels (giga = 10^9)
50.625 × 10^9 × 3 bytes = 141.44 GB (151 875 000 000 bytes)
XML bomba:
XML bomba – tai žinutė, sukurta ir siunčiama siekiant užkrauti XML parser’į (paprastai HTTP serverį). Pavyzdys:
Kaip ZIP bomba padės tau apsiginti nuo kenkėjų?
Kai botas patenka į tavo serverį, ieškodamos blogai sukonfigūruoto WordPress’o, jis gauna 10 GB duomenų, kurie iš pradžių atrodo kaip milžiniško puslapio turinys suspaustas iki 10 MB. Bandant analizuoti suspaustą turinį, bot`ui reikės jį išskleisti, o čia jau prasideda pats įdomumas: priklausomai nuo bot`o implementacijos, jis gali:
- užsipildyti visa operatyvioji atmintis (RAM) ir bot`o kompiuteris apsikraus taip, jog nebegalės vykdyti darbo
- atminties pritrūks ir bot`o programos veikla sutriks – ji nutrauks savo veikimą
- programa “tyliai” pratęs veikimą lyg nebūtų aptikus jokių WordPress`o spragų šiame serveryje, nors iš tikrųjų jų net nepatikrino.
Tikimės, kad ši PHP programuotojo Denio Zyk apžvalga apie Zip bombas bus naudinga!