Vytvoření uživatelského typu souboru pro R-Studio. Metody detekce souborů "lepených" souborů vyhledávání ztracených souborů podpisu

Koncept " Magické číslo"V programování má tři významy:

  • Podpis dat
  • Vybrané jedinečné hodnoty, které by se neměly shodovat s jinými hodnotami (například UUID)
  • Špatná programovací praxe.

Podpis dat

Magické čísloOr. podpis- Integer nebo textová konstanta používaná pro jednoznačnou identifikaci zdroje nebo dat. Taková čísla sama o sobě nedává žádný smysl a může způsobit zmatek, který se setkal s kódem programu bez příslušného kontextu nebo komentáře, přičemž pokus o změnu na druhý, a to i blízko hodnotě, může vést k absolutně nepředvídatelným důsledkům. Z tohoto důvodu byla tato čísla ironicky nazývána magická. V současné době je toto jméno pevně stanoveno jako termín. Například, jakákoliv kompilovaná třída jazyka Java začíná hexadecimálním "magickým číslem" 0xcafebabe. Druhý je známý příklad - všechny Microsoft Windows spustitelný soubor spustitelný soubor s rozšířením .exe začíná s bajtovou sekvencí 0x4d5a (což odpovídá ASCII -SIMVOLS MZ - iniciálům Mark Zbikovski, jeden z tvůrců MS-DOS). Méně známý příklad je neinicializovaný ukazatel v aplikaci Microsoft Visual C ++ (počínaje verzí aplikace Microsoft Visual Studio), která v režimu ladění má 0xdeadbeef adresa.

V operačních systémech podobných UNIX, typ souboru je obvykle určován podpisem souboru bez ohledu na rozšíření jeho názvu. Chcete-li v nich interpretovat podpis souboru, je k dispozici standardní nástroj pro soubor.

Programování špatné praxe

Také "magická čísla" se nazývá špatná programovací praxe, když se numerický význam nachází ve zdrojovém textu a není zřejmé, že to znamená. Takový fragment napsaný v Javě bude špatný:

drawSprite (53, 320, 240);

final int screen_width \u003d 640; Final int screen_height \u003d 480; Final int screen_x_center \u003d screen_width / 2; Final int screen_y_center \u003d screen_height / 2; Final int sprite_crosshair \u003d 53; ... DrawSprite (Sprite_crosshair, Screen_X_Center, Screen_Y_Center);

Nyní je jasné: Tato čára přináší středu obrazovky Sprite - křížový odpad. Ve většině programovacích jazyků budou všechny hodnoty použité pro takové konstanty vypočteny ve fázi kompilace a jsou nahrazeny použitím hodnot. Taková změna zdrojového textu proto nezhorší rychlost programu.

Kromě toho jsou magická čísla potenciálním zdrojem chyb v programu:

  • Pokud se v programu používat stejné magické číslo (nebo může být potenciálně použito), pak bude jeho změna vyžadovat využití každé položky (namísto jednoho editace hodnoty pojmenované konstanta). Pokud ne všechny položky budou opraveny, vznikne alespoň jedna chyba.
  • Minimálně v jednom z výskytů může být magické číslo napsáno s chybou zpočátku a je obtížné detekovat.
  • Magic Číslo může záviset na implicitním parametru nebo jiném magickém čísle. Pokud tyto závislosti, které nejsou vybrány explicitně, nebude splněna, bude existovat alespoň jedna chyba.
  • Při úpravě výskytů jednoho magického čísla je možné mýlit jiným magickým číslem, nezávislým, ale má stejnou číselnou hodnotu.

Kouzelná čísla a cross-platforma

Někdy magická čísla poškozuje kód kódu. Faktem je, že v SI v 32- a 64-bitové OS, velikost typů znaků, krátkých a dlouhých dlouhých je zaručeno, zatímco velikost MIZE INT, DLOUHÁ, SIZE_T a PTRDIFF_T se mohou lišit (v prvních dvou - v závislosti na Preference vývojářů kompilátorů, poslední dva - v závislosti na vypuštění cílového systému). Ve starém nebo nekvalifikovaném písemném kódu, "magická čísla", což znamená jakýkoliv typ velikosti, při přepínání na stroje s jiným bitem, mohou vést k obtížným chybám chyb.

Například:

const Size_t number_of_elements \u003d 10; Dlouho [number_of_elements]; MEMSET (A, 0, 10 * 4); // Špatný - Rozumí se, že dlouho je 4 bajty, používá se magický počet prvků. MEMSET (A, 0, number_of_elements * 4); // nesprávně - to znamená, že dlouhá je rovna 4 bajty MEMSET (A, 0, number_of_elements * Sizeof (Long)); // Není zcela správné - Duplikace názvu typu (pokud se typ změní, budete se zde musí změnit) MEMSET (A, 0, number_of_eelements * Sizeof (A [0])); // je to pravé, optimálně pro dynamická pole nenulové velikosti MEMSET (A, 0, SIZEOF (A)); // vpravo, optimálně pro statické pole

Čísla, která nejsou magická

Ne všechna čísla musí být přenesena na konstanty. Například kód

Vyhledávání při skenování souborů známých typů (nebo, jak se říká, hledání podpisových souborů) je jedním z nejúčinnějších použitých v nástroji R-Studio Data pro obnovu dat. Použití daného podpisu umožňuje obnovit soubory konkrétního typu v případě, že částečně nebo zcela nepřítomné (poškozené) informace v adresářové struktuře a názvech souborů.

Obvykle se pro definování umístění souboru používá tabulka diskových oddílů. Pokud porovnáte disk s knihou, pak bude tabulka oddílu podobná jejímu obsahu. Při skenování R-Studa vyhledá soubory známých typů v tabulce diskového oddílu podle konkrétních zadaných podpisů. To je možné díky tomu, že téměř každý typ souboru má jedinečný podpis nebo datovou šablonu. Podpisy souborů jsou na konkrétním místě na začátku souboru a v mnoha případech i na konci souboru. Při skenování R-Studio odpovídá nalezené daty s podpisy souborů známých typů, což jim umožňuje identifikovat a obnovit jejich data.

S pomocí skenování souborů známých typů R-Studio umožňuje obnovit data z disků, které byly přeformátovány, stejně jako části byly přepsány. Navíc, pokud je diskový oddíl přepsán, poškozen nebo vymazán, pak je možné skenování souborů známých typů jediným možným.

Ale téměř vždy a ve všech tam jsou nevýhody a soubory známých typů používaných v R-studiu nejsou výjimkou. Při skenování souborů známých typů R-Studio umožňuje obnovit pouze nonfomy soubory, ale jak již bylo zmíněno, v nejvíce je to poslední možné metody.

R-Studio již obsahuje podpisy nejběžnějších typů souborů (zobrazení úplného seznamu souborů známých typů lze v sekci R-Studio online.)

Pokud je to nutné, uživatel může přidat nové typy typů souborů do R-Studio. Pokud například potřebujete najít soubory jakéhokoli jedinečného typu, nebo navrženy po datu posledního vydání R-Studio, můžete přidat vlastní podpisy do souborů známých typů. Dále bude považován za tento proces.

Vlastní soubory slavných typů
Vlastní podpisy souborů známých typů jsou uloženy v souboru XML zadaných v dialogovém okně Nastavení. Přidání podpisu se skládá ze dvou částí:

  1. Identifikujte podpis souboru na začátku souboru a pokud je na konci souboru.
  2. Vytvoření souboru XML obsahujícího podpis souborů a další informace o typu souboru.

To vše lze provést pomocí R-Studia. V tomto případě nemusíte být specialistou na přípravu (editaci) dokumentů XML nebo v oblasti hexadecimálního editace - v této příručce (článek), orientovaný na počáteční úroveň uživatele, budou všechny fáze tohoto procesu podrobně.

Příklad: Přidání podpisu pro formát MP4 (XDCAM-Ex Codec)
Zvažte přidání podpisu souboru na příkladu souboru.mp4 vytvořené pomocí Sony XDCAM-EX. Může ji použít například v případě poškození SD karty pro to, že jste neměli čas uložit na pevný disk počítače.

První etapa: Definice podpisu souborů
Chcete-li určit podpis souboru, zvažte příklady souborů stejného formátu.

Nechte tyto čtyři video soubory s Sony XDCAM-EX:
ZRV-3364_01.mp4.
ZRV-3365_01.mp4.
ZRV-3366_01.mp4.
ZRV-3367_01.mp4.

Pro snadné zvážení nechte být malé soubory. Větší soubory jsou obtížnější zobrazit v hexadecimální formě.

1. Otevřete soubory v R-Studiu. Chcete-li to provést, klikněte na každý soubor s pravým tlačítkem myši a vyberte možnost Zobrazit / Upravit (Zobrazit / Upravit) kontextového menu.

2. Porovnejte soubory. Budeme hledat stejnou šablonu nalezenou ve všech čtyřech souborech. On bude podpis souborů. Podpisy souborů jsou zpravidla na začátku souboru, ale někdy na konci.

3. Určete podpis souboru na začátku souboru. V našem příkladu je na samém počátku souboru. Všimněte si, že se vždy nestane - často je podpis souboru na začátku souboru, ale ne v prvním řádku (posunutí).

Z následujících obrázků vyplývá, že obsah všech čtyř souborů je jiný, ale všichni začínají se stejným podpisem souborů.


Kliknutím na obrázek jej zvýšíte.


Kliknutím na obrázek jej zvýšíte.


Kliknutím na obrázek jej zvýšíte.


Kliknutím na obrázek jej zvýšíte.

Vybraná oblast na obrázcích je podpis souborů tohoto typu souborů. Je reprezentován v textech i hexadecimálním.

Inv textový formulář Podpis Soubor má následující formulář:
.... ftypmp42 .... mp42 ........ zdarma

Body (".") Znaky, které nelze prezentovat v textovém formuláři, jsou uvedeny. Proto je také nutné poskytnout hexadecimální zobrazení podpisu souboru:
00 00 00 18 66 74 79 34 32 6D 70 00 00 00 00 34 32 6D 00 70 00 00 00 00 00 00 08 66 72 65 65

4. Stejným způsobem definujeme podpis souborů, ale na samém konci souboru. To může být další podpis souborů, další délka.

Podpis obrázků na konci souboru je zvýrazněn v níže uvedených obrázcích:


Kliknutím na obrázek jej zvýšíte.


Kliknutím na obrázek jej zvýšíte.


Kliknutím na obrázek jej zvýšíte.


Kliknutím na obrázek jej zvýšíte.

Upozorňujeme, že data jsou před vybranou oblast (podpis souborů) ve všech čtyřech souborech stejná. Jedná se o technické informace, které nejsou podpisem souborů, ale navrhuje, aby všechny čtyři snímek (soubor) byly provedeny pomocí jedné kamery se stejnými parametry. Obvykle je možné rozlišit shodné vzorce s technickými informacemi ze podpisu souboru. V našem příkladu, v posledním řádku před začátkem podpisu souborů, vidíme text 'záznammode typu \u003d "normální", což jasně označuje, že se jedná o nějaký parametr souboru a není podpis. Vždy věnujte zvláštní pozornost tomuto řetězci, abyste chybně nezahrnovali technické informace do podpisu souboru.

V našem případě je podpis souborů následující text:
...
Připomeňme si, že body označují znaky, které nelze prezentovat v textovém formuláři.

V hexadecimální formě má podpis souboru následující formulář:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Poznámka: Na konci souboru nebude podpis vždy.

Druhý stupeň: Vytvoření souboru XML popisujícího známý typ souboru
Definováním podpisu souborů můžete vytvořit soubor XML a zapnout příslušný typ souborů do programu R-Studio. To lze provést dvěma způsoby:

2.1 Použití vestavěného editoru podpisu souborů:
Vyberte nabídku Nastavení (Nástroje) (nástroje), v dialogovém okně Nastavení, které se otevře, klikněte na kartu Známé typy souborů) a klepněte na tlačítko Upravit typy uživatelských souborů.

Kliknutím na obrázek jej zvýšíte.

Klepněte na tlačítko Vytvořit typ souboru (upravte dialogové okno typy souborů uživatelů.
Nastavte následující parametry:

  • ID je jedinečný digitální identifikátor. Toto číslo bude vybráno libovolně; Jediný by se neměl shodovat s digitálním identifikátorem jakéhokoli jiného typu souborů.
  • Skupinový popis je skupina, ve které budou nalezeny soubory nalezené v R-Studio. Můžete nastavit novou skupinu, nebo vybrat jeden z těch, kteří jsou již tam. Budeme mít tuto skupinu "multimediální video (multimédia: video)".
  • Popis - stručný popis typu souborů. V našem příkladu můžete použít například "Sony Cam Video, XDCAM-ex".
  • Rozšíření - rozšíření souborů tohoto typu. V našem případě - MP4.

Parametr vlastností (funkce) je volitelný, v našem případě jej nemusíme používat.

Kliknutím na obrázek jej zvýšíte.

Dále musíte zadat počáteční a konečný podpis souborů. Chcete-li to provést, vyberte možnost Start (začátek) a poté v kontextovém menu příkaz Přidat podpis (přidat podpis).

Kliknutím na obrázek jej zvýšíte.

Poté poklepejte na pole<пустая сигнатура> () A zadejte příslušný text.

Kliknutím na obrázek jej zvýšíte.

Poté vytvořte konečný podpis souborů. Nezapomeňte zadat 21 do pole sloupce z (od).

Kliknutím na obrázek jej zvýšíte.

Úspěšně jste vytvořili svůj vlastní podpis souborů známého typu.

Nyní je třeba ji zachránit. Existují dva způsoby: můžete buď uložit do výchozího souboru zadaného na kartě Domů (Main) v dialogovém okně Nastavení (Saveetings) kliknutím na tlačítko Uložit. Klikněte na tlačítko Uložit jako ... (Uložit jako ...) a uložte podpis do jiného souboru.

2.2 Vytvoření souboru XML popisující známý typ souboru ručně:
Chcete-li tento soubor vytvořit, použijte verzi XML verze 1.0 a kódování UTF-8. Nezoufejte, pokud nevíte, co to je - jen otevřete libovolný textový editor (například Notepad.exe) a v prvním řádku zadejte následující text:

Dále vytvoříme značku XML definující typ souboru (filetype). S ohledem na dříve popsané atributy značky XML bude vypadat takto:

Vložte ji bezprostředně po

Dále definujeme podpis souborů (tag ). Výchozí podpis (na začátku souboru) bude uvnitř značky bez atributů. Používáme textový pohled na podpis, ale zároveň nahrazení hexadecimálních znaků, které nelze reprezentovat v textovém formuláři. Před každým hexadecimálním symbolem vložení "X" tak značku S podpisem souborů bude vypadat takto:

Pokud potřebujete také definovat konečný podpis (na konci souboru). Pro to se používá stejná značka, ale s prvkem "z" a atributem "Konec". Bude to vypadat takto:

Připomeňme, že v závěrečném podpisu souborů nebyly žádné symboly nonet, nicméně, to bylo naskládané a trojúhelníkové závorky. Aby nedošlo k záměně a chybám v syntaxi XML, nahradíme znaky podpisu "/", "<" и ">"Jsou to hexadecimální.

Na konci podpisů souborů musíte obsahovat uzavírací značky filetype a filetypelisty:

Celý soubor by tedy měl vypadat takto:


X00 x00 x00 x00 \\ x.18FTYPMP42 x00 x00 x00 x00 x00mp42 x00 x00 x00 x00 x00 x00 x00 x00 x08free
x3c x2fnonrealtimeeta \\ x3E \\ x0d x0A \\ x00

Nezapomeňte: Syntaxe XML je citlivá na registru, proto bude značka správná , ale ne .

Uložte soubor v textovém formátu s rozšířením.xml. Například: Sonycam.xml.

Úspěšně jsme vytvořili svůj vlastní podpis souborů známého typu. Tento příklad je poměrně dostačující k pochopení základních principů vytvoření souboru typu uživatele. Zkušení uživatelé mohou používat XML verze 2.0. Můžete si přečíst více o tomto v sekci R-Studio online certifikát.

Krok 3: Zkontrolujte a přidejte soubor popisující známý typ souborů
V dalším kroku musíte přidat (stáhnout) soubor XML na R-Studio. V tomto případě bude automaticky ověřen.

Upload v R-Studio vytvořeném v předchozí fázi XML souboru. Chcete-li to provést, vyberte nabídku Nástroje nastavení (Nastavení) (Nástroje). V oblasti Kvalitní typy souborů (typy souborů uživatelů) Záložky Home (Main) Dialogové okno Nastavení (Nastavení) Přidáme soubor XML vytvořený USA (SonyCAM.XML). Klepněte na tlačítko Použít.

Kliknutím na obrázek jej zvýšíte.

2. Zkontrolujte Ano (Ano) na žádost o stahování nového typu souborů.

Kliknutím na obrázek jej zvýšíte.

3. Chcete-li zkontrolovat skutečnost, že typ souborů byl úspěšně načten, klikněte na kartu Známé typy souborů (známé typy souborů) dialogového okna Nastavení (Nastavení). Připomeňme si, že jsme přidali typ souboru do multimediální video skupiny (multimédia: video). Otevření této skupiny (složka), musíme zobrazit položku s popisem uvedeným v USA při vytváření souboru XML: Sony Cam Video, XDCAM-EX (.mp4).

Kliknutím na obrázek jej zvýšíte.


Kliknutím na obrázek jej zvýšíte.

Pokud existují chyby v syntaxi souboru, zobrazí se odpovídající zpráva:

Kliknutím na obrázek jej zvýšíte.

V tomto případě zkontrolujte znovu soubor XML pro chyby. Nezapomeňte: Syntaxe XML je citlivá na registru a pro každou značku na konci musí být zavírací značka.

Krok 4: Testování souboru popisujícího známý typ souborů
Chcete-li zkontrolovat správnost souborového souboru vytvořeného uživatelem vytvořený, pojďme najít naše soubory.mp4 na odnímatelném USB flash disku.

1. Ve skupinovém rámečku Windows Vista nebo Windows 7 budete provádět úplný (ne rychlý) formátování disku nebo používat nástroj pro čištění disku (například r-wipe & clean), abyste zcela odstranili všechna dostupná data na datovém disku. Nechte disk USB zdobí v FAT32 (velikost vyhledávacích souborů nepřesahuje 2 GB).

2. Znovu vytvořte testovací soubory na disk a restartujte počítač tak, aby byl obsah mezipaměti uložen na disku. Externí disk můžete také vypnout a znovu jej připojit.

3. Operátor disku bude definován jako například logický disk F :. \\ T

4. Spusťte R-Studio. Vyberte náš disk (F :) a klepněte na tlačítko Skenovat (Scan)

Kliknutím na obrázek jej zvýšíte.

5. V dialogovém okně Skenování (Skenování) do systému souborů klepněte na tlačítko Upravit ... (Změna ...) a odstranit všechny příznaky. Vypínáme tedy vyhledávání souborů a souborů pomocí tabulky oddílů.
Kliknutím na obrázek jej zvýšíte.

6. Zaškrtněte políčko Upřesnit vyhledávání souborů (další vyhledávání známých typů souborů). To umožní R-Studio pro vyhledávání při skenování souborů známých typů.

7. Chcete-li spustit skenování, klepněte na tlačítko Skenovat (Scan).

8. Počkejme, dokud R-Studio neukázal disk. Na kartě Scan Information se zobrazí skenování (Progress).


Kliknutím na obrázek jej zvýšíte.

9. Po dokončení skenování vyberte další soubory (extra nalezené soubory) a poklepejte na něj.


Kliknutím na obrázek jej zvýšíte.

10. Naše testovací soubory budou umístěny ve složce Sony Cam Video, složce XDCAM-EX (nebo ve složce pod jiným názvem, odpovídající popisu typu souborů zadaných ve druhé fázi).


Kliknutím na obrázek jej zvýšíte.

Vidíte, že názvy souborů, data a umístění (složky) nebyly obnoveny, protože tyto informace jsou uloženy v systému souborů. Proto v R-Studio se automaticky zobrazí každý soubor s novým názvem.

Je však třeba vidět, že obsah souborů není poškozen. Abyste se ujistili, že je otevřete v příslušném programu, například VLC Media Player.


Kliknutím na obrázek jej zvýšíte.

Závěr
Možnost R-studia při skenování, hledání známých typů umožňuje obnovit data i z disku, jejichž souborové systémy nebo nebo přepsané. Můžete efektivně vyhledávat soubory pomocí jejich podpisů, což je zvláště užitečné, pokud jste přesně známí pro typ souborů získaných, například v našem příkladu. Schopnost vytvářet vlastní typy souborů umožňuje přidat libovolný soubor se specifickým podpisem souboru do seznamu souborů známých typů.

Šéfové mi dali poměrně zajímavý úkol. V krátké době napište analyzátor spustitelných souborů, které by podpisy bylo schopno najít virové tělo a určit použitý balič / cryptor. Hotový prototyp se objevil za pár hodin.

Slovo autora

Alarm analýza

Vyhledávání podpisu škodlivého objektu je to, co může antivirový program. Obecně je podpis formalizovaný popis některých funkcí, které může určit, že naskenovaný soubor je virus a virus je poměrně definován.

Existují zde různé techniky. Jako možnost použijte podpis složený z N bytu škodlivého objektu. V tomto případě je možné, že není to hloupé srovnání, ale srovnání pro některé masky (např. Bajtes Eb ?? ?? CD 13). Nebo nastavit další podmínky, jako jsou "takové, bajty by měly být na vstupním bodu programu" a tak dále. Podpis Malviva je zvláštní.

Podobně jsou popsány některé funkce, ve kterých je možné určit, že spustitelný soubor je balen s konkrétním kryptoorem nebo baličem (například banální aspack). Pokud si pozorně přečtete náš časopis, slyšel jsem o takovém nástroji jako peid, který je schopen určit nejčastěji používané baličky, kryptoři a kompilátory (v databázi existuje velký počet podpisů) pro soubor PE přenesen do něj. ALAS, nové verze programu nenechávejte dlouho a nedávno se na oficiálních stránkách objevila zpráva, že projekt nebude dále rozvíjen. Je to škoda, protože možnosti peidla (zejména vzhledem k pluginový systém) mohly být pro mě užitečné. Po krátké analýze bylo jasné, že to není možnost. Ale bojuje s anglicky mluvícími blogy, rychle jsem našel to, co jsem přišel. Projekt Yara (Code.google.com/p/yara-project).

Co je Yara?

Byl jsem přesvědčen o samém počátku, že někde v síti již existuje otevřený vývoj, který by převzal úkol určení shody mezi nějakým podpisem a souborem spisu. Kdybych mohl najít takový projekt, mohl by být snadno vložen na kolejí webové aplikace, přidat různé podpisy a dostat to, co bylo nutné ze mě. Plán se začal zdát ještě skutečnější, když jsem přečetl popis projektu YARA.

Vývojáři ji umístí jako nástroj pro pomoc výzkumným pracovníkům Malvari při identifikaci a klasifikaci škodlivých vzorků. Výzkumník může vytvářet popisy pro jiný typ škodlivosti pomocí textových nebo binárních vzorů, které popisují formalizované známky Malvari. Získávají se tak podpisy. Ve skutečnosti, každý popis sestává ze sady řádků a nějakého logického výrazu, na základě které je stanovena analýza analyzátoru.

Pokud jsou podmínky jedné z pravidel splněny pro studovanou souboru, je podle toho definován (například červový červ). Jednoduchý příklad pravidla pochopit, jaké záležitosti o:

pravidlo Silent_Banker: Banker
{
Meta:
Popis \u003d "To je jen příklad"
Závit_level \u003d 3.
in_the_wild \u003d true.
Struny:
$ A \u003d (6A 40 68 00 00 00 00 6a 14 8d 91)
$ B \u003d (8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9)
$ C \u003d "uvodfrysihlnwpejxqzakcbgmt"
Stav:
$ a $ b nebo $ c
}

V tomto pravidle mluvíme Yary, že jakýkoli soubor, který obsahuje alespoň jeden z řádků vzorků popsaných v $ A, $ B, $ C proměnné by měly být klasifikovány jako Silent_Banker Trojan. A to je velmi jednoduché pravidlo. Ve skutečnosti mohou být role mnohem složitější (budeme mluvit o ní níže).
Úřad projektu YARA říká i seznam projektů, které jej používají, a to je:

  • Služby virusotální malware (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Wewatchyourwebsite.com).

Veškerý kód je napsán v Pythonu a uživatel je nabízen oba modul sám pro použití ve svém vývoji a jednoduše spustitelný soubor použít Yara jako nezávislá aplikace. V rámci své práce jsem si vybral první možnost, ale pro jednoduchost v článku použijeme analyzátor jednoduše jako aplikace konzoly.

Trochu běží, rychle jsem přišel na to, jak napsat pro Yara pravidla, stejně jako upevnit podpis virů z volných Avra \u200b\u200ba Peid Packers. Začněme však s instalací.

Instalace

Jak jsem řekl, projekt je napsán v Pythonu, takže lze snadno nainstalovat na Linuxu a na Windows, a na Mac. Zpočátku si můžete vzít binární. Pokud zavoláte aplikaci v konzole, dostaneme pravidla pro běh.

$ yara.
Použití: Yara ... ... Soubor | Pid

To znamená, že formát volání programu je následující: Za prvé, název programu přichází, pak se seznam možností, po kterém je zadán soubor s pravidly a na konci - název souboru ve studiu (nebo adresáři) obsahující soubory) nebo identifikátor procesu. Teď by bylo dobré vysvětlit, jak tato nastavení jsou sestavena, ale nechci vás okamžitě odeslat s suchou teorií. Proto budeme postupovat odlišně a ohleduplní podpisy jiných lidí, aby Yara mohla vykonávat jednu z úkolů, které jste doručili - plnou definici virů podle podpisů.

Jeho antivirus

Nejdůležitější otázkou je, kde si vzít základní podpisy slavných virů? Antivirové společnosti jsou aktivně rozděleny takovými bázemi mezi sebou (někdo štěnce, někdo je menší). Abych byl upřímný, poprvé jsem dokonce pochyboval o tom, že někde na síti někdo otevřel takové věci. Ale jak se ukázalo, tam jsou dobří lidé. Příslušná základna z populárního protisivínu Clamav je k dispozici všem (Clamav.net/lang/en). V sekci nejnovější stabilní vydání naleznete odkaz na nejnovější verzi antivirového produktu, stejně jako vazby ke stažení základen virů Clamav. Nejdříve se budeme zajímat o soubory main.cvd (db.local.clamav.net/main.cvd) a daily.cvd (db.local.clavd.net/daily.cvd).

První obsahuje hlavní databázi podpisu, druhá je nejvíce folentová základna s různými dodatky. Pro cílový cíl je daily.cvd dost dostačující, ve kterém se shromažďuje více než 100 000 žaluzií. Base Clamav však není základna Yara, takže musíme převést na požadovaný formát. Ale jak? Koneckonců, stále nevíte o formátu Clamav, ani o formátu Yara. Tento problém byl již postaral o nás, když jsem připravil malý skriptor, převedení databáze podpisu Clamav virus do sady pravidel Yara. Script se nazývá Clamav_to_ Yara.py a napsaný Matthew Richard (bit.ly/ij5hvs). Stáhněte si skript a převést databáze:

$ Python clamav_to_yara.py -f daily.cvd -o clamav.yara

Výsledkem je, že v souboru Clamav.yara dostaneme databázi podpisu, která bude okamžitě připravena k použití. Nyní zkusíme kombinaci Yara a Clamav base v akci. Skenování složky pomocí podpisu se provádí jedním příkazem:

$ yara -r clamav.yara / pentest / msf3 / data

Volba -R označuje, že skenování musí být provedeno rekurzivně pro všechny podsložky aktuální složky. Pokud složka / otroctví / msf3 / data měla nějaký druh virů (alespoň ty v základně Clamav), pak yara tuto okamžitě oznámí. V zásadě se jedná o hotový podpis Scanner. Pro větší pohodlí jsem napsal jednoduchý skript, který zkontroloval aktualizaci základny Clamav, stáhli nové podpisy a převedl je na Formát Yara. Ale to jsou detaily. Jedna část úkolu je dokončena, nyní můžete pokračovat, abyste vypracovali pravidla pro určení baličů / cryptorů. Ale pro to jsem musel přijít trochu.

Hra podle pravidel

Toto pravidlo je hlavním mechanismem programu, který umožňuje připisovat zadaný soubor libovolné kategorii. Pravidla jsou popsána v samostatném souboru (nebo soubory) a ve svém zobrazení se velmi podobají struktuře () z jazyka C / C ++.

pravidlo Badboy.
{
Struny:
$ a \u003d "win.exe"
$ B \u003d "http://foo.com/badfi le1.exe"
$ c \u003d "http://bar.com/badfi le2.exe"
Stav:
$ A a ($ b nebo $ c)
}

V zásadě nic složité písemné pravidla. V rámci tohoto článku jsem se dotkl hlavních bodů a najdete podrobnosti v Manul. Mezitím je deset nejdůležitějších bodů:

1. Každé pravidlo začíná pravidlem klíčových slov, po kterém přichází identifikátor pravidla. Identifikátory mohou mít stejné názvy jako proměnné v C / C ++, která je sestávající z písmen a čísel a první znak nemůže být číslic. Maximální délka názvu identifikátoru je 128 znaků.

2. Obvykle pravidla se skládají ze dvou sekcí: Definice sekce (struny) a stavová sekce (stav). V sekci struny jsou data uvedena na základě kterého bude provedeno řešení v sekci podmínky, zda specifikovaný soubor splňuje určité podmínky.

3. Každý řetězec v sekci Strings má svůj vlastní identifikátor, který začíná od znaménka $ - obecně, jako reklama v PHP. Yara podporuje obvyklé čáry uzavřené ve dvojitých uvozovkách ("") a hexadecimální linie uzavřené v kudrnatých závorkách (()), stejně jako regulární výrazy:

$ My_text_string \u003d "text zde"
$ My_hex_string \u003d (E2 34 A1 C8 23 FB)

4. Sekce stavu obsahuje veškerou logiku pravidel. Tato sekce musí obsahovat logický výraz, který určuje, v takovém případě souboru nebo proces splňuje pravidlo. Obvykle v této sekci existuje odvolání k dříve oznámeným řádkům. Identifikátor řetězce je považován za logickou proměnnou, která se vrátí true, pokud byl řetězec nalezen v souboru nebo procesní paměti, a nepravdivé jinak. Výše uvedené pravidlo určuje, že soubory a procesy obsahující řetězec Win.exe a jeden ze dvou adres URL musí být přiřazeny kategorii Badboy (podle názvu pravidla).

5. Hexadecimální linie umožňují používat tři návrhy, které je činí flexibilnějším: substituce (zástupné znaky), kapely (skoky) a alternativní výběr (alternativy). Substituce jsou místa v řetězci, které nejsou známy, a na jejich místě může být jakýkoliv význam. Ukazují symbol "?"

$ hex_string \u003d (e2 34 ?? c8 a? fb)

Tento přístup je velmi pohodlný při určování řetězců, jehož délka je známa a obsah se může lišit. Pokud může být část řádku z různých délek, je vhodné použít rozsahy:

$ hex_string \u003d (f4 23 62 b4)

Tento záznam znamená, že uprostřed linky může být od 4 do 6 různých bytů. Můžete také implementovat alternativní volbu:

$ hex_string \u003d (f4 23 (62 b4 | 56) 45)

To znamená, že na místě třetího bajtu může být 62 B4 nebo 56, takový záznam odpovídá řetězci F42362B445 nebo F4235645.

6. Chcete-li ověřit, zda je zadaný řetězec na konkrétním posunutí v souboru nebo adresním prostoru procesu, použije se operátora:

$ A na 100 a $ b v roce 200

Pokud řetězec může být uvnitř určitého rozsahu adres, použije se:

$ a v (0..100) a $ b v (100..fi Lesize)

Někdy jsou situace, kdy je nutné určit, že soubor musí obsahovat konkrétní číslo ze zadané sady. To se provádí pomocí operátora:

pravidlo ofexample1.
{
Struny:
$ foo1 \u003d "dummy1"
$ foo2 \u003d "dummy2"
$ foo3 \u003d "dummy3"
Stav:
2 z ($ foo1, $ foo2, $ foo3)
}

Pravidlo vyžaduje, aby soubor obsahuje všechny dva řádky ze sady ($ foo1, $ foo2, $ foo3). Namísto zadání konkrétního počtu řádků v souboru můžete použít libovolné proměnné (alespoň jeden řádek ze zadané sady) a všechny (všechny řádky z dané sady).

7. No, poslední zajímavá příležitost zvážit, je aplikovat jednu podmínku mnoha řádků. Tato funkce je velmi podobná státnímu provozovateli, pouze silnější je operátor pro ..

pro vyjádření String_Set: (Boolean_Expression)

Tato položka musí být přečtena takto: Od řetězců uvedených v řetězci Spring_ Set, alespoň výrazové dílo musí splňovat podmínku Boolean_Expression. Nebo jinými slovy: Exprese Boolean_Expression se vypočítá pro každý řádek od String_SET a vyjádření musí se vrátit do true. Dále považujeme tento design na konkrétním příkladu.

Dělat peid.

Když se tedy všechno stane méně jasné s pravidly, můžete pokračovat v realizaci v našem projektu detektoru baličů a kryptoře. Jako výchozí materiál zpočátku jsem si vypůjčil podpisy známých baličů ze stejného peidla. V složce pluginů je soubor userdb.txt, který obsahuje to, co potřebujeme. V mé databázi ukázala 1850 podpisů.

Abychom je mohli plně importovat, doporučuji vám napsat nějaký skriptor. Formát této databáze je jednoduchý - používá se obvyklý textový soubor, ve kterém jsou záznamy formuláře uloženy:


Podpis \u003d 50 e8 ?? ?? ?? ?? 58 25? F0 FF FF 8B C8 83 C1 60 51 83 C0 40 83 EA 06 52 FF 20 9D C3
EP_ONLY \u003d TRUE.

První řetězec nastaví název baličce, který se zobrazí v Peid, pro nás bude identifikátor pravidla. Druhý je samotný podpis sám. Třetí je příznak EP_ONLY, což znamená, zda hledat tento řetězec pouze na adresu vstupního bodu nebo v celém souboru.

Pokusme se vytvořit pravidlo, řekněme, pro Aspack? Jak se ukázalo, není nic složitého. Nejprve vytvořte soubor pro uložení pravidel a zavolejte jej například packers.yara. Pak hledáme v databázi Peid Všechny podpisy, v němž se objeví, který se objeví Aspack, a nést je do pravidla:

pravidlo Aspack.
{
Struny:
$ \u003d (60 e8 ?? ??? ??? 5d 81 ed ?? ?? (43 | 44) ?? B8 ?? ?? (43 | 44) ?? 03 C5)
$ \u003d (60 eb ?? 5d eb ?? ff ?? ?? ?? ?? e9)
[.. vystříhnout ..]
$ \u003d (60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01)
Stav:
Pro kterékoli z nich: ($ v Enterpoint)
}

Všechny záznamy nalezené EP_ONLY příznak je nastaven na hodnotu TRUE, to znamená, že tyto řádky musí být umístěny na adrese vstupního bodu. Proto píšeme následující podmínku: "Pro kterékoli z nich: ($ v Enterpoint)."

Přítomnost alespoň jednoho ze zadaných řádků na adresu vstupního bodu tak bude znamenat, že soubor je zabalen ASPACK. Také pozornost, že v tomto pravidle jsou všechny řádky jednoduše nastavit pomocí znaménka $, bez identifikátoru. To je možné, protože ve stavových sekcích se nepodařilo kontaktovat určitou konkrétní, ale používáme celou sadu.

Chcete-li zkontrolovat výkon získaného systému, stačí provést příkaz v konzole:

$ Yara -r packers.yara susfi le.exe

Právě tam pár aplikací, balené aspack, jsem se ujistil, že všechno funguje!

Hotový prototyp

Yara byl extrémně jasný a transparentní nástroj. Nedělal jsem mnoho potíží napsat webadming pro něj a vytvořit práci jako webová služba. Některé kreativní a suché výsledky analyzátoru jsou již malovány s různými barvami, označujícím stupeň nebezpečí nalezené nadace. Malá aktualizace databáze a stručný popis je k dispozici pro mnoho kryptoorů a někdy i rozbalení pokyny. Prototyp je vytvořen a práce zrušena a šéfové tance od potěšení!

Funkční kód (FC) v záhlaví telegramu identifikuje typ telegramu, například požadavek telegram (požadavek nebo odesílání / požadavek telegram (potvrzovací rámec, rámec odezvy). Kromě toho kód funkcí obsahuje skutečnou funkci přenosu a řídicí informace, které zabraňují ztrátě a zdvojování zpráv, nebo typ stanice s FDL stavem.

7 6 5 4 3 2 1 0 FC: Žádost o kódu funkcí
1 Požádat telegram.
X. FCV \u003d střídavý bit zapnutý
X. href \u003d "http://profibus.felser.ch/cs/funktionscode.htm#aufruffolgebit»\u003e FCB \u003d střídavý bit (z počtu snímků)
1 0 (0x0) CV \u003d Hodnota Hodiny ()
1 jiný Rezervováno
0 0 (0x0) Te \u003d Časová událost (Synchronizace hodin)
0 3 (0x3) SDA_LOW \u003d Odeslat data potvrzena - nízká priorita
0 4 (0x4) Sdn_low \u003d Odeslat data nejsou potvrzena - nízká priorita
0 5 (0x5) SDA_HIGH \u003d Poslat data potvrzena - vysoká priorita
0 6 (0x6) Sdn_high \u003d Odeslat data nejsou potvrzena
0 7 (0x7) MSRD \u003d Odeslat data požadavku s vícesměrovou odpovědí
0 9 (0x9) Žádost o status FDL.
0 12 (0xc) SRD Low \u003d Odeslat a požadovat data
0 13 (0xd) SRD HIGH \u003d Odesílání a vyžádání dat
0 14 (0xe) Žádost identifikovat odpověď
0 15 (0xf) Žádost o status lsap s odpověďmi 1)
0 jiný Rezervováno

1) Tato hodnota je v poslední verzi standardu, která již není definována, ale pouze vyhrazena

7 6 5 4 3 2 1 0 FC: Reakce kódu funkcí
0 Odpověď Telegram.
0 Rezervováno
0 0 Otrok.
0 1 Mistr není připraven.
1 0 Mistr připraven, bez tokenu
1 1 Mistr připraven, v tokenu prsten
0 (0x0) OK.
1 (0x1) UE \u003d Uživatelská chyba
2 (0x2) Rr \u003d žádné zdroje
3 (0x3) RS \u003d SAP není povoleno
8 (0x8) DL \u003d nízká data (normální pouzdro s DP)
9 (0x9) Nr \u003d žádná data reakce
10 (0xa) DH \u003d DATA HIGH (DP Diagnóza čekající)
12 (0xc) Rdl \u003d data nejsou přijata a data nízká
13 (0xd) RDH \u003d data nejsou přijata a data vysoká
jiný Rezervováno

Hráč fit Bit Bit Rámeček Bit FCB (B5) zabraňuje duplikaci zprávy potvrzovací nebo reagující stanicí (Responder) a jakoukoli ztrátou volající stanice (iniciátor). Vyloučeno z toho požadavků bez potvrzení (SDN) a statusu FDL, identifikačních požadavků a statusu LSAP.

Pro bezpečnostní sekvenci musí iniciátor nést FCB pro každého respondenta. Když je požadavek telegram (požadavek nebo odesílání / požadavek) odeslán na respondéru poprvé, nebo pokud je znovu odeslán do respondentu, který je aktuálně označen jako neuperační, musí být FCB nastavena tak, jak je definováno v respondentu. Iniciátor dosahuje toho v požadavku telegramu s FCV \u003d 0 a FCB \u003d 1. Odpočění musí posoudit telegram tohoto druhu jako první cyklus zpráv a uložit FCB \u003d 1 společně s adresou iniciátora (SA). Tento cyklus zprávy nebude opakován iniciátorem. V následujícím požadavku telegramů na stejný respondék musí iniciátor nastavit FCV \u003d 1 a změnit FCB s každým novým telegramem žádosti. Každý zodpovědný, který obdrží požadavek telegram, který je určen s FCV \u003d 1, musí vyhodnotit FCB. Pokud se FCB změnil ve srovnání se stejným iniciátorem (stejným SA), jedná se o platné potvrzení, že předchozí cyklus zprávy byl správně uzavřen. Pokud požadavek telegram pochází z jiného iniciátoru (odlišného SA), hodnocení FCB již není nescesary. V obou případech musí responder uložit FCB se zdrojovým zdrojem SA až do obdržení nového telegramu adresovaného k němu. V případě ztraceného nebo zhoršeného potvrzení nebo odezvy telegramu, FCB nesmí být změněn iniciátorem v předchozím cyklu zprávy byl vadný. Pokud responder obdrží požadavek telegram s FCV \u003d 1 a stejný FCB jako stejný iniciátor (stejný SA), to bude indikovat požadavek opakování. Responder musí zase opakovat potvrzení nebo odezvu telegram drženého v připravenosti. Až do výše uvedeného potvrzení nebo přijetí telegramu s jinou adresou (SA nebo DA), která není potvrzena (zasílá data bez potvrzení, SDN) Responder musí mít poslední potvrzení nebo odezvu telegramu v připravenosti pro případný požadavek . V případě požadavků telegramů, které nejsou potvrzeny a s požadavkem FDL Status, ID ident a LSAP, FCV \u003d 0 a FCB \u003d 0; Vyhodnocení respondentem již není nutné.

b5. b4. Bitová pozice
FCB. Fcv. Stav Význam. Akce.
0 0 Da \u003d ts / 127 Žádost bez potvrzení
Požadavek na stav FDL / ID ident
Smazat poslední potvrzení
0/1 0/1 Da # ts. Žádost o další odpovědi
1 0 Da \u003d ts. První požadavek FCBM: \u003d 1
Sam: \u003d sa
Smazat poslední AcknowDGement / odpověď
0/1 1 Da \u003d ts.
SA \u003d SAM.
FCB # FCBM.
Nový požadavek. Smazat poslední AcknowDGement / odpověď
FCBM: \u003d FCB
Držte AcknowDGement / odpověď v připravenosti pro opakování
0/1 1 Da \u003d ts.
SA \u003d SAM.
FCB \u003d FCBM.
Opakovat požadavek FCBM: \u003d FCB
Opakujte AcknowDGement / odpověď a pokračujte v držení připravenosti
0/1 1 Da \u003d ts.
SA # SAM.
Nový iniciátor FCBM: \u003d FCB
Sam: \u003d SA Držte potvrzení / odpověď v připravenosti k opakování

FCBM uložená FCB v paměti SAM uložena SA v paměti

Mnozí slyšet o těchto souborech jako RARJPEG "a. Toto je speciální typ souborů, který je lepený soubor Close JPEG a rar archiv. Je to vynikající kontejner skrytí skutečnosti přenosu informací. Vytvořit RARJPEG pomocí následujících příkazů :

UNIX: cat Image1.jpg Archive.rar\u003e Image2.jpg
Okna: kopírovat / b image1.jpg + archive.rar image2.jpg

Nebo v přítomnosti hexního editoru.

Samozřejmě, že nejen formát JPEG lze použít ke skrytí přenosu informací informací, ale mnoho dalších. Každý formát má své vlastní vlastnosti, díky kterému může být vhodný nebo ne pro roli kontejneru. Popíšu, jak můžete najít lepené soubory v nejoblíbenějších formátech nebo zadat skutečnost lepení.

Metody pro detekci lepených souborů lze rozdělit do tří skupin:

  1. Způsob kontroly oblasti po EOF-markeru. Mnoho populárních formátů souborů má tzv. File End Marker, který je zodpovědný za zobrazení požadovaných dat. Například programy pro prohlížení fotografií si přečtěte všechny bajty až do této značky, nicméně oblast poté, co zůstane ignorován. Tato metoda je ideální pro formáty: JPEG, PNG, GIF, zip, RAR, PDF.
  2. Způsob kontroly velikosti souboru. Struktura některých formátů (audio a video kontejnery) umožňuje vypočítat skutečnou velikost souboru a porovnat ji s původní velikostí. Formáty: AVI, WAV, MP4, MOV.
  3. Metoda pro kontrolu souborů CFB. CFB nebo složený souborový binární formát - formát dokumentu vyvinutý v Microsoftu, který je kontejnerem s vlastním souborovým systémem. Tato metoda je založena na anomáliích zjišťování v souboru.

Je po skončení souboru nějaký život?

Jpeg.

Chcete-li najít odpověď na tuto otázku, je nutné prohloubit ve specifikaci formátu, což je "Springchart" lepených souborů a porozumět jeho struktuře. Každý JPEG začíná 0xFF 0xD8 podpisem.

Po tomto podpisu je servisní informace, volitelně ikona obrázku a konečně, samotný komprimovaný obraz. V tomto formátu je konec obrázku označen dvouba-bajtem 0xFF 0xD9 podpisem.

Png.

Prvních osmi bajtů souboru PNG vezme následující podpis: 0x89, 0x50, 0x4E, 0x47, 0x0d, 0x0A, 0x1a, 0x0A. Konečný podpis, který dokončí datový tok: 0x49, 0x45, 0x4E, 0x44, 0xae, 0x42, 0x60, 0x82.

Rar

Celkový podpis pro všechny RAR archivy: 0x52 0x61 0x72 0x21 (RAR!). Po něm jsou k dispozici informace o verzi archivu a dalších souvisejících dat. Experimentální cesta byla zjištěna, že archiv končí podpisem 0x0a, 0x25, 0x25, 0x45, 0x4f, 0x46.

Tabulka formátů a jejich podpisy:
Algoritmus pro kontrolu lepení v těchto formátech je extrémně jednoduchý:

  1. Najít počáteční podpis;
  2. Najít konečný podpis;
  3. Pokud po posledním podpisu nejsou žádná data - soubor je čistý a neobsahuje přílohy! V tomto případě musíte vyhledávat další formáty po posledním podpisu.

Gif a pdf.

Dokument PDF může mít více než jeden značka EOF, například z důvodu nesprávné generování dokumentu. Počet konečných podpisů v souboru GIF se rovná počtu rámců v něm. Na základě vlastností těchto formátů můžete zlepšit algoritmus pro kontrolu přítomnosti lepených souborů.
  1. Odstavec 1 se opakuje z předchozího algoritmu.
  2. Odstavec 2 se opakuje z předchozího algoritmu.
  3. Při nalezení konečného podpisu si pamatovat jeho umístění a hledat další;
  4. Pokud tímto způsobem dosáhl posledního EOF značky - soubor je čistý.
  5. Pokud soubor nekončí závěrečným podpisem - goto umístit poslední nalezený konečný podpis.
Velký rozdíl mezi velikostí souboru a polohou po posledním konečném podpisu indikuje přítomnost adhezivního přílohy. Rozdíl může být více než deset bajtů, i když je možné instalovat jiné hodnoty.

Zip.

Funkce zip-archivů je přítomnost tří různých podpisů: Archivní struktura je následující:
Lokální záhlaví souborů 1
Data souborů 1.
Deskriptor 1.
Lokální záhlaví souborů 2
Data souborů 2.
Deskriptor 2.
...
Místní záhlaví souborů n
Data souborů N.
Deskriptor N.
Archiv Dešifrování záhlaví.
Archiv Extra datový záznam
Centrální adresář.
Nejzajímavější je centrální adresář, který obsahuje metadata o souborech v archivu. Centrální adresář vždy začíná podpisem 0x50 0x4b 0x01 0x02 a končí s podpisem 0x50 0x4b 0x05 0x06, po kterém má 18 bajtů metadat. Co je zajímavé, prázdné archivy se skládají pouze z konečného podpisu a 18 nulových bajtů. Po 18 byte následuje oblast komentáře k archivu, což je perfektní kontejner skrytí souboru.

Chcete-li zkontrolovat archiv ZIP, musíte najít konečný podpis centrálního adresáře, přeskočit 18 bajtů a hledat podpisy známých formátů v oblasti komentáře. Velká velikost komentáře také označuje lepicí skutečnost.

Na velikosti záleží

AVI.

Struktura souboru AVI je následující: Každý soubor začíná s podpisem RIFF (0x52 0x49 0x46 0x46). Na 8 následuje podpis AVI podpis (0x41 0x56 0x49 0x20). Blok na offsetu 4, skládající se ze 4 bajtů, obsahuje počáteční velikost datového bloku (bajtový řád - malý endan). Chcete-li zjistit číslo bloku obsahujícího další velikost, musíte složit velikost názvu (8 bajty) a velikost získanou v bloku 4-8 bajtů. Je tedy vypočtena úplná velikost souboru. Předpokládá se, že vypočtená velikost může být menší než skutečná velikost souboru. Po vypočtené velikosti bude soubor obsahovat pouze nulové bajty (je nutné upravit hranici v 1 kB).

Příklad výpočtu velikosti:


Wav.

Stejně jako AVI se soubor WAV začíná s podpisem RIFF, ale tento soubor má podpis od 8 bajtů - vlny (0x57 0x41 0x56 0x45). Velikost souboru se vypočítá stejným způsobem jako AVI. Skutečná velikost se musí zcela shodovat s vypočteným.

MP4.

MP4 nebo MPEG-4 - formát mediálního zpracovatele použitý pro ukládání video a zvukových toků, také zajišťuje ukládání titulků a obrázků.
Na posunu 4 bajtů jsou podpisy: typ souboru FTYP (66 74 79 70) a podtyp souboru MMP4 (6d 6d 70 34). Chcete-li rozpoznat skryté soubory, zajímáme se o možnost výpočtu velikosti souboru.

Zvážit příklad. Velikost prvního bloku je na posunutí nuly a je rovna 28 (00 00 00 1c, pořadí velkého endského bajtu); To také ukazuje na ofset, kde se nachází velikost druhého datového bloku. Na 28 posunutí najdeme další velikost bloku 8 (00 00 00 08). Chcete-li najít následující velikost bloku, musíte přidat velikosti nalezených předchozích bloků. Velikost souboru je tedy vypočtena:

MOV.

Tento široce používaný formát je také kontejner MPEG-4. MOV používá proprietární algoritmus komprese dat, má strukturu MP4 a je používán pro stejné účely - pro ukládání audio a video dat, jakož i související materiály.
Stejně jako MP4, každý soubor MOV má 4-bajtový 4-bajtový podpis FTYP, nicméně, následující podpis má hodnotu Qt__ (71 74 20 20). Pravidlo výpočtu velikosti souboru se nezměnilo: od začátku souboru vypočítat velikost dalšího bloku a zápis.

Metoda pro kontrolu této skupiny formátů pro přítomnost souborů "lepených" je vypočítat velikost podle výše uvedených pravidel a porovnání s velikostí zkontrolovaného souboru. Pokud je aktuální velikost souboru mnohem menší než vypočtená, pak to indikuje skutečnost lepení. Při kontrole souborů AVI je povoleno, aby vypočtená velikost může být menší než velikost souboru v důsledku přítomnosti přidaných nulů, aby se vyhlachovala hranici. V tomto případě je nutné zkontrolovat nuly po vypočtené velikosti souboru.

Zkontrolujte soubor Binární formát Compaound

Tento formát souboru navržený v aplikaci Microsoft, je také známý jako OLE (objekt propojení a vložení) nebo COM (Component Object Model). Doc, XLS soubory, PPT patří do skupiny CFB formátu.

Soubor CFB se skládá ze záhlaví 512 bajtů a sektorů stejné délky, které ukládají datové toky nebo servisní informace. Každý sektor má své vlastní nezáporné číslo, výjimka je zvláštní čísla: "-1" - čísla svobodného sektoru, "-2" - čísla sektoru, zavírání řetězu. Všechny sektory řetězce jsou definovány v tučném stole.

Předpokládejme, že útočník upravil druh dokumentu Doc a vložil další soubor na jeho konec. Existuje několik různých způsobů, jak ji detekovat nebo označit anomálii v dokumentu.

Velikost anomální souboru

Jak bylo uvedeno výše, jakýkoli soubor CFB sestává z hlavičky a sektorů stejné délky. Chcete-li zjistit velikost sektoru, musíte si přečíst dvoubajtové číslo na 30 posunu od začátku souboru a vytvořit 2 do stupně tohoto čísla. Toto číslo by mělo být rovnojí buď 9 (0x0009) nebo 12 (0x000c), v uvedeném pořadí, velikost souboru sektoru je 512 nebo 4096 bajtů. Po nalezení sektoru musíte zkontrolovat následující rovnost:

(FIRESSIZE - 512) Mod Sectors \u003d 0

Pokud tato rovnost není provedena, můžete zadat skutečnost pokládání souborů. Tato metoda však má významnou nevýhodu. Pokud útočník zná velikost sektoru, pak stačí lepit jeho soubor a další n byte tak, aby velikost lepených dat je více sektorová velikost.

Neznámý sektor typu

Pokud útočník ví o metodě obcházení předchozí kontroly, tato metoda může detekovat dostupnost odvětví s nejistými typy.

Definujeme rovnost:

Filesize \u003d 512 + Countric * Skladujte, kde je souborová velikost souboru, sektory - velikost sektoru, území - počet odvětví.

Definujeme také následující proměnné:

  1. CountFat - počet odvětví tuku. Je to 44 posun od začátku souboru (4 bajty);
  2. Countminifat - počet sektorů minifatu. Nachází se na 64 posunu od začátku souboru (4 bajty);
  3. Countdifat - počet sektorů difat. Nachází se na 72 posunutí od začátku souboru (4 bajty);
  4. Countde - počet sektorů vstupu adresářů. Chcete-li najít tuto proměnnou, je nutné najít první sektor DE, který se nachází na 48 posunutí. Pak musíte získat úplný pohled na DE z tuku a vypočítat počet de sektorů;
  5. Counterstreams - počet datových odvětví;
  6. CountFree - počet svobodných sektorů;
  7. Countclassified - počet odvětví s konkrétním typem;
CountClassified \u003d countfat + countminifat + countdifat + countde + countstreams + countfree

Samozřejmě, v nereštnosti countclassified and lurnity, můžete provést závěr o možném lepení souborů.