Obsah
[dev story] jak byla vytvořena aplikace spycam
V New Yorku je horko a vy jste na cestě do kancelářského komplexu. Zdá se, že je dobře střežen, i když jste očekáváni pod aliasem nájemného vraha, možná bude lepší nápad vplížit se dovnitř budovy, neviděni? Prolezete oknem na straně budovy. Uvnitř spatříte více stráží, rychle se schovejte za stůl. Nyní se musíte proplížit kolem stráží do hlavní kanceláře.
Výzva: Spycam (hardware)
Podaří se vám najít nějaké odkryté dráty a rychle je připojit k vašemu přenosnému terminálu. Zdá se, že jde o živý přenos interního CCTV systému. Pokud se vám podaří signál dekódovat, můžete najít něco zajímavého, možná kód nebo heslo, jak se dostat přes zamčené dveře.
Po vyřešení
Gratulujeme, úspěšně jste se proplížili kolem stráží a nyní jste uvnitř hlavní kanceláře. Podívejte se támhle, bezpečný případ! Počkat, co, je otevřeno, v žádném případě! Uvnitř je jen fotka, jaké zklamání. Ale počkejte, neuspěchejte, na obrázku to vypadá, jako by to byl přístav a na zadní straně je něco načmáraného, jsou to souřadnice přístavu, který se zdá být se sídlem v Singapuru.
Připevnění
Recon
Příloha obsahuje jeden soubor: chall.tar.gz .
Rozbalením tohoto souboru získáte sedm souborů csv o velikosti přibližně 25 MB:
Všechny obsahují 600255 řádků.
Ukázka prvního souboru csv:
-0.0018051198211097765 ,4.25 ,-0.05 ,-0.05 ,-0.18 -0.001805079821043734 ,4.25 ,-0.05 ,-0.08 ,-0.18 -0.0018050398209776917 ,4.3 ,-0.05 ,-0.08 ,-0.18 -0.0018049998209116493 ,4.3 ,-0.05 ,-0.08 ,-0.18 -0.0018049598208456068 ,4.25 ,-0.05 ,-0.08 ,-0.2 -0.0018049198207795644 ,4.25 ,-0.05 ,-0.05 ,-0.18 -0.001804879820713522 ,4.25 ,-0.05 ,-0.05 ,-0.18
Řešení
Zjistil jsem, že tato výzva je docela obtížná, protože nám pro začátek poskytuje velmi málo informací.
Popis říká něco o záběrech CCTV, takže tyto CSV pravděpodobně obsahují nějaký obrázek nebo video. Neznám žádný formát, který by vypadal takto.
Zdá se, že první sloupec v souboru CSV se pouze zvyšuje. To by mohl být časovací signál pro něco jako VGA. Myslel jsem na to, protože Ben Eater točí skvělá videa o tom, jak fungují počítače, a natočil video o vytvoření grafické karty. Doporučuji se na to jít podívat, pokud nevíte, jak VGA funguje. Také vám doporučuji, abyste se podívali na toto následné video o RGB ve VGA.
Se svými základními znalostmi o VGA jsem se snažil porozumět datům.
Jak jsem řekl, první sloupec se zdá být načasování, ale ostatní jsou stále nejasné. Pokračoval jsem tím, že jsem se podíval na rozsah hodnot sloupců pomocí skriptu Python.
Výstup ukazuje, že rozsahy posledních tří indexů jsou přibližně stejné. To naznačuje barevné hodnoty, a pokud znáte VGA, dává to smysl, protože hodnota by byla mezi 0 a 0.7 volty.
Na dnešních obrázcích je rozsah definován v byte s hodnotou mezi 0 a 255. Později se tedy tato čísla budou muset vynásobit 255/0.7.
Účel druhého sloupce je však stále nejasný. Z rozsahu, který jsem viděl, jde od 0 do 5 a při procházení souboru CSV jsem viděl, že se na 0 otočil pouze dvakrát. Abych to potvrdil, napsal jsem následující skript:
Což vrátí následující výstup:
Výstup ukazuje, že jde o signál VYSOKÝ NÍZKÝ, který se pravděpodobně používá jako synchronizační signál, který sděluje obrazovce, kdy má začít a ukončit čtení.
Abychom získali pouze tu část, kterou potřebujeme, napsal jsem následující skript:
V tomto skriptu spočítám počet řádků, které chci použít, a také vytisknu časování v (pravděpodobně) milisekundách. Chci tato čísla, abych mohl zjistit, jaké je rozlišení signálu VGA.
Výstup byl zhruba stejný pro všech sedm souborů:
To znamená, že rámeček má celkem asi 415492 pixelů a jeho vykreslení trvá 16.6 ms.
S touto informací jsem šel do TinyVGA. Tato webová stránka obsahuje časování pro všechna rozlišení VGA. Z jeho katalogu jsem našel 640 x 480 @ 60 Hz jako nejlepší shodu, protože celkový počet pixelů by byl 800 * 525 = 420000 16.683217477656 s celkovou dobou snímku XNUMX ms.
To je docela blízko našim hodnotám, takže jsem se pokusil vykreslit obrázek pomocí jeho vertikální obnovovací frekvence 31.46875 kHz.
Skript, který jsem použil, je následující:
Po spuštění tohoto skriptu jsem získal následující obrázky:
Při pohledu na obrázek číslo 7 jsem na obrázku viděl nějaký text. Hodnoty RGB jsou však trochu posunuté, takže jsou nečitelné.
Mohl jsem to opravit ručně posunutím x a y, ale jednodušší oprava je pouze pomocí jedné barvy. Udělal jsem to změnou tohoto řádku:
Tím vznikl následující obrázek:
Vypadalo to, že jsem dostal příznak, ale při odesílání CTF jsem dostal zprávu, že to byl špatný klíč.
Vypadá to, že OCR selhalo a text není v aktuální podobě čitelný. Zkusil jsem tedy použít pouze modrou:
Tohle je pořád dost špatné, ale aspoň něco vidím.
Z obrázku jsem provedl následující změny:
- „G“ by mělo být velké „G“
- Poslední otazník by měl být „4“
Další dva byly stále nečitelné, ale z hádání jsem nahradil druhý otazník „c“ a další dva, které zbyly, za „r“.
Řešení
Vlajka je správná! Je to CTF.