Kakav potpis ima txt datoteka? Metode za otkrivanje "zalijepljenih" datoteka. Nepoznata vrsta sektora

07.01.2021 Vijesti

Koncept " Magični broj"u programiranju ima tri značenja:

  • Potpis podataka
  • Odabran jedinstvene vrijednosti, koji ne bi trebao biti isti kao druge vrijednosti (npr. UUID)
  • Loša praksa programiranja.

Potpis podataka

Magični broj, ili potpis, - cijeli broj ili tekstualna konstanta koja se koristi za jedinstvenu identifikaciju izvora ili podataka. Takav broj sam po sebi nema nikakvog značenja i može izazvati zabunu ako se pojavi u programskom kodu bez odgovarajućeg konteksta ili komentara, dok pokušaj njegove promjene u neki drugi, čak i po vrijednosti sličan, može dovesti do potpuno nepredvidivih posljedica. Zbog toga su se takvi brojevi ironično nazivali magičnim brojevima. Trenutno je ovo ime čvrsto uspostavljeno kao termin. Na primjer, svaka kompilirana klasa Java jezika počinje heksadecimalnim "magičnim brojem" 0xCAFEBABE. Drugi nadaleko poznat primjer je god izvršna datoteka OS Microsoft Windows s ekstenzijom .exe počinje nizom bajtova 0x4D5A (što odgovara ASCII znakovima MZ - inicijalima Marka Zbikowskog, jednog od tvoraca MS-DOS-a). Manje poznat primjer je neinicijalizirani pokazivač u Microsoft Visual C++ (od 2005. Microsoftove verzije Vizualni studio), koji u načinu otklanjanja pogrešaka ima adresu 0xDEADBEEF .

U UNIX-u operativni sustavi Vrsta datoteke obično se određuje potpisom datoteke, bez obzira na ekstenziju njezina naziva. Za tumačenje potpisa datoteke, oni pružaju standardni uslužni program datoteka.

Loša praksa programiranja

Nazivaju se i "magični brojevi" loša je programska praksa kada se numerička vrijednost pojavljuje u izvornom tekstu, a nije očito što ona znači. Na primjer, isječak poput ovog, napisan u Javi, bio bi loš:

nacrtaj Sprite(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);

Sada je jasno: ova linija prikazuje sprite - nišan na nišanu - u središtu zaslona. U većini programskih jezika, sve vrijednosti koje se koriste za takve konstante bit će izračunate u vrijeme kompajliranja i zamijenjene na mjestima gdje se vrijednosti koriste. Stoga ova promjena izvorni tekst ne pogoršava performanse programa.

Osim toga, magični brojevi potencijalni su izvor pogrešaka u programu:

  • Ako se isti magični broj koristi više od jednom u programu (ili bi se potencijalno mogao koristiti), tada će njegova promjena zahtijevati uređivanje svakog pojavljivanja (umjesto samo jednog uređivanja vrijednosti imenovane konstante). Ako se ne isprave sve pojave, pojavit će se barem jedna pogreška.
  • U barem jednom od slučajeva, magični broj može biti pogrešno napisan u početku, a to je prilično teško otkriti.
  • Magični broj može ovisiti o implicitnom parametru ili drugom magičnom broju. Ako ove ovisnosti, koje nisu eksplicitno identificirane, nisu zadovoljene, pojavit će se barem jedna pogreška.
  • Prilikom mijenjanja pojavljivanja jednog magičnog broja, moguće je greškom promijeniti drugi magični broj koji je neovisan, ali ima istu numeričku vrijednost.

Čarobni brojevi i više platformi

Ponekad magični brojevi štete međuplatformskom kodu. Činjenica je da je u C-u, na 32-bitnim i 64-bitnim operativnim sustavima, zajamčena veličina tipova char, short i long long, dok se veličina int, long, size_t i ptrdiff_t može promijeniti (za prva dva, ovisno o preferencijama programera prevoditelja, za posljednja dva - ovisno o bitnom kapacitetu ciljnog sustava). U starom ili loše napisanom kodu mogu postojati "magični brojevi" koji označavaju veličinu tipa - kada se premješta na strojeve s drugačijim bitnim kapacitetom, oni mogu dovesti do suptilnih pogrešaka.

Na primjer:

const size_t BROJ_ELEMENATA = 10 ; long a[NUMBER_OF_ELEMENTS]; memset(a, 0, 10 * 4); // netočno - dugo se pretpostavlja da je 4 bajta, koristi se magični broj elemenata memset(a, 0, BROJ_ELEMENTA * 4); // netočno - dugo se pretpostavlja da je 4 bajta memset(a, 0, BROJ_ELEMENTA * veličina(dugo)); // nije sasvim točno - dupliciranje naziva tipa (ako se tip promijeni, morat ćete ga promijeniti i ovdje) memset (a, 0, BROJ_ELEMENTA * sizeof (a [0])); // ispravno, optimalno za dinamičke nizove veličine različite od nule memset(a, 0, veličina(a)); // ispravno, optimalno za statičke nizove

Brojevi koji nisu magični

Ne moraju se svi brojevi pretvarati u konstante. Na primjer, kod za

Pretraživanje skeniranjem datoteka poznatih tipova (ili, kako se često kaže, pretraživanje datoteka po potpisu) jedan je od najučinkovitijih koji se koristi u uslužnom programu za oporavak podataka R-Studio. Korištenje zadanog potpisa omogućuje vraćanje datoteka određene vrste u slučajevima kada podaci o strukturi direktorija i nazivima datoteka djelomično ili potpuno nedostaju (oštećeni).

Obično se particijska tablica diska koristi za određivanje lokacije datoteka. Usporedite li disk s knjigom, particijska tablica će biti slična njenom sadržaju. Prilikom skeniranja, R-Studio traži poznate vrste datoteka u tablici particija diska koristeći određene specificirane potpise. To je omogućeno činjenicom da gotovo svaka vrsta datoteke ima jedinstveni potpis ili uzorak podataka. Potpisi datoteka nalaze se na određenom mjestu na početku datoteke, au mnogim slučajevima i na kraju datoteke. Prilikom skeniranja R-Studio spaja pronađene podatke s potpisima poznatih vrsta datoteka, što omogućuje njihovu identifikaciju i oporavak podataka.

Koristeći tehnologiju za skeniranje poznatih vrsta datoteka, R-Studio vam omogućuje oporavak podataka s diskova koji su ponovno formatirani i čije su particijske tablice prepisane. Štoviše, ako je particija diska prebrisana, oštećena ili izbrisana, tada je skeniranje poznatih vrsta datoteka jedina opcija.

Ali gotovo sve ima svoje nedostatke, a poznate vrste datoteka koje se koriste u R-Studiu nisu iznimka. Dakle, kada skenirate poznate vrste datoteka, R-Studio vam omogućuje oporavak samo nefragmentiranih datoteka, ali, kao što je već spomenuto, u većini slučajeva ovo je najnovija moguća metoda.

R-Studio već uključuje potpise najčešćih vrsta datoteka (view puni popis datoteke poznatih tipova mogu se pronaći u odjeljku R-Studio Online Help.)

Ako je potrebno, korisnik može dodati nove vrste datoteka u R-Studio. Na primjer, ako trebate pronaći datoteke jedinstvene vrste ili one razvijene nakon datuma zadnjeg izdanja R-Studioa, možete dodati vlastite potpise datotekama poznatih vrsta. O ovom procesu će se raspravljati u nastavku.

Prilagođene datoteke poznatih vrsta
Prilagođeni potpisi za poznate vrste datoteka pohranjeni su u XML datoteci navedenoj u dijaloškom okviru Postavke. Dodavanje potpisa sastoji se od dva dijela:

  1. Određivanje potpisa datoteke koji se nalazi na početku datoteke i, ako postoji, na kraju datoteke.
  2. Generirajte XML datoteku koja sadrži potpis datoteke i druge informacije o vrsti datoteke.

Sve se to može učiniti koristeći R-Studio. Pritom ne morate biti stručnjak u području sastavljanja (uređivanja) XML dokumenata ili u području heksadecimalnog uređivanja – u ovom vodiču (članku), koji je namijenjen samom korisniku početna razina, detaljno će se raspravljati o svim fazama ovog procesa.

Primjer: Dodavanje potpisa za MP4 datoteku (XDCam-EX kodek)
Pogledajmo dodavanje potpisa datoteke na primjeru .MP4 datoteke stvorene pomoću Sony XDCAM-EX. Možete ga koristiti, primjerice, u slučaju oštećenja SD kartice za datoteke koje još niste uspjeli spremiti na tvrdi disk računala.

Prva faza: Određivanje potpisa datoteke
Da biste odredili potpis datoteke, razmotrite primjere datoteka istog formata.

Neka ovo budu četiri video datoteke iz Sony XDCAM-EX:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

Radi lakšeg razmatranja, neka to budu male datoteke. Veće datoteke teže je vidjeti u heksadecimalnom obliku.

1. Otvorite datoteke u R-Studiu. Da biste to učinili, kliknite desnom tipkom miša na svaku datoteku i odaberite Pregled/Uredi iz kontekstnog izbornika.

2. Usporedimo datoteke. Tražit ćemo isti obrazac koji se nalazi u sve četiri datoteke. On će se pojaviti potpis datoteke. Tipično se potpisi datoteke nalaze na početku datoteke, ali ponekad i na kraju.

3. Definirajte potpis datoteke na početku datoteke. U našem primjeru nalazi se na samom početku datoteke. Imajte na umu da se to ne događa uvijek - često je potpis datoteke na početku datoteke, ali ne u prvom redu (pomak).

Na slikama u nastavku čini se da su sadržaji sve četiri datoteke različiti, ali sve počinju s istim potpisom datoteke.


Kliknite na sliku za povećanje


Kliknite na sliku za povećanje


Kliknite na sliku za povećanje


Kliknite na sliku za povećanje

Označeno područje na slikama je potpis datoteke ove vrste datoteke. Prikazan je u tekstualnom i heksadecimalnom formatu.

U tekstualnom obliku, potpis datoteke izgleda ovako:
....ftypmp42....mp42........besplatno

Točke (“.”) označavaju znakove koji se ne mogu prikazati u obliku teksta. Stoga je također potrebno osigurati heksadecimalni oblik potpisa datoteke:
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. Na isti način definiramo potpis datoteke, ali na samom kraju datoteke. Može biti drugačiji potpis datoteke, drugačija duljina.

Slike ispod ističu potpis datoteke na kraju datoteke:


Kliknite na sliku za povećanje


Kliknite na sliku za povećanje


Kliknite na sliku za povećanje


Kliknite na sliku za povećanje

Imajte na umu da su podaci prije odabranog područja (potpis datoteke) isti u sve četiri datoteke. Ovo je tehnička informacija koja nije potpis datoteke, ali ukazuje da su sve četiri slike (datoteke) snimljene istom kamerom s istim parametrima. Obično je moguće razlikovati odgovarajuće uzorke s tehničkim informacijama od potpisa datoteke. U našem primjeru, u zadnjem retku prije početka potpisa datoteke vidimo tekst ‘RecordingMode type=”normal”’, što jasno ukazuje da se radi o nekoj vrsti parametra datoteke, a ne o potpisu. Uvijek obratite posebnu pozornost na ovaj redak kako ne biste pogrešno uključili tehničke informacije dio potpisa datoteke.

U našem slučaju, potpis datoteke je sljedeći tekst:
...
Podsjetimo vas da točke označavaju znakove koji se ne mogu prikazati u obliku teksta.

U heksadecimalnom zapisu, potpis datoteke izgleda ovako:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Napomena: potpis neće uvijek biti na kraju datoteke.

Druga faza: Stvaranje XML datoteke koja opisuje poznatu vrstu datoteke
Sada, nakon definiranja potpisa datoteke, možete kreirati XML datoteku i uključiti odgovarajuću vrstu datoteke u R-Studio. To se može učiniti na dva načina:

2.1 Korištenje ugrađenog grafički urednik potpisi datoteka:
Odaberite stavku Postavke iz izbornika Alati, u dijaloškom okviru Postavke koji se otvori kliknite karticu Poznate vrste datoteka, a zatim kliknite gumb Uredi korisničke vrste datoteka.

Kliknite na sliku za povećanje

Pritisnite gumb Stvori vrstu datoteke u dijaloškom okviru Uredi korisničke vrste datoteka.
Postavite sljedeće opcije:

  • Id - jedinstveni digitalni identifikator. Ovaj broj će biti odabran nasumično; Jedina stvar je da ne bi trebao odgovarati digitalnom identifikatoru bilo koje druge vrste datoteke.
  • Opis grupe - grupa u kojoj će se nalaziti pronađene datoteke u R-Studiu. Možete postaviti bilo koje nova grupa, ili odaberite neki od već postojećih. Za nas će to biti grupa “Multimedia Video (Multimedia: Video)”.
  • Opis - Kratki opis Vrsta datoteke. U našem primjeru možete koristiti, na primjer, "Sony cam video, XDCam-EX".
  • Ekstenzija - ekstenzija datoteka ove vrste. U našem slučaju - mp4.

Parametar Features nije obavezan, u našem slučaju ga ne moramo koristiti.

Kliknite na sliku za povećanje

Zatim morate unijeti početni i završni potpis datoteke. Da biste to učinili, odaberite Započni, a zatim kontekstni izbornik naredba Dodaj potpis.

Kliknite na sliku za povećanje

Zatim dvaput kliknite na polje<пустая сигнатура> () i unesite odgovarajući tekst.

Kliknite na sliku za povećanje

Zatim izradite konačni potpis datoteke. Obavezno unesite 21 u stupac Od.

Kliknite na sliku za povećanje

Uspješno ste izradili vlastiti potpis za poznate vrste datoteka.

Sada ga morate spremiti. Postoje dva načina: možete ga spremiti u zadanu datoteku navedenu na kartici Glavno dijaloškog okvira Postavke klikom na gumb Spremi. Ili kliknite na gumb Spremi kao... i spremite potpis u neku drugu datoteku.

2.2 Ručno stvaranje XML datoteke koja opisuje poznatu vrstu datoteke:
Za stvaranje ovu datoteku Upotrijebimo XML verziju 1.0 i UTF-8 kodiranje. Ne očajavajte ako ne znate o čemu se radi – samo otvorite bilo koji uređivač teksta(na primjer, Notepad.exe) i unesite sljedeći tekst u prvi redak:

Zatim ćemo stvoriti XML oznaku koja definira vrstu datoteke (FileType). Uzimajući u obzir prethodno opisane XML atribute, oznaka će izgledati ovako:

Umetnimo ga odmah nakon toga

Zatim definiramo potpis datoteke (tag ). Inicijalni potpis (na početku datoteke) bit će unutar oznake bez ikakvih atributa. Koristimo tekstualni tip potpisa, ali u isto vrijeme zamjenjujemo heksadecimalnim znakovima koji se ne mogu prikazati u tekstualnom obliku. Prije svakog heksadecimalnog znaka umećemo "\x" Tako oznaka s potpisom datoteke izgledat će ovako:

Ako postoji, također morate definirati završni potpis (na kraju datoteke). Ovo koristi istu oznaku, ali s elementom "from" i atributom "end". Izgledat će ovako:

Zapamtite da konačni potpis datoteke nije sadržavao netekstualne znakove, ali je sadržavao kose crte i trokutaste zagrade. Kako bismo izbjegli zabunu i pogreške u XML sintaksi, zamijenit ćemo znakove "/", " u potpisu<" и ">" njihove heksadecimalne vrijednosti.

Na kraju, nakon potpisa datoteke, moraju biti završne oznake FileType i FileTypeList:

Dakle, cijela datoteka bi trebala izgledati ovako:


besplatno
\x3C\x2FNonRealTimeMeta\x3E\x0D\x0A\x00

Upamtite: XML sintaksa razlikuje velika i mala slova, tako da bi ispravna oznaka bila , ali ne .

Spremimo datoteku u tekstualni format s nastavkom .xml. Na primjer: SonyCam.xml.

Uspješno smo izradili vlastiti potpis za poznate vrste datoteka. Ovaj primjer je sasvim dovoljan za razumijevanje osnovnih principa kreiranja prilagođene vrste datoteke. Više iskusni korisnici može koristiti XML verziju 2.0. Više o tome možete pročitati u odjeljku R-Studio online pomoći.

Korak 3: Provjera i dodavanje datoteke koja opisuje poznatu vrstu datoteke
Sljedeći korak je dodavanje (upload) vaše XML datoteke u R-Studio. U tom slučaju automatski će se provjeriti.

Učitajmo XML datoteku stvorenu u prethodnoj fazi u R-Studio. Da biste to učinili, odaberite stavku Postavke u izborniku Alati. U području korisničkih vrsta datoteka na kartici Glavno dijaloškog okvira Postavke dodajte XML datoteku koju smo izradili (SonyCam.xml). Pritisnite gumb Primijeni.

Kliknite na sliku za povećanje

2. Odgovorite Da na zahtjev za preuzimanje nove vrste datoteke.

Kliknite na sliku za povećanje

3. Kako biste provjerili je li vrsta datoteke uspješno učitana, kliknite na karticu Poznate vrste datoteka u dijaloškom okviru Postavke. Ne zaboravite da smo dodali vrstu datoteke u grupu Multimedijski video (Multimedijski: Video). Nakon proširenja ove grupe (mape), trebali bismo vidjeti element s opisom koji smo naveli kada stvaranje XML-a datoteka: Sony cam video, XDCam-EX (.mp4).

Kliknite na sliku za povećanje


Kliknite na sliku za povećanje

Ako postoje pogreške u sintaksi datoteke, vidjet ćete odgovarajuću poruku:

Kliknite na sliku za povećanje

U tom slučaju ponovno provjerite ima li u XML datoteci pogrešaka. Zapamtite: XML sintaksa razlikuje velika i mala slova i svaka oznaka mora imati završnu oznaku na kraju.

Korak 4: Testiranje datoteke koja opisuje poznatu vrstu datoteke
Kako bismo provjerili ispravnost prilagođene vrste datoteke koju smo stvorili, pokušajmo pronaći naše .mp4 datoteke na prijenosnom USB flash disku.

1. Pod OS-om Windows Vista ili Windows 7, izvršite potpuno (ne brzo) formatiranje diska ili upotrijebite uslužni program za čišćenje prostora na disku (na primjer, R-Wipe & Clean) za potpuno brisanje svih podataka na disku. Neka USB disk formatirano u FAT32 (veličina traženih datoteka ne prelazi 2 GB).

2. Kopirajte testne datoteke na disk i ponovno pokrenite računalo tako da se sadržaj cache memorije spremi na disk. Također možete onemogućiti vanjski disk a zatim ga ponovno spojite.

3. U OS-u će pogon biti definiran kao, na primjer, logički pogon F:\.

4. Pokrenimo R-Studio. Odaberite naš disk (F:\) i kliknite gumb Skeniraj

Kliknite na sliku za povećanje

5. U dijaloškom okviru Skeniraj, u području (Datotečni sustav), kliknite na gumb Promijeni... i poništite sve okvire. Na taj način ćemo onemogućiti traženje datotečnih sustava i datoteka pomoću particijske tablice.
Kliknite na sliku za povećanje

6. Označite potvrdni okvir Dodatno pretraživanje poznatih vrsta datoteka. To će R-Studio omogućiti traženje poznatih vrsta datoteka prilikom skeniranja.

7. Za početak skeniranja kliknite gumb Skeniraj.

8. Pričekajmo dok R-Studio skenira disk. Kartica Informacije o skeniranju će prikazati napredak skeniranja (napredak).


Kliknite na sliku za povećanje

9. Nakon što je skeniranje završeno, odaberite element Extra Found Files i dvaput kliknite na njega.


Kliknite na sliku za povećanje

10. Naše testne datoteke bit će smještene u Sony cam video, XDCam-EX mapi (ili u mapi s drugim nazivom koji odgovara opisu vrste datoteke navedenoj u drugoj fazi).


Kliknite na sliku za povećanje

Vidite da nazivi datoteka, datumi i lokacije (mape) nisu vraćeni jer ova informacija pohranjeni u datotečni sustav. Stoga će R-Studio automatski prikazati svaku datoteku s novim imenom.

Međutim, jasno je da sadržaj datoteka nije oštećen. Da bismo to provjerili, otvorimo ih u odgovarajućem programu, na primjer VLC media playeru.


Kliknite na sliku za povećanje

Zaključak
Sposobnost R-Studio skeniranja poznatih tipova datoteka omogućuje vam oporavak podataka čak i s diska čiji je datotečni sustav prebrisan. Datoteke možete vrlo učinkovito pretraživati ​​pomoću njihovih potpisa, što je posebno korisno ako znate točno koju vrstu datoteka vraćate, kao u našem primjeru. Mogućnost stvaranja prilagođenih vrsta datoteka omogućuje vam dodavanje bilo koje datoteke koja ima određeni potpis na popis poznatih vrsta datoteka.

Funkcijski kod (FC) u zaglavlju telegrama identificira vrstu telegrama, kao što je telegram zahtjeva (Zahtjev ili Slanje/zahtjev) i telegram potvrde ili odgovora (okvir potvrde, okvir odgovora). Osim toga, kod funkcije sadrži stvarnu funkciju prijenosa i kontrolne informacije koje sprječavaju gubitak i umnožavanje poruka, ili tip stanice sa FDL statusom.

7 6 5 4 3 2 1 0 FC: Zahtjev za šifru funkcije
1 Zatraži telegram
x FCV = izmjenični bit uključen
x href=”http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit”>FCB = Izmjenični bit (iz broja okvira)
1 0 (0x0) CV = Vrijednost sata()
1 drugo Rezervirano
0 0 (0x0) TE = Vremenski događaj (Sinkronizacija sata)
0 3 (0x3) SDA_LOW = Slanje podataka potvrđeno - nizak prioritet
0 4 (0x4) SDN_LOW = Slanje podataka nije potvrđeno - nizak prioritet
0 5 (0x5) SDA_HIGH = Slanje podataka potvrđeno - visoki prioritet
0 6 (0x6) SDN_HIGH = Slanje podataka nije potvrđeno
0 7 (0x7) MSRD = Pošaljite podatke zahtjeva s multicast odgovorom
0 9 (0x9) Zatraži FDL status
0 12(0xC) SRD low = Slanje i traženje podataka
0 13 (0xD) SRD high = Slanje i traženje podataka
0 14(0xE) Zahtjev Ident s odgovorom
0 15 (0xF) Zatražite LSAP status s odgovorom 1)
0 drugo Rezervirano

1) ova vrijednost u posljednjoj verziji standarda više nije definirana, već samo rezervirana

7 6 5 4 3 2 1 0 FC: Odgovor koda funkcije
0 Telegram odgovora
0 Rezervirano
0 0 Rob
0 1 Učitelj nije spreman
1 0 Majstor spreman, bez žetona
1 1 Master spreman, u token ringu
0 (0x0) u redu
1 (0x1) UE = korisnička pogreška
2 (0x2) RR = Nema sredstava
3 (0x3) RS = SAP nije omogućen
8 (0x8) DL = Niski podaci (normalan slučaj s DP-om)
9 (0x9) NR = Podaci o odgovoru nisu spremni
10(0xA) DH = podaci visoki (DP dijagnoza na čekanju)
12(0xC) RDL = podaci nisu primljeni i podaci su niski
13 (0xD) RDH = Podaci nisu primljeni i podaci su visoki
drugo Rezervirano

Bit brojanja okvira Bit brojanja okvira FCB (b5) sprječava dupliciranje poruke od strane stanice koja potvrđuje ili odgovara (odgovarač) i bilo kakav gubitak od strane pozivajuće stanice (inicijator). Iz ovoga su izuzeti zahtjevi bez potvrde (SDN) i zahtjevi za status FDL, Ident i LSAP status.

Za sigurnosni niz, inicijator mora nositi FCB za svakog odgovora. Kada se telegram Zahtjeva (Zahtjev ili Pošalji/Zahtjev) šalje odgovaraču prvi put ili ako se ponovno šalje odgovaraču koji je trenutno označen kao neoperativan, FCB mora biti postavljen kako je definirano u odgovaraču. Inicijator to postiže u Request telegramu s FCV=0 i FCB=1. Odgovaratelj mora procijeniti telegram ove vrste kao prvi ciklus poruke i pohraniti FCB=1 zajedno s adresom inicijatora (SA) (pogledajte sljedeću tablicu). Inicijator neće ponoviti ovaj ciklus poruka. U sljedećim telegramima Zahtjeva istom odgovaraocu, inicijator mora postaviti FCV=1 i promijeniti FCB sa svakim novim telegramom Zahtjeva. Svaki odgovarač koji primi telegram Zahtjeva koji mu je upućen s FCV=1 mora procijeniti FCB. Ako se FCB promijenio u usporedbi s zadnjim telegramom Zahtjeva od istog inicijatora (isti SA), to je valjana potvrda da je prethodni ciklus poruka pravilno zaključen. Ako telegram Zahtjeva potječe od drugog inicijatora (drugog SA), procjena FCB-a više nije potrebna. U oba slučaja, osoba koja odgovara mora pohraniti FCB s izvornim SA do primitka novog telegrama koji mu je upućen. U slučaju izgubljenog ili oštećenog telegrama potvrde ili odgovora, inicijator ne smije mijenjati FCB u ponovnom pokušaju zahtjeva: to će značiti da je prethodni ciklus poruke bio neispravan. Ako odgovarač primi telegram Zahtjeva s FCV=1 i istim FCB-om kao zadnji telegram Zahtjeva od istog inicijatora (isti SA), to će značiti ponovni pokušaj zahtjeva. Odgovaratelj mora zauzvrat ponovno poslati telegram potvrde ili odgovora koji je u pripravnosti. Do gore navedene potvrde ili primitka telegrama s drugom adresom (SA ili DA) koja nije potvrđena (Send Data With No Acknowledge, SDN) odgovarač mora zadržati posljednju potvrdu ili telegram odgovora u pripravnosti za svaki mogući ponovni pokušaj zahtjeva . U slučaju telegrama Zahtjeva koji nisu potvrđeni i sa statusom FDL zahtjeva, Identom i LSAP statusom, FCV=0 i FCB=0; evaluacija od strane ispitanika više nije potrebna.

b5 b4 Položaj bita
FCB FCV Stanje Značenje Akcijski
0 0 DA = TS/127 Zahtjev bez potvrde
Zatraži FDL status/Ident/LSAP status
Izbriši posljednju potvrdu
0/1 0/1 DA#TS Zahtjev drugom odgovaraču
1 0 DA = TS Prvi zahtjev FCBM:= 1
SAM:=SA
Izbriši posljednju potvrdu/odgovor
0/1 1 DA = TS
SA = SAM
FCB#FCBM
Novi zahtjev Izbriši posljednju potvrdu/odgovor
FCBM:=FCB
Zadrži potvrdu/odgovor u spremnosti za ponovni pokušaj
0/1 1 DA = TS
SA = SAM
FCB = FCBM
Zahtjev za ponovni pokušaj FCBM:=FCB
Ponovite potvrdu/odgovor i nastavite držati u pripravnosti
0/1 1 DA = TS
SA#SAM
Novi inicijator FCBM:=FCB
SAM:= SA Zadrži potvrdu/odgovor u spremnosti za ponovni pokušaj

FCBM pohranjen FCB u memoriji SAM pohranjen SA u memoriji

Mnogi su možda čuli za datoteke kao što je rarjpeg. Ovo je posebna vrsta datoteke, koja je jpeg slika i rar arhiva zalijepljene zajedno. To je izvrstan spremnik za skrivanje činjenice prijenosa informacija. Možete stvoriti rarjpeg koristeći sljedeće naredbe:

UNIX: mačka slika1.jpg arhiva.rar > slika2.jpg
WINDOWS: kopiraj /b slika1.jpg+arhiva.rar slika2.jpg

Ili ako imate hex editor.

Naravno, da biste sakrili činjenicu prijenosa informacija, možete koristiti ne samo JPEG format, već i mnoge druge. Svaki format ima svoje karakteristike, zbog kojih može, ali i ne mora biti prikladan za ulogu spremnika. Opisat ću kako možete pronaći zalijepljene datoteke u najpopularnijim formatima ili naznačiti činjenicu lijepljenja.

Metode za otkrivanje spojenih datoteka mogu se podijeliti u tri skupine:

  1. Metoda provjere područja nakon EOF markera. Mnogi popularni formati datoteka imaju takozvani marker kraja datoteke, koji je odgovoran za prikaz željenih podataka. Na primjer, preglednici fotografija čitaju sve bajtove do ovog markera, ali se područje nakon njega zanemaruje. Ova metoda je idealna za sljedeće formate: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. Metoda za provjeru veličine datoteke. Struktura nekih formata (audio i video spremnici) omogućuje izračunavanje stvarne veličine datoteke i njezinu usporedbu s izvorna veličina. Formati: AVI, WAV, MP4, MOV.
  3. Metoda provjere CFB datoteka. CFB ili Compound File Binary Format je format dokumenta koji je razvio Microsoft, a koji je spremnik s vlastitim sustav datoteka. Ova se metoda temelji na otkrivanju anomalija u datoteci.

Ima li života nakon završetka datoteke?

JPEG

Da bismo pronašli odgovor na ovo pitanje, potrebno je proniknuti u specifikacije formata koji je “predak” spojenih datoteka i razumjeti njegovu strukturu. Svaki JPEG počinje s potpisom 0xFF 0xD8.

Nakon ovog potpisa nalaze se servisne informacije, po izboru ikona slike i, na kraju, komprimirana slika. U ovom formatu, kraj slike je označen dvobajtnim potpisom 0xFF 0xD9.

PNG

Prvih osam bajtova PNG datoteke zauzima sljedeći potpis: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A. Završni potpis koji završava tok podataka: 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82.

RAR

Zajednički potpis za sve rar arhive: 0x52 0x61 0x72 0x21 (Rar!). Nakon njega dolaze informacije o arhivskoj verziji i drugi povezani podaci. Eksperimentalno je utvrđeno da arhiva završava signaturom 0x0A, 0x25, 0x25, 0x45, 0x4F, 0x46.

Tablica formata i njihovih potpisa:
Algoritam za provjeru lijepljenja u ovim formatima izuzetno je jednostavan:

  1. Pronađite početni potpis;
  2. Pronađite konačni potpis;
  3. Ako nakon konačnog potpisa nema podataka, vaša datoteka je čista i ne sadrži privitke! U suprotnom, potrebno je potražiti druge formate nakon konačnog potpisa.

GIF i PDF

PDF dokument može imati više od jednog EOF markera, na primjer zbog netočnog generiranja dokumenta. Broj konačnih potpisa u GIF datoteci jednak je broju okvira u njoj. Na temelju značajki ovih formata moguće je poboljšati algoritam za provjeru prisutnosti priloženih datoteka.
  1. Točka 1 se ponavlja iz prethodnog algoritma.
  2. Točka 2 se ponavlja iz prethodnog algoritma.
  3. Kada pronađete konačni potpis, zapamtite njegovu lokaciju i tražite dalje;
  4. Ako na ovaj način dođete do zadnjeg EOF markera, datoteka je čista.
  5. Ako datoteka ne završava krajnjim potpisom, goto je mjesto posljednjeg pronađenog krajnjeg potpisa.
Velika razlika između veličine datoteke i položaja nakon posljednjeg krajnjeg potpisa ukazuje na prisutnost ljepljivog privitka. Razlika može biti veća od deset bajtova, iako se mogu postaviti i druge vrijednosti.

ZIP

Osobitost ZIP arhiva je prisutnost tri različite signature: Struktura arhive je sljedeća:
Zaglavlje lokalne datoteke 1
Podaci datoteke 1
Deskriptor podataka 1
Zaglavlje lokalne datoteke 2
Podaci datoteke 2
Deskriptor podataka 2
...
Zaglavlje lokalne datoteke
Podaci datoteke br
Deskriptor podataka br
Zaglavlje dešifriranja arhive
Arhivirajte dodatni zapis podataka
Središnji imenik
Najzanimljiviji je središnji direktorij koji sadrži metapodatke o datotekama u arhivi. Središnji direktorij uvijek počinje potpisom 0x50 0x4b 0x01 0x02 i završava potpisom 0x50 0x4b 0x05 0x06, nakon čega slijedi 18 bajtova metapodataka. Zanimljivo je da se prazne arhive sastoje samo od konačnog potpisa i 18 nula bajtova. Nakon 18 bajtova dolazi područje arhivskih komentara, koje je idealan spremnik za skrivanje datoteke.

Da biste provjerili ZIP arhivu, morate pronaći završni potpis središnjeg imenika, preskočiti 18 bajtova i potražiti potpise poznatih formata u području komentara. Velika veličina Komentar također ukazuje na činjenicu lijepljenja.

Veličina je bitna

AVI

Struktura AVI datoteke je sljedeća: svaka datoteka počinje RIFF potpisom (0x52 0x49 0x46 0x46). Na bajtu 8 nalazi se AVI potpis koji specificira format (0x41 0x56 0x49 0x20). Blok na offsetu 4, koji se sastoji od 4 bajta, sadrži početnu veličinu bloka podataka (redoslijed bajtova - little endian). Da biste saznali broj bloka koji sadrži sljedeću veličinu, trebate zbrojiti veličinu zaglavlja (8 bajtova) i veličinu dobivenu u bloku od 4-8 bajtova. Time se izračunava ukupna veličina datoteke. Prihvatljivo je da izračunata veličina može biti manja od stvarne veličine datoteke. Nakon što se veličina izračuna, datoteka će sadržavati samo nula bajtova (potrebno za poravnanje granice od 1 Kb).

Primjer izračuna veličine:


WAV

Kao i AVI, WAV datoteka počinje potpisom RIFF, međutim, ova datoteka ima potpis od bajta 8 - WAVE (0x57 0x41 0x56 0x45). Veličina datoteke izračunava se na isti način kao i AVI. Stvarna veličina mora u potpunosti odgovarati izračunatoj.

MP4

MP4 ili MPEG-4 je format medijskog spremnika koji se koristi za pohranjivanje video i audio streamova, a također omogućuje pohranjivanje titlova i slika.
Na pomaku od 4 bajta nalaze se potpisi: tip datoteke ftyp (66 74 79 70) (QuickTime Container File Type) i podtip datoteke mmp4 (6D 6D 70 34). Za priznanje skrivene datoteke, zanima nas mogućnost izračuna veličine datoteke.

Pogledajmo primjer. Veličina prvog bloka je na nultom pomaku i iznosi 28 (00 00 00 1C, Big Endian poredak bajtova); također označava pomak gdje se nalazi veličina drugog bloka podataka. Na pomaku 28 nalazimo sljedeću veličinu bloka jednaku 8 (00 00 00 08). Da biste pronašli sljedeću veličinu bloka, trebate zbrojiti veličine prethodnih pronađenih blokova. Dakle, izračunava se veličina datoteke:

MOV

Ovaj široko korišteni format također je MPEG-4 spremnik. MOV koristi vlastiti algoritam za kompresiju podataka, ima strukturu sličnu MP4 i koristi se za iste svrhe - za pohranu audio i video podataka, kao i povezanih materijala.
Poput MP4, svaka mov datoteka ima 4-bajtni ftyp potpis na pomaku 4, međutim, sljedeći potpis ima vrijednost qt__ (71 74 20 20). Pravilo za izračunavanje veličine datoteke nije se promijenilo: počevši od početka datoteke, izračunavamo veličinu sljedećeg bloka i zbrajamo je.

Metoda provjere ove skupine formata za prisutnost "ljepljivih" datoteka je izračunavanje veličine prema gore navedenim pravilima i njezina usporedba s veličinom datoteke koja se provjerava. Ako je trenutna veličina datoteke mnogo manja od izračunate, to ukazuje na činjenicu lijepljenja. Prilikom provjere AVI datoteka, prihvaćeno je da izračunata veličina može biti manja od veličine datoteke zbog prisutnosti dodanih nula za poravnavanje obruba. U tom slučaju potrebno je provjeriti ima li nula nakon izračunate veličine datoteke.

Provjera binarnog formata složene datoteke

Ovaj format datoteke, koji je razvio Microsoft, poznat je i kao OLE (Povezivanje i ugrađivanje objekata) ili COM (Model komponentnih objekata). DOC datoteke, XLS, PPT pripadaju skupini CFB formata.

CFB datoteka sastoji se od 512-bajtnog zaglavlja i sektora jednake duljine koji pohranjuju tokove podataka ili servisne informacije. Svaki sektor ima svoj nenegativan broj, s iznimkom posebnih brojeva: "-1" - označava slobodni sektor, "-2" - označava sektor koji zatvara lanac. Svi lanci sektora definirani su u FAT tablici.

Pretpostavimo da je napadač izmijenio određenu .doc datoteku i zalijepio drugu datoteku na njen kraj. Ima ih nekoliko na razne načine otkriti ga ili ukazati na anomaliju u dokumentu.

Nenormalna veličina datoteke

Kao što je gore spomenuto, svaka CFB datoteka sastoji se od zaglavlja i sektora jednake duljine. Da biste saznali veličinu sektora, morate pročitati dvobajtni broj na pomaku 30 od početka datoteke i povećati 2 na potenciju tog broja. Ovaj broj mora biti jednak 9 (0x0009) ili 12 (0x000C), odnosno veličina sektora datoteke je 512 ili 4096 bajtova. Nakon pronalaska sektora potrebno je provjeriti sljedeću jednakost:

(Veličina datoteke - 512) mod Veličina sektora = 0

Ako ova jednakost nije zadovoljena, tada možete istaknuti činjenicu lijepljenja datoteka. Međutim, ova metoda ima značajan nedostatak. Ako napadač zna veličinu sektora, tada samo treba zalijepiti svoju datoteku i još n bajtova tako da veličina zalijepljenih podataka bude višekratnik veličine sektora.

Nepoznata vrsta sektora

Ako napadač zna za metodu za zaobilaženje prethodne provjere, tada ovu metodu može otkriti prisutnost sektora s nedefiniranim tipovima.

Definirajmo jednakost:

FileSize = 512 + CountReal * SectorSize, gdje je FileSize veličina datoteke, SectorSize je veličina sektora, CountReal je broj sektora.

Također definiramo sljedeće varijable:

  1. CountFat – broj FAT sektora. Nalazi se na pomaku 44 od početka datoteke (4 bajta);
  2. CountMiniFAT – broj MiniFAT sektora. Nalazi se na pomaku 64 od početka datoteke (4 bajta);
  3. CountDIFAT – broj DIFAT sektora. Nalazi se na pomaku 72 od početka datoteke (4 bajta);
  4. CountDE – broj sektora unosa imenika. Da biste pronašli ovu varijablu, trebate pronaći prvi sektor DE, koji je na pomaku 48. Zatim je potrebno dobiti potpuni prikaz DE iz FAT-a i prebrojati broj DE sektora;
  5. CountStreams – broj sektora s tokovima podataka;
  6. CountFree – broj slobodnih sektora;
  7. CountClassified – broj sektora s određenim tipom;
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

Očito, ako su CountClassified i CountReal nejednaki, možemo zaključiti da se datoteke mogu spojiti.

Šef mi je dao prilično zanimljiv zadatak. U kratkom vremenu napišite analizator izvršnih datoteka koji će moći pronaći tijela virusa na temelju potpisa i odrediti korišteni paker/kriptor. Gotovi prototip pojavio se za nekoliko sati.

Riječ autora

Analiza potpisa

Traženje zlonamjernog objekta pomoću potpisa je nešto što svaki antivirus može učiniti. Općenito, potpis je formalizirani opis određenih karakteristika po kojima se može utvrditi da je datoteka koja se skenira virus i to dobro definiran virus.

Ovdje postoje razne tehnike. Alternativa je korištenje potpisa sastavljenog od N bajtova zlonamjernog objekta. U ovom slučaju, ne možete raditi glupu usporedbu, već usporedbu pomoću neke maske (kao traženje bajtova EB ?? ?? CD 13). Ili pitajte dodatni uvjeti poput “taj i takvi bajtovi trebaju biti na ulaznoj točki u program” i tako dalje. Potpis zlonamjernog softvera posebna je stvar.

Na isti način, opisani su neki znakovi prema kojima se može utvrditi da je izvršna datoteka pakirana s jednim ili drugim kriptorom ili paketom (na primjer, banalni ASPack). Ako pažljivo čitate naš časopis, onda ste sigurno čuli za takav alat kao što je PEiD, koji je sposoban identificirati najčešće korištene pakete, kriptore i kompajlere (baza podataka ima veliki broj potpisa) za PE datoteku koja je u nju prenesena . Nažalost, nove verzije programa nisu objavljene dugo vremena, a nedavno se na službenoj web stranici pojavila poruka da projekt neće imati daljnji razvoj. Šteta, jer bi mi mogućnosti PEiD-a (posebno s obzirom na sustav dodataka) mogle biti od koristi. Nakon kratke analize postalo je jasno da to nije opcija. Ali nakon kopanja po blogovima na engleskom jeziku, brzo sam našao ono što mi odgovara. Projekt YARA (code.google.com/p/yara-project).

Što je YARA?

Od samog sam početka bio uvjeren da negdje na internetu već postoji razvoj otvorenog koda koji bi preuzeo zadatak utvrđivanja korespondencije između određenog potpisa i datoteke koja se ispituje. Kad bih mogao pronaći takav projekt, onda bi ga se lako moglo staviti na tračnice web aplikacije, dodati tamo različite potpise i dobiti ono što se od mene traži. Plan se počeo činiti još realnijim kada sam pročitao opis projekta YARA.

Sami programeri ga postavljaju kao alat koji pomaže istraživačima zlonamjernog softvera identificirati i klasificirati zlonamjerne uzorke. Istraživač može stvoriti opise za različiti tipovi zlonamjerni softver koji koristi tekstualne ili binarne obrasce koji opisuju formalizirane karakteristike zlonamjernog softvera. Tako se dolazi do potpisa. Zapravo, svaki opis sastoji se od skupa redaka i nekog logičkog izraza, na temelju kojeg se određuje logika pokretanja analizatora.

Ako su ispunjeni uvjeti jednog od pravila za datoteku koja se ispituje, ona se prema tome određuje (na primjer, takav i takav crv). Jednostavan primjer pravila za razumijevanje o čemu govorimo:

pravilo tihi_bankar: bankar
{
meta:
description = "Ovo je samo primjer"
razina_niti = 3
u_divljini = istina
žice:
$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"
stanje:
$a ili $b ili $c
}

U ovom pravilu kažemo YARA-i da se svaka datoteka koja sadrži barem jedan od nizova uzoraka opisanih u varijablama $a, $b, $c treba klasificirati kao trojanac silent_banker. A ovo je vrlo jednostavno pravilo. U stvarnosti, pravila mogu biti puno složenija (o tome ćemo govoriti u nastavku).
O autoritetu YARA projekta govori i popis projekata koji ga koriste, a to je:

  • VirusTotal Malware Intelligence Services (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Gledamo vašu web stranicu (wewatchyourwebsite.com).

Sav je kod napisan u Pythonu, a korisniku se nudi i sam modul za korištenje u njihovom razvoju i jednostavno izvršna datoteka za korištenje YARA-e kao samostalne aplikacije. Kao dio svog rada, odabrao sam prvu opciju, ali zbog jednostavnosti u ovom članku jednostavno ćemo koristiti analizator kao konzolnu aplikaciju.

Nakon nekog kopanja, brzo sam shvatio kako napisati pravila za YARA, kao i kako tome priložiti virusne potpise iz besplatnog softvera i pakete iz PEiD-a. No, počet ćemo s instalacijom.

Montaža

Kao što sam već rekao, projekt je napisan u Pythonu, tako da se lako može instalirati na Linux, Windows i Mac. U početku možete samo uzeti binarni. Pozovemo li aplikaciju u konzoli, dobit ćemo pravila za pokretanje.

$yara
upotreba: yara ... ... DATOTEKA | PID

Odnosno, format za pozivanje programa je sljedeći: prvo je naziv programa, zatim popis opcija, nakon čega je navedena datoteka s pravilima, a na samom kraju - naziv datoteke koja se ispitan (ili direktorij koji sadrži datoteke), ili identifikator procesa. Sada bih želio na dobar način objasniti kako se sastavljaju ta pravila, ali ne želim vas odmah opterećivati ​​suhoparnom teorijom. Stoga ćemo postupiti drugačije i posuditi tuđe potpise kako bi YARA mogla izvršiti jedan od zadataka koji smo postavili - potpunu detekciju virusa putem potpisa.

Vaš vlastiti antivirus

Najvažnije pitanje: gdje dobiti bazu potpisa poznatih virusa? Antivirusne tvrtke aktivno dijele takve baze podataka među sobom (neke velikodušnije, druge manje). Iskreno govoreći, u početku sam čak sumnjao da će negdje na internetu netko otvoreno objavljivati ​​takve stvari. No, kako se pokazalo, ima dobrih ljudi. Prikladna baza podataka popularnog antivirusa ClamAV dostupna je svima (clamav.net/lang/en). U odjeljku "Najnovije stabilno izdanje" možete pronaći poveznicu na najnoviju verziju antivirusnog proizvoda, kao i veze za preuzimanje baza podataka virusa ClamAV. Prvenstveno će nas zanimati main.cvd (db.local.clamav.net/main.cvd) i daily.cvd (db.local.clamav.net/daily.cvd) datoteke.

Prvi sadrži glavnu bazu potpisa, drugi sadrži najpotpuniju bazu podataka ovaj trenutak baza s raznim dodacima. Daily.cvd, koji sadrži više od 100.000 malware impresija, sasvim je dovoljan za tu svrhu. Međutim, ClamAV baza podataka nije YARA baza podataka, pa je moramo pretvoriti u potreban format. Ali kako? Uostalom, još ne znamo ništa ni o ClamAV formatu ni o Yara formatu. Ovaj problem je već riješen prije nas pripremom male skripte koja pretvara ClamAV bazu virusnih definicija u skup YARA pravila. Skripta se zove clamav_to_yara.py, a napisao ju je Matthew Richard (bit.ly/ij5HVs). Preuzmite skriptu i pretvorite baze podataka:

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

Kao rezultat toga, u datoteci clamav.yara dobit ćemo bazu podataka potpisa koja će odmah biti spremna za korištenje. Isprobajmo sada kombinaciju YARA i baze podataka ClamAV na djelu. Skeniranje mape pomoću potpisa izvodi se jednom jedinom naredbom:

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

Opcija -r navodi da se skeniranje treba izvesti rekurzivno kroz sve podmape trenutne mape. Ako je u mapi /pentest/msf3/data bilo tijela virusa (barem onih koji se nalaze u ClamAV bazi podataka), YARA će to odmah prijaviti. U principu, ovo je gotov skener potpisa. Radi veće praktičnosti, napisao sam jednostavnu skriptu koja provjerava ažuriranja baze podataka ClamAV, preuzima nove potpise i pretvara ih u YARA format. Ali to su već detalji. Jedan dio zadatka je obavljen, sada možete početi sastavljati pravila za identifikaciju pakera/kriptora. Ali da bih to učinio, morao sam se malo pozabaviti njima.

Igraj po pravilima

Dakle, pravilo je glavni mehanizam programa koji vam omogućuje dodjeljivanje dana datoteka u bilo koju kategoriju. Pravila su opisana u posebnoj datoteci (ili datotekama) i izgledom su vrlo slična konstrukciji struct() iz jezika C/C++.

pravilo BadBoy
{
žice:
$a = "win.exe"
$b = "http://foo.com/badfi le1.exe"
$c = "http://bar.com/badfi le2.exe"
stanje:
$a i ($b ili $c)
}

U principu, nema ništa komplicirano u pisanju pravila. U ovom članku dotaknuo sam se samo glavnih točaka, a detalje ćete pronaći u priručniku. Za sada deset najvažnijih točaka:

1. Svako pravilo počinje s ključna riječ pravilo nakon kojeg slijedi identifikator pravila. Identifikatori mogu imati ista imena kao varijable u C/C++, odnosno mogu se sastojati od slova i brojeva, a prvi znak ne može biti broj. Maksimalna duljina naziva identifikatora je 128 znakova.

2. Obično se pravila sastoje od dva odjeljka: odjeljka definicije (nizovi) i odjeljka uvjeta (uvjet). Sekcija nizova specificira podatke na temelju kojih će sekcija uvjeta odlučiti zadovoljava li određena datoteka određene uvjete.

3. Svaki redak u odjeljku nizova ima vlastiti identifikator, koji počinje znakom $ - općenito, poput deklaracije varijable u PHP-u. YARA podržava obične nizove zatvorene u dvostruki navodnici("") i heksadecimalni nizovi u vitičastim zagradama (()), kao i regularni izrazi:

$my_text_string = "tekstuj ovdje"
$my_hex_string = ( E2 34 A1 C8 23 FB )

4. Odjeljak uvjeta sadrži svu logiku pravila. Ovaj odjeljak mora sadržavati Booleov izraz koji određuje kada datoteka ili proces odgovaraju pravilu. Obično se ovaj odjeljak odnosi na prethodno deklarirane retke. A identifikator niza tretira se kao booleova varijabla koja vraća true ako je niz pronađen u datoteci ili memoriji procesa, a false u suprotnom. Gornje pravilo navodi da datoteke i procesi koji sadrže niz win.exe i jedan od dva URL-a trebaju biti kategorizirani kao BadBoy (prema nazivu pravila).

5. Heksadecimalni nizovi dopuštaju tri konstrukcije koje ih čine fleksibilnijima: zamjenske znakove, skokove i alternative. Zamjene su mjesta u nizu koja su nepoznata i mogu se zamijeniti bilo kojom vrijednošću. Označeni su simbolom “?”:

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

Ovaj pristup je vrlo prikladan kada se specificiraju nizovi čija je duljina poznata, ali sadržaj može varirati. Ako dio niza može biti različite duljine, prikladno je koristiti raspone:

$hex_niz = ( F4 23 62 B4 )

Ovaj unos znači da u sredini retka može biti od 4 do 6 različitih bajtova. Također možete implementirati alternativni izbor:

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

To znači da umjesto trećeg bajta može biti 62 B4 ili 56, takav unos odgovara redovima F42362B445 ili F4235645.

6. Za provjeru je li dati niz na određenom pomaku u adresnom prostoru datoteke ili procesa, koristi se operator at:

$a na 100 i $b na 200

Ako niz može biti unutar određenog raspona adresa, koristi se in operator:

$a in (0..100) i $b in (veličina 100..fi)

Ponekad se javljaju situacije kada trebate navesti da datoteka treba sadržavati određeni broj iz zadanog skupa. To se radi pomoću operatora of:

pravilo Primjera1
{
žice:
$foo1 = "dummy1"
$foo2 = "dummy2"
$foo3 = "dummy3"
stanje:
2 od ($foo1,$foo2,$foo3)
}

Gornje pravilo zahtijeva da datoteka sadrži bilo koja dva retka iz skupa ($foo1,$foo2,$foo3). Umjesto navođenja određenog broja redaka u datoteci, možete koristiti varijable bilo koji (barem jedan redak iz danog skupa) i sve (svi redovi iz danog skupa).

7. Pa, zadnja zanimljiva mogućnost koju treba razmotriti je primjena jednog uvjeta na mnogo redaka. Ova je značajka vrlo slična operatoru of, samo je snažniji operator for..of:

za izraz string_set: (boolean_expression)

Ovaj bi se unos trebao čitati ovako: od nizova navedenih u skupu string_, barem dijelovi izraza moraju zadovoljiti uvjet boolean_expression. Ili, drugim riječima: boolean_expression se procjenjuje za svaki niz u skupu nizova, a izrazi iz njih moraju vratiti True. Zatim ćemo pogledati ovu konstrukciju na konkretnom primjeru.

Izrada PEiD

Dakle, kada je sve postalo više-manje jasno s pravilima, možemo početi implementirati detektor pakera i kriptora u naš projekt. Isprva sam kao izvorni materijal posudio potpise poznatih pakera iz istog PEiD-a. U mapi dodataka nalazi se datoteka userdb.txt, koja sadrži ono što nam treba. U mojoj bazi podataka bilo je 1850 potpisa.

Prilično puno, pa kako biste ih u potpunosti uvezli, savjetujem vam da napišete neku vrstu skripte. Format ove baze podataka je jednostavan - koristi se uobičajeni tekstualna datoteka, koji pohranjuje zapise poput:


potpis = 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 = točno

Prvi redak specificira ime pakera, koji će biti prikazan u PEiD-u, ali za nas će to biti identifikator pravila. Drugi je sam potpis. Treća je zastavica ep_only, koja pokazuje treba li tražiti određeni red samo na adresi ulazne točke ili u cijeloj datoteci.

Pa, pokušajmo stvoriti pravilo, recimo, za ASPack? Kako se ispostavilo, u ovome nema ništa komplicirano. Najprije stvorimo datoteku za pohranu pravila i nazovimo je, na primjer, packers.yara. Zatim tražimo PEiD bazu podataka za sve potpise koji uključuju ASPack u svojim imenima i prenosimo ih u pravilo:

pravilo ASPack
{
žice:
$ = ( 60 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? (43 | 44) ?? B8 ?? ?? (43 | 44) ?? 03 C5 )
$ = ( 60 EB ?? 5D EB ?? FF ?? ?? ?? ?? ?? E9 )
[.. izrezati..]
$ = ( 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 )
stanje:
za bilo koju od njih: ($na ulaznoj točki)
}

Svi pronađeni zapisi imaju oznaku ep_only postavljenu na true, odnosno ovi se redovi moraju nalaziti na adresi ulazne točke. Stoga pišemo sljedeći uvjet: “za bilo koji od njih: ($na ulaznoj točki)”.

Stoga će prisutnost barem jedne od zadanih linija na adresi ulazne točke značiti da je datoteka zapakirana s ASPackom. Također imajte na umu da u ovo pravilo svi nizovi su specificirani jednostavno pomoću znaka $, bez identifikatora. To je moguće jer u odjeljku uvjeta ne pristupamo nijednom određenom, već koristimo cijeli skup.

Da biste provjerili funkcionalnost dobivenog sustava, samo pokrenite naredbu u konzoli:

$ yara -r pakeri.yara somefi le.exe

Nakon što sam tamo stavio nekoliko aplikacija zapakiranih s ASPackom, bio sam uvjeren da sve radi!

Gotov prototip

YARA se pokazala iznimno jasnim i transparentnim alatom. Nije mi bilo teško napisati webadmina za njega i postaviti ga da radi kao web servis. Uz malo kreativnosti, suhoparni rezultati analizatora već su obojeni različitim bojama, što ukazuje na stupanj opasnosti otkrivenog zlonamjernog softvera. Malo ažuriranje baza, a za mnoge od kriptora dostupan je kratak opis, a ponekad čak i upute za raspakiranje. Prototip je napravljen i radi savršeno, a šefovi plešu od oduševljenja!