Ustvarjanje znane vrste datoteke po meri za R-Studio. Določanje vrste datoteke s podpisom Kaj je podpis datoteke

Koncept " Čarobna številka"v programiranju ima tri pomene:

  • Podpis podatkov
  • Izbrano edinstvene vrednosti, ki ne sme biti enak drugim vrednostim (npr. UUID)
  • Slaba programska praksa.

Podpis podatkov

Čarobna številka, oz podpis, - celo število ali besedilna konstanta, ki se uporablja za enolično identifikacijo vira ali podatkov. Takšna številka sama po sebi nima nobenega pomena in lahko povzroči zmedo, če se pojavi v programski kodi brez ustreznega konteksta ali komentarja, medtem ko lahko poskus spremembe v drugo, četudi po vrednosti blizu, povzroči povsem nepredvidljive posledice. Zaradi tega so takšna števila ironično imenovali magična števila. Trenutno je to ime trdno uveljavljeno kot izraz. Na primer, vsak preveden razred jezika Java se začne s šestnajstiško "magično številko" 0xCAFEBABE. Drugi splošno znan primer je katera koli izvršljiva datoteka OS Microsoft Windows s pripono .exe se začne z zaporedjem bajtov 0x4D5A (kar ustreza znakom ASCII MZ - začetnice Marka Zbikowskega, enega od ustvarjalcev MS-DOS). Manj znan primer je neinicializiran kazalec v Microsoft Visual C++ (od različice Microsoft Visual Studio 2005), ki ima v načinu za odpravljanje napak naslov 0xDEADBEEF.

V UNIX-u podobnem operacijski sistemi Vrsta datoteke je običajno določena s podpisom datoteke, ne glede na končnico njenega imena. Zagotavljajo standardni pripomoček za razlago podpisa datoteke.

Slaba programska praksa

Imenujejo se tudi »magične številke« in so slaba programska praksa, ko se v izvornem besedilu pojavi številska vrednost in ni očitno, kaj pomeni. Na primer, tak delček, kot je ta, napisan v Javi, bi bil slab:

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);

Zdaj je jasno: ta vrstica prikazuje sprite - nitni križec - na sredini zaslona. V večini programskih jezikov bodo vse vrednosti, uporabljene za take konstante, izračunane v času prevajanja in zamenjane na mestih, kjer se vrednosti uporabljajo. Zato takšna sprememba izvornega besedila ne poslabša zmogljivosti programa.

Poleg tega so magična števila potencialni vir napak v programu:

  • Če je isto čarobno število uporabljeno več kot enkrat v programu (ali bi se lahko uporabilo), bo njegovo spreminjanje zahtevalo urejanje vsakega pojava (namesto samo enega urejanja vrednosti imenovane konstante). Če niso popravljeni vsi pojavi, se bo pojavila vsaj ena napaka.
  • V vsaj enem od primerov je lahko magična številka na začetku napačno črkovana, kar je zelo težko odkriti.
  • Magično število je lahko odvisno od implicitnega parametra ali drugega čarobnega števila. Če te odvisnosti, ki niso izrecno opredeljene, niso izpolnjene, se bo pojavila vsaj ena napaka.
  • Pri spreminjanju pojavov ene magične številke je mogoče pomotoma spremeniti drugo magično številko, ki je neodvisna, vendar ima enako številsko vrednost.

Čarobne številke in več platform

Včasih magične številke škodijo kodi za več platform. Dejstvo je, da je v C v 32- in 64-bitnih operacijskih sistemih zagotovljena velikost vrst char, short in long long, medtem ko se lahko velikost int, long, size_t in ptrdiff_t spremeni (za prva dva, odvisno od preferenc razvijalcev prevajalnika, za zadnja dva - odvisno od bitne zmogljivosti ciljnega sistema). V stari ali slabo napisani kodi so lahko "magične številke", ki označujejo velikost vrste - pri prehodu na stroje z drugačno bitno zmogljivostjo lahko povzročijo subtilne napake.

Na primer:

const size_t ŠTEVILO_ELEMENTOV = 10; long a[NUMBER_OF_ELEMENTS]; memset(a, 0, 10 * 4); // nepravilno - predpostavlja se, da je dolgo 4 bajte, uporabljeno je magično število elementov memset(a, 0, ŠTEVILO_ELEMENTOV * 4); // napačno - predpostavlja se, da je dolgo 4 bajte memset(a, 0, ŠTEVILO_ELEMENTOV * velikost(dolgo)); // ni povsem pravilno - podvajanje imena tipa (če se tip spremeni, ga boste morali spremeniti tudi tukaj) memset (a, 0, NUMBER_OF_ELEMENTS * sizeof (a [0])); // pravilno, optimalno za dinamične nize velikosti, ki ni enaka nič memset(a, 0, sizeof(a)); // pravilno, optimalno za statična polja

Številke, ki niso čarobne

Vseh števil ni treba pretvoriti v konstante. Na primer, koda za

Iskanje s skeniranjem datotek znanih tipov (ali, kot se pogosto reče, iskanje datotek po podpisu) je eden najučinkovitejših, ki se uporablja v pripomočku za obnovitev podatkov R-Studio. Uporaba danega podpisa vam omogoča obnovitev datotek določene vrste v primerih, ko podatki o strukturi imenika in imenih datotek delno ali v celoti manjkajo (poškodovani).

Običajno se tabela particij diska uporablja za določanje lokacije datotek. Če disk primerjate s knjigo, bo particijska tabela podobna njenemu kazalu vsebine. Pri skeniranju R-Studio išče znane vrste datotek v particijski tabeli diska z uporabo določenih določenih podpisov. To omogoča dejstvo, da ima skoraj vsaka vrsta datoteke edinstven podpis ali podatkovni vzorec. Podpisi datotek se nahajajo na določenem mestu na začetku datoteke in v mnogih primerih tudi na koncu datoteke. Pri skeniranju R-Studio primerja najdene podatke s podpisi znanih vrst datotek, kar omogoča njihovo identifikacijo in obnovitev podatkov.

Z uporabo tehnologije za skeniranje znanih vrst datotek vam R-Studio omogoča obnovitev podatkov z diskov, ki so bili ponovno formatirani in katerih particijske tabele so bile prepisane. Poleg tega, če je particija diska prepisana, poškodovana ali izbrisana, je skeniranje znanih vrst datotek edina možnost.

Toda skoraj vse ima svoje pomanjkljivosti in znane vrste datotek, ki se uporabljajo v R-Studiu, niso izjema. R-Studio torej pri skeniranju znanih vrst datotek omogoča obnovitev samo nefragmentiranih datotek, vendar je, kot že rečeno, v večini primerov to najnovejša možna metoda.

R-Studio že vključuje podpise najpogostejših vrst datotek (view celoten seznam datoteke znanih tipov lahko najdete v razdelku spletne pomoči R-Studio.)

Po potrebi lahko uporabnik v R-Studio doda nove vrste datotek. Na primer, če morate poiskati datoteke edinstvene vrste ali tiste, ki so bile razvite po datumu zadnje izdaje R-Studio, lahko datotekam znanih vrst dodate lastne podpise. O tem postopku bomo razpravljali v nadaljevanju.

Datoteke po meri znanih vrst
Podpisi datotek po meri znanih vrst datotek so shranjeni v datoteko XML e, določeno v pogovornem oknu Nastavitve. Dodajanje podpisa je sestavljeno iz dveh delov:

  1. Določitev podpisa datoteke, ki se nahaja na začetku datoteke in, če obstaja, na koncu datoteke.
  2. Ustvarite datoteko XML, ki vsebuje podpis datoteke in druge informacije o vrsti datoteke.

Vse to lahko storite s programom R-Studio. Hkrati vam ni treba biti strokovnjak na področju sestavljanja (urejanja) XML dokumentov ali na področju heksadecimalnega urejanja – v tem priročniku (članku), ki je namenjen uporabniku samemu vstopna raven, bodo vse faze tega procesa podrobno obravnavane.

Primer: dodajanje podpisa za datoteko MP4 (kodek XDCam-EX)
Oglejmo si dodajanje podpisa datoteke na primeru datoteke .MP4, ustvarjene s Sony XDCAM-EX. Uporabite ga lahko na primer v primeru poškodbe kartice SD za datoteke, ki jih še niste uspeli shraniti na trdi disk vašega računalnika.

Prva faza: Določanje podpisa datoteke
Za določitev podpisa datoteke upoštevajte primere datotek istega formata.

Naj bodo to štiri video datoteke iz Sony XDCAM-EX:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

Za lažjo obravnavo naj bodo to majhne datoteke. Večje datoteke je težje videti v šestnajstiški obliki.

1. Odprite datoteke v R-Studio. To storite tako, da z desno miškino tipko kliknete vsako datoteko in v kontekstnem meniju izberete Ogled/Uredi.

2. Primerjajmo datoteke. Iskali bomo enak vzorec v vseh štirih datotekah. Pojavil se bo podpis datoteke. Običajno so podpisi datotek na začetku datoteke, včasih pa tudi na koncu.

3. Na začetku datoteke določite podpis. V našem primeru se nahaja na samem začetku datoteke. Upoštevajte, da se to ne zgodi vedno - pogosto je podpis datoteke na začetku datoteke, ne pa v prvi vrstici (odmik).

Iz spodnjih slik je videti, da je vsebina vseh štirih datotek različna, vendar se vse začnejo z istim podpisom datoteke.


Kliknite na sliko za povečavo


Kliknite na sliko za povečavo


Kliknite na sliko za povečavo


Kliknite na sliko za povečavo

Označeno območje na slikah je podpis datoteke te vrste datoteke. Predstavljen je v besedilni in šestnajstiški obliki.

V besedilni obliki je podpis datoteke videti takole:
....ftypmp42....mp42........brezplačno

Pike (“.”) označujejo znake, ki jih ni mogoče predstaviti v besedilni obliki. Zato je treba zagotoviti tudi šestnajstiško obliko podpisa 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 enak način določimo podpis datoteke, vendar čisto na koncu datoteke. Lahko je drugačen podpis datoteke, drugačna dolžina.

Spodnje slike poudarjajo podpis datoteke na koncu datoteke:


Kliknite na sliko za povečavo


Kliknite na sliko za povečavo


Kliknite na sliko za povečavo


Kliknite na sliko za povečavo

Upoštevajte, da so podatki pred izbranim območjem (podpis datoteke) enaki v vseh štirih datotekah. To je tehnična informacija, ki ni podpis datoteke, ampak nakazuje, da so bile vse štiri slike (datoteke) posnete z isto kamero z enakimi parametri. Običajno je mogoče razlikovati ujemajoče se vzorce s tehničnimi informacijami od podpisa datoteke. V našem primeru vidimo v zadnji vrstici pred začetkom podpisa datoteke besedilo ‘RecordingMode type=”normal”’, kar jasno nakazuje, da gre za neke vrste parameter datoteke in ne za podpis. Vedno bodite posebej pozorni na to vrstico, da ne bi pomotoma vključili tehnične informacije del podpisa datoteke.

V našem primeru je podpis datoteke naslednje besedilo:
...
Naj vas spomnimo, da pike označujejo znake, ki jih ni mogoče predstaviti v besedilni obliki.

V šestnajstiški obliki je podpis datoteke videti takole:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Upoštevajte: podpis ne bo vedno na koncu datoteke.

Druga stopnja: Ustvarjanje datoteke XML, ki opisuje znano vrsto datoteke
Zdaj, ko ste definirali podpis datoteke, lahko ustvarite datoteko XML in vključite ustrezno vrsto datoteke v R-Studio. To je mogoče storiti na dva načina:

2.1 Uporaba vgrajenega grafični urejevalnik podpisi datotek:
V meniju Orodja izberite element Nastavitve, v pogovornem oknu Nastavitve, ki se odpre, kliknite zavihek Znane vrste datotek in nato kliknite gumb Uredi uporabniške vrste datotek.

Kliknite na sliko za povečavo

Kliknite gumb Ustvari vrsto datoteke v pogovornem oknu Urejanje uporabniških vrst datotek.
Nastavite naslednje možnosti:

  • Id - edinstven digitalni identifikator. Ta številka bodo izbrani naključno; Edina stvar je, da se ne sme ujemati z digitalnim identifikatorjem katere koli druge vrste datoteke.
  • Opis skupine - skupina, v kateri bodo najdene datoteke v R-Studiu. Nastavite lahko bodisi nova skupina, ali izberite enega od že obstoječih. Za nas bo to skupina "Multimedia Video (Multimedia: Video)".
  • Opis - Kratek opis vrsta datoteke. V našem primeru lahko uporabite na primer "Sony cam video, XDCam-EX".
  • Razširitev - razširitev datotek te vrste. V našem primeru - mp4.

Parameter Features je neobvezen, v našem primeru nam ga ni treba uporabiti.

Kliknite na sliko za povečavo

Nato morate vnesti začetni in končni podpis datoteke. Če želite to narediti, izberite Začni in nato notri kontekstni meni ukaz Dodaj podpis.

Kliknite na sliko za povečavo

Nato dvakrat kliknite na polje<пустая сигнатура> () in vnesite ustrezno besedilo.

Kliknite na sliko za povečavo

Nato ustvarite končni podpis datoteke. Ne pozabite vnesti 21 v stolpec Od.

Kliknite na sliko za povečavo

Uspešno ste ustvarili lasten podpis za znane vrste datotek.

Zdaj ga morate shraniti. Obstajata dva načina: lahko jo shranite v privzeto datoteko, določeno na zavihku Glavno v pogovornem oknu Nastavitve, tako da kliknete gumb Shrani. Ali pa kliknite na gumb Shrani kot... in shranite podpis v drugo datoteko.

2.2 Ročno ustvarjanje datoteke XML, ki opisuje znano vrsto datoteke:
Za ustvarjanje te datoteke Uporabimo različico XML 1.0 in kodiranje UTF-8. Ne obupajte, če ne veste, kaj je – odprite katerega koli urejevalnik besedil(na primer Notepad.exe) in v prvo vrstico vnesite naslednje besedilo:

Nato bomo ustvarili oznako XML, ki definira vrsto datoteke (FileType). Ob upoštevanju prej opisanih atributov XML bo oznaka videti takole:

Vstavimo ga takoj zatem

Nato določimo podpis datoteke (tag ). Začetni podpis (na začetku datoteke) bo znotraj oznake brez kakršnih koli atributov. Uporabljamo besedilni tip podpisa, vendar hkrati nadomeščamo šestnajstiške znake, ki jih ni mogoče predstaviti v besedilni obliki. Pred vsakim šestnajstiškim znakom vstavimo "\x" Tako oznaka s podpisom datoteke bo videti takole:

Če je prisoten, morate določiti tudi končni podpis (na koncu datoteke). To uporablja isto oznako, vendar z elementoma "from" in atributom "end". Videti bo takole:

Ne pozabite, da končni podpis datoteke ni vseboval nebesedilnih znakov, je pa vseboval poševnice in trikotne oklepaje. Da bi se izognili zmedi in napakam v sintaksi XML, bomo v podpisu zamenjali znake "/", "<" и ">" njihove šestnajstiške vrednosti.

Na koncu, za podpisi datoteke, morata biti zaključni oznaki FileType in FileTypeList:

Torej bi morala celotna datoteka izgledati takole:


\x00\x00\x00\x18ftypmp42\x00\x00\x00\x00mp42\x00\x00\x00\x00\x00\x00\x00\x08brezplačno
\x3C\x2FNonRealTimeMeta\x3E\x0D\x0A\x00

Ne pozabite: sintaksa XML razlikuje med velikimi in malimi črkami, zato bi bila pravilna oznaka , vendar ne .

Shranimo datoteko v besedilni obliki s pripono .xml. Na primer: SonyCam.xml.

Uspešno smo ustvarili lasten podpis za znane vrste datotek. Ta primer je povsem dovolj za razumevanje osnovnih principov ustvarjanja vrste datoteke po meri. Izkušenejši uporabniki lahko uporabljajo XML različico 2.0. Več o tem si lahko preberete v razdelku spletne pomoči R-Studio.

3. korak: Preverjanje in dodajanje datoteke, ki opisuje znano vrsto datoteke
Naslednji korak je dodajanje (nalaganje) vaše XML datoteke v R-Studio. V tem primeru bo samodejno preverjeno.

V R-Studio naložimo datoteko XML, ustvarjeno na prejšnji stopnji. Če želite to narediti, izberite element Nastavitve v meniju Orodja. V območju uporabniških vrst datotek na zavihku Glavno v pogovornem oknu Nastavitve dodajte datoteko XML, ki smo jo ustvarili (SonyCam.xml). Kliknite gumb Uporabi.

Kliknite na sliko za povečavo

2. Na zahtevo za prenos nove vrste datoteke odgovorite z Da.

Kliknite na sliko za povečavo

3. Če želite preveriti, ali je bila vrsta datoteke uspešno naložena, kliknite zavihek Znane vrste datotek v pogovornem oknu Nastavitve. Ne pozabite, da smo vrsto datoteke dodali v skupino Multimedia Video (Multimedia: Video). Ko razširimo to skupino (mapo), bi morali videti element z opisom, ki smo ga določili pri ustvarjanju datoteke XML: Sony cam video, XDCam-EX (.mp4).

Kliknite na sliko za povečavo


Kliknite na sliko za povečavo

Če so v sintaksi datoteke napake, boste videli ustrezno sporočilo:

Kliknite na sliko za povečavo

V tem primeru znova preverite, ali so v datoteki XML napake. Ne pozabite: sintaksa XML razlikuje med velikimi in malimi črkami in vsaka oznaka mora imeti na koncu zaključno oznako.

4. korak: Preizkušanje datoteke, ki opisuje znano vrsto datoteke
Če želite preveriti pravilnost vrste datoteke po meri, ki smo jo ustvarili, poskusimo poiskati naše datoteke .mp4 na izmenljivem bliskovnem pogonu USB.

1. V sistemu Windows Vista ali Windows 7 izvedite popolno (ne hitro) formatiranje diska ali uporabite pripomoček za čiščenje prostora na disku (na primer R-Wipe & Clean), da popolna odstranitev vse podatke, ki so na voljo na disku. Pustiti USB disk formatirano v FAT32 (velikost iskanih datotek ne presega 2 GB).

2. Kopirajmo ga testne datoteke na disk in znova zaženite računalnik, da se vsebina predpomnilnika shrani na disk. Lahko tudi onemogočite zunanji disk in ga nato ponovno povežite.

3. V OS bo pogon definiran kot na primer logični pogon F:\.

4. Zaženimo R-Studio. Izberite naš pogon (F:\) in kliknite gumb Scan

Kliknite na sliko za povečavo

5. V pogovornem oknu Skeniraj v območju (Datotečni sistem) kliknite gumb Spremeni ... in počistite vsa polja. Na ta način bomo onemogočili iskanje datotečnih sistemov in datotek s pomočjo particijske tabele.
Kliknite na sliko za povečavo

6. Označite potrditveno polje Dodatno iskanje znanih vrst datotek. To bo R-Studiu omogočilo iskanje znanih vrst datotek pri skeniranju.

7. Za začetek skeniranja kliknite gumb Skeniraj.

8. Počakajmo, da R-Studio pregleda disk. Zavihek Informacije o skeniranju bo prikazal potek skeniranja (napredek).


Kliknite na sliko za povečavo

9. Ko je skeniranje končano, izberite element Dodatne najdene datoteke in dvokliknite nanj.


Kliknite na sliko za povečavo

10. Naše testne datoteke se bodo nahajale v mapi Sony cam video, XDCam-EX (ali v mapi z drugim imenom, ki ustreza opisu vrste datoteke, določenem v drugi fazi).


Kliknite na sliko za povečavo

Vidite, da imena datotek, datumi in lokacije (mape) niso bili obnovljeni, ker te informacije shranjeni v datotečnem sistemu. Zato bo R-Studio samodejno prikazal vsako datoteko z novim imenom.

Vendar je jasno, da vsebina datotek ni poškodovana. Da bi to preverili, jih odprimo v ustreznem programu, na primer VLC media player.


Kliknite na sliko za povečavo

Zaključek
Zmožnost R-Studio skeniranja znanih vrst datotek vam omogoča obnovitev podatkov tudi z diska, katerega datotečni sistemi so bili bodisi prepisani. Datoteke lahko precej učinkovito iščete z uporabo njihovih podpisov, kar je še posebej koristno, če natančno poznate vrsto datotek, ki jih obnavljate, kot v našem primeru. Možnost ustvarjanja vrst datotek po meri vam omogoča, da na seznam znanih vrst datotek dodate katero koli datoteko z določenim podpisom datoteke.

Mnogi so morda slišali za datoteke, kot je rarjpeg. To je posebna vrsta datoteke, ki je tesno zlepljena skupaj slika jpeg in arhiv rar. Je odličen vsebnik za skrivanje dejstva prenosa informacij. Rarjpeg lahko ustvarite z naslednje ukaze:

UNIX: mačja slika1.jpg arhiv.rar > slika2.jpg
WINDOWS: kopiraj /b slika1.jpg+arhiv.rar slika2.jpg

Ali če imate hex urejevalnik.

Seveda, če želite skriti dejstvo prenosa informacij, lahko uporabite ne samo format JPEG, ampak tudi številne druge. Vsak format ima svoje značilnosti, zaradi katerih je lahko ali pa tudi ne primeren za vlogo vsebnika. Opisal bom, kako lahko najdete prilepljene datoteke v najbolj priljubljenih oblikah ali navedete dejstvo lepljenja.

Metode za odkrivanje združenih datotek lahko razdelimo v tri skupine:

  1. Metoda za preverjanje območja za oznako EOF. Veliko priljubljenih formatov datotek ima tako imenovani marker konca datoteke, ki je odgovoren za prikaz želenih podatkov. Pregledovalci fotografij na primer preberejo vse bajte do tega označevalca, območje za njim pa se prezre. Ta metoda je idealna za naslednje formate: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. Metoda za preverjanje velikosti datoteke. Struktura nekaterih formatov (avdio in video vsebniki) vam omogoča, da izračunate dejansko velikost datoteke in jo primerjate z izvirno velikostjo. Formati: AVI, WAV, MP4, MOV.
  3. Metoda za preverjanje datotek CFB. CFB ali Compound File Binary Format je format dokumenta, ki ga je razvil Microsoft in je vsebnik z lastnim datotečnim sistemom. Ta metoda temelji na odkrivanju nepravilnosti v datoteki.

Ali obstaja življenje po koncu datoteke?

JPEG

Za odgovor na to vprašanje se je treba poglobiti v specifikacije formata, ki je »prednik« združenih datotek, in razumeti njegovo strukturo. Vsak JPEG se začne s podpisom 0xFF 0xD8.

Za tem podpisom so storitvene informacije, po želji ikona slike in končno sama stisnjena slika. V tem formatu je konec slike označen z dvobajtnim podpisom 0xFF 0xD9.

PNG

Prvih osem bajtov datoteke PNG zaseda naslednji podpis: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A. Končni podpis, ki konča podatkovni tok: 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82.

RAR

Skupni podpis za vse rar arhive: 0x52 0x61 0x72 0x21 (Rar!). Za njim pridejo informacije o arhivski različici in drugi povezani podatki. Eksperimentalno je bilo ugotovljeno, da se arhiv konča s podpisom 0x0A, 0x25, 0x25, 0x45, 0x4F, 0x46.

Tabela formatov in njihovih podpisov:
Algoritem za preverjanje lepljenja v teh formatih je izjemno preprost:

  1. Poiščite začetni podpis;
  2. Poiščite končni podpis;
  3. Če po končnem podpisu ni podatkov, je vaša datoteka čista in ne vsebuje priponk! V nasprotnem primeru je treba po končnem podpisu iskati druge formate.

GIF in PDF

Dokument PDF ima lahko več kot en označevalec EOF, na primer zaradi nepravilnega ustvarjanja dokumenta. Število končnih podpisov v datoteki GIF je enako številu okvirjev v njej. Na podlagi značilnosti teh formatov je mogoče izboljšati algoritem za preverjanje prisotnosti priloženih datotek.
  1. Točka 1 se ponovi iz prejšnjega algoritma.
  2. Točka 2 se ponovi iz prejšnjega algoritma.
  3. Ko najdete končni podpis, si zapomnite njegovo lokacijo in iščite naprej;
  4. Če na ta način dosežete zadnjo oznako EOF, je datoteka čista.
  5. Če se datoteka ne konča s končnim podpisom, je goto lokacija zadnjega najdenega končnega podpisa.
Velika razlika med velikostjo datoteke in položajem za zadnjim končnim podpisom kaže na prisotnost lepljive priloge. Razlika je lahko več kot deset bajtov, čeprav je mogoče nastaviti druge vrednosti.

ZIP

Posebnost arhivov ZIP je prisotnost treh različnih signatur: Struktura arhiva je naslednja:
Glava lokalne datoteke 1
Podatki datoteke 1
Podatkovni deskriptor 1
Glava lokalne datoteke 2
Podatki datoteke 2
Deskriptor podatkov 2
...
Glava lokalne datoteke
Podatki datoteke št
Podatkovni deskriptor št
Glava za dešifriranje arhiva
Arhiv dodatnih podatkov
Centralni imenik
Najbolj zanimiv je osrednji direktorij, ki vsebuje metapodatke o datotekah v arhivu. Centralni imenik se vedno začne s podpisom 0x50 0x4b 0x01 0x02 in konča s podpisom 0x50 0x4b 0x05 0x06, ki mu sledi 18 bajtov metapodatkov. Zanimivo je, da prazne arhive sestavlja samo končni podpis in 18 ničelnih bajtov. Po 18 bajtih pride območje arhivskega komentarja, ki je idealen vsebnik za skrivanje datoteke.

Če želite preveriti arhiv ZIP, morate najti končni podpis osrednjega imenika, preskočiti 18 bajtov in poiskati podpise znanih formatov v območju za komentarje. Velika številka Komentar označuje tudi dejstvo lepljenja.

Velikost je pomembna

AVI

Struktura datoteke AVI je naslednja: vsaka datoteka se začne s podpisom RIFF (0x52 0x49 0x46 0x46). V bajtu 8 je podpis AVI, ki določa format (0x41 0x56 0x49 0x20). Blok pri odmiku 4, sestavljen iz 4 bajtov, vsebuje začetno velikost podatkovnega bloka (vrstni red bajtov - little endian). Če želite izvedeti številko bloka, ki vsebuje naslednjo velikost, morate dodati velikost glave (8 bajtov) in velikost, pridobljeno v bloku 4-8 bajtov. To izračuna skupno velikost datoteke. Sprejemljivo je, da je lahko izračunana velikost manjša od dejanske velikosti datoteke. Po izračunani velikosti bo datoteka vsebovala samo nič bajtov (potrebno za poravnavo meje 1Kb).

Primer izračuna velikosti:


WAV

Tako kot AVI se datoteka WAV začne s podpisom RIFF, vendar ima ta datoteka podpis iz bajta 8 - WAVE (0x57 0x41 0x56 0x45). Velikost datoteke se izračuna na enak način kot AVI. Dejanska velikost se mora popolnoma ujemati z izračunano.

MP4

MP4 ali MPEG-4 je format medijske vsebine, ki se uporablja za shranjevanje video in avdio tokov, omogoča pa tudi shranjevanje podnapisov in slik.
Pri odmiku 4 bajtov so podpisi: vrsta datoteke ftyp (66 74 79 70) (vrsta vsebniške datoteke QuickTime) in podvrsta datoteke mmp4 (6D 6D 70 34). Za priznanje skrite datoteke, nas zanima možnost izračuna velikosti datoteke.

Poglejmo si primer. Velikost prvega bloka je pri odmiku nič in je 28 (00 00 00 1C, vrstni red bajtov Big Endian); označuje tudi odmik, kjer se nahaja velikost drugega podatkovnega bloka. Pri odmiku 28 najdemo naslednjo velikost bloka, ki je enaka 8 (00 00 00 08). Če želite najti naslednjo velikost bloka, morate dodati velikosti prejšnjih najdenih blokov. Tako se izračuna velikost datoteke:

MOV

Ta pogosto uporabljen format je tudi vsebnik MPEG-4. MOV uporablja lasten algoritem za stiskanje podatkov, ima podobno strukturo kot MP4 in se uporablja za iste namene – za shranjevanje avdio in video podatkov ter sorodnih materialov.
Tako kot MP4 ima vsaka datoteka mov 4-bajtni podpis ftyp pri odmiku 4, vendar ima naslednji podpis vrednost qt__ (71 74 20 20). Pravilo za izračun velikosti datoteke se ni spremenilo: od začetka datoteke izračunamo velikost naslednjega bloka in jo seštejemo.

Metoda preverjanja te skupine formatov za prisotnost »lepljivih« datotek je izračun velikosti v skladu z zgoraj navedenimi pravili in primerjava z velikostjo datoteke, ki se preverja. Če je trenutna velikost datoteke veliko manjša od izračunane, potem to kaže na dejstvo lepljenja. Pri preverjanju datotek AVI je sprejemljivo, da je lahko izračunana velikost manjša od velikosti datoteke zaradi prisotnosti dodanih ničel za poravnavo obrobe. V tem primeru je treba preveriti ničle po izračunani velikosti datoteke.

Preverjanje binarnega formata sestavljene datoteke

Ta oblika datoteke, ki jo je razvil Microsoft, je znana tudi kot OLE (Object Linking and Embedding) ali COM (Component Object Model). Datoteke DOC, XLS, PPT spadajo v skupino formatov CFB.

Datoteka CFB je sestavljena iz 512-bajtne glave in sektorjev enake dolžine, ki shranjujejo podatkovne tokove ali storitvene informacije. Vsak sektor ima svojo nenegativno številko, razen posebnih številk: "-1" - številči prosti sektor, "-2" - številči sektor, ki zapira verigo. Vse sektorske verige so definirane v tabeli FAT.

Predpostavimo, da je napadalec spremenil določeno datoteko .doc in na njen konec prilepil drugo datoteko. Nekaj ​​jih je na različne načine zaznati ali nakazati anomalijo v dokumentu.

Nenormalna velikost datoteke

Kot je navedeno zgoraj, je vsaka datoteka CFB sestavljena iz glave in sektorjev enake dolžine. Če želite izvedeti velikost sektorja, morate prebrati dvobajtno število na odmiku 30 od začetka datoteke in povečati 2 na potenco tega števila. To število mora biti enako 9 (0x0009) ali 12 (0x000C), velikost sektorja datoteke je 512 ali 4096 bajtov. Ko najdete sektor, morate preveriti naslednjo enakost:

(Velikost datoteke - 512) mod SectorSize = 0

Če ta enakost ni izpolnjena, lahko opozorite na dejstvo lepljenja datotek. Vendar ima ta metoda pomembno pomanjkljivost. Če napadalec pozna velikost sektorja, mora le prilepiti svojo datoteko in še dodatnih n bajtov, tako da je velikost prilepljenih podatkov večkratnik velikosti sektorja.

Neznana vrsta sektorja

Če napadalec ve za metodo za obhod prejšnjega preverjanja, potem ta metoda lahko zazna prisotnost sektorjev z nedefiniranimi vrstami.

Opredelimo enakost:

FileSize = 512 + CountReal * SectorSize, kjer je FileSize velikost datoteke, SectorSize je velikost sektorja, CountReal je število sektorjev.

Definiramo tudi naslednje spremenljivke:

  1. CountFat – število sektorjev FAT. Nahaja se na odmiku 44 od začetka datoteke (4 bajte);
  2. CountMiniFAT – število sektorjev MiniFAT. Nahaja se na odmiku 64 od začetka datoteke (4 bajte);
  3. CountDIFAT – število sektorjev DIFAT. Nahaja se na odmiku 72 od začetka datoteke (4 bajte);
  4. CountDE – število sektorjev vnosa imenika. Če želite najti to spremenljivko, morate najti prvi sektor DE, ki je na odmiku 48. Nato je treba pridobiti popolno predstavitev DE iz FAT in prešteti število sektorjev DE;
  5. CountStreams – število sektorjev s podatkovnimi tokovi;
  6. CountFree – število prostih sektorjev;
  7. CountClassified – število sektorjev z določeno vrsto;
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

Očitno je, da če sta CountClassified in CountReal neenaka, lahko sklepamo, da so lahko datoteke združene.

Šef mi je dal precej zanimivo nalogo. V kratkem času napisati analizator izvedljivih datotek, ki bi bil sposoben najti virusna telesa na podlagi podpisov in določiti uporabljeni pakirnik/kriptor. Končni prototip se je pojavil v nekaj urah.

Avtorjeva beseda

Analiza podpisa

Iskanje zlonamernega predmeta s pomočjo podpisov je nekaj, kar zmore vsak protivirusni program. Na splošno je podpis formaliziran opis določenih značilnosti, na podlagi katerih je mogoče ugotoviti, da je datoteka, ki se pregleduje, virus in to natančno definiran virus.

Tu so različne tehnike. Druga možnost je uporaba podpisa, sestavljenega iz N bajtov zlonamernega predmeta. V tem primeru ne morete narediti neumne primerjave, ampak primerjavo z uporabo neke maske (na primer iskanje bajtov EB ?? ?? CD 13). Ali pa nastavite dodatne pogoje, kot je "taki in drugačni bajti morajo biti na vstopni točki v program" ipd. Podpis zlonamerne programske opreme je posebna zadeva.

Na enak način so opisani nekateri znaki, po katerih je mogoče ugotoviti, da je izvedljiva datoteka pakirana z enim ali drugim kriptorjem ali pakirnikom (na primer banalni ASPack). Če ste pozorno prebrali našo revijo, potem ste zagotovo slišali za takšno orodje, kot je PEiD, ki je sposobno identificirati najpogosteje uporabljene pakirnike, kriptorje in prevajalnike (baza podatkov ima veliko število podpisov) za preneseno datoteko PE . Žal, nove različice programa že dolgo niso bile izdane, pred kratkim pa se je na uradni spletni strani pojavilo sporočilo, da projekt ne bo imel nadaljnjega razvoja. Škoda, ker bi mi zmožnosti PEiD (še posebej glede na sistem vtičnikov) lahko zelo koristile. Po kratki analizi je postalo jasno, da to ne pride v poštev. Toda po brskanju po angleško govorečih blogih sem hitro našel tisto, kar mi ustreza. Projekt YARA (code.google.com/p/yara-project).

Kaj je YARA?

Že od samega začetka sem bil prepričan, da nekje na internetu že obstaja odprtokodni razvoj, ki bi prevzel nalogo ugotavljanja ujemanja med določenim podpisom in datoteko, ki jo pregledujemo. Če bi našel takšen projekt, bi ga zlahka postavili na tirnice spletne aplikacije, dodali različne podpise in dobili, kar se od mene zahteva. Načrt se je začel zdeti še bolj realen, ko sem prebral opis projekta YARA.

Razvijalci ga postavljajo kot orodje za pomoč raziskovalcem zlonamerne programske opreme pri prepoznavanju in razvrščanju zlonamernih vzorcev. Raziskovalec lahko ustvari opise za različni tipi zlonamerna programska oprema, ki uporablja besedilne ali binarne vzorce, ki opisujejo formalizirane značilnosti zlonamerne programske opreme. Tako se pridobivajo podpisi. Pravzaprav je vsak opis sestavljen iz niza vrstic in nekega logičnega izraza, na podlagi katerega se določi prožilna logika analizatorja.

Če so za datoteko, ki se pregleduje, izpolnjeni pogoji enega od pravil, se ustrezno določi (na primer tak in tak črv). Preprost primer pravila za razumevanje, o čem govorimo:

pravilo tihi_bankir: bankir
{
meta:
description = "To je samo primer"
raven_niti = 3
v_divjini = res
nizi:
$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 ali $b ali $c
}

V tem pravilu YARA povemo, da mora biti vsaka datoteka, ki vsebuje vsaj enega od vzorčnih nizov, opisanih v spremenljivkah $a, $b, $c, razvrščena kot trojanec silent_banker. In to je zelo preprosto pravilo. V resnici so lahko pravila veliko bolj zapletena (o tem bomo govorili spodaj).
Že seznam projektov, ki ga uporabljajo, govori o avtoriteti projekta YARA in to je:

  • VirusTotal Malware Intelligence Services (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Opazujemo vaše spletno mesto (wewatchyourwebsite.com).

Vsa koda je napisana v Pythonu, uporabniku pa je na voljo sam modul za uporabo pri razvoju in preprosto izvršljiva datoteka za uporabo YARA kot samostojne aplikacije. Kot del svojega dela sem izbral prvo možnost, vendar bomo zaradi enostavnosti v tem članku analizator preprosto uporabili kot konzolno aplikacijo.

Po nekaj kopanja sem hitro ugotovil, kako napisati pravila za YARA, pa tudi, kako ji priložiti virusne podpise iz brezplačne programske opreme in paketov za pakiranje iz PEiD. Toda začeli bomo z namestitvijo.

Namestitev

Kot sem že rekel, je projekt napisan v Pythonu, tako da ga je enostavno namestiti na Linux, Windows in Mac. Sprva lahko vzamete samo dvojiško datoteko. Če aplikacijo pokličemo v konzoli, dobimo pravila za zagon.

$yara
uporaba: yara ... ... DATOTEKA | PID

To pomeni, da je format za klicanje programa naslednji: najprej je ime programa, nato seznam možnosti, po katerem je prikazana datoteka s pravili, in na samem koncu - ime datoteke, ki je pregledan (ali imenik, ki vsebuje datoteke), ali identifikator procesa. Zdaj bi rad na dober način razložil, kako so sestavljena prav ta pravila, vendar vas ne želim takoj obremenjevati s suhoparno teorijo. Zato bomo stvari naredili drugače in si izposodili podpise drugih ljudi, da bo YARA lahko opravila eno od nalog, ki smo si jih zadali - popolno odkrivanje virusov s podpisi.

Vaš lastni protivirusni program

Najpomembnejše vprašanje: kje dobiti bazo podpisov znanih virusov? Protivirusna podjetja med seboj aktivno delijo takšne podatkovne baze (nekatera bolj velikodušno, druga manj). Če sem iskren, sem sprva celo dvomil, da bi kje na internetu kdo odkrito objavljal takšne stvari. Toda, kot se je izkazalo, obstajajo dobri ljudje. Vsakomur je na voljo ustrezna baza priljubljenega antivirusa ClamAV (clamav.net/lang/sl). V razdelku »Najnovejša stabilna izdaja« najdete povezavo do Najnovejša različica protivirusni izdelek, kot tudi povezave za prenos zbirk podatkov o virusih ClamAV. Predvsem nas bosta zanimali datoteki main.cvd (db.local.clamav.net/main.cvd) in daily.cvd (db.local.clamav.net/daily.cvd).

Prva vsebuje glavno bazo podpisov, druga pa najpopolnejšo bazo podatkov ta trenutek osnova z raznimi dodatki. Za ta namen povsem zadostuje Daily.cvd, ki vsebuje več kot 100.000 prikazov zlonamerne programske opreme. Vendar baza podatkov ClamAV ni zbirka podatkov YARA, zato jo moramo pretvoriti v želeno obliko. Ampak kako? Navsezadnje še ne vemo ničesar niti o formatu ClamAV niti o formatu Yara. To težavo smo že rešili pred nami s pripravo majhnega skripta, ki pretvori bazo virusnih podpisov ClamAV v niz pravil YARA. Skript se imenuje clamav_to_yara.py in ga je napisal Matthew Richard (bit.ly/ij5HVs). Prenesite skript in pretvorite baze podatkov:

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

Posledično bomo v datoteki clamav.yara prejeli bazo podpisov, ki bo takoj pripravljena za uporabo. Preizkusimo zdaj kombinacijo YARA in baze podatkov ClamAV v akciji. Pregledovanje mape s podpisom se izvede z enim samim ukazom:

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

Možnost -r določa, da je treba pregled opraviti rekurzivno v vseh podmapah trenutne mape. Če so bila v mapi /pentest/msf3/data telesa virusa (vsaj tista, ki so v bazi podatkov ClamAV), bo YARA o tem takoj poročala. Načeloma je to že pripravljen skener podpisov. Za večjo priročnost sem napisal preprost skript, ki je preveril posodobitve baze podatkov ClamAV, prenesel nove podpise in jih pretvoril v format YARA. A to so že podrobnosti. En del naloge je opravljen, zdaj lahko začnete sestavljati pravila za identifikacijo pakirnikov/kriptorjev. Toda za to sem se moral malo ukvarjati z njimi.

Igrajte po pravilih

Torej, pravilo je glavni mehanizem programa, ki vam omogoča, da dano datoteko dodelite določeni kategoriji. Pravila so opisana v ločeni datoteki (ali datotekah) in so po videzu zelo podobna konstrukciji struct() iz jezika C/C++.

pravilo BadBoy
{
nizi:
$a = "win.exe"
$b = "http://foo.com/badfi le1.exe"
$c = "http://bar.com/badfi le2.exe"
stanje:
$a in ($b ali $c)
}

Načeloma pri pisanju pravil ni nič zapletenega. V tem članku sem se dotaknil le glavnih točk, podrobnosti pa boste našli v priročniku. Zaenkrat deset najpomembnejših točk:

1. Vsako pravilo se začne s ključno besedo pravilo, ki ji sledi identifikator pravila. Identifikatorji imajo lahko enaka imena kot spremenljivke v C/C++, kar pomeni, da so lahko sestavljeni iz črk in številk, prvi znak pa ne more biti številka. Največja dolžina ime identifikatorja - 128 znakov.

2. Običajno so pravila sestavljena iz dveh razdelkov: definicijskega razdelka (nizi) in pogojev (pogoj). Razdelek nizov podaja podatke, na podlagi katerih bo razdelek pogojev odločil, ali dana datoteka izpolnjuje določene pogoje.

3. Vsaka vrstica v razdelku z nizi ima svoj identifikator, ki se začne z znakom $ - na splošno kot deklaracija spremenljivke v PHP. YARA podpira navadne nize, zaprte v dvojni narekovaji("") in šestnajstiški nizi, priloženi naramnice(()), pa tudi regularne izraze:

$my_text_string = "besedilo tukaj"
$my_hex_string = ( E2 34 A1 C8 23 FB )

4. Razdelek s pogoji vsebuje vso logiko pravila. Ta razdelek mora vsebovati logični izraz, ki določa, kdaj se datoteka ali proces ujema s pravilom. Običajno se ta razdelek nanaša na predhodno deklarirane vrstice. In identifikator niza se obravnava kot logična spremenljivka, ki vrne true, če je bil niz najden v datoteki ali pomnilniku procesa, in false v nasprotnem primeru. Zgornje pravilo določa, da morajo biti datoteke in procesi, ki vsebujejo niz win.exe in enega od dveh URL-jev, kategorizirani kot BadBoy (po imenu pravila).

5. Šestnajstiški nizi omogočajo tri konstrukte, ki jih naredijo bolj prilagodljive: nadomestne znake, skoke in alternative. Zamenjave so mesta v nizu, ki so neznana in jih je mogoče nadomestiti s poljubno vrednostjo. Označeni so s simbolom “?”:

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

Ta pristop je zelo priročen pri podajanju nizov, katerih dolžina je znana, vsebina pa se lahko razlikuje. Če je lahko del niza različnih dolžin, je priročno uporabiti obsege:

$hex_niz = ( F4 23 62 B4 )

Ta vnos pomeni, da je na sredini vrstice lahko od 4 do 6 različnih bajtov. Uporabite lahko tudi alternativno izbiro:

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

To pomeni, da je namesto tretjega bajta lahko 62 B4 ali 56, tak vnos ustreza vrsticam F42362B445 ali F4235645.

6. Za preverjanje, ali je dani niz na določenem odmiku v naslovnem prostoru datoteke ali procesa, se uporabi operator at:

$a pri 100 in $b pri 200

Če je niz lahko znotraj določenega obsega naslovov, se uporabi operator in:

$a v (0..100) in $b v (velikost 100..fi)

Včasih se pojavijo situacije, ko morate določiti, da mora datoteka vsebovati določeno število iz danega nabora. To se naredi z uporabo operatorja of:

pravilo Primera1
{
nizi:
$foo1 = "dummy1"
$foo2 = "dummy2"
$foo3 = "dummy3"
stanje:
2 od ($foo1,$foo2,$foo3)
}

Zgornje pravilo zahteva, da datoteka vsebuje kateri koli dve vrstici iz niza ($foo1,$foo2,$foo3). Namesto podajanja določenega števila vrstic v datoteki lahko uporabite spremenljivki any (vsaj ena vrstica iz danega niza) in all (vse vrstice iz danega niza).

7. No, zadnja zanimiva možnost, ki jo je treba upoštevati, je uporaba enega pogoja za več vrstic. Ta funkcija je zelo podobna operatorju of, le močnejši je operator for..of:

za izraz string_set: (boolean_expression)

Ta vnos je treba brati takole: od nizov, določenih v nizu string_set, morajo vsaj deli izraza izpolnjevati pogoj boolean_expression. Ali z drugimi besedami: logični_izraz je ovrednoten za vsak niz v nizu_nizov in izrazi iz njih morajo vrniti True. Nato si bomo to konstrukcijo ogledali na posebnem primeru.

Izdelava PEiD

Torej, ko je vse postalo bolj ali manj jasno s pravili, lahko začnemo izvajati detektor pakirnikov in kriptorjev v našem projektu. Sprva sem si kot izvorni material sposodil podpise znanih pakirnikov iz istega PEiD. V mapi plugins je datoteka userdb.txt, v kateri je tisto, kar potrebujemo. V moji bazi je bilo 1850 podpisov.

Kar veliko, zato vam svetujem, da jih v celoti uvozite, da napišete nekakšen skript. Format te zbirke podatkov je preprost - uporablja se običajni besedilna datoteka, ki shranjuje zapise, kot so:


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 = res

Prva vrstica podaja ime pakirnika, ki bo prikazan v PEiD, vendar bo za nas identifikator pravila. Drugi je podpis sam. Tretja je zastavica ep_only, ki označuje, ali naj dano vrstico išče samo na naslovu vstopne točke ali po celotni datoteki.

No, poskusimo ustvariti pravilo, recimo, za ASPack? Kot se je izkazalo, v tem ni nič zapletenega. Najprej ustvarimo datoteko za shranjevanje pravil in jo poimenujmo na primer packers.yara. Nato v zbirki podatkov PEiD poiščemo vse podpise, ki v svojih imenih vsebujejo ASPack, in jih prenesemo v pravilo:

pravilo ASPack
{
nizi:
$ = ( 60 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? (43 | 44) ?? B8 ?? ?? (43 | 44) ?? 03 C5 )
$ = (60 EB ?? 5D EB ?? FF ?? ?? ?? ?? ?? E9)
[.. rez..]
$ = ( 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 )
stanje:
za katerega koli od njih: ($na vstopni točki)
}

Vsi najdeni zapisi imajo zastavico ep_only nastavljeno na true, kar pomeni, da se morajo te vrstice nahajati na naslovu vstopne točke. Zato zapišemo naslednji pogoj: "za katerega koli od njih: ($na vstopni točki)".

Tako bo prisotnost vsaj ene od danih vrstic na naslovu vstopne točke pomenila, da je datoteka pakirana z ASPack. Upoštevajte tudi, da so v tem pravilu vse vrstice navedene preprosto z znakom $, brez identifikatorja. To je mogoče, ker v rubriki pogojev ne dostopamo do določenih, ampak uporabljamo celoten nabor.

Če želite preveriti delovanje nastalega sistema, preprosto zaženite ukaz v konzoli:

$ yara -r pakerji.yara somefi le.exe

Ko sem tam napolnil nekaj aplikacij, pakiranih z ASPackom, sem bil prepričan, da vse deluje!

Pripravljen prototip

YARA se je izkazala za izjemno jasno in pregledno orodje. Ni mi bilo težko napisati spletnega skrbnika zanj in ga nastaviti, da deluje kot spletna storitev. Z malo kreativnosti so suhoparni rezultati analizatorja že obarvani v različne barve, kar kaže na stopnjo nevarnosti zaznane zlonamerne programske opreme. Majhna posodobitev baze podatkov in za številne kriptorje je na voljo kratek opis in včasih celo navodila za razpakiranje. Prototip je ustvarjen in deluje odlično, šefi pa plešejo od navdušenja!

Funkcijska koda (FC) v glavi telegrama identificira vrsto telegrama, kot je telegram zahteve (zahteva ali pošiljanje/zahteva) in telegram potrditve ali odziva (okvir potrditve, okvir odziva). Poleg tega koda funkcije vsebuje dejansko funkcijo prenosa in informacije o nadzoru, ki preprečujejo izgubo in podvajanje sporočil, ali tip postaje s statusom FDL.

7 6 5 4 3 2 1 0 FC: Zahteva za kodo funkcije
1 Zahtevaj Telegram
X FCV = izmenični bit vklopljen
X href=”http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit”>FCB = Izmenični bit (iz števila sličic)
1 0 (0x0) CV = vrednost ure ()
1 drugo Rezervirano
0 0 (0x0) TE = časovni dogodek (sinhronizacija ure)
0 3 (0x3) SDA_LOW = Pošiljanje podatkov potrjeno - nizka prioriteta
0 4 (0x4) SDN_LOW = Pošiljanje podatkov ni potrjeno - nizka prioriteta
0 5 (0x5) SDA_HIGH = Pošiljanje podatkov potrjeno - visoka prioriteta
0 6 (0x6) SDN_HIGH = Pošiljanje podatkov ni potrjeno
0 7 (0x7) MSRD = Pošlji podatke zahteve z večodprtim odgovorom
0 9 (0x9) Zahtevaj status FDL
0 12(0xC) SRD low = pošiljanje in zahtevanje podatkov
0 13 (0xD) SRD visoko = pošiljanje in zahtevanje podatkov
0 14(0xE) Ident zahteve z odgovorom
0 15 (0xF) Zahtevaj status LSAP z odgovorom 1)
0 drugo Rezervirano

1) ta vrednost v zadnji različici standarda ni več definirana, temveč samo rezervirana

7 6 5 4 3 2 1 0 FC: Odziv funkcijske kode
0 Odzivni telegram
0 Rezervirano
0 0 Suženj
0 1 Mojster ni pripravljen
1 0 Master pripravljen, brez žetona
1 1 Master pripravljen, v token ringu
0 (0x0) v redu
1 (0x1) UE = uporabniška napaka
2 (0x2) RR = Ni sredstev
3 (0x3) RS = SAP ni omogočen
8 (0x8) DL = Nizka količina podatkov (običajen primer z DP)
9 (0x9) NR = Podatki o odzivu niso pripravljeni
10(0xA) DH = podatki visoki (DP diagnoza v teku)
12(0xC) RDL = podatki niso prejeti in podatkov je malo
13 (0xD) RDH = podatki niso prejeti in podatki visoki
drugo Rezervirano

Bit za štetje okvirjev Bit za štetje okvirjev FCB ​​(b5) preprečuje podvajanje sporočil s strani potrditvene ali odzivne postaje (odzivnik) in kakršno koli izgubo s strani klicne postaje (iniciator). Pri tem so izvzete zahteve brez potrditve (SDN) in zahteve za status FDL, Ident in status LSAP.

Za varnostno zaporedje mora pobudnik nositi FCB za vsakega odzivnika. Ko je telegram z zahtevo (Zahteva ali Pošlji/Zahteva) prvič poslan odzivniku ali če je ponovno poslan odzivniku, ki je trenutno označen kot nedelujoč, mora biti FCB nastavljen, kot je definiran v odzivniku. Pobudnik to doseže v telegramu Request s FCV=0 in FCB=1. Odzivnik mora telegram te vrste oceniti kot prvi cikel sporočila in shraniti FCB=1 skupaj z naslovom iniciatorja (SA) (glejte naslednjo tabelo). Tega cikla sporočila pobudnik ne bo ponovil. Pri naslednjih telegramih z zahtevo istemu odzivniku mora pobudnik nastaviti FCV=1 in spremeniti FCB z vsakim novim telegramom z zahtevo. Vsak odzivnik, ki prejme telegram z zahtevo, naslovljen nanj s FCV=1, mora oceniti FCB. Če se je FCB spremenil v primerjavi z zadnjim telegramom Zahtevek od istega pobudnika (istega SA), je to veljavna potrditev, da je bil prejšnji cikel sporočil pravilno zaključen. Če telegram zahteve izvira od drugega pobudnika (drugega SA), vrednotenje FCB ni več potrebno. V obeh primerih mora pošiljatelj shraniti FCB z izvornim SA do prejema novega telegrama, naslovljenega nanj. V primeru izgubljenega ali okvarjenega potrditvenega ali odgovornega telegrama pobudnik ne sme spremeniti FCB pri ponovnem poskusu zahteve: to bo pomenilo, da je bil prejšnji cikel sporočila napačen. Če odzivnik prejme telegram zahteve s FCV=1 in enakim FCB kot zadnji telegram zahteve od istega pobudnika (isti SA), bo to pomenilo ponovni poskus zahteve. Pozivnik mora ponovno poslati potrditveni ali odzivni telegram, ki je v pripravljenosti. Do zgoraj omenjene potrditve ali prejema telegrama z drugačnim naslovom (SA ali DA), ki ni potrjen (Send Data with No Acknowledge, SDN), mora pošiljatelj zadnji potrditveni ali odzivni telegram držati v pripravljenosti za morebiten ponovni poskus zahteve. . V primeru telegramov z zahtevami, ki niso potrjeni in imajo status FDL zahteve, Ident in status LSAP, FCV=0 in FCB=0; ocena s strani respondenta ni več potrebna.

b5 b4 Bitni položaj
FCB FCV Pogoj Pomen Akcija
0 0 DA = TS/127 Zahteva brez potrditve
Zahtevaj status FDL/identifikator/status LSAP
Izbriši zadnjo potrditev
0/1 0/1 DA#TS Zahteva drugemu odzivniku
1 0 DA = TS Prva zahteva FCBM:= 1
SAM:=SA
Izbriši zadnjo potrditev/odgovor
0/1 1 DA = TS
SA = SAM
FCB#FCBM
Nova zahteva Izbriši zadnjo potrditev/odgovor
FCBM:=FCB
Zadrži potrditev/odgovor v pripravljenosti za ponovni poskus
0/1 1 DA = TS
SA = SAM
FCB = FCBM
Poskusi znova FCBM:=FCB
Ponovite potrditev/odziv in nadaljujte s pripravljenostjo
0/1 1 DA = TS
SA#SAM
Nov pobudnik FCBM:=FCB
SAM:= SA Zadrži potrditev/odgovor v pripravljenosti za ponovni poskus

FCBM shranjen FCB v pomnilniku SAM shranjen SA v pomnilniku




Vrh