Hodnocení tématu:
  • 0 Hlas(ů) - 0 Průměr
  • 1
  • 2
  • 3
  • 4
  • 5
Příklad ITES na lámání si hlavičky #101
#9
Tak tu máme řešení (a až ho uvidíte, asi mne pošlete s takovou "srandou" do háje Pinkiesmile ), protože Dex na to prakticky přišel, jen o tom neví Pinkiesmile Blahopřeji.








Ale pojďme na to postupně pro ty, co nebyli tak rychlí:



Spoustu lidí napadlo si soubor otevřít v nějakém prohlížeči buď grafiky a nebo zvuků, protože oba nástroje umožňují odečítat hodnoty jednotlivých vzorků (v případě grafiky pixelů). Hardcorovci si mohli otevřít soubor v hexa prohlížeči, osekat hlavičku (a paletu), a pak studovat to samé.

   

No a protože dekódování signálu cizího původu pochopitelně vyžaduje multidisciplinární znalosti (nejen umět s počítačem), předpokládám, že v tomto místě by většina lidí (ne-li všichni) byla naprosto v pytli, jako bych byl já.


Nevím, koho napadlo, že v názvu příspěvku je už nápověda (než si přečetl ty spoilerové), že se jedná o hledání signálů mimozemšťanů (SETI) a vzhledem k mé zálibě v programování, a nápovědě, která odkazuje na jeden konkrétní film, mohlo by už být jasné, co vlastně dekódujeme, ale to by nám samo o sobě nepomohlo.


Podobně jako expert na opravy rádií v onom filmu bychom měli být schopni z daného signálu vyčíst, na jakém operačním systému běží mateřská loď a úspěšně ho hacknout.. (ironie)

https://youtu.be/4rf3eB5bFe4?t=359

(zvuk a obraz jsem použil proto, že ufoni nemusí používat pro uložení softwaru stejné metody jako my, a kdo trochu rozumí, jak jsou kódovaná data na HDD či CD, a to i když nejsou šifrovaná, tak mu musí být jasné, že bez znalosti těchto věcí + znalosti formátů souborů jsme v podstatě bezradní).


A nejsme pochopitelně o nic méně v zádeli než na začátku, protože víme absolutní kulové o tom, v jakém jazyce ufoni píší, na jakém hardwaru a architektuře to běží, a jaké služby (či jaké porty a adresy) tam jsou použité. O tom, že by přístup do daného systému by byl nejspíš zaheslován, a ještě k tomu šifrován (a určitě by nešlo o obyčejné 128bit) se ani nezmiňuji Pinkiesmile


Postup:
Jestli máte dost vůle, zkuste odolat otevření spoileru Rainbowlaugh a dokončit řešení bez něj


Ta možná nejvíc pravděpodobná možnost (a také nejjednodušší na rozluštení), která někoho může napadnout, že data uloží do spustitelného souboru typu COM (ha, zrada číslo 1, je to DOSový program, navíc bez EXE hlavičky) a spustí ho (kdo jsme paranoidní, tak v nějakém emulátoru).

Za předpokladu, že Váš OS si s DOSovým programem poradí, máte značně usnadněnou situaci.

Případně někoho mohlo napadnout použít Debuger. Fór je ale v tom, že ten program (byť se přiznám, že je psán pro zjednodušení v assembleru s využitím služeb DOSu) mohl být klidně pro jiné procesory než x86 (PC), a měli byste smůlu Ajsmug (ale nejsem taková svině)

[Obrázek: debuger.jpg]

Člověk, který je opravdu génius (zvlášť, pokud je to programátor) by měl jistou šanci, že by v dané sekvenci čísel poznal strukturu programu už na první pohled (podobně jako i řeč má svou strukturu - nejvíc četná slova jsou často ta nejkratší - o pozici takových dat ve vzorku něco vypovídá i opakující se výskyt určitých znaků, například samohlásek, což kódování/šifrování nezávislé např. na pozici znaku zachovává).

   

A pochopitelně, byť program vypíše určitý text, i ten je kódován, protože ani UFONi by vám práci neusnadnili. A abych byl o to větší svině, není ani v češtině Pinkiesmile


Takže, o co jde?


Napsal jsem si program, který zakóduje text (pouhá negace bitů by byla příliš snadná, kdyby někoho napadlo si soubor vypsat invertovaně):


program Kodovani;
var InF,OutF : text;
   Znak : char;
   Retez : string[3];
begin
Assign(InF,'text.txt');
Assign(OutF,'text.dat');
Reset(InF);
Rewrite(OutF);
Write(OutF,'znaky db ');
while not Eof(InF) do
begin
 Read(InF,Znak);
 Znak := char((Ord(Znak)) xor $ff+32);
 Str(byte(Znak),Retez);
 Write(OutF,Retez);
 if not Eof(InF) then Write(OutF,',');
end;
Close(InF);
Write(OutF,',$');
Flush(OutF);
Close(OutF);
end.


(i toto "šifrování" by se však dalo snadno rozlušit hrubou silou a programem disponujícím slovníkem všech slov všech jazyků naší planety pro testování, zda daná metoda dává nějaký smysl, protože negace a sčítání/posun 0-255 jsou ty nejprimitivnější metody kódování začátečníků, pokud nepoužíváte nahrazovací tabulku).

Výstup jsem vložil do zdrojového textu assembleru a zkompiloval (fasm.exe program.asm):


org 100h
use32
mov esi,znaky
mov edi,znaky
push ds
pop es
cykl:
lodsb
cmp al,'$'
je konec
sub al,32
xor al,$ff
stosb
jmp cykl
konec:
mov edx,znaky
mov ah,9
int 21h
mov ah,1
int 21h
int 20h
znaky db 208,171,190,177,165,166,176,170,189,182,255,176,178,186,187,186,171,176,170,184,176,165,190,182,178,190,172,170,'$'


Znak "dolaru" na konci je jedním z mála, který dává smysl, ovšem pouze někomu, kdo ještě zažil éru programování pod DOSem a ještě k tomu používal jeho interní funkce (nepsal si vlastní, rychlejší). Ale těm, kteří si přičuchli k assembleru x86 už mohly být podezřelé sekvence Bx opkódů (MOV+reg), a stačilo si je jen ověřit v nějakém seznamu ( http://ref.x86asm.net/coder32.html )


Kdo z tohoto řešení stále ještě neví, co daný program dělá, tak výsledkem je něco, co vypíše text a počká na stisk klávesy:

   

[Obrázek: dosbox.jpg]


Takže, jak moc v pytli by svět byl, kdyby nás napadli mimozemšťané a vy byste měli napsat virus, který by měl shodit jejich štíty? Rainbowlaugh


- nepoznáme, že jde o výpis zdrojového kódu
- pokud to poznáme, nepoznáme jazyk
- pokud poznáme jazyk, neznáme instrukční sadu
- nevíme, pod jakým (pokud vůbec) operačním systémem to běží a jaké služby tedy nabízí
- pokud se naučíme instrukční sadu, neznáme architekturu jejich počítačů (porty, org.paměti)
- pokud se naučíme architekturu, musíme nejspíš rozlousknout jejich šifrování, komunikační protokoly, formáty dat a souborů..
- neznáte jejich jazyk (řeč)
- a i kdybychom se naučili jejich jazyk, těžko budeme vědět, že v tomto případě jde o blahopřání k narozeninám Rainbowlaugh (alespoň doufám) * čili na kolik důležité to tam vůbec je (mohli jste také místo programu pro jádro systému otevřít složku s pornem)

*) jazyk tvorů nemusí být vždy nezbytně nutné znát, ale čert ví, na jakém systému pracují mimozemské počítače a je jednodušší něco napodobit, když o tom máte co nejvíc informací: pak se nabízí otázka, kdo bude v luštění rychlejší: zda pozemští programátoři a nebo pozemští lingvisté

Jako bonus na závěr: takto zní zaváděcí program (WIN.COM) pro Windows 98 (ty tiché mezery jsou dané prázdným místem v souboru. Myslím, že kdyby ještě "žilo" dost pamětníků Didaktiků, ti by asi poznali, o co jde Ajsmug Závěrečná skupinka zvuků jsou uložené řetězce znaků (hlášky). Jejich odlišnost od zbytku je zřejmá i tomu, kdo nemá hudební sluch.


.zip   WIN1.zip (Velikost: 48,12 KB / Stažení: 1) (MP3)

(kdo měl ještě úplně ty staré CD přehrávače, tak něco podobného nejspíš poznal - při vložení datového disku)


Vzhledem k tomu, jak dlouho jsme luštili hieroglyfy (a vlastně nakonec sami nevyluštili), museli by zlí ufoni počkat na orbitě tak pár (set?) let, než by se nám k nim podařilo propašovat funkční virus...

Jo, hezky se na to kouká v televizi, ale doufejme, že to v reálu nikdy nebude potřeba realizovat, protože v tomto ohledu měli luštitelé situaci značně ulehčenou tím, že byl použit již známý jazyk.
DeviantArt & Home, Bronies galerie. Ask me.
Odpovědět


Příspěvků v tématu
RE: Příklad ITES na lámání si hlavičky #101 - od Martin - 13.03.2018, 09:32

Přejít na fórum:


Uživatel(é) prohlížející tohle téma: 1 host(ů)