Vytvorenie vlastného známeho typu súboru pre R-Studio. Určenie typu súboru podľa podpisu Čo je podpis súboru

Koncept " Magické číslo"v programovaní má tri významy:

  • Podpis údajov
  • Vybraný jedinečné hodnoty, ktoré by nemali byť rovnaké ako iné hodnoty (napr. UUID)
  • Zlá prax programovania.

Podpis údajov

Magické číslo, alebo podpis, - celé číslo alebo textová konštanta používaná na jedinečnú identifikáciu zdroja alebo údajov. Takéto číslo samo o sebe nemá žiadny význam a môže spôsobiť zmätok, ak sa objaví v programovom kóde bez príslušného kontextu alebo komentára, zatiaľ čo pokus o jeho zmenu na iné, čo i len blízke, môže viesť k úplne nepredvídateľným následkom. Z tohto dôvodu sa takéto čísla ironicky nazývali magické čísla. V súčasnosti je tento názov pevne zavedený ako pojem. Napríklad každá kompilovaná trieda jazyka Java začína hexadecimálnym „magickým číslom“ 0xCAFEBABE. Druhým všeobecne známym príkladom je akýkoľvek spustiteľný súbor OS Microsoft Windows s príponou .exe začína bajtovou sekvenciou 0x4D5A (čo zodpovedá ASCII znakom MZ - iniciály Marka Zbikowského, jedného z tvorcov MS-DOS). Menej známym príkladom je neinicializovaný ukazovateľ v Microsoft Visual C++ (od verzie Microsoft Visual Studio 2005), ktorý má v režime ladenia adresu 0xDEADBEEF.

V podobnom systéme UNIX operačné systémy Typ súboru je zvyčajne určený podpisom súboru bez ohľadu na príponu jeho názvu. Poskytujú štandardný súborový nástroj na interpretáciu podpisu súboru.

Zlá prax programovania

Nazývané aj „magické čísla“ je zlý programovací postup, keď sa v zdrojovom texte vyskytuje číselná hodnota a nie je zrejmé, čo to znamená. Napríklad takýto úryvok napísaný v jazyku Java by bol zlý:

drawSprite(53, 320, 240);

final int SCREEN_WIDTH = 640 ; final int SCREEN_HEIGHT = 480 ; final int SCREEN_X_CENTER = SCREEN_WIDTH / 2 ; final int SCREEN_Y_CENTER = SCREEN_HEIGHT / 2 ; final int SPRITE_CROSSHAIR = 53 ; ... drawSprite(SPRITE_CROSSHAIR, SCREEN_X_CENTER, SCREEN_Y_CENTER);

Teraz je to jasné: tento riadok zobrazuje sprite - nitkový kríž zameriavača - v strede obrazovky. Vo väčšine programovacích jazykov sa všetky hodnoty použité pre takéto konštanty vypočítajú v čase kompilácie a nahradia sa na miesta, kde sa hodnoty používajú. Preto takáto zmena zdrojového textu nezhoršuje výkon programu.

Okrem toho sú magické čísla potenciálnym zdrojom chýb v programe:

  • Ak sa rovnaké magické číslo používa v programe viac ako raz (alebo by sa potenciálne mohlo použiť), potom jeho zmena bude vyžadovať úpravy každého výskytu (namiesto iba jednej úpravy hodnoty pomenovanej konštanty). Ak nie sú opravené všetky výskyty, vyskytne sa aspoň jedna chyba.
  • Minimálne v jednom z výskytov môže byť magické číslo na začiatku nesprávne napísané, čo je dosť ťažké odhaliť.
  • Magické číslo môže závisieť od implicitného parametra alebo iného magického čísla. Ak tieto závislosti, ktoré nie sú explicitne identifikované, nie sú splnené, vyskytne sa aspoň jedna chyba.
  • Pri úprave výskytov jedného magického čísla je možné omylom zmeniť iné magické číslo, ktoré je nezávislé, ale má rovnakú číselnú hodnotu.

Magické čísla a multiplatformové

Magické čísla niekedy poškodzujú kód naprieč platformami. Faktom je, že v C na 32- a 64-bitových operačných systémoch je zaručená veľkosť typov char , short a long long, zatiaľ čo veľkosť int , long , size_t a ptrdiff_t sa môže meniť (pre prvé dva, v závislosti od preferencií vývojárov kompilátora, pre posledné dva - v závislosti od bitovej kapacity cieľového systému). V starom alebo zle napísanom kóde môžu byť „magické čísla“, ktoré označujú veľkosť typu – pri prechode na stroje s inou bitovou kapacitou môžu viesť k jemným chybám.

Napríklad:

const size_t NUMBER_OF_ELEMENTS = 10 ; dlhé [NUMBER_OF_ELEMENTS]; memset(a, 0, 10 * 4); // nesprávne - predpokladá sa, že dĺžka je 4 bajty, použije sa magický počet prvkov memset(a, 0, NUMBER_OF_ELEMENTS * 4); // nesprávne - predpokladá sa, že dĺžka je 4 bajty memset(a, 0, NUMBER_OF_ELEMENTS * sizeof(long)); // nie úplne správne - duplikácia názvu typu (ak sa typ zmení, budete ho musieť zmeniť aj tu) memset (a , 0 , NUMBER_OF_ELEMENTS * sizeof (a [ 0 ])); // správne, optimálne pre dynamické polia s nenulovou veľkosťou memset(a, 0, sizeof(a)); // správne, optimálne pre statické polia

Čísla, ktoré nie sú magické

Nie všetky čísla je potrebné previesť na konštanty. Napríklad kód pre

Vyhľadávanie skenovaním súborov známych typov (alebo, ako sa často hovorí, vyhľadávanie súborov podľa podpisu) je jedným z najúčinnejších, ktorý sa používa v nástroji na obnovu dát R-Studio. Použitie daného podpisu umožňuje obnoviť súbory určitého typu v prípadoch, keď informácie o štruktúre adresárov a názvoch súborov čiastočne alebo úplne chýbajú (poškodené).

Na určenie umiestnenia súborov sa zvyčajne používa tabuľka oblastí disku. Ak porovnáte disk s knihou, tabuľka oddielov bude podobná jej obsahu. Pri skenovaní R-Studio hľadá známe typy súborov v tabuľke rozdelenia disku pomocou určitých špecifikovaných podpisov. Umožňuje to skutočnosť, že prakticky každý typ súboru má jedinečný podpis alebo vzor údajov. Podpisy súborov sa nachádzajú na určitom mieste na začiatku súboru a v mnohých prípadoch aj na konci súboru. Pri skenovaní R-Studio porovnáva nájdené dáta s podpismi známych typov súborov, čo umožňuje ich identifikáciu a obnovu ich dát.

Pomocou technológie na skenovanie známych typov súborov vám R-Studio umožňuje obnoviť dáta z diskov, ktoré boli preformátované a ktorých tabuľky oddielov boli prepísané. Okrem toho, ak je diskový oddiel prepísaný, poškodený alebo odstránený, jedinou možnosťou je skenovanie známych typov súborov.

Ale takmer všetko má svoje nevýhody a známe typy súborov používané v R-Studio nie sú výnimkou. Takže pri skenovaní známych typov súborov vám R-Studio umožňuje obnoviť iba nefragmentované súbory, ale ako už bolo spomenuté, vo väčšine prípadov je to najnovšia možná metóda.

R-Studio už obsahuje podpisy najbežnejších typov súborov (zobrazenie úplný zoznam súbory známych typov nájdete v sekcii R-Studio Online Help.)

V prípade potreby môže používateľ do R-Studia pridať nové typy súborov. Ak napríklad potrebujete nájsť súbory jedinečného typu alebo súbory vyvinuté po poslednom dátume vydania R-Studio, môžete k súborom známych typov pridať svoje vlastné podpisy. O tomto procese sa bude diskutovať ďalej.

Vlastné súbory známych typov
Vlastné podpisy súborov známych typov súborov sú uložené v XML súbor e špecifikované v dialógovom okne Nastavenia. Pridanie podpisu pozostáva z dvoch častí:

  1. Určenie podpisu súboru umiestneného na začiatku súboru a ak existuje, na konci súboru.
  2. Vygenerujte súbor XML obsahujúci podpis súboru a ďalšie informácie o type súboru.

To všetko je možné vykonať pomocou R-Studio. Zároveň nemusíte byť odborníkom v oblasti tvorby (úpravy) XML dokumentov alebo v oblasti hexadecimálnej úpravy – v tomto návode (článku), ktorý je zameraný na samotného používateľa vstupný level, všetky fázy tohto procesu budú podrobne prediskutované.

Príklad: Pridanie podpisu pre súbor MP4 (Kodek XDCam-EX)
Pozrime sa na pridanie podpisu súboru na príklade súboru .MP4 vytvoreného pomocou Sony XDCAM-EX. Využijete ho napríklad v prípade poškodenia SD karty pre súbory, ktoré sa vám ešte nepodarilo uložiť na pevný disk počítača.

Prvá fáza: Určenie podpisu súboru
Ak chcete určiť podpis súboru, zvážte príklady súborov rovnakého formátu.

Nech sú to štyri video súbory od Sony XDCAM-EX:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

Pre uľahčenie úvahy nech sú to malé súbory. Väčšie súbory je ťažšie zobraziť v hexadecimálnom formáte.

1. Otvorte súbory v R-Studio. Ak to chcete urobiť, kliknite pravým tlačidlom myši na každý súbor a v kontextovej ponuke vyberte položku Zobraziť/Upraviť.

2. Porovnajme súbory. Budeme hľadať rovnaký vzor, ​​ktorý nájdeme vo všetkých štyroch súboroch. On sa objaví podpis súboru. Podpisy súborov sa zvyčajne nachádzajú na začiatku súboru, ale niekedy aj na konci.

3. Definujte podpis súboru na začiatku súboru. V našom príklade sa nachádza na samom začiatku súboru. Všimnite si, že sa to nestáva vždy - podpis súboru je často na začiatku súboru, ale nie na prvom riadku (offset).

Z obrázkov nižšie sa zdá, že obsah všetkých štyroch súborov je odlišný, ale všetky začínajú rovnakým podpisom súboru.


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte

Zvýraznená oblasť na obrázkoch je podpis súboru tohto typu súbory. Je prezentovaný v textovom aj hexadecimálnom formáte.

V textovej forme vyzerá podpis súboru takto:
....ftypmp42....mp42.......zadarmo

Bodky (.“) označujú znaky, ktoré nemožno znázorniť v textovej forme. Preto je tiež potrebné uviesť hexadecimálnu formu podpisu súboru:
00 00 00 18 66 74 79 6D 70 34 32 00 00 00 00 6D 70 34 32 00 00 00 00 00 00 00 08 66 72 65 65

4. Rovnakým spôsobom definujeme podpis súboru, ale na samom konci súboru. Môže to byť iný podpis súboru, iná dĺžka.

Obrázky nižšie zvýrazňujú podpis súboru na konci súboru:


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte

Upozorňujeme, že údaje pred vybranou oblasťou (podpis súboru) sú vo všetkých štyroch súboroch rovnaké. Toto sú technické informácie, ktoré nie sú podpisom súboru, ale označujú, že všetky štyri obrázky (súbory) boli nasnímané rovnakým fotoaparátom s rovnakými parametrami. Zvyčajne je možné rozlíšiť zodpovedajúce vzory s technickými informáciami od podpisu súboru. V našom príklade v poslednom riadku pred začiatkom podpisu súboru vidíme text ‘RecordingMode type=”normal”’, čo jasne naznačuje, že ide o nejaký druh parametra súboru a nie podpis. Vždy venujte osobitnú pozornosť tomuto riadku, aby ste ho omylom nezaradili technická informáciačasť podpisu súboru.

V našom prípade je podpis súboru nasledujúci text:
...
Pripomeňme, že bodky označujú znaky, ktoré nie je možné znázorniť v textovej forme.

V hexadecimálnom formáte vyzerá podpis súboru takto:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Poznámka: podpis nebude vždy na konci súboru.

Druhá fáza: Vytvorenie súboru XML s popisom známeho typu súboru
Teraz, po definovaní podpisu súboru, môžete vytvoriť súbor XML a zahrnúť príslušný typ súboru do R-Studio. To možno vykonať dvoma spôsobmi:

2.1 Používanie vstavaného grafický editor podpisy súborov:
Vyberte položku Nastavenia z ponuky Nástroje, v dialógovom okne Nastavenia, ktoré sa otvorí, kliknite na kartu Známe typy súborov a potom kliknite na tlačidlo Upraviť typy súborov používateľa.

Kliknutím na obrázok ho zväčšíte

Kliknite na tlačidlo Vytvoriť typ súboru v dialógovom okne Upraviť typy súborov používateľa.
Nastavte nasledujúce možnosti:

  • Id – jedinečný digitálny identifikátor. Toto číslo budú vybrané náhodne; Jediná vec je, že by sa nemal zhodovať s digitálnym identifikátorom iného typu súboru.
  • Group Description – skupina, v ktorej sa budú v R-Studiu nachádzať nájdené súbory. Môžete nastaviť buď nová skupina alebo vyberte jednu z tých, ktoré už existujú. Pre nás to bude skupina „Multimediálne video (Multimédiá: Video)“.
  • Popis - Stručný opis typ súboru. V našom príklade môžete použiť napríklad „Sony cam video, XDCam-EX“.
  • Prípona – prípona súborov tohto typu. V našom prípade - mp4.

Parameter Features je voliteľný, v našom prípade ho nemusíme používať.

Kliknutím na obrázok ho zväčšíte

Ďalej musíte zadať podpis počiatočného a koncového súboru. Ak to chcete urobiť, vyberte položku Začať a potom obsahové menu príkaz Pridať podpis.

Kliknutím na obrázok ho zväčšíte

Potom dvakrát kliknite na pole<пустая сигнатура> () a zadajte príslušný text.

Kliknutím na obrázok ho zväčšíte

Potom vytvorte konečný podpis súboru. Nezabudnite zadať 21 do stĺpca Od.

Kliknutím na obrázok ho zväčšíte

Úspešne ste vytvorili svoj vlastný podpis pre známe typy súborov.

Teraz ho musíte uložiť. Existujú dva spôsoby: buď ho môžete uložiť do predvoleného súboru zadaného na karte Hlavné v dialógovom okne Nastavenia kliknutím na tlačidlo Uložiť. Alebo kliknite na tlačidlo Uložiť ako... a uložte podpis do iného súboru.

2.2 Manuálne vytvorenie súboru XML s popisom známeho typu súboru:
Na tvorenie tento súbor Použime XML verziu 1.0 a kódovanie UTF-8. Ak neviete, čo to je, nezúfajte - jednoducho otvorte hociktorú textový editor(napríklad Notepad.exe) a do prvého riadku zadajte nasledujúci text:

Ďalej vytvoríme XML tag, ktorý definuje typ súboru (FileType). Ak vezmeme do úvahy predtým opísané atribúty XML, značka bude vyzerať takto:

Vložíme ho hneď potom

Ďalej definujeme podpis súboru (tag ). Počiatočný podpis (na začiatku súboru) bude vo vnútri značky bez akýchkoľvek atribútov. Používame textový typ podpisu, no zároveň nahrádzame hexadecimálne znaky, ktoré nie je možné znázorniť v textovej podobe. Pred každý hexadecimálny znak vložíme "\x" Teda značku s podpisom súboru bude vyzerať takto:

Ak existuje, musíte definovať aj koncový podpis (na konci súboru). Používa rovnakú značku, ale s prvkom „from“ a atribútom „end“. Bude to vyzerať takto:

Pamätajte, že konečný podpis súboru neobsahoval netextové znaky, ale obsahoval lomky a trojuholníkové zátvorky. Aby sme sa vyhli nejasnostiam a chybám v syntaxi XML, nahradíme v podpise znaky "/", "<" и ">“ ich hexadecimálne hodnoty.

Na konci po podpisoch súborov musia byť uzatváracie značky FileType a FileTypeList:

Celý súbor by teda mal vyzerať takto:


\x00\x00\x00\x18ftypmp42\x00\x00\x00\x00mp42\x00\x00\x00\x00\x00\x00\x00\x08zadarmo
\x3C\x2FNonRealTimeMeta\x3E\x0D\x0A\x00

Pamätajte: Syntax XML rozlišuje veľké a malé písmená, takže správna značka by bola , ale nie .

Uložme súbor v textovom formáte s príponou .xml. Napríklad: SonyCam.xml.

Úspešne sme vytvorili vlastný podpis pre známe typy súborov. Tento príklad úplne postačuje na pochopenie základných princípov vytvárania vlastného typu súboru. Skúsenejší používatelia môžu použiť XML verziu 2.0. Viac o tom si môžete prečítať v sekcii online pomocníka R-Studio.

Krok 3: Kontrola a pridanie súboru popisujúceho známy typ súboru
Ďalším krokom je pridanie (nahratie) súboru XML do R-Studia. V tomto prípade bude automaticky skontrolovaný.

Načítajme súbor XML vytvorený v predchádzajúcej fáze do R-Studia. Ak to chcete urobiť, vyberte položku Nastavenia v ponuke Nástroje. V oblasti Typy súborov používateľa na karte Hlavné dialógového okna Nastavenia pridajte súbor XML, ktorý sme vytvorili (SonyCam.xml). Kliknite na tlačidlo Použiť.

Kliknutím na obrázok ho zväčšíte

2. Na žiadosť o stiahnutie nového typu súboru odpovedzte Áno.

Kliknutím na obrázok ho zväčšíte

3. Ak chcete overiť, či bol typ súboru úspešne načítaný, kliknite na kartu Známe typy súborov v dialógovom okne Nastavenia. Nezabudnite, že sme pridali typ súboru do skupiny Multimediálne video (Multimédiá: Video). Po rozbalení tejto skupiny (priečinku) by sme mali vidieť prvok s popisom, ktorý sme zadali pri vytváraní súboru XML: Sony cam video, XDCam-EX (.mp4).

Kliknutím na obrázok ho zväčšíte


Kliknutím na obrázok ho zväčšíte

Ak sú v syntaxi súboru nejaké chyby, zobrazí sa zodpovedajúca správa:

Kliknutím na obrázok ho zväčšíte

V takom prípade znova skontrolujte, či váš súbor XML neobsahuje chyby. Pamätajte: Syntax XML rozlišuje veľké a malé písmená a každá značka musí mať na konci koncovú značku.

Krok 4: Testovanie súboru popisujúceho známy typ súboru
Ak chcete skontrolovať správnosť vlastného typu súboru, ktorý sme vytvorili, skúsme nájsť naše súbory .mp4 na vymeniteľnom USB kľúči.

1. V systéme Windows Vista alebo Windows 7 vykonajte úplné (nie rýchle) formátovanie disku alebo použite pomôcku na čistenie miesta na disku (napríklad R-Wipe & Clean). úplné odstránenie všetky údaje dostupné na disku. Nechaj USB disk naformátovaný na FAT32 (veľkosť hľadaných súborov nepresahuje 2 GB).

2. Skopírujeme to testovacie súbory na disk a reštartujte počítač, aby sa obsah vyrovnávacej pamäte uložil na disk. Môžete tiež vypnúť externý disk a potom ho znova pripojte.

3. V OS bude jednotka definovaná napríklad ako logická jednotka F:\.

4. Spustíme R-Studio. Vyberte náš disk (F:\) a kliknite na tlačidlo Skenovať

Kliknutím na obrázok ho zväčšíte

5. V dialógovom okne Kontrola v oblasti (Systém súborov) kliknite na tlačidlo Zmeniť... a zrušte začiarknutie všetkých políčok. Týmto spôsobom zakážeme vyhľadávanie súborových systémov a súborov pomocou tabuľky oblastí.
Kliknutím na obrázok ho zväčšíte

6. Začiarknite políčko Extra vyhľadávanie známych typov súborov. To umožní R-Studio vyhľadávať pri skenovaní známe typy súborov.

7. Ak chcete spustiť skenovanie, kliknite na tlačidlo Skenovať.

8. Počkajme, kým R-Studio naskenuje disk. Na karte Informácie o kontrole sa zobrazí priebeh kontroly (priebeh).


Kliknutím na obrázok ho zväčšíte

9. Po dokončení skenovania vyberte prvok Extra Found Files a dvakrát naň kliknite.


Kliknutím na obrázok ho zväčšíte

10. Naše testovacie súbory budú umiestnené v priečinku Sony cam video, XDCam-EX (alebo v priečinku s iným názvom zodpovedajúcim popisu typu súboru špecifikovanému v Druhej fáze).


Kliknutím na obrázok ho zväčšíte

Vidíte, že názvy súborov, dátumy a umiestnenia (priečinky) neboli obnovené, pretože táto informácia uložené v súborovom systéme. Preto R-Studio automaticky zobrazí každý súbor s novým názvom.

Je však zrejmé, že obsah súborov nie je poškodený. Aby sme to overili, otvorme ich v príslušnom programe, napríklad VLC media player.


Kliknutím na obrázok ho zväčšíte

Záver
Schopnosť R-Studio vyhľadávať známe typy súborov vám umožňuje obnoviť dáta aj z disku, ktorého súborové systémy boli buď prepísané. Súbory môžete pomerne efektívne vyhľadávať pomocou ich podpisov, čo je užitočné najmä vtedy, ak presne poznáte typ obnovovaných súborov, ako v našom príklade. Schopnosť vytvárať vlastné typy súborov vám umožňuje pridať akýkoľvek súbor, ktorý má špecifický podpis súboru, do zoznamu známych typov súborov.

Mnohí možno počuli o súboroch, ako je rarjpeg. Ide o špeciálny typ súboru, ktorým je obrázok jpeg a archív rar zlepené tesne k sebe. Ide o vynikajúci kontajner na skrytie skutočnosti prenosu informácií. Rarjpeg môžete vytvoriť pomocou nasledujúce príkazy:

UNIX: mačka obrázok1.jpg archív.rar > obrázok2.jpg
WINDOWS: skopírujte /b obrázok1.jpg+archív.rar obrázok2.jpg

Alebo ak máte hex editor.

Samozrejme, aby ste skryli skutočnosť prenosu informácií, môžete použiť nielen formát JPEG, ale aj mnoho ďalších. Každý formát má svoje vlastné charakteristiky, vďaka ktorým môže alebo nemusí byť vhodný pre úlohu kontajnera. Popíšem, ako môžete nájsť prilepené súbory v najpopulárnejších formátoch alebo uviesť skutočnosť lepenia.

Metódy zisťovania zlúčených súborov možno rozdeliť do troch skupín:

  1. Metóda kontroly oblasti za značkou EOF. Mnoho populárnych formátov súborov má takzvanú značku konca súboru, ktorá je zodpovedná za zobrazenie požadovaných údajov. Prehliadače fotografií napríklad čítajú všetky bajty až po túto značku, ale oblasť za ňou je ignorovaná. Táto metóda je ideálna pre nasledujúce formáty: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. Spôsob kontroly veľkosti súboru. Štruktúra niektorých formátov (audio a video kontajnery) umožňuje vypočítať skutočnú veľkosť súboru a porovnať ju s pôvodnou veľkosťou. Formáty: AVI, WAV, MP4, MOV.
  3. Metóda kontroly súborov CFB. CFB alebo Compound File Binary Format je formát dokumentu vyvinutý spoločnosťou Microsoft, čo je kontajner s vlastným súborovým systémom. Táto metóda je založená na detekcii anomálií v súbore.

Existuje život po skončení súboru?

JPEG

Ak chcete nájsť odpoveď na túto otázku, je potrebné ponoriť sa do špecifikácií formátu, ktorý je „predchodcom“ zlúčených súborov, a pochopiť jeho štruktúru. Akýkoľvek JPEG začína podpisom 0xFF 0xD8.

Po tomto podpise nasledujú servisné informácie, voliteľne ikona obrázka a nakoniec samotný komprimovaný obrázok. V tomto formáte je koniec obrázka označený dvojbajtovým podpisom 0xFF 0xD9.

PNG

Prvých osem bajtov súboru PNG je obsadených nasledujúcim podpisom: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A. Koncový podpis, ktorý ukončí tok údajov: 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82.

RAR

Spoločný podpis pre všetky archívy rar: 0x52 0x61 0x72 0x21 (Rar!). Potom nasledujú informácie o verzii archívu a ďalšie súvisiace údaje. Experimentálne sa zistilo, že archív končí podpisom 0x0A, 0x25, 0x25, 0x45, 0x4F, 0x46.

Tabuľka formátov a ich podpisov:
Algoritmus na kontrolu lepenia v týchto formátoch je veľmi jednoduchý:

  1. Nájdite počiatočný podpis;
  2. Nájdite konečný podpis;
  3. Ak po konečnom podpise nie sú žiadne údaje, váš súbor je čistý a neobsahuje prílohy! V opačnom prípade je potrebné po konečnom podpise hľadať iné formáty.

GIF a PDF

Dokument PDF môže mať viac ako jednu značku EOF, napríklad v dôsledku nesprávneho generovania dokumentu. Počet konečných podpisov v súbore GIF sa rovná počtu snímok v ňom. Na základe vlastností týchto formátov je možné vylepšiť algoritmus kontroly prítomnosti pripojených súborov.
  1. Bod 1 sa opakuje z predchádzajúceho algoritmu.
  2. Bod 2 sa opakuje z predchádzajúceho algoritmu.
  3. Keď nájdete konečný podpis, zapamätajte si jeho umiestnenie a hľadajte ďalej;
  4. Ak týmto spôsobom dosiahnete poslednú značku EOF, súbor je čistý.
  5. Ak súbor nekončí podpisom konca, goto je umiestnenie posledného nájdeného koncového podpisu.
Veľký rozdiel medzi veľkosťou súboru a pozíciou za posledným koncovým podpisom naznačuje prítomnosť lepiacej prílohy. Rozdiel môže byť viac ako desať bajtov, aj keď je možné nastaviť iné hodnoty.

PSČ

Zvláštnosťou archívov ZIP je prítomnosť troch rôznych podpisov: Štruktúra archívu je nasledovná:
Hlavička lokálneho súboru 1
Údaje súboru 1
Deskriptor údajov 1
Hlavička lokálneho súboru 2
Údaje súboru 2
Deskriptor údajov 2
...
Hlavička lokálneho súboru
Údaje súboru č
Deskriptor údajov č
Hlavička dešifrovania archívu
Archivujte extra dátový záznam
Centrálny adresár
Najzaujímavejší je centrálny adresár, ktorý obsahuje metadáta o súboroch v archíve. Centrálny adresár vždy začína podpisom 0x50 0x4b 0x01 0x02 a končí podpisom 0x50 0x4b 0x05 0x06, po ktorom nasleduje 18 bajtov metadát. Zaujímavé je, že prázdne archívy pozostávajú len z konečného podpisu a 18 nulových bajtov. Po 18 bajtoch prichádza oblasť komentárov k archívu, ktorá je ideálnym kontajnerom na skrytie súboru.

Ak chcete skontrolovať archív ZIP, musíte nájsť koncový podpis centrálneho adresára, preskočiť 18 bajtov a vyhľadať podpisy známych formátov v oblasti komentárov. Veľká veľkosť V komentári sa uvádza aj fakt lepenia.

Na veľkosti záleží

AVI

Štruktúra súboru AVI je nasledovná: každý súbor začína podpisom RIFF (0x52 0x49 0x46 0x46). Na byte 8 je podpis AVI, ktorý určuje formát (0x41 0x56 0x49 0x20). Blok s ofsetom 4, pozostávajúci zo 4 bajtov, obsahuje počiatočnú veľkosť bloku údajov (poradie bajtov - little endian). Ak chcete zistiť číslo bloku obsahujúceho ďalšiu veľkosť, musíte pridať veľkosť hlavičky (8 bajtov) a veľkosť získanú v 4-8 bajtovom bloku. Tým sa vypočíta celková veľkosť súboru. Je prijateľné, že vypočítaná veľkosť môže byť menšia ako skutočná veľkosť súboru. Po vypočítaní veľkosti bude súbor obsahovať iba nula bajtov (potrebné na zarovnanie hranice 1 kB).

Príklad výpočtu veľkosti:


WAV

Rovnako ako AVI, aj súbor WAV začína podpisom RIFF, tento súbor má však podpis od bajtu 8 - WAVE (0x57 0x41 0x56 0x45). Veľkosť súboru sa vypočíta rovnakým spôsobom ako AVI. Skutočná veľkosť sa musí úplne zhodovať s vypočítanou veľkosťou.

MP4

MP4 alebo MPEG-4 je formát mediálneho kontajnera, ktorý sa používa na ukladanie video a audio streamov a tiež poskytuje ukladanie titulkov a obrázkov.
Na posune 4 bajty sú podpisy: typ súboru ftyp (66 74 79 70) (QuickTime Container File Type) a subtyp súboru mmp4 (6D 6D 70 34). Na uznanie skryté súbory, zaujíma nás možnosť vypočítať veľkosť súboru.

Pozrime sa na príklad. Veľkosť prvého bloku je na nule a je 28 (00 00 00 1C, poradie bajtov Big Endian); označuje tiež posun, kde sa nachádza veľkosť druhého bloku údajov. Na odsadení 28 nájdeme veľkosť ďalšieho bloku rovnajúcu sa 8 (00 00 00 08). Ak chcete nájsť veľkosť ďalšieho bloku, musíte pridať veľkosti predchádzajúcich nájdených blokov. Veľkosť súboru sa teda vypočíta takto:

MOV

Tento široko používaný formát je tiež kontajner MPEG-4. MOV používa vlastný algoritmus kompresie údajov, má štruktúru podobnú MP4 a používa sa na rovnaké účely - na ukladanie zvukových a obrazových údajov, ako aj súvisiacich materiálov.
Rovnako ako MP4, každý súbor mov má 4-bajtový podpis ftyp s offsetom 4, avšak nasledujúci podpis má hodnotu qt__ (71 74 20 20). Pravidlo pre výpočet veľkosti súboru sa nezmenilo: od začiatku súboru vypočítame veľkosť nasledujúceho bloku a spočítame ju.

Metódou kontroly tejto skupiny formátov na prítomnosť „sticky“ súborov je vypočítať veľkosť podľa vyššie uvedených pravidiel a porovnať ju s veľkosťou kontrolovaného súboru. Ak je aktuálna veľkosť súboru oveľa menšia ako vypočítaná, znamená to, že došlo k lepeniu. Pri kontrole súborov AVI sa akceptuje, že vypočítaná veľkosť môže byť menšia ako veľkosť súboru v dôsledku prítomnosti pridaných núl na zarovnanie okraja. V tomto prípade je potrebné skontrolovať nuly po vypočítanej veľkosti súboru.

Kontrola binárneho formátu zloženého súboru

Tento formát súboru vyvinutý spoločnosťou Microsoft je známy aj ako OLE (Object Linking and Embedding) alebo COM (Component Object Model). Súbory DOC, XLS, PPT patria do skupiny formátov CFB.

Súbor CFB pozostáva z 512-bajtovej hlavičky a sektorov rovnakej dĺžky, ktoré ukladajú dátové toky alebo informácie o službách. Každý sektor má svoje nezáporné číslo, s výnimkou špeciálnych čísel: „-1“ - očísluje voľný sektor, „-2“ - očísluje sektor uzatvárajúci reťazec. Všetky sektorové reťazce sú definované v tabuľke FAT.

Predpokladajme, že útočník upravil určitý súbor .doc a na jeho koniec vložil iný súbor. Je tam niekoľko rôznymi spôsobmi odhaliť alebo uviesť anomáliu v dokumente.

Nenormálna veľkosť súboru

Ako je uvedené vyššie, každý súbor CFB pozostáva z hlavičky a sektorov rovnakej dĺžky. Ak chcete zistiť veľkosť sektora, musíte prečítať dvojbajtové číslo s posunom 30 od začiatku súboru a zvýšiť 2 na mocninu tohto čísla. Toto číslo sa musí rovnať buď 9 (0x0009) alebo 12 (0x000C), veľkosť sektora súboru je 512 alebo 4096 bajtov. Po nájdení sektora musíte skontrolovať nasledujúcu rovnosť:

(Veľkosť súboru - 512) mod SectorSize = 0

Ak táto rovnosť nie je splnená, môžete poukázať na skutočnosť lepenia súborov. Táto metóda má však významnú nevýhodu. Ak útočník pozná veľkosť sektora, potom stačí vložiť svoj súbor a ďalších n bajtov, aby veľkosť vložených údajov bola násobkom veľkosti sektora.

Neznámy typ sektora

Ak útočník vie o metóde, ako obísť predchádzajúcu kontrolu, potom túto metódu dokáže zistiť prítomnosť sektorov s nedefinovanými typmi.

Definujme rovnosť:

FileSize = 512 + CountReal * SectorSize, kde FileSize je veľkosť súboru, SectorSize je veľkosť sektora, CountReal je počet sektorov.

Tiež definujeme nasledujúce premenné:

  1. CountFat – počet sektorov FAT. Nachádza sa v posune 44 od začiatku súboru (4 bajty);
  2. CountMiniFAT – počet sektorov MiniFAT. Nachádza sa v posune 64 od začiatku súboru (4 bajty);
  3. CountDIFAT – počet sektorov DIFAT. Nachádza sa v posune 72 od začiatku súboru (4 bajty);
  4. CountDE – počet sektorov Directory Entry. Ak chcete nájsť túto premennú, musíte nájsť prvý sektor DE, ktorý je na ofsete 48. Potom je potrebné získať kompletné zastúpenie DE z FAT a spočítať počet DE sektorov;
  5. CountStreams – počet sektorov s dátovými tokmi;
  6. CountFree – počet voľných sektorov;
  7. CountClassified – počet sektorov s určitým typom;
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

Je zrejmé, že ak sú CountClassified a CountReal nerovnaké, môžeme dospieť k záveru, že súbory môžu byť zlúčené.

Môj šéf mi dal celkom zaujímavú úlohu. V krátkom čase napíšte analyzátor spustiteľných súborov, ktorý by bol schopný nájsť telá vírusov na základe signatúr a určiť použitý packer/cryptor. Hotový prototyp sa objavil v priebehu niekoľkých hodín.

Slovo autora

Analýza podpisu

Hľadanie škodlivého objektu pomocou podpisov je niečo, čo dokáže každý antivírus. Vo všeobecnosti je podpis formalizovaný popis určitých charakteristík, podľa ktorých možno určiť, že kontrolovaný súbor je vírus a dobre definovaný vírus.

Sú tu rôzne techniky. Alternatívou je použitie podpisu zloženého z N bajtov škodlivého objektu. V tomto prípade nemôžete urobiť hlúpe porovnanie, ale porovnanie pomocou nejakej masky (ako hľadať bajty EB ??? CD 13). Alebo nastavte ďalšie podmienky ako „také a také bajty musia byť na vstupnom bode do programu“ atď. Podpis malvéru je osobitná záležitosť.

Rovnakým spôsobom sú opísané niektoré znaky, podľa ktorých je možné určiť, že spustiteľný súbor je zabalený s jedným alebo druhým kryptorom alebo balíčkom (napríklad banálny ASPack). Ak ste pozorne čítali náš časopis, určite ste už počuli o takom nástroji, akým je PEiD, ktorý je schopný identifikovať najčastejšie používané packery, kryptory a kompilátory (databáza má veľké množstvo podpisov) pre súbor PE, ktorý sa do nej prenáša. . Žiaľ, nové verzie programu už dlho nevychádzajú a nedávno sa na oficiálnej stránke objavila správa, že projekt nebude mať ďalší vývoj. Je to škoda, pretože možnosti PEiD (najmä vzhľadom na systém pluginov) by sa mi mohli veľmi hodiť. Po krátkej analýze sa ukázalo, že to neprichádza do úvahy. Ale po prehrabávaní sa v anglicky písaných blogoch som rýchlo našiel to, čo mi vyhovovalo. Projekt YARA (code.google.com/p/yara-project).

čo je YARA?

Od samého začiatku som bol presvedčený, že niekde na internete už existuje open source vývoj, ktorý na seba vezme úlohu určiť súlad medzi určitým podpisom a skúmaným súborom. Ak by som našiel takýto projekt, mohol by sa ľahko umiestniť na koľajnice webovej aplikácie, pridať tam rôzne podpisy a získať to, čo sa odo mňa vyžaduje. Plán sa mi začal zdať ešte realistickejší, keď som si prečítal popis projektu YARA.

Samotní vývojári ho umiestňujú ako nástroj, ktorý pomáha výskumníkom malvéru identifikovať a klasifikovať škodlivé vzorky. Výskumník môže vytvárať popisy pre odlišné typy malvér pomocou textu alebo binárnych vzorov, ktoré popisujú formalizované vlastnosti malvéru. Takto sa získavajú podpisy. V skutočnosti každý popis pozostáva zo sady riadkov a nejakého logického výrazu, na základe ktorého sa určuje spúšťacia logika analyzátora.

Ak sú pre skúmaný súbor splnené podmienky niektorého z pravidiel, určí sa podľa toho (napríklad taký a taký červ). Jednoduchý príklad pravidla, aby ste pochopili, o čom hovoríme:

pravidlo tichý_bankár: bankár
{
meta:
popis = "Toto je len príklad"
úroveň_vlákna = 3
in_the_wild = pravda
reťazce:
$a = (6A 40 68 00 30 00 00 6A 14 8D 91)
$b = (8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9)
$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
podmienka:
$a alebo $b alebo $c
}

V tomto pravidle hovoríme YARA, že každý súbor, ktorý obsahuje aspoň jeden zo vzorových reťazcov opísaných v premenných $a, $b, $c, by mal byť klasifikovaný ako silent_banker trójsky kôň. A toto je veľmi jednoduché pravidlo. V skutočnosti môžu byť pravidlá oveľa zložitejšie (o tom si povieme nižšie).
O autorite projektu YARA hovorí aj zoznam projektov, ktoré ho využívajú, a to:

  • VirusTotal Malware Intelligence Services (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Sledujeme vašu webovú stránku (wewatchyourwebsite.com).

Všetok kód je napísaný v jazyku Python a používateľovi sa ponúka samotný modul na použitie pri ich vývoji a jednoducho spustiteľný súbor na použitie YARA ako samostatnej aplikácie. V rámci mojej práce som si vybral prvú možnosť, ale pre jednoduchosť v tomto článku použijeme analyzátor jednoducho ako konzolovú aplikáciu.

Po nejakom kopaní som rýchlo prišiel na to, ako napísať pravidlá pre YARA, ako aj ako k nemu pripojiť vírusové signatúry z freeware a packerov z PEiD. Ale začneme s inštaláciou.

Inštalácia

Ako som už povedal, projekt je napísaný v Pythone, takže ho možno ľahko nainštalovať na Linux, Windows a Mac. Najprv si môžete vziať binárne číslo. Ak zavoláme aplikáciu v konzole, dostaneme pravidlá pre spustenie.

$yara
použitie: yara ... ... SÚBOR | PID

To znamená, že formát volania programu je nasledujúci: najprv je názov programu, potom zoznam možností, po ktorom je uvedený súbor s pravidlami, a na samom konci - názov súboru. preskúmaný (alebo adresár obsahujúci súbory) alebo identifikátor procesu. Teraz by som rád vysvetlil, ako sú tieto pravidlá zostavené, ale nechcem vás hneď zaťažovať suchou teóriou. Preto budeme robiť veci inak a požičiame si podpisy iných ľudí, aby YARA mohla vykonávať jednu z úloh, ktoré sme si stanovili – plnohodnotnú detekciu vírusov pomocou podpisov.

Váš vlastný antivírus

Najdôležitejšia otázka: kde získať databázu signatúr známych vírusov? Antivírusové spoločnosti takéto databázy medzi sebou aktívne zdieľajú (niektoré štedrejšie, iné menej). Aby som bol úprimný, spočiatku som dokonca pochyboval, že niekde na internete niekto otvorene uverejní takéto veci. Ako sa však ukázalo, existujú dobrí ľudia. Pre každého je dostupná vhodná databáza z obľúbeného antivírusu ClamAV (clamav.net/lang/en). V sekcii "Najnovšie stabilné vydanie" nájdete odkaz na Najnovšia verzia antivírusový produkt, ako aj odkazy na stiahnutie vírusových databáz ClamAV. Nás budú zaujímať predovšetkým súbory main.cvd (db.local.clamav.net/main.cvd) a daily.cvd (db.local.clamav.net/daily.cvd).

Prvý obsahuje hlavnú databázu podpisov, druhý obsahuje najkompletnejšiu databázu tento moment základňa s rôznymi doplnkami. Na tento účel úplne postačuje Daily.cvd, ktorý obsahuje viac ako 100 000 zobrazení škodlivého softvéru. Databáza ClamAV však nie je databázou YARA, takže ju musíme previesť do požadovaného formátu. Ale ako? Koniec koncov, zatiaľ nevieme nič o formáte ClamAV ani o formáte Yara. Tento problém bol už pred nami vyriešený prípravou malého skriptu, ktorý konvertuje vírusovú databázu ClamAV na sadu pravidiel YARA. Scenár sa volá clamav_to_yara.py a napísal ho Matthew Richard (bit.ly/ij5HVs). Stiahnite si skript a skonvertujte databázy:

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

Výsledkom je, že v súbore clamav.yara dostaneme databázu podpisov, ktorá bude okamžite pripravená na použitie. Skúsme teraz kombináciu YARA a databázy ClamAV v akcii. Skenovanie priečinka pomocou podpisu sa vykonáva jediným príkazom:

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

Voľba -r určuje, že kontrola by sa mala vykonávať rekurzívne vo všetkých podpriečinkoch aktuálneho priečinka. Ak sa v priečinku /pentest/msf3/data nachádzali telá vírusov (aspoň tie, ktoré sú v databáze ClamAV), YARA to okamžite oznámi. V princípe ide o hotový skener podpisov. Pre väčšie pohodlie som napísal jednoduchý skript, ktorý skontroloval aktualizácie databázy ClamAV, stiahol nové podpisy a previedol ich do formátu YARA. Ale to sú už detaily. Jedna časť úlohy je dokončená, teraz môžete začať zostavovať pravidlá na identifikáciu baličov/kryptorov. Ale aby som to urobil, musel som sa s nimi trochu vysporiadať.

Hrajte podľa pravidiel

Pravidlo je teda hlavným mechanizmom programu, ktorý vám umožňuje priradiť daný súbor do určitej kategórie. Pravidlá sú popísané v samostatnom súbore (alebo súboroch) a vzhľadom sú veľmi podobné konštrukcii struct() z jazyka C/C++.

vládnuť BadBoy
{
reťazce:
$a = "win.exe"
$b = "http://foo.com/badfi le1.exe"
$c = "http://bar.com/badfi le2.exe"
podmienka:
$a a ($b alebo $c)
}

Pri písaní pravidiel v zásade nie je nič zložité. V tomto článku som sa dotkol iba hlavných bodov a podrobnosti nájdete v príručke. Zatiaľ desať najdôležitejších bodov:

1. Každé pravidlo začína pravidlom kľúčového slova, za ktorým nasleduje identifikátor pravidla. Identifikátory môžu mať rovnaké názvy ako premenné v C/C++, to znamená, že môžu pozostávať z písmen a číslic a prvý znak nemôže byť číslo. Maximálna dĺžka názov identifikátora - 128 znakov.

2. Pravidlá sa zvyčajne skladajú z dvoch častí: časti definície (reťazce) a časti podmienky (podmienka). Sekcia strings špecifikuje údaje, na základe ktorých sekcia podmienok rozhodne, či daný súbor spĺňa určité podmienky.

3. Každý riadok v sekcii strings má svoj vlastný identifikátor, ktorý začína znakom $ – vo všeobecnosti ako deklarácia premennej v PHP. YARA podporuje bežné struny uzavreté v dvojité úvodzovky("") a hexadecimálne reťazce uzavreté v rovnátka(()), ako aj regulárne výrazy:

$my_text_string = "text tu"
$my_hex_string = ( E2 34 A1 C8 23 FB )

4. Časť podmienky obsahuje celú logiku pravidla. Táto sekcia musí obsahovať boolovský výraz, ktorý určuje, kedy sa súbor alebo proces zhoduje s pravidlom. Táto časť sa zvyčajne vzťahuje na predtým deklarované riadky. A s identifikátorom reťazca sa zaobchádza ako s boolovskou premennou, ktorá vráti hodnotu true, ak sa reťazec našiel v pamäti súboru alebo procesu, a inak vracia hodnotu false. Vyššie uvedené pravidlo určuje, že súbory a procesy obsahujúce reťazec win.exe a jednu z dvoch adries URL by mali byť kategorizované ako BadBoy (podľa názvu pravidla).

5. Hexadecimálne reťazce umožňujú tri konštrukcie, vďaka ktorým sú flexibilnejšie: zástupné znaky, skoky a alternatívy. Substitúcie sú miesta v reťazci, ktoré sú neznáme a môžu byť nahradené ľubovoľnou hodnotou. Sú označené symbolom „?“:

$hex_string = ( E2 34 ?? C8 A? FB )

Tento prístup je veľmi vhodný pri zadávaní reťazcov, ktorých dĺžka je známa, ale obsah sa môže líšiť. Ak časť reťazca môže mať rôznu dĺžku, je vhodné použiť rozsahy:

$hex_string = ( F4 23 62 B4 )

Tento záznam znamená, že v strede riadku môže byť 4 až 6 rôznych bajtov. Môžete tiež implementovať alternatívnu voľbu:

$hex_string = ( F4 23 (62 B4 | 56) 45 )

To znamená, že namiesto tretieho bajtu môže byť 62 B4 alebo 56, takýto záznam zodpovedá riadkom F42362B445 alebo F4235645.

6. Na kontrolu, či je daný reťazec v špecifickom posune v adresnom priestore súboru alebo procesu, sa používa operátor at:

$a pri 100 a $b pri 200

Ak reťazec môže byť v určitom rozsahu adries, použije sa operátor in:

$a in (0..100) a $b in (100..fi veľkosť)

Niekedy nastanú situácie, keď potrebujete určiť, že súbor má obsahovať určité číslo z danej množiny. To sa vykonáva pomocou operátora of:

pravidlo Príkladu1
{
reťazce:
$foo1 = "figurína1"
$foo2 = "dummy2"
$foo3 = "dummy3"
podmienka:
2 z ($foo1,$foo2,$foo3)
}

Vyššie uvedené pravidlo vyžaduje, aby súbor obsahoval ľubovoľné dva riadky z množiny ($foo1,$foo2,$foo3). Namiesto zadania konkrétneho počtu riadkov v súbore môžete použiť premenné any (aspoň jeden riadok z danej množiny) a všetky (všetky riadky z danej množiny).

7. No a poslednou zaujímavou možnosťou, ktorú treba zvážiť, je použitie jednej podmienky na veľa riadkov. Táto funkcia je veľmi podobná funkcii operátora, len výkonnejšia je funkcia operátora for..of:

pre výraz string_set: (booleovský_výraz)

Tento záznam by sa mal čítať takto: z reťazcov špecifikovaných v sade string_ musia aspoň časti výrazu spĺňať podmienku boolean_expression. Alebo inými slovami: booleovský_výraz sa vyhodnotí pre každý reťazec v množine reťazcov a výrazy z nich musia vrátiť hodnotu True. Ďalej sa na túto konštrukciu pozrieme na konkrétnom príklade.

Vytváranie PEiD

Takže, keď je všetko s pravidlami viac-menej jasné, môžeme do nášho projektu začať implementovať detektor packerov a kryptorov. Najprv som si ako zdrojový materiál požičal podpisy známych baličov z rovnakého PEiD. V priečinku plugins je súbor userdb.txt, ktorý obsahuje to, čo potrebujeme. V mojej databáze bolo 1850 podpisov.

Pomerne veľa, takže aby ste ich mohli úplne importovať, odporúčam vám napísať nejaký skript. Formát tejto databázy je jednoduchý - používa sa obvyklý textový súbor, ktorý ukladá záznamy ako:


podpis = 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 = true

Prvý riadok špecifikuje názov baliča, ktorý sa zobrazí v PEiD, ale pre nás to bude identifikátor pravidla. Druhým je samotný podpis. Tretím je príznak ep_only, ktorý označuje, či sa má daný riadok hľadať len na adrese vstupného bodu alebo v celom súbore.

No, skúsme vytvoriť pravidlo, povedzme, pre ASPack? Ako sa ukazuje, v tomto nie je nič zložité. Najprv si vytvorme súbor na uloženie pravidiel a nazvime ho napríklad packers.yara. Potom v databáze PEiD vyhľadáme všetky podpisy, ktoré obsahujú ASPack vo svojich menách, a prenesieme ich do pravidla:

pravidlo ASPack
{
reťazce:
$ = ( 60 E8 ??? ??? ??? 5D 81 ED ??? (43 | 44) ?? B8 ???
$ = ( 60 EB ?? 5D EB ?? FF ??? ???? ???? E9 )
[.. rez..]
$ = ( 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 )
podmienka:
pre ktorúkoľvek z nich: ($at entrypoint)
}

Všetky nájdené záznamy majú príznak ep_only nastavený na hodnotu true, to znamená, že tieto riadky sa musia nachádzať na adrese vstupného bodu. Preto napíšeme nasledujúcu podmienku: “pre ktorúkoľvek z nich: ($at entrypoint)”.

Prítomnosť aspoň jedného z daných riadkov na adrese vstupného bodu teda bude znamenať, že súbor je zabalený s ASPack. Upozorňujeme tiež, že v tomto pravidle sú všetky riadky špecifikované jednoducho pomocou znaku $ bez identifikátora. Je to možné, pretože v sekcii podmienky nepristupujeme k žiadnym konkrétnym, ale používame celú sadu.

Ak chcete skontrolovať funkčnosť výsledného systému, stačí spustiť príkaz v konzole:

$ yara -r packers.yara somefi le.exe

Keď som tam nakŕmil niekoľko aplikácií zabalených s ASPack, bol som presvedčený, že všetko funguje!

Pripravený prototyp

YARA sa ukázala ako mimoriadne jasný a transparentný nástroj. Nebolo pre mňa ťažké napísať webadmina a nastaviť ho tak, aby fungoval ako webová služba. S trochou kreativity sú suché výsledky analyzátora už zafarbené rôznymi farbami, čo naznačuje stupeň nebezpečenstva zisteného malvéru. K dispozícii je malá aktualizácia databázy a pre mnohých kryptorov krátky popis a niekedy aj pokyny na rozbalenie. Prototyp bol vytvorený a funguje perfektne a šéfovia tancujú od radosti!

Funkčný kód (FC) v hlavičke telegramu identifikuje typ telegramu, ako napríklad telegram žiadosti (požiadavka alebo odoslanie/požiadavka) a telegram potvrdenia alebo odpovede (rámec potvrdenia, rámec odpovede). Okrem toho kód funkcie obsahuje aktuálnu funkciu prenosu a riadiace informácie, ktoré zabraňujú strate a duplikácii správ, alebo typ stanice so stavom FDL.

7 6 5 4 3 2 1 0 FC: Žiadosť o kód funkcie
1 Vyžiadajte si telegram
X FCV = Zapnutý striedavý bit
X href=”http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit”>FCB = Alternatívny bit (z počtu snímok)
1 0 (0x0) CV = hodnota hodín ()
1 iné Rezervované
0 0 (0x0) TE = časová udalosť (synchronizácia hodín)
0 3 (0x3) SDA_LOW = Odoslanie údajov potvrdené - nízka priorita
0 4 (0x4) SDN_LOW = Odoslanie údajov nie je potvrdené - nízka priorita
0 5 (0x5) SDA_HIGH = Odoslanie údajov potvrdené - vysoká priorita
0 6 (0x6) SDN_HIGH = Odoslanie údajov nie je potvrdené
0 7 (0x7) MSRD = Odoslať údaje požiadavky s odpoveďou Multicast
0 9 (0x9) Požiadajte o status FDL
0 12 (0xC) SRD nízke = Odoslať a vyžiadať údaje
0 13 (0xD) SRD high = Odoslať a vyžiadať údaje
0 14 (0xE) Žiadosť Identifikujte s odpoveďou
0 15 (0xF) Požiadať o stav LSAP s odpoveďou 1)
0 iné Rezervované

1) táto hodnota je v poslednej verzii normy už nedefinovaná, ale iba vyhradená

7 6 5 4 3 2 1 0 FC: Odpoveď na kód funkcie
0 Telegram s odpoveďou
0 Rezervované
0 0 Otrok
0 1 Majster nie je pripravený
1 0 Majster pripravený, bez tokenu
1 1 Majster pripravený, v kruhu na žetóny
0 (0x0) OK
1 (0x1) UE = Chyba používateľa
2 (0x2) RR = Žiadne zdroje
3 (0x3) RS = SAP nie je povolený
8 (0x8) DL = Data Low (normálny prípad s DP)
9 (0x9) NR = Nie sú pripravené žiadne údaje odozvy
10 (0xA) DH = Data High (čaká sa na diagnostiku DP)
12 (0xC) RDL = Neprijaté údaje a nízke údaje
13 (0xD) RDH = Neprijaté údaje a Vysoké údaje
iné Rezervované

Frame Count Bit Bit počtu rámcov FCB ​​(b5) zabraňuje duplikácii správy potvrdzujúcou alebo odpovedajúcou stanicou (odpovedačom) a akejkoľvek strate volajúcej stanice (iniciátor). Z tohto sú vylúčené požiadavky bez potvrdenia (SDN) a požiadavky na stav FDL, identifikáciu a stav LSAP.

Pre bezpečnostnú sekvenciu musí mať iniciátor FCB pre každý respondent. Keď sa telegram s požiadavkou (Žiadosť alebo Odoslať/Žiadosť) odošle odpovedajúcemu prvýkrát alebo ak sa znova odošle odpovedajúcemu, ktorý je momentálne označený ako nefunkčný, musí byť FCB nastavený tak, ako je definované v odpovedacom zariadení. Iniciátor to dosiahne v telegrame žiadosti s FCV=0 a FCB=1. Odpovedajúci musí vyhodnotiť telegram tohto druhu ako prvý cyklus správy a uložiť FCB=1 spolu s adresou iniciátora (SA) (pozri nasledujúcu tabuľku). Tento cyklus správ nebude iniciátor opakovať. V nasledujúcich telegramoch žiadosti rovnakému respondentovi musí iniciátor nastaviť FCV=1 a zmeniť FCB s každým novým telegramom žiadosti. Každý respondent, ktorý dostane telegram s požiadavkou, ktorý je mu adresovaný s FCV=1, musí vyhodnotiť FCB. Ak sa FCB zmenil v porovnaní s posledným telegramom žiadosti od rovnakého iniciátora (rovnakého SA), je to platné potvrdenie, že predchádzajúci cyklus správ bol riadne uzavretý. Ak telegram žiadosti pochádza od iného iniciátora (iného SA), hodnotenie FCB už nie je potrebné. V oboch prípadoch musí respondent uložiť FCB so zdrojovým SA až do prijatia nového telegramu, ktorý je mu adresovaný. V prípade strateného alebo narušeného potvrdenia alebo telegramu odpovede nesmie iniciátor zmeniť FCB v opakovanom pokuse o požiadavku: bude to znamenať, že predchádzajúci cyklus správ bol chybný. Ak respondent dostane telegram s požiadavkou s FCV=1 a rovnakým FCB ako posledný telegram požiadavky od rovnakého iniciátora (rovnakej SA), bude to znamenať opakovanie požiadavky. Respondent musí následne znova odoslať potvrdenie alebo telegram s odpoveďou, ktorý je pripravený. Až do vyššie uvedeného potvrdenia alebo prijatia telegramu s inou adresou (SA alebo DA), ktorá nie je potvrdená (Odoslať údaje bez potvrdenia, SDN), musí respondent držať posledný potvrdzovací alebo odpovedajúci telegram pripravený na prípadný pokus o opakovanie žiadosti. . V prípade telegramov žiadosti, ktoré nie sú potvrdené, a so stavom žiadosti FDL, identifikáciou a stavom LSAP, FCV=0 a FCB=0; hodnotenie respondentom už nie je potrebné.

b5 b4 Bitová poloha
FCB FCV Podmienka Význam Akcia
0 0 DA = TS/127 Žiadosť bez potvrdenia
Vyžiadať stav FDL/Identitu/stav LSAP
Vymazať posledné potvrdenie
0/1 0/1 DA#TS Žiadosť pre iného respondenta
1 0 DA = TS Prvá žiadosť FCBM:= 1
SAM:=SA
Vymazať posledné potvrdenie / odpoveď
0/1 1 DA = TS
SA = SAM
FCB#FCBM
Nová žiadosť Vymazať posledné potvrdenie / odpoveď
FCBM:=FCB
Podržte potvrdenie / odpoveď v pripravenosti na opakovanie
0/1 1 DA = TS
SA = SAM
FCB = FCBM
Opakovať žiadosť FCBM:=FCB
Opakujte potvrdenie / odpoveď a pokračujte v pripravenosti
0/1 1 DA = TS
SA#SAM
Nový iniciátor FCBM:=FCB
SAM:= SA Podržať potvrdenie / odpoveď v pripravenosti na opakovanie

FCBM uložené FCB v pamäti SAM uložené SA v pamäti




Hore