Mukautetun tunnetun tiedostotyypin luominen R-Studiolle. Tiedostotyypin määrittäminen allekirjoituksella Mikä on tiedoston allekirjoitus

käsite " maaginen numero"ohjelmoinnissa on kolme merkitystä:

  • Tietojen allekirjoitus
  • Erottuvat yksilölliset arvot, jotka eivät saa olla samoja kuin muut arvot (kuten UUID)
  • Huono ohjelmointikäytäntö.

Tietojen allekirjoitus

maaginen numero, tai allekirjoitus, on kokonaisluku- tai tekstivakio, jota käytetään yksilöimään resurssi tai data. Tällaisella numerolla ei sinänsä ole mitään merkitystä ja se voi aiheuttaa hämmennystä, jos se esiintyy ohjelmakoodissa ilman asianmukaista kontekstia tai kommenttia, kun taas yritys muuttaa se toiseksi, jopa lähellä arvoa, voi johtaa täysin arvaamattomiin seurauksiin. Tästä syystä tällaisia ​​numeroita on ironisesti kutsuttu maagisiksi numeroiksi. Tällä hetkellä tämä nimi on lujasti juurtunut termiksi. Esimerkiksi mikä tahansa käännetty Java-kieliluokka alkaa heksadesimaaliluvulla "maaginen luku" 0xCAFEBABE . Toinen laajalti tunnettu esimerkki on mikä tahansa suoritettava tiedosto OS Microsoft Windows.exe-laajennuksella alkaa tavusekvenssi 0x4D5A (joka vastaa ASCII-merkkejä MZ - Mark Zbikowskin, yhden MS-DOSin luojista, nimikirjaimet). Vähemmän tunnettu esimerkki on alustamaton osoitin Microsoft Visual C++:ssa (Microsoft Visual Studion vuodesta 2005 lähtien), joka on 0xDEADBEEF virheenkorjaustilassa.

UNIX-tyyppisessä muodossa käyttöjärjestelmät tiedoston tyyppi määräytyy yleensä tiedoston allekirjoituksen mukaan, riippumatta sen nimen laajennuksesta. Ne tarjoavat tavallisen tiedostoapuohjelman tiedoston allekirjoituksen tulkitsemiseen.

Huono ohjelmointikäytäntö

Myös "maagiset numerot" on huono ohjelmointikäytäntö, kun lähdetekstissä esiintyy numeerinen arvo eikä ole selvää, mitä se tarkoittaa. Esimerkiksi tällainen Java-kielellä kirjoitettu katkelma olisi huono:

drawSprite(53, 320, 240);

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

Nyt se on selvää: tämä viiva näyttää sprite näytön keskellä - tähtäimen hiusristikko. Useimmissa ohjelmointikielissä kaikki tällaisille vakioille käytetyt arvot lasketaan käännöshetkellä ja korvataan paikkoihin, joissa arvoja käytetään. Siksi tällainen muutos lähdetekstissä ei heikennä ohjelman suorituskykyä.

Lisäksi maagiset numerot ovat mahdollinen virhelähde ohjelmassa:

  • Jos samaa maagista numeroa käytetään useammin kuin kerran ohjelmassa (tai sitä voitaisiin mahdollisesti käyttää), sen muuttaminen edellyttää jokaisen esiintymän muokkaamista (eikä vain nimetyn vakion arvon muokkaamista). Jos kaikkia tapahtumia ei korjata, tapahtuu vähintään yksi virhe.
  • Ainakin yhdessä tapauksessa maaginen numero voi olla aluksi kirjoitettu väärin, ja tämä on melko vaikea havaita.
  • Maaginen luku voi riippua implisiittisestä parametrista tai muusta maagisesta numerosta. Jos nämä riippuvuudet, joita ei ole nimenomaisesti tunnistettu, eivät täyty, tapahtuu vähintään yksi virhe.
  • Muutamalla yhden maagisen luvun esiintymiä on mahdollista muuttaa virheellisesti toista maagista numeroa, joka on riippumaton mutta jolla on sama numeerinen arvo.

Maagiset numerot ja cross-platform

Joskus maagiset numerot vahingoittavat alustojen välistä koodia. Asia on siinä, että C:ssä 32- ja 64-bittisissä käyttöjärjestelmissä char , short ja long long -tyyppien koko on taattu, kun taas int , long , size_t ja ptrdiff_t koot voivat muuttua (kahdelle ensimmäiselle - riippuen kääntäjien kehittäjien mieltymykset). , kahdelle viimeiselle - riippuen kohdejärjestelmän bittisyvyydestä). Vanhassa tai huonosti kirjoitetussa koodissa voi olla "maagisia numeroita", jotka osoittavat tyypin koon - siirryttäessä koneisiin, joiden bittimäärä on erilainen, ne voivat johtaa hienovaraisiin virheisiin.

Esimerkiksi:

const size_t NUMBER_OF_ELEMENTS = 10 ; pitkä a [ NUMBER_OF_ELEMENTS ]; memset(a, 0, 10*4); // väärin - pitkän oletetaan olevan 4 tavua, käytetään taianomaista elementtimäärää memset(a , 0 , NUMBER_OF_ELEMENTS * 4 ); // väärin - pitkän oletetaan olevan 4 tavua memset(a , 0 , NUMBER_OF_ELEMENTS * koko (pitkä )); // ei täysin oikein - tyypin nimen kopiointi (jos tyyppi muuttuu, sinun on vaihdettava se myös täällä) memset (a , 0 , NUMBER_OF_ELEMENTS * koko (a [ 0 ])); // oikea, optimaalinen nollasta poikkeaville dynaamisille taulukoille memset(a , 0 , koko(a )); // oikein, optimaalinen staattisille taulukoille

Numerot, jotka eivät ole maagisia

Kaikkia lukuja ei tarvitse muuntaa vakioiksi. Esimerkiksi koodi

Tunnetun tyyppisten tiedostojen skannaus (tai, kuten usein sanotaan, tiedostojen etsiminen allekirjoitusten perusteella) on yksi tehokkaimmista R-Studio-tietojen palautusapuohjelmassa käytetyistä. Tietyn allekirjoituksen avulla voit palauttaa tietyn tyyppiset tiedostot siinä tapauksessa, että tiedot hakemistorakenteesta ja tiedostonimistä puuttuvat osittain tai kokonaan (vioittuneet).

Yleensä levyosiotaulukkoa käytetään tiedostojen sijainnin määrittämiseen. Jos vertaamme levyä kirjaan, osiotaulukko on samanlainen kuin sen sisällysluettelo. Skannauksen aikana R-Studio etsii tunnetun tyyppisiä tiedostoja levyosiotaulukosta tiettyjen ennalta määritettyjen allekirjoitusten mukaisesti. Tämä on mahdollista, koska käytännössä jokaisella tiedostotyypillä on ainutlaatuinen allekirjoitus tai tietokuvio. Tiedoston allekirjoitukset sijaitsevat tietyssä paikassa tiedoston alussa ja monissa tapauksissa myös tiedoston lopussa. Skannauksen aikana R-Studio yhdistää löydetyt tiedot tunnetun tyyppisten tiedostojen allekirjoituksiin, mikä mahdollistaa niiden tunnistamisen ja niiden tietojen palauttamisen.

Tunnettujen tiedostotyyppien skannaustekniikan avulla R-Studio mahdollistaa tietojen palauttamisen levyiltä, ​​jotka on alustettu uudelleen ja joiden osiotaulukot on korvattu. Lisäksi, jos levyosio korvataan, vioittuu tai poistetaan, tunnettujen tiedostotyyppien tarkistaminen on ainoa mahdollinen vaihtoehto.

Mutta melkein kaikella ja kaikella on haittapuolensa, eivätkä R-Studiossa käytetyt tunnetun tyyppiset tiedostot ole poikkeus. Joten kun skannaat tunnetun tyyppisiä tiedostoja, R-Studio antaa sinun palauttaa vain fragmentoimattomat tiedostot, mutta kuten jo mainittiin, tämä on useimmissa tapauksissa viimeinen mahdollinen menetelmä.

R-Studio sisältää jo allekirjoitukset yleisimmille tiedostotyypeille (katso täydellinen lista tunnetut tiedostotyypit, katso R-Studion online-ohje.)

Tarvittaessa käyttäjä voi lisätä uudentyyppisiä tiedostoja R-Studioon. Jos esimerkiksi haluat löytää ainutlaatuisen tyyppisiä tiedostoja tai niitä, jotka on kehitetty R-Studion viimeisen julkaisupäivän jälkeen, voit lisätä omia allekirjoituksiasi tunnetun tyyppisiin tiedostoihin. Tästä prosessista keskustellaan seuraavaksi.

Tunnetun tyyppiset käyttäjätiedostot
Tunnettujen tiedostotyyppien käyttäjien allekirjoitukset tallennetaan XML-tiedosto e määritetty Asetukset-valintaikkunassa. Allekirjoituksen lisääminen koostuu kahdesta osasta:

  1. Tiedoston alussa ja, jos sellainen on, tiedoston lopussa sijaitsevan tiedoston allekirjoituksen määrittäminen.
  2. Luodaan XML-tiedosto, joka sisältää tiedoston allekirjoituksen ja muita tietoja tiedostotyypistä.

Kaikki tämä voidaan tehdä R-Studion avulla. Samanaikaisesti sinun ei tarvitse olla asiantuntija XML-dokumenttien kokoamisen (muokkauksen) tai heksadesimaalien muokkauksen alalla - tässä käsikirjassa (artikkelissa), joka on suunnattu lähtötaso, tämän prosessin kaikkia vaiheita tarkastellaan yksityiskohtaisesti.

Esimerkki: Allekirjoituksen lisääminen MP4-tiedostolle (XDCam-EX Codec)
Harkitse tiedostoallekirjoituksen lisäämistä käyttämällä esimerkkiä .MP4-tiedostosta, joka on luotu Sony XDCAM-EX:llä. Sitä voidaan käyttää esimerkiksi SD-kortin vaurioituessa, jota et ole vielä onnistunut tallentamaan tietokoneen kiintolevylle.

Ensimmäinen vaihe: Tiedoston allekirjoituksen määrittäminen
Voit määrittää tiedoston allekirjoituksen tarkastelemalla esimerkkejä samanmuotoisista tiedostoista.

Olkoon nämä neljä videotiedostoa Sony XDCAM-EX:ltä:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

Harkinnan helpottamiseksi olkoon nämä pieniä tiedostoja. Suurempia tiedostoja on vaikea tarkastella heksadesimaalimuodossa.

1. Avaa tiedostot R-Studiossa. Voit tehdä tämän napsauttamalla kutakin tiedostoa hiiren kakkospainikkeella ja valitsemalla pikavalikosta Näytä/muokkaa.

2. Vertaa tiedostoja. Etsimme samaa mallia, joka löytyy kaikista neljästä tiedostosta. Hän tulee olemaan tiedoston allekirjoitus. Yleensä tiedoston allekirjoitukset sijaitsevat tiedoston alussa, mutta joskus lopussa.

3. Määritä tiedoston allekirjoitus tiedoston alkuun. Esimerkissämme se sijaitsee aivan tiedoston alussa. Huomaa, että näin ei aina ole – usein tiedoston allekirjoitus on tiedoston alussa, mutta ei ensimmäisellä rivillä (offset).

Alla olevista kuvista seuraa, että kaikkien neljän tiedoston sisältö on erilainen, mutta ne kaikki alkavat samalla tiedostoallekirjoituksella.


Klikkaa kuvaa suurentaaksesi sen


Klikkaa kuvaa suurentaaksesi sen


Klikkaa kuvaa suurentaaksesi sen


Klikkaa kuvaa suurentaaksesi sen

Kuvien valittu alue on tiedoston allekirjoitus tämän tyyppistä tiedostot. Se esitetään sekä tekstinä että heksadesimaalimuodossa.

Tekstimuodossa tiedoston allekirjoituksella on seuraava muoto:
....ftypmp42....mp42.......ilmainen

Pisteet (.) osoittavat merkkejä, joita ei voida esittää tekstinä. Siksi on myös tarpeen antaa tiedoston allekirjoituksen heksadesimaalimuoto:
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. Määrittelemme samalla tavalla tiedoston allekirjoituksen, mutta aivan tiedoston lopussa. Se voi olla eri tiedoston allekirjoitus, eri pituus.

Alla olevat kuvat korostavat tiedoston allekirjoitusta tiedoston lopussa:


Klikkaa kuvaa suurentaaksesi sen


Klikkaa kuvaa suurentaaksesi sen


Klikkaa kuvaa suurentaaksesi sen


Klikkaa kuvaa suurentaaksesi sen

Huomaa, että valintaa edeltävät tiedot (tiedoston allekirjoitus) ovat samat kaikissa neljässä tiedostossa. Nämä ovat teknisiä tietoja, jotka eivät ole tiedoston allekirjoitusta, vaan osoittavat, että kaikki neljä kuvaa (tiedostoa) on otettu samalla kameralla samoilla parametreilla. Tiedoston allekirjoituksesta on yleensä mahdollista erottaa tekniset tiedot vastaavat kuviot. Esimerkissämme viimeisellä rivillä ennen tiedoston allekirjoituksen alkua näemme tekstin ‘RecordingMode type=”normal”’, joka osoittaa selvästi, että kyseessä on jonkinlainen tiedostoparametri, ei allekirjoitus. Kiinnitä aina erityistä huomiota tähän riviin, jotta et sisällytä sitä vahingossa tekninen informaatio tiedoston allekirjoituksessa.

Meidän tapauksessamme tiedoston allekirjoitus on seuraava teksti:
...
Muista, että pisteet tarkoittavat merkkejä, joita ei voida esittää tekstimuodossa.

Heksadesimaalimuodossa tiedoston allekirjoitus on:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Huomaa: allekirjoitus ei aina ole tiedoston lopussa.

Toinen vaihe: Luo XML-tiedosto, joka kuvaa tunnetun tiedostotyypin
Nyt kun olet määrittänyt tiedoston allekirjoituksen, voit luoda XML-tiedoston ja sisällyttää vastaavan tiedostotyypin R-Studioon. Tämä voidaan tehdä kahdella tavalla:

2.1 Sisäänrakennetun käyttö graafinen editori tiedostojen allekirjoitukset:
Valitse Työkalut-valikosta Asetukset, napsauta avautuvassa Asetukset-valintaikkunassa Tunnetut tiedostotyypit -välilehteä ja napsauta sitten Muokkaa käyttäjän tiedostotyyppejä -painiketta.

Klikkaa kuvaa suurentaaksesi sen

Napsauta Luo tiedostotyyppi -painiketta Muokkaa käyttäjän tiedostotyyppejä -valintaikkunassa.
Aseta seuraavat vaihtoehdot:

  • Id - ainutlaatuinen digitaalinen tunniste. Annettu numero valitaan mielivaltaisesti; Ainoa asia on, että se ei saa vastata minkään muun tiedostotyypin numeerista tunnusta.
  • Ryhmän kuvaus - ryhmä, jossa löydetyt tiedostot sijaitsevat R-Studiossa. Voit asettaa kumman tahansa uusi ryhmä tai valitse jokin jo olemassa olevista. Meille se tulee olemaan ryhmä "Multimedia Video (Multimedia: Video)".
  • Kuvaus- Lyhyt kuvaus tiedostotyyppi. Esimerkissämme voit käyttää esimerkiksi "Sony cam video, XDCam-EX".
  • Extension - tämän tyyppinen tiedostopääte. Meidän tapauksessamme - mp4.

Ominaisuudet-parametri on valinnainen, meidän tapauksessamme meidän ei tarvitse käyttää sitä.

Klikkaa kuvaa suurentaaksesi sen

Seuraavaksi sinun on syötettävä tiedoston ensimmäinen ja viimeinen allekirjoitus. Voit tehdä tämän valitsemalla Aloita (Aloita) ja sitten sisään kontekstivalikko Lisää allekirjoitus -komento.

Klikkaa kuvaa suurentaaksesi sen

Kaksoisnapsauta sitten kenttää<пустая сигнатура> () ja kirjoita sopiva teksti.

Klikkaa kuvaa suurentaaksesi sen

Luo sitten lopullinen tiedoston allekirjoitus. Muista kirjoittaa Lähettäjä-sarakkeeseen 21.

Klikkaa kuvaa suurentaaksesi sen

Olet onnistuneesti luonut oman tunnetun tyyppisen tiedostoallekirjoituksen.

Nyt meidän on pelastettava se. On kaksi tapaa: voit joko tallentaa sen oletustiedostoon, joka on määritetty Asetukset-valintaikkunan Pää-välilehdellä napsauttamalla Tallenna-painiketta. Tai napsauta Tallenna nimellä... -painiketta ja tallenna allekirjoitus johonkin toiseen tiedostoon.

2.2 Tunnettua tiedostotyyppiä kuvaavan XML-tiedoston luominen manuaalisesti:
Luomiseen annettu tiedosto Käytetään XML-versiota 1.0 ja UTF-8-koodausta. Älä ole epätoivoinen, jos et tiedä mitä se on - avaa mikä tahansa tekstieditori(esimerkiksi Notepad.exe) ja kirjoita ensimmäiselle riville seuraava teksti:

Seuraavaksi luomme XML-tunnisteen, joka määrittää tiedostotyypin (FileType). Kun otetaan huomioon aiemmin kuvatut XML-attribuutit, tagi näyttää tältä:

Aseta se heti sen jälkeen

Seuraavaksi määritämme tiedoston allekirjoituksen (tunniste ). Ensimmäinen allekirjoitus (tiedoston alussa) on tagin sisällä ilman mitään attribuutteja. Käytämme allekirjoituksen tekstimuotoa, mutta samalla korvaamme heksadesimaalimerkeillä, joita ei voida esittää tekstimuodossa. Lisää ennen jokaista heksadesimaalimerkkiä "\x" Eli tagi tiedoston allekirjoituksella näyttäisi tältä:

Jos se on olemassa, sinun on myös määritettävä lopullinen allekirjoitus (tiedoston lopussa). Tätä varten käytetään samaa tunnistetta, mutta "from"-elementillä ja "end"-attribuutilla. Se näyttää tältä:

Muista, että tiedoston lopullisessa allekirjoituksessa ei ollut muita kuin tekstimerkkejä, mutta siellä oli vinoviivaa ja kolmiosulkeita. Sekaannusten ja virheiden välttämiseksi XML-syntaksissa korvaamme merkit "/", "<" и ">" heksadesimaaliarvoineen.

Lopussa, tiedostojen allekirjoitusten jälkeen, on oltava sulkevat FileType- ja FileTypeList-tunnisteet:

Joten koko tiedoston pitäisi näyttää tältä:


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

Muista: XML-syntaksi on isot ja pienet kirjaimet erotteleva, joten oikea tagi on , mutta ei .

Tallennetaan tiedosto tekstimuodossa .xml-tunnisteella. Esimerkiksi: SonyCam.xml.

Olemme onnistuneesti luoneet oman tunnetun tyyppisen tiedostoallekirjoituksen. Tämä esimerkki riittää ymmärtämään mukautetun tiedostotyypin luomisen perusperiaatteet. Kokeneemmat käyttäjät voivat käyttää XML-versiota 2.0. Voit lukea tästä lisää R-Studion online-ohjeista.

Vaihe 3: Tunnettua tiedostotyyppiä kuvaavan tiedoston tarkistaminen ja lisääminen
Seuraava vaihe on lisätä (ladata) XML-tiedostosi R-Studioon. Sen jälkeen se tarkistetaan automaattisesti.

Ladataan edellisessä vaiheessa luotu XML-tiedosto R-Studioon. Voit tehdä tämän valitsemalla Työkalut-valikosta Asetukset. Lisää Asetukset-valintaikkunan Pää-välilehden Käyttäjän tiedostotyypit -alueelle luomamme XML-tiedosto (SonyCam.xml). Napsauta Käytä-painiketta.

Klikkaa kuvaa suurentaaksesi sen

2. Vastaa Kyllä (Kyllä) pyyntöön ladata uusi tiedostotyyppi.

Klikkaa kuvaa suurentaaksesi sen

3. Varmistaaksesi, että tiedostotyyppi on ladattu onnistuneesti, napsauta Asetukset-valintaikkunan Tunnetut tiedostotyypit -välilehteä. Muista, että lisäsimme tiedostotyypin Multimedia Video -ryhmään (Multimedia: Video). Kun tätä ryhmää (kansiota) laajennetaan, meidän pitäisi nähdä elementti, jonka kuvaus määritimme XML-tiedostoa luotaessa: Sony cam video, XDCam-EX (.mp4).

Klikkaa kuvaa suurentaaksesi sen


Klikkaa kuvaa suurentaaksesi sen

Jos tiedoston syntaksissa on virheitä, näet vastaavan viestin:

Klikkaa kuvaa suurentaaksesi sen

Tarkista tässä tapauksessa XML-tiedostosi uudelleen virheiden varalta. Muista, että XML-syntaksi on isot ja pienet kirjaimet erotteleva ja jokaisen tagin lopussa on oltava sulkeva tagi.

Vaihe 4: Tunnettua tiedostotyyppiä kuvaavan tiedoston testaus
Tarkistaaksemme, onko luomamme mukautettu tiedostotyyppi oikea, yritämme löytää .mp4-tiedostomme siirrettävältä USB-muistitikulta.

1. Suorita Windows Vista- tai Windows 7 -käyttöjärjestelmässä levyn täydellinen (ei nopea) alustaminen tai käytä levytilan puhdistusapuohjelmaa (esimerkiksi R-Wipe & Clean) täydellinen poisto kaikki tiedot levyllä. Antaa USB-levy alustettu FAT32:ssa (vaadittujen tiedostojen koko ei ylitä 2 Gt).

2. Kopioi testitiedostot levylle ja käynnistä tietokone uudelleen niin, että välimuistin sisältö tallennetaan levylle. Voit myös sammuttaa ulkoinen asema ja liitä se sitten uudelleen.

3. Käyttöjärjestelmässä asema määritellään esimerkiksi loogiseksi asemaksi F:\.

4. Suorita R-Studio. Valitse asemamme (F:\) ja napsauta Skannaa-painiketta

Klikkaa kuvaa suurentaaksesi sen

5. Napsauta Skannaus-valintaikkunan Tiedostojärjestelmä-alueella Muuta...-painiketta ja tyhjennä kaikki valintaruudut. Tällä tavalla poistamme tiedostojärjestelmien ja tiedostojen haun osiotaulukon avulla käytöstä.
Klikkaa kuvaa suurentaaksesi sen

6. Valitse Tunnettujen tiedostotyyppien lisähaku -ruutu. Näin R-Studio voi etsiä tunnettuja tiedostotyyppejä.

7. Aloita skannaus napsauttamalla Skannaa-painiketta.

8. Odota, kun R-Studio skannaa levyn. Skannaustiedot-välilehti näyttää skannauksen edistymisen.


Klikkaa kuvaa suurentaaksesi sen

9. Kun skannaus on valmis, valitse Extra Found Files -kohde ja kaksoisnapsauta sitä.


Klikkaa kuvaa suurentaaksesi sen

10. Testitiedostomme sijaitsevat Sony cam -videossa, XDCam-EX-kansiossa (tai kansiossa, jolla on jokin muu nimi, joka vastaa toisessa vaiheessa määritettyä tiedostotyypin kuvausta).


Klikkaa kuvaa suurentaaksesi sen

Voit nähdä, että tiedostonimiä, päivämääriä ja sijainteja (kansioita) ei palautettu, koska Tämä informaatio tallennettu tiedostojärjestelmään. Siksi R-Studio näyttää automaattisesti jokaisen tiedoston uudella nimellä.

Voidaan kuitenkin nähdä, että tiedostojen sisältö ei ole vaurioitunut. Tämän tarkistamiseksi avataan ne sopivassa ohjelmassa, esimerkiksi VLC-mediasoittimessa.


Klikkaa kuvaa suurentaaksesi sen

Johtopäätös
R-Studion kyky etsiä tunnetun tyyppisiä tiedostoja mahdollistaa tietojen palauttamisen jopa levyltä, jonka tiedostojärjestelmät on joko kirjoitettu tai korvattu. Voit etsiä tiedostoja varsin tehokkaasti niiden allekirjoitusten avulla, mikä on erityisen hyödyllistä, jos tiedät tarkalleen palautettavien tiedostojen tyypin, kuten esimerkiksi esimerkissämme. Mahdollisuus luoda mukautettuja tiedostotyyppejä antaa sinun lisätä minkä tahansa tiedoston, jolla on tietty tiedostoallekirjoitus, tunnettujen tiedostotyyppien luetteloon.

Monet ovat ehkä kuulleet tiedostoista, kuten rarjpeg "ja. Tämä on erityinen tiedosto, joka on jpeg-kuva ja rar-arkisto liimattu yhteen tiiviisti. Se on erinomainen säiliö tiedonsiirron tosiasian piilottamiseen. Voit luoda rarjpeg-tiedoston käyttämällä seuraavia komentoja:

UNIX: kissan kuva1.jpg arkisto.rar > kuva2.jpg
WINDOWS: kopioi /b image1.jpg+archive.rar image2.jpg

Tai jos sinulla on hex-editori.

Tietenkin tiedonsiirron tosiasian piilottamiseksi voit käyttää paitsi JPEG-muotoa myös monia muita. Jokaisella muodolla on omat ominaisuutensa, joiden vuoksi se voi olla sopiva tai ei sovellu konttirooliin. Kuvailen kuinka voit löytää liimattuja tiedostoja suosituimmissa muodoissa tai osoitan liimauksen tosiasian.

Liimattujen tiedostojen havaitsemismenetelmät voidaan jakaa kolmeen ryhmään:

  1. Menetelmä EOF-merkin jälkeisen alueen tarkistamiseksi. Monissa suosituissa tiedostomuodoissa on ns. tiedoston loppumerkki, joka vastaa haluttujen tietojen näyttämisestä. Esimerkiksi valokuvien katselijat lukevat kaikki tavut tähän merkkiin asti, mutta sen jälkeinen alue jää huomiotta. Tämä menetelmä on ihanteellinen formaateille: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. Menetelmä tiedostokoon tarkistamiseksi. Joidenkin formaattien (ääni- ja videosäiliöt) rakenteen avulla voit laskea todellisen tiedostokoon ja verrata sitä alkuperäiseen kokoon. Muodot: AVI, WAV, MP4, MOV.
  3. CFB-tiedostojen tarkistusmenetelmä. CFB eli Compound File Binary Format on Microsoftin kehittämä asiakirjamuoto, joka on oma tiedostojärjestelmänsä sisältävä kontti. Tämä menetelmä perustuu poikkeavuuksien havaitsemiseen tiedostossa.

Onko tiedoston lopun jälkeen elämää?

JPEG

Vastauksen löytämiseksi tähän kysymykseen on tarpeen syventyä liimattujen tiedostojen "esi-isän" muodon spesifikaatioihin ja ymmärtää sen rakenne. Mikä tahansa JPEG alkaa allekirjoituksella 0xFF 0xD8.

Tämän allekirjoituksen jälkeen on palvelutiedot, valinnaisesti kuvakuvake ja lopuksi itse pakattu kuva. Tässä muodossa kuvan lopussa on kaksitavuinen allekirjoitus 0xFF 0xD9.

PNG

PNG-tiedoston ensimmäiset kahdeksan tavua ovat seuraavan allekirjoituksen varassa: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A. Tietovirran päättävä allekirjoitus: 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82.

RAR

Yhteinen allekirjoitus kaikille rar-arkistoille: 0x52 0x61 0x72 0x21 (Rar!). Sen jälkeen tulee tietoa arkiston versiosta ja muista asiaan liittyvistä tiedoista. Empiirisesti havaittiin, että arkisto päättyy allekirjoitukseen 0x0A, 0x25, 0x25, 0x45, 0x4F, 0x46.

Taulukko formaateista ja niiden allekirjoituksista:
Algoritmi liimauksen tarkistamiseksi näissä muodoissa on erittäin yksinkertainen:

  1. Etsi alkuperäinen allekirjoitus;
  2. Etsi lopullinen allekirjoitus;
  3. Jos lopullisen allekirjoituksen jälkeen ei ole tietoja - tiedostosi on puhdas eikä sisällä liitteitä! Muussa tapauksessa on tarpeen etsiä muita muotoja lopullisen allekirjoituksen jälkeen.

GIF ja PDF

PDF-dokumentissa voi olla useampi kuin yksi EOF-merkki esimerkiksi virheellisen asiakirjan luomisen vuoksi. GIF-tiedoston loppuallekirjoitusten määrä on yhtä suuri kuin siinä olevien kehysten määrä. Näiden muotojen ominaisuuksien perusteella on mahdollista parantaa liitetiedostojen tarkistuksen algoritmia.
  1. Kohta 1 toistetaan edellisestä algoritmista.
  2. Kohta 2 toistetaan edellisestä algoritmista.
  3. Kun löydät lopullista allekirjoitusta, muista sen sijainti ja etsi lisää;
  4. Jos viimeinen EOF-merkki saavutetaan tällä tavalla, tiedosto on puhdas.
  5. Jos tiedosto ei pääty loppuallekirjoitukseen, goto on viimeksi löydetyn loppuallekirjoituksen sijainti.
Suuri ero tiedoston koon ja viimeisen allekirjoituksen jälkeisen sijainnin välillä osoittaa tarttuvan liitteen olemassaolon. Ero voi olla yli kymmenen tavua, vaikka muita arvoja voidaan asettaa.

POSTINUMERO

ZIP-arkistojen ominaisuus on kolme erilaista allekirjoitusta: Arkiston rakenne on seuraava:
Paikallinen tiedoston otsikko 1
Tiedoston tiedot 1
Tietojen kuvaaja 1
Paikallinen tiedoston otsikko 2
Tiedoston tiedot 2
Tietojen kuvaaja 2
...
Paikallinen tiedoston otsikko n
Tiedoston tiedot n
Data Descriptor n
Arkiston salauksenpurkuotsikko
Arkistoi ylimääräinen tietue
Keskushakemisto
Mielenkiintoisin on keskushakemisto, joka sisältää metatiedot arkiston tiedostoista. Keskushakemisto alkaa aina allekirjoituksella 0x50 0x4b 0x01 0x02 ja päättyy allekirjoitukseen 0x50 0x4b 0x05 0x06, jota seuraa 18 tavua metadataa. Mielenkiintoista on, että tyhjät arkistot koostuvat vain lopullisesta allekirjoituksesta ja 18 nollatavusta. 18 tavun jälkeen tulee arkiston kommenttialue, joka on täydellinen kontti tiedoston piilottamiseen.

ZIP-arkiston tarkistamiseksi sinun on löydettävä keskushakemiston lopullinen allekirjoitus, ohitettava 18 tavua ja etsittävä tunnettujen muotojen allekirjoituksia kommenttialueelta. Iso koko Kommentti todistaa myös liimauksen tosiasian.

Koolla on väliä

AVI

AVI-tiedoston rakenne on seuraava: jokainen tiedosto alkaa RIFF-allekirjoituksella (0x52 0x49 0x46 0x46). Tavussa 8 on AVI-allekirjoitus, joka määrittää muodon (0x41 0x56 0x49 0x20). Lohko offsetilla 4, joka koostuu 4 tavusta, sisältää datalohkon alkukoon (tavujärjestys on vähän endian). Saadaksesi selville seuraavan koon sisältävän lohkon numeron, sinun on lisättävä otsikon koko (8 tavua) ja 4-8 tavun lohkossa saatu koko. Tämä laskee tiedoston kokonaiskoon. On mahdollista, että laskettu koko voi olla pienempi kuin todellinen tiedostokoko. Lasketun koon jälkeen tiedosto sisältää vain nolla tavua (tarvitaan 1 kt:n rajan kohdistamiseen).

Esimerkki koon laskemisesta:


WAV

Kuten AVI, WAV-tiedosto alkaa allekirjoituksella RIFF, mutta tällä tiedostolla on 8-tavuinen allekirjoitus - WAVE (0x57 0x41 0x56 0x45). Tiedoston koko lasketaan samalla tavalla kuin AVI. Todellisen koon tulee täsmälleen vastata laskettua kokoa.

MP4

MP4 tai MPEG-4 on mediasäiliömuoto, jota käytetään video- ja äänivirtojen tallentamiseen, ja se mahdollistaa myös tekstityksen ja kuvien tallentamisen.
Offset 4 tavun kohdalla on allekirjoitukset: tiedostotyyppi ftyp (66 74 79 70) (QuickTime Container File Type) ja tiedoston alatyyppi mmp4 (6D 6D 70 34). Tunnustusta varten piilotetut tiedostot, olemme kiinnostuneita mahdollisuudesta laskea tiedostokoko.

Harkitse esimerkkiä. Ensimmäisen lohkon koko on offsetin nollassa ja se on 28 (00 00 00 1C, Big Endian tavujärjestys); se osoittaa myös siirtymän, jossa toisen tietolohkon koko sijaitsee. 28. siirtymäkohdassa löydämme seuraavan lohkokoon 8 (00 00 00 08). Löytääksesi seuraavan lohkokoon sinun on lisättävä löydettyjen edellisten lohkojen koot. Siten tiedoston koko lasketaan:

MOV

Tämä laajalti käytetty muoto on myös MPEG-4-säiliö. MOV käyttää patentoitua tiedonpakkausalgoritmia, sen rakenne on samanlainen kuin MP4 ja sitä käytetään samaan tarkoitukseen - ääni- ja videodatan sekä niihin liittyvien materiaalien tallentamiseen.
Kuten MP4:ssä, kaikissa mov-tiedostoissa on 4-tavuinen ftyp-allekirjoitus siirrossa 4, mutta seuraavan allekirjoituksen arvo on qt__ (71 74 20 20). Tiedostokoon laskentasääntö ei ole muuttunut: tiedoston alusta alkaen laskemme seuraavan lohkon koon ja laskemme sen yhteen.

Menetelmä tämän muotoryhmän tarkistamiseksi "liitettyjen" tiedostojen varalta on laskea koko yllä olevien sääntöjen mukaisesti ja verrata sitä tarkistettavan tiedoston kokoon. Jos nykyinen tiedostokoko on paljon pienempi kuin laskettu koko, tämä osoittaa yhdistämisen. AVI-tiedostoja tarkistettaessa on sallittua, että laskettu koko voi olla pienempi kuin tiedostokoko, koska reunusten tasausta varten on lisätty nollia. Tällaisessa tapauksessa on tarpeen tarkistaa nollia lasketun tiedostokoon jälkeen.

Tarkista yhdistetyn tiedoston binaarimuoto

Tämä Microsoftin kehittämä tiedostomuoto tunnetaan myös nimellä OLE (Object Linking and Embedding) tai COM (Component Object Model). DOC-, XLS- ja PPT-tiedostot kuuluvat CFB-muotojen ryhmään.

CFB-tiedosto koostuu 512-tavuisesta otsikosta ja samanpituisista sektoreista, jotka tallentavat tietovirtoja tai palvelutietoja. Jokaisella sektorilla on oma ei-negatiivinen numeronsa, lukuun ottamatta erikoisnumeroita: "-1" - numeroi vapaan sektorin, "-2" - numeroi sektorin, joka sulkee ketjun. Kaikki sektoriketjut määritellään FAT-taulukossa.

Oletetaan, että hyökkääjä muokkasi tiettyä doc-tiedostoa ja liitti toisen tiedoston sen loppuun. Niitä on muutama eri tavoilla havaita se tai osoittaa poikkeaman asiakirjassa.

Epänormaali tiedostokoko

Kuten edellä mainittiin, mikä tahansa CFB-tiedosto koostuu otsikosta ja samanpituisista sektoreista. Sektorin koon selvittämiseksi sinun on luettava kaksitavuinen luku 30. siirtymän kohdalla tiedoston alusta ja nostettava 2 tämän luvun potenssiin. Tämän luvun on oltava vastaavasti joko 9 (0x0009) tai 12 (0x000C), tiedostosektorin koko on 512 tai 4096 tavua. Kun olet löytänyt sektorin, sinun on tarkistettava seuraava yhtäläisyys:

(FileSize - 512) mod SectorSize = 0

Jos tämä yhtäläisyys ei täyty, voit ilmoittaa tiedostojen yhdistämisen. Tällä menetelmällä on kuitenkin merkittävä haittapuoli. Jos hyökkääjä tietää sektorin koon, riittää, että hän kiinnittää tiedostonsa ja n tavua lisää, jotta liimattujen tietojen koko on sektorin koon monikerta.

Tuntematon sektorityyppi

Jos hyökkääjä tietää menetelmän ohittaa edellinen tarkistus, niin tätä menetelmää voi havaita määrittelemättömien tyyppisten sektoreiden läsnäolon.

Määritellään tasa-arvo:

FileSize = 512 + CountReal * SectorSize, jossa FileSize on tiedoston koko, SectorSize on sektorin koko, CountReal on sektoreiden lukumäärä.

Määrittelemme myös seuraavat muuttujat:

  1. CountFat - FAT-sektorien lukumäärä. Sijaitsee siirrossa 44 tiedoston alusta (4 tavua);
  2. CountMiniFAT - MiniFAT-sektorien lukumäärä. Sijaitsee siirrossa 64 tiedoston alusta (4 tavua);
  3. CountDIFAT - DIFAT-sektorien määrä. Sijaitsee siirrossa 72 tiedoston alusta (4 tavua);
  4. CountDE on hakemistosyötteiden sektoreiden lukumäärä. Tämän muuttujan löytämiseksi sinun on löydettävä ensimmäinen DE-sektori, joka sijaitsee 48. siirtymässä. Sitten sinun on hankittava DE:n täydellinen esitys FATista ja laskettava DE-sektorien lukumäärä;
  5. CountStreams - tietovirtoja sisältävien sektoreiden lukumäärä;
  6. CountFree - vapaiden sektoreiden määrä;
  7. CountClassified - tietyntyyppisten sektoreiden lukumäärä;
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

On selvää, että jos CountClassified ja CountReal eivät ole samat, voimme päätellä, että tiedostot voidaan yhdistää.

Pomo on asettanut minulle melko mielenkiintoisen tehtävän. Kirjoita lyhyessä ajassa suoritettava tiedosto-analysaattori, joka pystyy löytämään viruskappaleet allekirjoitusten perusteella ja määrittämään käytetyn pakkaajan/salauksen. Valmis prototyyppi ilmestyi parissa tunnissa.

Tekijän sana

allekirjoitusanalyysi

Mikä tahansa virustorjunta pystyy etsimään haitallista kohdetta allekirjoitusten perusteella. Yleisessä tapauksessa allekirjoitus on formalisoitu kuvaus joistakin merkeistä, joiden avulla voidaan todeta, että tarkistettava tiedosto on virus ja virus on melko spesifinen.

Täällä on erilaisia ​​menetelmiä. Vaihtoehtoisesti voit käyttää allekirjoitusta, joka koostuu haitallisen kohteen N tavusta. Tässä tapauksessa on mahdollista tehdä ei typerä vertailu, vaan vertailu jollakin maskilla (kuten etsimällä tavuja EB ?? ?? CD 13). Tai aseta lisäehtoja, kuten "tällaisten tavujen on oltava ohjelman tulopisteessä" ja niin edelleen. Malvarin allekirjoitus on erikoisuus.

Samalla tavalla kuvataan joitain merkkejä, joiden avulla voidaan määrittää, että suoritettava tiedosto on pakattu jollakin toisella salausohjelmalla tai pakkaajalla (esimerkiksi banaali ASPack). Jos luit lehteämme huolellisesti, olet varmasti kuullut sellaisesta työkalusta kuin PEiD, joka pystyy määrittämään yleisimmin käytetyt pakkaajat, kryptoijat ja kääntäjät (tietokannassa on suuri määrä allekirjoituksia) siirrettävälle PE-tiedostolle. se. Valitettavasti ohjelman uusia versioita ei ole julkaistu pitkään aikaan, ja äskettäin viralliselle verkkosivustolle ilmestyi viesti, että projekti ei kehity edelleen. Harmi, koska PEiD:n ominaisuudet (etenkin liitännäisjärjestelmä huomioon ottaen) voisivat olla minulle hyödyllisiä. Lyhyen analyysin jälkeen kävi selväksi, että tämä ei ollut vaihtoehto. Mutta kaivattuani englanninkielisiä blogeja, löysin nopeasti sen, mikä minulle sopii. YARA-projekti (code.google.com/p/yara-project).

Mikä on YARA?

Olin alusta asti vakuuttunut siitä, että jossain verkossa on jo avoimia kehityskulkuja, jotka ottaisivat tehtäväkseen määrittää jonkin allekirjoituksen ja tutkittavan tiedoston välinen vastaavuus. Jos löytäisin tällaisen projektin, niin sen voisi helposti laittaa web-sovelluksen kiskoille, lisätä sinne erilaisia ​​allekirjoituksia ja saada mitä minulta vaadittiin. Suunnitelma alkoi tuntua vieläkin todellisemmalta, kun luin YARA-projektin kuvauksen.

Kehittäjät itse asettavat sen työkaluksi, joka auttaa haittaohjelmien tutkijoita tunnistamaan ja luokittelemaan haitallisia näytteitä. Tutkija voi luoda kuvauksia eri tyyppiä haittaohjelmat, jotka käyttävät tekstiä tai binäärimalleja, jotka kuvaavat haittaohjelmien muodollisia ominaisuuksia. Näin hankitaan allekirjoitukset. Itse asiassa jokainen kuvaus koostuu rivijoukosta ja jostakin loogisesta lausekkeesta, jonka perusteella määritetään analysaattorin toiminnan logiikka.

Jos jonkin säännön ehdot täyttyvät tutkittavana olevan tiedoston osalta, se määräytyy sen mukaan (esim. mato sellainen ja sellainen). Yksinkertainen esimerkki säännöstä ymmärtääksesi, mistä on kyse:

sääntö hiljainen_pankkiiri: pankkiiri
{
meta:
description = "Tämä on vain esimerkki"
säikeen_taso = 3
in_the_wild = tosi
jouset:
$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"
kunto:
$a tai $b tai $c
}

Tässä säännössä kerromme YARAlle, että kaikki tiedostot, jotka sisältävät vähintään yhden muuttujissa $a, $b, $c kuvatuista näytemerkkijonoista, tulee luokitella silent_banker troijalaisiksi. Ja tämä on hyvin yksinkertainen sääntö. Itse asiassa pyörät voivat olla paljon monimutkaisempia (puhumme tästä alla).
Jopa sitä käyttävien projektien luettelo kertoo jo YARA-projektin auktoriteetista, ja tämä:

  • VirusTotal Malware Intelligence Services (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Tarkkailemme verkkosivustoasi (wewatchyourwebsite.com).

Kaikki koodi on kirjoitettu Pythonilla, ja käyttäjälle tarjotaan sekä itse moduuli käytettäväksi heidän kehitystyössään että pelkkä suoritettava tiedosto YARA:n käyttämiseksi itsenäisenä sovelluksena. Osana työtäni valitsin ensimmäisen vaihtoehdon, mutta yksinkertaisuuden vuoksi käytämme artikkelissa analysaattoria yksinkertaisesti konsolisovelluksena.

Pienen kaivamisen jälkeen keksin nopeasti kuinka kirjoittaa säännöt YARA:lle, sekä kuinka liittää siihen virustunnisteet ilmaisesta averista ja pakkaajat PEiD:stä. Mutta aloitetaan asennuksesta.

Asennus

Kuten sanoin, projekti on kirjoitettu Pythonilla, joten se voidaan helposti asentaa Linuxiin, Windowsiin ja Maciin. Aluksi voit ottaa vain binäärimuodon. Jos kutsumme sovelluksen konsolissa, saamme säännöt toimimaan.

$yara
käyttö: yara ... ... TIEDOSTO | PID

Eli ohjelmakutsumuoto on seuraava: ensin tulee ohjelman nimi, sitten vaihtoehtoluettelo, jonka jälkeen ilmoitetaan tiedosto säännöillä ja aivan lopussa - tutkittavan tiedoston nimi (tai tiedostot sisältävä hakemisto) tai prosessitunnus. Nyt olisi mukava selittää, kuinka nämä säännöt on laadittu, mutta en halua heti kuormittaa sinua kuivalla teorialla. Siksi toimimme eri tavalla ja lainaamme muiden allekirjoituksia, jotta YARA voi suorittaa yhden asettamamme tehtävän - virusten täysimittaisen tunnistamisen allekirjoitusten avulla.

Sinun virustorjuntasi

Tärkein kysymys: mistä saada tunnettujen virusten allekirjoitustietokanta? Virustorjuntayritykset jakavat aktiivisesti tällaisia ​​tietokantoja keskenään (toiset anteliaammin, jotkut vähemmän). Ollakseni rehellinen, aluksi jopa epäilin, että jossain verkossa joku julkaisee avoimesti tällaisia ​​​​asioita. Mutta kuten kävi ilmi, hyviä ihmisiä on. Sopiva tukikohta suositusta ClamAV-viruksentorjuntaohjelmasta on kaikkien saatavilla (clamav.net/lang/en). "Viimeisin vakaa julkaisu" -osiossa löydät linkin uusin versio virustorjuntatuote sekä linkit ClamAV-virustietokantojen lataamiseen. Olemme ensisijaisesti kiinnostuneita tiedostoista main.cvd (db.local.clamav.net/main.cvd) ja daily.cvd (db.local.clamav.net/daily.cvd).

Ensimmäinen sisältää tärkeimmän allekirjoitusten tietokannan, toinen - täydellisimmän Tämä hetki pohja erilaisilla lisäyksillä. Tähän tarkoitukseen riittää daily.cvd, joka sisältää yli 100 000 haittaohjelmalähetystä. ClamAV-kanta ei kuitenkaan ole YARA-kanta, joten meidän on muutettava se oikeaan muotoon. Mutta miten? Loppujen lopuksi emme vieläkään tiedä mitään ClamAV- tai Yara-muodosta. Tämä ongelma on jo hoidettu ennen meitä valmistelemalla pieni komentosarja, joka muuntaa ClamAV-virustunnistetietokannan YARA-sääntöjoukoksi. Käsikirjoitus on nimeltään clamav_to_yara.py ja sen on kirjoittanut Matthew Richard (bit.ly/ij5HVs). Lataa komentosarja ja muunna tietokannat:

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

Tämän seurauksena saamme clamav.yara-tiedostoon allekirjoituspohjan, joka on heti käyttövalmis. Kokeillaan nyt YARA- ja ClamAV-pohjan yhdistelmää toiminnassa. Kansion skannaus allekirjoituksella suoritetaan yhdellä komennolla:

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

Valinta -r määrittää, että tarkistus suoritetaan rekursiivisesti kaikkien nykyisen kansion alikansioiden kautta. Jos /pentest/msf3/data-kansiossa oli viruskappaleita (ainakin ClamAV-tietokannassa), YARA ilmoittaa tästä välittömästi. Periaatteessa tämä on valmis allekirjoitusskanneri. Lisämukavuuden vuoksi kirjoitin yksinkertaisen komentosarjan, joka tarkisti ClamAV-tietokantapäivitykset, latasi uudet allekirjoitukset ja muunsi ne YARA-muotoon. Mutta nämä ovat yksityiskohtia. Yksi osa tehtävästä on tehty, nyt voidaan alkaa kirjoittaa sääntöjä pakkaajien/salaustajien määrittelyyn. Mutta tätä varten oli tarpeen käsitellä niitä vähän.

Peli sääntöjen mukaan

Joten sääntö on ohjelman päämekanismi, jonka avulla voit määrittää tietyn tiedoston mihin tahansa luokkaan. Säännöt on kuvattu erillisessä tiedostossa (tai tiedostoissa), ja ne ovat ulkonäöltään hyvin samanlaisia ​​kuin C/C++-kielen struct()-konstruktio.

sääntö Bad Boy
{
jouset:
$a = "win.exe"
$b = "http://foo.com/badfile1.exe"
$c = "http://bar.com/badfile2.exe"
kunto:
$a ja ($b tai $c)
}

Periaatteessa sääntöjen kirjoittamisessa ei ole mitään monimutkaista. Tämän artikkelin puitteissa kosketin vain pääkohtia, ja löydät yksityiskohdat käsikirjasta. Tällä hetkellä kymmenen tärkeintä kohtaa ovat:

1. Jokainen sääntö alkaa säännön avainsanalla, jota seuraa säännön tunniste. Tunnisteilla voi olla samat nimet kuin muuttujilla C/C++:ssa, eli ne voivat koostua kirjaimista ja numeroista, eikä ensimmäinen merkki voi olla numero. Suurin pituus tunnisteen nimi - 128 merkkiä.

2. Säännöt koostuvat tyypillisesti kahdesta osasta: määritelmäosiosta (merkkijonot) ja ehtoosasta. Merkkijono-osiossa on tietoja, joiden perusteella ehtoosiossa päätetään, täyttääkö määritetty tiedosto tietyt ehdot.

3. Jokaisella merkkijono-osion rivillä on oma tunniste, joka alkaa $-merkillä - yleensä, kuten php:n muuttujan ilmoitus. YARA tukee tavallisia kieliä, jotka on suljettu kaksoislainausmerkit(" ") ja niiden sisällä olevat heksadesimaalimerkit henkselit(()), sekä säännölliset lausekkeet:

$my_text_string = "tekstiä tähän"
$my_hex_string = ( E2 34 A1 C8 23 FB )

4. Ehto-osio sisältää kaiken säännön logiikan. Tämän osan on sisällettävä boolen lauseke, joka määrittää, milloin tiedosto tai prosessi vastaa sääntöä. Tyypillisesti tämä osa viittaa aiemmin ilmoitettuihin merkkijonoihin. Ja rivitunnusta käsitellään loogisena muuttujana, joka palauttaa true, jos rivi löytyy tiedostosta tai prosessimuistista, ja false muussa tapauksessa. Yllä oleva sääntö määrittää, että tiedostot ja prosessit, jotka sisältävät merkkijonon win.exe ja toisen kahdesta URL-osoitteesta, on luokiteltava BadBoyksi (säännön nimen mukaan).

5. Heksadesimaaliset merkkijonot mahdollistavat kolme rakennetta, jotka tekevät niistä joustavampia: jokerimerkit, hyppyt ja vaihtoehdot. Korvaukset ovat paikkoja merkkijonossa, jotka ovat tuntemattomia ja voivat olla mitä tahansa arvoja. Ne on merkitty symbolilla "?":

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

Tämä lähestymistapa on erittäin hyödyllinen määritettäessä merkkijonoja, joiden pituus on tiedossa, mutta joiden sisältö voi muuttua. Jos osa merkkijonosta voi olla eripituinen, on kätevää käyttää alueita:

$hex_string = ( F4 23 62 B4 )

Tämä merkintä tarkoittaa, että rivin keskellä voi olla 4-6 eri tavua. Voit myös toteuttaa vaihtoehtoisen vaihtoehdon:

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

Tämä tarkoittaa, että kolmannen tavun tilalla voi olla 62 B4 tai 56, tällainen merkintä vastaa rivejä F42362B445 tai F4235645.

6. Jos haluat tarkistaa, että tietty merkkijono on tietyssä siirtymässä tiedostossa tai prosessin osoiteavaruudessa, käytä at-käskyä:

$a 100:lla ja $b 200:lla

Jos merkkijono voi olla tietyllä osoitealueella, käytetään in-operaattoria:

$a tuumaa (0..100) ja $b tuumaa (100..fi koko)

Joskus on tilanteita, joissa on tarpeen osoittaa, että tiedoston tulee sisältää tietty numero tietystä joukosta. Tämä tehdään käyttämällä operaattoria:

Esimerkki1 sääntö
{
jouset:
$foo1 = "nukke1"
$foo2 = "nukke2"
$foo3 = "nukke3"
kunto:
2 / ($foo1,$foo2,$foo3)
}

Yllä oleva sääntö edellyttää, että tiedosto sisältää mitkä tahansa kaksi riviä joukosta ($foo1,$foo2,$foo3). Sen sijaan, että määrität tietyn rivimäärän tiedostossa, voit käyttää muuttujia mikä tahansa (vähintään yksi rivi tietystä joukosta) ja kaikki (kaikki rivit tietystä joukosta).

7. Viimeinen mielenkiintoinen mahdollisuus harkita on yhden ehdon soveltaminen useisiin riveihin. Tämä ominaisuus on hyvin samanlainen kuin of-operaattori, vain tehokkaampi on for..of-operaattori:

merkkijonojoukon lausekkeelle: (looginen_lauseke)

Tämä merkintä tulee lukea seuraavasti: merkkijonosarjassa määritetyistä merkkijonoista vähintään lausekkeiden osien on täytettävä boolean_expression-ehto. Tai toisin sanoen: boolen_lauseke arvioidaan jokaiselle merkkijonosarjan merkkijonolle, ja niiden lausekkeen on palautettava True. Seuraavaksi tarkastelemme tätä rakennetta tietyllä esimerkillä.

PEiD:n tekeminen

Joten kun kaikki on tullut enemmän tai vähemmän selväksi sääntöjen kanssa, voimme aloittaa pakkaajien ja kryptojien tunnistimen toteuttamisen projektissamme. Lähtömateriaalina lainasin aluksi tunnettujen pakkaajien allekirjoitukset samalta PEiD:ltä. Plugins-kansio sisältää userdb.txt-tiedoston, joka sisältää tarvitsemamme. Tietokannassani oli 1850 allekirjoitusta.

Paljon, joten niiden tuomiseksi kokonaan suosittelen kirjoittamaan jonkinlaisen käsikirjoituksen. Tämän pohjan muoto on yksinkertainen - tavallinen tekstitiedosto, joka tallentaa lomakkeen tietueita:


allekirjoitus = 50 E8 ?? ?? ?? ?? 58 25 ?? F0 FF FF 8B C8 83 C1 60 51 83 C0 40 83 EA 06 52 FF 20 9D C3
ep_only=true

Ensimmäinen rivi määrittää pakkaajan nimen, joka näytetään PEiD:ssä, mutta meille se on säännön tunniste. Toinen on itse allekirjoitus. Kolmas on ep_only-lippu, joka määrittää, etsitäänkö annettua riviä vain tulopisteen osoitteesta vai koko tiedostosta.

No, yritetäänkö luoda sääntö vaikkapa ASPackille? Kuten kävi ilmi, tässä ei ole mitään monimutkaista. Luodaan ensin tiedosto sääntöjen tallentamiseksi ja nimetään se, esimerkiksi packers.yara. Sitten etsimme PEiD-tietokannasta kaikki allekirjoitukset, joiden nimissä on ASPack, ja siirrämme ne sääntöön:

sääntö ASPack
{
jouset:
$ = ( 60 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? (43 | 44) ?? B8 ??
$ = ( 60 EB ?? 5D EB ?? FF ?? ?? ?? ?? E9 )
[.. leikata..]
$ = ( 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 )
kunto:
jollekin niistä: ($sisääntulopisteessä)
}

Kaikkien löydettyjen merkintöjen ep_only-lipun arvo on tosi, eli näiden rivien on sijaittava tulopisteen osoitteessa. Joten kirjoitamme seuraavan ehdon: "jolle tahansa niistä: ($ aloituspisteessä)".

Siten vähintään yhden annetuista merkkijonoista esiintyminen aloituspisteen osoitteessa tarkoittaa, että tiedosto on pakattu ASPackilla. Huomaa myös, että tässä säännössä kaikki merkkijonot määritetään yksinkertaisesti $-merkillä ilman tunnistetta. Tämä on mahdollista, koska ehtoosiossa emme viittaa mihinkään niistä, vaan käytämme koko sarjaa.

Vastaanotetun järjestelmän toimivuuden tarkistamiseksi riittää, että suoritat komennon konsolissa:

$ yara -r packers.yara somefi le.exe

Syötettyään pari ASPackilla pakattua sovellusta sinne, varmistin, että kaikki toimii!

Valmis prototyyppi

YARA osoittautui erittäin selkeäksi ja läpinäkyväksi työkaluksi. Minun ei ollut vaikea kirjoittaa sille web-hallintaa ja asettaa se verkkopalveluksi. Pienellä luovuudella analysaattorin kuivat tulokset on jo värjätty eri väreillä, mikä osoittaa havaitun haittaohjelman vaaran. Pieni päivitys tietokantaan ja monille salakirjoittajille on saatavilla lyhyt kuvaus ja joskus jopa ohjeet pakkauksen purkamiseen. Prototyyppi on luotu ja toimii täydellisesti, ja viranomaiset tanssivat ilosta!

Sähkeen otsikossa oleva toimintokoodi (FC) tunnistaa sähketyypin, kuten pyyntösähke (Request tai Send/Request) ja kuittaus- tai vastaussähke (kuittauskehys, vastauskehys). Lisäksi toimintokoodi sisältää varsinaisen lähetystoiminnon ja ohjaustiedot, jotka estävät viestien katoamisen ja päällekkäisyyden, tai asematyypin FDL-tilalla .

7 6 5 4 3 2 1 0 FC: Toimintokoodipyyntö
1 Pyydä Telegrammia
X FCV = Vaihtoehtoinen bitti kytketty päälle
X href="http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit">FCB = Vaihtuva bitti (kehysten määrästä)
1 0 (0x0) CV = Kelloarvo()
1 muu Varattu
0 0 (0x0) TE = aikatapahtuma (kellon synkronointi)
0 3 (0x3) SDA_LOW = Lähetä tiedot kuitattu - alhainen prioriteetti
0 4 (0x4) SDN_LOW = Lähetä dataa ei kuitattu - matala prioriteetti
0 5 (0x5) SDA_HIGH = Lähetä tiedot kuitattu - korkea prioriteetti
0 6 (0x6) SDN_HIGH = Lähetä dataa ei kuitattu
0 7 (0x7) MSRD = Lähetä pyyntötiedot monilähetysvastauksella
0 9 (0x9) Pyydä FDL-tilaa
0 12(0xC) SRD alhainen = Lähetä ja pyydä tietoja
0 13(0xD) SRD high = Lähetä ja pyydä tietoja
0 14(0xE) Pyydä Ident ja vastaus
0 15 (0xF) Pyydä LSAP-tilaa vastauksella 1)
0 muu Varattu

1) tämä arvo on standardin viimeisessä versiossa, jota ei ole enää määritelty, vaan se on vain varattu

7 6 5 4 3 2 1 0 FC: Toimintokoodin vastaus
0 vastaussähke
0 Varattu
0 0 orja
0 1 Mestari ei ole valmis
1 0 Mestari valmiina, ilman merkkiä
1 1 Mestari valmiina, merkkirenkaassa
0 (0x0) OK
1 (0x1) UE = User Error
2 (0x2) RR = Ei resursseja
3 (0x3) RS = SAP ei ole käytössä
8 (0x8) DL = Data Low (normaali tapaus DP:llä)
9 (0x9) NR = Ei vastaustietoja valmiina
10(0xA) DH = Data High (DP-diagnoosi odottaa)
12(0xC) RDL = Dataa ei vastaanotettu ja Data Low
13(0xD) RDH = Dataa ei vastaanotettu ja Data High
muu Varattu

Frame Count -bitti Kehyslaskentabitti FCB (b5) estää sanoman päällekkäisyyden kuittaavan tai vastaavan aseman (vastaajan) toimesta ja kutsuvan aseman (aloittajan) aiheuttaman menetyksen. Tämän ulkopuolelle jäävät pyynnöt ilman kuittausta (SDN) ja FDL-tila-, tunnus- ja LSAP-tilapyynnöt.

Suojaussekvenssiä varten aloittajalla on oltava FCB jokaiselle vastaajalle. Kun pyyntösähke (Request tai Send/Request) lähetetään vastaajalle ensimmäistä kertaa tai jos se lähetetään uudelleen vastaajalle, joka on tällä hetkellä merkitty ei-toimivaksi, FCB on asetettava vastaajassa määritetyllä tavalla. Aloittaja saavuttaa tämän Request-sähkeessä, jossa FCV=0 ja FCB=1. Vastaajan on arvioitava tällainen sähke ensimmäiseksi viestijaksoksi ja tallennettava FCB=1 yhdessä aloittajan osoitteen (SA) kanssa (katso seuraava taulukko). Aloittaja ei toista tätä viestijaksoa. Myöhemmissä pyyntösähkeissä samalle vastaajalle aloittajan on asetettava FCV=1 ja vaihdettava FCB jokaisen uuden pyyntösähkeen yhteydessä. Jokaisen vastaajan, joka vastaanottaa Request-sähkeen, joka on osoitettu sille FCV=1:llä, on arvioitava FCB. Jos FCB on muuttunut verrattuna viimeisimpään saman aloittajan (sama SA) pyyntösähkeeseen, tämä on kelvollinen vahvistus siitä, että edellinen sanomajakso päättyi oikein. Jos Request-sähkö on peräisin eri aloittajalta (eri SA), FCB:n arviointia ei enää tarvita. Molemmissa tapauksissa vastaajan on tallennettava FCB lähde-SA:han, kunnes se vastaanottaa sille osoitetun uuden sähkeen. Jos kuittaus- tai vastaussähke on kadonnut tai heikentynyt, aloittaja ei saa muuttaa FCB:tä uudelleen pyynnössä: tämä osoittaa, että edellinen viestijakso oli viallinen. Jos vastaaja vastaanottaa pyyntösähkeen, jossa FCV=1 ja sama FCB kuin viimeinen Pyyntösähke samalta aloittajalta (sama SA), tämä ilmaisee pyynnön uudelleenyrityksen. Vastaajan tulee vuorostaan ​​lähettää uudelleen valmiustilassa oleva kuittaus- tai vastaussähke. Vastaajan on säilytettävä viimeinen kuittaus- tai vastaussähke valmiina mahdollisia pyyntöjä varten, kunnes yllä mainittu vahvistus tai vastaanottaa sähke, jolla on eri osoite (SA tai DA), jota ei ole kuitattu (Send Data with No Acknowledge, SDN). . Pyyntösähkeissä, joita ei kuitata ja joiden FDL-tila, tunniste ja LSAP-tila on FCV=0 ja FCB=0; vastaajan suorittamaa arviointia ei enää tarvita.

b5 b4 bitin asema
FCB FCV Kunto Merkitys Toiminta
0 0 DA = TS/127 Pyyntö ilman vahvistusta
Pyydä FDL-tilaa/tunnusta/LSAP-tilaa
Poista viimeinen kuittaus
0/1 0/1 DA#TS Pyydä toista vastaajaa
1 0 DA = TS Ensimmäinen pyyntö FCBM: = 1
SAM:=SA
Poista viimeisin kuittaus/vastaus
0/1 1 DA = TS
SA = SAM
FCB #FCBM
Uusi pyyntö Poista viimeisin kuittaus/vastaus
FCBM: = FCB
Pidä kuittaus/vastaus valmiina uudelleenyritystä varten
0/1 1 DA = TS
SA = SAM
FCB = FCBM
Yritä uudelleen Pyyntö FCBM: = FCB
Toista kuittaus/vastaus ja jatka valmiustilassa
0/1 1 DA = TS
SA #SAM
Uusi aloitteentekijä FCBM: = FCB
SAM:= SA Pidä kuittaus / vastaus valmiina uudelleenyritystä varten

FCBM tallennettu FCB muistiin SAM tallennettu SA muistiin




Yläosa