R-Studio үшін пайдаланушы белгілі файл түрін жасау. Қолтаңба арқылы файл түрін анықтау Файл қолтаңбасы дегеніміз не

тұжырымдамасы» Сиқырлы сан«бағдарламалауда үш мағына бар:

  • Деректер қолтаңбасы
  • Таңдалған бірегей құндылықтар, ол басқа мәндермен бірдей болмауы керек (мысалы, UUID)
  • Нашар бағдарламалау тәжірибесі.

Деректер қолтаңбасы

Сиқырлы сан, немесе қол қою, - ресурсты немесе деректерді бірегей анықтау үшін пайдаланылатын бүтін немесе мәтіндік тұрақты. Мұндай санның өзі ешқандай мағынаға ие емес және ол бағдарлама кодында сәйкес контекссіз немесе түсініктемесіз пайда болса, шатасуға әкелуі мүмкін, ал оны басқасына өзгерту әрекеті, тіпті бір мәнге жақын болса да, мүлдем болжауға болмайтын салдарға әкелуі мүмкін. Осы себепті мұндай сандар ирониялық түрде сиқырлы сандар деп аталды. Қазіргі уақытта бұл атау термин ретінде берік орныққан. Мысалы, кез келген құрастырылған Java тілі класы 0xCAFEBABE он алтылық «сиқырлы саннан» басталады. Екінші кең танымал мысал - кез келген орындалатын файлОЖ Microsoft Windows.exe кеңейтімімен 0x4D5A байт тізбегінен басталады (ол MZ ASCII символдарына – MS-DOS жасаушылардың бірі Марк Збиковскидің бас әріптеріне сәйкес келеді). Азырақ белгілі мысал - жөндеу режимінде 0xDEADBEEF мекенжайы бар Microsoft Visual C++ (Microsoft Visual Studio бағдарламасының 2005 жылғы нұсқасынан бері) инициализацияланбаған көрсеткіш.

UNIX тәрізді операциялық жүйелерФайл түрі әдетте оның атауының кеңейтілуіне қарамастан файл қолтаңбасымен анықталады. Олар файл қолтаңбасын түсіндіру үшін стандартты файл утилитасын қамтамасыз етеді.

Нашар бағдарламалау тәжірибесі

«Сиқырлы сандар» деп те аталады, бұл бастапқы мәтінде сандық мән орын алған кезде және оның нені білдіретіні анық болмаса, нашар бағдарламалау тәжірибесі. Мысалы, Java тілінде жазылған осындай үзінді нашар болар еді:

drawSprite(53, 320, 240);

соңғы int SCREEN_WIDTH = 640; соңғы int SCREEN_HEIGHT = 480 ; соңғы int SCREEN_X_CENTER = SCREEN_WIDTH/2; соңғы int SCREEN_Y_CENTER = SCREEN_HEIGHT / 2; соңғы int SPRITE_CROSSHAIR = 53; ... drawSprite(SPRITE_CROSSHAIR, SCREEN_X_CENTER, SCREEN_Y_CENTER);

Енді түсінікті: бұл сызық экранның ортасында спрайтты - көздің қиылысуын көрсетеді. Көптеген бағдарламалау тілдерінде мұндай тұрақтылар үшін қолданылатын барлық мәндер компиляция уақытында есептеледі және мәндер қолданылатын орындарға ауыстырылады. Сондықтан бастапқы мәтіндегі мұндай өзгеріс бағдарламаның өнімділігін төмендетпейді.

Сонымен қатар, сиқырлы сандар бағдарламадағы қателердің ықтимал көзі болып табылады:

  • Егер бірдей сиқырлы сан бағдарламада бірнеше рет пайдаланылса (немесе ықтимал пайдаланылуы мүмкін), онда оны өзгерту әрбір оқиғаны өңдеуді қажет етеді (атаулы тұрақты мәнге бір өңдеудің орнына). Барлық оқиғалар түзетілмесе, кем дегенде бір қате орын алады.
  • Оқиғалардың кем дегенде бірінде сиқырлы сан бастапқыда қате жазылуы мүмкін және оны анықтау өте қиын.
  • Сиқырлы сан жасырын параметрге немесе басқа сиқырлы санға байланысты болуы мүмкін. Егер бұл нақты анықталмаған тәуелділіктер қанағаттандырылмаса, кем дегенде бір қате орын алады.
  • Бір сиқырлы санның қайталануын өзгерту кезінде тәуелсіз, бірақ сандық мәні бірдей басқа сиқырлы санды қате өзгертуге болады.

Сиқырлы сандар және кросс-платформа

Кейде сиқырлы сандар кросс-платформалық кодқа зиян келтіреді. Мәселе мынада, C тілінде 32 және 64 биттік операциялық жүйелерде char , short және long long типтерінің өлшеміне кепілдік беріледі, ал int , long , size_t және ptrdiff_t өлшемдері өзгеруі мүмкін (алғашқы екеуі үшін, компилятор әзірлеушілерінің қалауларына байланысты , соңғы екеуі үшін - мақсатты жүйенің разрядтық сыйымдылығына байланысты). Ескі немесе нашар жазылған кодта түрдің өлшемін көрсететін «сиқырлы сандар» болуы мүмкін - басқа бит сыйымдылығы бар машиналарға көшу кезінде олар нәзік қателерге әкелуі мүмкін.

Мысалы:

const size_t NUMBER_OF_ELEMENTS = 10 ; ұзақ [NUMBER_OF_ELEMENTS]; memset(a, 0, 10 * 4); // дұрыс емес - ұзын 4 байт деп есептеледі, элементтердің сиқырлы саны пайдаланылады memset(a, 0, NUMBER_OF_ELEMENTS * 4); // дұрыс емес - ұзын 4 байт деп есептеледі memset(a, 0, NUMBER_OF_ELEMENTS * sizeof(long)); // мүлде дұрыс емес – тип атауының қайталануы (түр өзгерсе, оны мұнда да өзгертуге тура келеді) memset (a , 0 , NUMBER_OF_ELEMENTS * sizeof (a [ 0 ])); // дұрыс, нөлдік емес өлшемдегі динамикалық массивтер үшін оңтайлы memset(a, 0, sizeof(a)); // дұрыс, статикалық массивтер үшін оңтайлы

Сиқыр емес сандар

Барлық сандарды тұрақты мәндерге түрлендіру қажет емес. Мысалы, коды

Белгілі түрдегі файлдарды сканерлеу арқылы іздеу (немесе жиі айтылғандай, қолтаңба бойынша файлдарды іздеу) R-Studio деректерді қалпына келтіру утилитасында қолданылатын ең тиімділердің бірі болып табылады. Берілген қолтаңбаны пайдалану каталог құрылымы мен файл атаулары туралы ақпарат ішінара немесе толығымен жоқ (зақымданған) жағдайларда белгілі бір типтегі файлдарды қалпына келтіруге мүмкіндік береді.

Әдетте, файлдардың орналасуын анықтау үшін диск бөлімдерінің кестесі қолданылады. Дискіні кітаппен салыстырсаңыз, бөлімдер кестесі оның мазмұнына ұқсас болады. Сканерлеу кезінде R-Studio белгілі бір көрсетілген қолтаңбаларды пайдаланып диск бөлімдерінің кестесіндегі белгілі файл түрлерін іздейді. Бұл іс жүзінде әрбір файл түрінің бірегей қолтаңбасы немесе деректер үлгісі болуы арқылы мүмкін болды. Файл қолтаңбалары файлдың басында белгілі бір жерде және көп жағдайда файлдың соңында да болады. Сканерлеу кезінде R-Studio табылған деректерді белгілі файл түрлерінің қолтаңбаларымен сәйкестендіреді, бұл оларды анықтауға және олардың деректерін қалпына келтіруге мүмкіндік береді.

Белгілі файл түрлерін сканерлеу технологиясын пайдалана отырып, R-Studio қайта пішімделген және бөлім кестелері қайта жазылған дискілерден деректерді қалпына келтіруге мүмкіндік береді. Сонымен қатар, егер диск бөлімі қайта жазылса, зақымдалса немесе жойылса, белгілі файл түрлерін сканерлеу жалғыз мүмкіндік болып табылады.

Бірақ барлығы дерлік өз кемшіліктері бар және R-Studio-да қолданылатын белгілі файл түрлері де ерекшелік емес. Сонымен, белгілі файл түрлерін сканерлеу кезінде R-Studio тек фрагменттелмеген файлдарды қалпына келтіруге мүмкіндік береді, бірақ жоғарыда айтылғандай, көп жағдайда бұл ең соңғы ықтимал әдіс.

R-Studio ең көп таралған файл түрлерінің қолтаңбаларын қамтиды (көрініс толық тізімбелгілі түрдегі файлдарды R-Studio Online анықтама бөлімінде табуға болады.)

Қажет болса, пайдаланушы R-Studio-ға жаңа файл түрлерін қоса алады. Мысалы, бірегей түрдегі файлдарды немесе R-Studio соңғы шығарылымынан кейін жасалған файлдарды табу қажет болса, белгілі түрдегі файлдарға өзіңіздің қолтаңбаларыңызды қосуға болады. Бұл процесс келесіде талқыланады.

Белгілі түрлердің теңшелетін файлдары
Белгілі файл түрлерінің теңшелетін файл қолтаңбалары сақталады XML файлы e Параметрлер тілқатысу терезесінде көрсетілген. Қол қою екі бөліктен тұрады:

  1. Файлдың басында және егер бар болса, файлдың соңында орналасқан файл қолтаңбасын анықтау.
  2. Файл қолтаңбасы және файл түрі туралы басқа ақпаратты қамтитын XML файлын жасаңыз.

Мұның бәрін R-Studio көмегімен жасауға болады. Сонымен қатар, сізге XML құжаттарын жасау (өңдеу) саласында немесе он алтылық өңдеу саласында сарапшы болудың қажеті жоқ - пайдаланушының өзіне бағытталған осы нұсқаулықта (мақалада) Бастапқы деңгей, бұл процестің барлық кезеңдері егжей-тегжейлі талқыланады.

Мысал: MP4 файлына қолтаңба қосу (XDCam-EX Codec)
Sony XDCAM-EX көмегімен жасалған .MP4 файлының мысалын пайдаланып файл қолтаңбасын қосуды қарастырайық. Сіз оны, мысалы, компьютердің қатты дискісінде әлі сақтай алмаған файлдар үшін SD картасына зақым келген жағдайда пайдалана аласыз.

Бірінші кезең: Файл қолтаңбасын анықтау
Файл қолтаңбасын анықтау үшін бірдей пішімдегі файлдардың мысалдарын қарастырыңыз.

Бұл Sony XDCAM-EX ұсынған төрт бейне файл болсын:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

Қарастыруды жеңілдету үшін бұл шағын файлдар болсын. Үлкенірек файлдарды он алтылық жүйеде көру қиынырақ.

1. R-Studio бағдарламасында файлдарды ашыңыз. Ол үшін әрбір файлды тінтуірдің оң жақ түймешігімен басып, контекстік мәзірден Қарау/Өңдеу пәрменін таңдаңыз.

2. Файлдарды салыстырайық. Біз барлық төрт файлда бірдей үлгіні іздейміз. Ол пайда болады файл қолтаңбасы. Әдетте, файл қолтаңбалары файлдың басында, бірақ кейде соңында болады.

3. Файлдың басындағы файл қолтаңбасын анықтаңыз. Біздің мысалда ол файлдың ең басында орналасқан. Бұл әрдайым бола бермейтінін ескеріңіз - көбінесе файлдың қолтаңбасы файлдың басында болады, бірақ бірінші жолда емес (офсет).

Төмендегі суреттерден барлық төрт файлдың мазмұны әртүрлі болып көрінеді, бірақ олардың барлығы бірдей файл қолтаңбасынан басталады.


Үлкейту үшін суретті басыңыз


Үлкейту үшін суретті басыңыз


Үлкейту үшін суретті басыңыз


Үлкейту үшін суретті басыңыз

Суреттердегі ерекшеленген аймақ файл қолтаңбасы болып табылады осы түрдегіфайлдар. Ол мәтін түрінде де, он алтылық форматта да ұсынылған.

Мәтіндік пішінде файл қолтаңбасы келесідей болады:
....ftypmp42....mp42....... тегін

Нүктелер («.») мәтін түрінде ұсынылмайтын таңбаларды көрсетеді. Сондықтан файл қолтаңбасының он алтылық пішінін беру қажет:
00 00 00 18 66 74 79 6D 70 34 32 00 00 00 6D 70 34 32 00 00 00 00 00 00 00 08 66 72 65 65

4. Дәл осылай біз файлдың қолтаңбасын анықтаймыз, бірақ файлдың ең соңында. Бұл басқа файл қолтаңбасы, басқа ұзындық болуы мүмкін.

Төмендегі суреттер файлдың соңындағы файл қолтаңбасын ерекшелейді:


Үлкейту үшін суретті басыңыз


Үлкейту үшін суретті басыңыз


Үлкейту үшін суретті басыңыз


Үлкейту үшін суретті басыңыз

Таңдалған аймақтың алдындағы деректер (файл қолтаңбасы) барлық төрт файлда бірдей екенін ескеріңіз. Бұл файл қолтаңбасы болып табылмайтын техникалық ақпарат, бірақ барлық төрт суреттің (файлдың) бірдей параметрлері бар бір камера арқылы түсірілгенін көрсетеді. Әдетте техникалық ақпаратпен сәйкес келетін үлгілерді файл қолтаңбасынан ажыратуға болады. Біздің мысалда, файл қолтаңбасы басталар алдындағы соңғы жолда біз ‘RecordingMode type=“normal”’ мәтінін көреміз, ол бұл қолтаңба емес, файл параметрінің қандай да бір түрі екенін анық көрсетеді. Қате енгізбеу үшін әрқашан осы жолға ерекше назар аударыңыз техникалық ақпаратфайл қолтаңбасының бөлігі.

Біздің жағдайда файлдың қолтаңбасы келесі мәтін болып табылады:
...
Естеріңізге сала кетейік, нүктелер мәтін түрінде ұсынылмайтын таңбаларды көрсетеді.

Он алтылық жүйеде файл қолтаңбасы келесідей болады:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Назар аударыңыз: қол әрқашан файлдың соңында болмайды.

Екінші кезең: Белгілі файл түрін сипаттайтын XML файлын жасау
Енді файл қолтаңбасын анықтап, XML файлын жасауға және R-Studio-ға сәйкес файл түрін қосуға болады. Мұны екі жолмен жасауға болады:

2.1 Кірістірілген құрылғыны пайдалану графикалық редакторфайл қолтаңбалары:
Құралдар мәзірінен Параметрлер элементін таңдап, ашылатын Параметрлер тілқатысу терезесінде Белгілі файлдар түрлері қойындысын басыңыз, содан кейін Пайдаланушының файл түрлерін өңдеу түймешігін басыңыз.

Үлкейту үшін суретті басыңыз

Пайдаланушының файл түрлерін өңдеу тілқатысу терезесіндегі Файл түрін жасау түймешігін басыңыз.
Келесі опцияларды орнатыңыз:

  • Id – бірегей цифрлық идентификатор. Бұл санкездейсоқ таңдалады; Жалғыз нәрсе, ол кез келген басқа файл түрінің сандық идентификаторына сәйкес келмеуі керек.
  • Топ сипаттамасы - табылған файлдар R-Studio-да орналасатын топ. Сіз де орнатуға болады жаңа топ, немесе бұрыннан барлардың бірін таңдаңыз. Біз үшін бұл «Мультимедиялық бейне (Мультимедиа: Бейне)» тобы болады.
  • Сипаттама - қысқаша сипаттамасыфайл түрі. Біздің мысалда, мысалы, «Sony cam video, XDCam-EX» пайдалануға болады.
  • Кеңейтім – осы типтегі файлдарды кеңейту. Біздің жағдайда - mp4.

Мүмкіндіктер параметрі міндетті емес, біздің жағдайда оны пайдаланудың қажеті жоқ.

Үлкейту үшін суретті басыңыз

Әрі қарай, файлдың басталу және аяқталу қолтаңбасын енгізу керек. Мұны істеу үшін «Бастау» түймесін, содан кейін таңдаңыз контекстік мәзірҚолтаңба қосу пәрмені.

Үлкейту үшін суретті басыңыз

Содан кейін өрісті екі рет басыңыз<пустая сигнатура> () және сәйкес мәтінді енгізіңіз.

Үлкейту үшін суретті басыңыз

Содан кейін соңғы файл қолтаңбасын жасаңыз. «Кімнен» бағанына 21 санын енгізуді ұмытпаңыз.

Үлкейту үшін суретті басыңыз

Белгілі файл түрлері үшін өзіңіздің қолтаңбаңызды сәтті жасадыңыз.

Енді оны сақтау керек. Екі жолы бар: оны Сақтау түймесін басу арқылы Параметрлер тілқатысу терезесінің Негізгі қойындысында көрсетілген әдепкі файлға сақтауға болады. Немесе Басқаша сақтау... түймесін басып, қолтаңбаны басқа файлға сақтаңыз.

2.2 Белгілі файл түрін сипаттайтын XML файлын қолмен жасау:
Жасау үшін бұл файл XML 1.0 нұсқасын және UTF-8 кодтауын қолданайық. Оның не екенін білмесеңіз, үмітіңізді үзбеңіз - кез келгенін ашыңыз мәтіндік редактор(мысалы, Notepad.exe) және бірінші жолға келесі мәтінді енгізіңіз:

Әрі қарай файл түрін (FileType) анықтайтын XML тегін жасаймыз. Бұрын сипатталған XML атрибуттарын ескере отырып, тег келесідей болады:

Оны бірден енгізейік

Содан кейін біз файлдың қолтаңбасын анықтаймыз (тег ). Бастапқы қолтаңба (файлдың басында) тегтің ішінде болады ешқандай атрибуттарсыз. Біз қолтаңбаның мәтіндік түрін қолданамыз, бірақ сонымен бірге мәтін түрінде көрсетуге болмайтын он алтылық таңбаларды ауыстырамыз. Әрбір он алтылық таңбаның алдына «\x» енгіземіз Осылайша тег файл қолтаңбасымен келесідей болады:

Бар болса, аяқталатын қолтаңбаны да анықтауыңыз керек (файлдың соңында). Бұл бірдей тегті пайдаланады, бірақ «from» элементі және «соңы» төлсипаты бар. Ол келесідей болады:

Соңғы файл қолтаңбасында мәтіндік емес таңбалар жоқ, бірақ қиғаш сызықтар мен үшбұрыш жақшалары бар екенін есте сақтаңыз. XML синтаксисіндегі шатасулар мен қателерді болдырмау үшін қолтаңбадағы «/», « таңбаларын ауыстырамыз.<" и ">олардың он алтылық мәндері.

Соңында, файл қолтаңбаларынан кейін FileType және FileTypeList жабу тегтері болуы керек:

Осылайша, бүкіл файл келесідей болуы керек:


\x00\x00\x00\x18ftypmp42\x00\x00\x00\x00mp42\x00\x00\x00\x00\x00\x00\x00\x08 тегін
\x3C\x2FNonRealTimeMeta\x3E\x0D\x0A\x00

Есіңізде болсын: XML синтаксисі регистрді ескереді, сондықтан дұрыс тег болады , бірақ жоқ .

Файлды .xml кеңейтімімен мәтіндік форматта сақтайық. Мысалы: SonyCam.xml.

Біз белгілі файл түрлері үшін өз қолтаңбамызды сәтті жасадық. Бұл мысал реттелетін файл түрін жасаудың негізгі принциптерін түсіну үшін жеткілікті. Тәжірибелі пайдаланушылар XML 2.0 нұсқасын пайдалана алады. Бұл туралы толығырақ R-Studio онлайн анықтама бөлімінде оқи аласыз.

3-қадам: Белгілі файл түрін сипаттайтын файлды тексеру және қосу
Келесі қадам - ​​XML ​​файлыңызды R-Studio-ға қосу (жүктеп салу). Бұл жағдайда ол автоматты түрде тексеріледі.

Алдыңғы кезеңде жасалған XML файлын R-Studio-ға жүктейміз. Ол үшін Құралдар мәзіріндегі Параметрлер тармағын таңдаңыз. Параметрлер тілқатысу терезесінің Негізгі қойындысының Пайдаланушының файл түрлері аймағында біз жасаған XML файлын қосыңыз (SonyCam.xml). Қолдану түймесін басыңыз.

Үлкейту үшін суретті басыңыз

2. Жаңа файл түрін жүктеп алу сұрауына Иә деп жауап беріңіз.

Үлкейту үшін суретті басыңыз

3. Файл түрінің сәтті жүктелгенін тексеру үшін Параметрлер тілқатысу терезесінің Белгілі файл түрлері қойындысын басыңыз. Мультимедиялық бейне тобына файл түрін қосқанымызды есте сақтаңыз (Мультимедиа: Бейне). Осы топты (қалта) кеңейтіп, XML файлын жасау кезінде біз көрсеткен сипаттамасы бар элементті көруіміз керек: Sony cam video, XDCam-EX (.mp4).

Үлкейту үшін суретті басыңыз


Үлкейту үшін суретті басыңыз

Файл синтаксисінде қателер болса, сәйкес хабарламаны көресіз:

Үлкейту үшін суретті басыңыз

Бұл жағдайда қателердің бар-жоғын XML файлын қайта тексеріңіз. Есіңізде болсын: XML синтаксисі регистрді ескереді және әрбір тегтің соңында жабу тегі болуы керек.

4-қадам: Белгілі файл түрін сипаттайтын файлды тексеру
Біз жасаған реттелетін файл түрінің дұрыстығын тексеру үшін алынбалы USB флэш-дискісінен .mp4 файлдарымызды табуға тырысайық.

1. Windows Vista немесе Windows 7 жүйесінде дискіні толық (жылдам емес) пішімдеуді орындаңыз немесе дискілік кеңістікті тазалау утилитасын (мысалы, R-Wipe & Clean) пайдаланыңыз. толық жоюдискідегі барлық деректер. Болсын USB дискі FAT32 форматында пішімделген (ізделген файлдардың өлшемі 2 ГБ-тан аспайды).

2. Көшіріп алайық сынақ файлдарыдискіге және кэш жадының мазмұны дискіде сақталуы үшін компьютерді қайта жүктеңіз. Сондай-ақ өшіруге болады сыртқы дисксодан кейін қайта қосыңыз.

3. ОЖ-де диск, мысалы, F:\ логикалық дискісі ретінде анықталады.

4. R-Studio-ны іске қосайық. Дискімізді (F:\) таңдап, Сканерлеу түймесін басыңыз

Үлкейту үшін суретті басыңыз

5. Сканерлеу тілқатысу терезесінің (Файл жүйесі) аймағындағы Өзгерту... түймесін басып, барлық ұяшықтардың құсбелгісін алып тастаңыз. Осылайша, бөлімдер кестесін пайдаланып файлдық жүйелер мен файлдарды іздеуді өшіреміз.
Үлкейту үшін суретті басыңыз

6. Белгілі файл түрлері үшін қосымша іздеу құсбелгісін қойыңыз. Бұл сканерлеу кезінде R-Studio бағдарламасына белгілі файл түрлерін іздеуге мүмкіндік береді.

7. Сканерлеуді бастау үшін Сканерлеу түймесін басыңыз.

8. R-Studio дискіні сканерлегенше күтейік. Сканерлеу ақпараты қойындысы сканерлеу барысын (прогресін) көрсетеді.


Үлкейту үшін суретті басыңыз

9. Сканерлеу аяқталғаннан кейін Қосымша табылған файлдар элементін таңдап, оны екі рет басыңыз.


Үлкейту үшін суретті басыңыз

10. Біздің сынақ файлдарымыз Sony cam video, XDCam-EX қалтасында (немесе Екінші кезеңде көрсетілген файл түрі сипаттамасына сәйкес басқа аты бар қалтада) орналасады.


Үлкейту үшін суретті басыңыз

Файл атаулары, күндер мен орындар (қалталар) қалпына келтірілмегенін көресіз, себебі бұл ақпаратфайлдық жүйеде сақталады. Сондықтан R-Studio әрбір файлды жаңа атаумен автоматты түрде көрсетеді.

Дегенмен, файлдардың мазмұны бұзылмағаны анық. Мұны тексеру үшін оларды сәйкес бағдарламада ашайық, мысалы, VLC медиа ойнатқышы.


Үлкейту үшін суретті басыңыз

Қорытынды
R-Studio-ның белгілі файл түрлерін сканерлеу мүмкіндігі файлдық жүйелері қайта жазылған дискіден де деректерді қалпына келтіруге мүмкіндік береді. Сіз файлдарды олардың қолтаңбалары арқылы өте тиімді іздеуге болады, бұл біздің мысалдағыдай қалпына келтірілетін файлдардың түрін дәл білсеңіз өте пайдалы. Пайдаланушы файл түрлерін жасау мүмкіндігі белгілі файл түрлерінің тізіміне белгілі бір файл қолтаңбасы бар кез келген файлды қосуға мүмкіндік береді.

Көбісі rarjpeg сияқты файлдар туралы естіген болуы мүмкін.Бұл jpeg кескіні мен rar мұрағаты бір-біріне тығыз жабыстырылған файлдың ерекше түрі.Бұл ақпаратты жіберу фактісін жасыруға арналған тамаша контейнер. келесі пәрмендер:

UNIX: cat image1.jpg архив.rar > image2.jpg
WINDOWS: көшіру /b image1.jpg+archive.rar image2.jpg

Немесе сізде он алтылық редактор болса.

Әрине, ақпаратты жіберу фактісін жасыру үшін сіз JPEG пішімін ғана емес, сонымен қатар көптеген басқаларды пайдалана аласыз. Әрбір форматтың өзіндік сипаттамалары бар, осыған байланысты ол контейнер рөліне сәйкес келуі немесе болмауы мүмкін. Мен ең танымал форматтарда қойылған файлдарды қалай табуға болатынын немесе желімдеу фактісін көрсететінін сипаттаймын.

Біріктірілген файлдарды анықтау әдістерін үш топқа бөлуге болады:

  1. EOF маркерінен кейінгі аумақты тексеру әдісі. Көптеген танымал файл пішімдерінде қажетті деректерді көрсетуге жауап беретін файлдың соңы маркері бар. Мысалы, фотосуреттерді көрушілер осы маркерге дейінгі барлық байтты оқиды, бірақ одан кейінгі аумақ еленбейді. Бұл әдіс келесі форматтар үшін өте қолайлы: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. Файл өлшемін тексеру әдісі. Кейбір форматтардың құрылымы (аудио және бейне контейнерлері) нақты файл өлшемін есептеуге және оны бастапқы өлшеммен салыстыруға мүмкіндік береді. Пішімдері: AVI, WAV, MP4, MOV.
  3. CFB файлдарын тексеру әдісі. CFB немесе Құрама файлдың екілік пішімі — Microsoft корпорациясы әзірлеген құжат пішімі, ол өзінің файлдық жүйесі бар контейнер болып табылады. Бұл әдіс файлдағы ауытқуларды анықтауға негізделген.

Файл аяқталғаннан кейін өмір бар ма?

JPEG

Бұл сұраққа жауап табу үшін біріктірілген файлдардың «ата-бабасы» болып табылатын форматтың сипаттамаларына тереңірек үңіліп, оның құрылымын түсіну керек. Кез келген JPEG 0xFF 0xD8 қолтаңбасынан басталады.

Бұл қолтаңбадан кейін қызметтік ақпарат, қосымша сурет белгішесі және ең соңында қысылған кескіннің өзі болады. Бұл пішімде кескіннің соңы екі байтты 0xFF 0xD9 қолтаңбасымен белгіленеді.

PNG

PNG файлының алғашқы сегіз байтында келесі қолтаңба бар: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A. Деректер ағынын аяқтайтын қолтаңба: 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82.

RAR

Барлық rar мұрағаттары үшін ортақ қолтаңба: 0x52 0x61 0x72 0x21 (Rar!). Одан кейін мұрағат нұсқасы және басқа қатысты деректер туралы ақпарат келеді. Мұрағат 0x0A, 0x25, 0x25, 0x45, 0x4F, 0x46 қолтаңбасымен аяқталатыны эксперименталды түрде анықталды.

Пішімдердің кестесі және олардың қолтаңбалары:
Бұл форматтарда желімделуді тексеру алгоритмі өте қарапайым:

  1. Бастапқы қолтаңбаны табыңыз;
  2. Қорытынды қолтаңбаны табыңыз;
  3. Егер соңғы қолтаңбадан кейін деректер болмаса, файлыңыз таза және тіркемелер жоқ! Әйтпесе, соңғы қол қойылғаннан кейін басқа форматтарды іздеу керек.

GIF және PDF

PDF құжатында біреуден көп EOF маркері болуы мүмкін, мысалы, құжаттың дұрыс жасалмауына байланысты. GIF файлындағы соңғы қолтаңбалар саны ондағы кадрлар санына тең. Осы пішімдердің мүмкіндіктеріне сүйене отырып, тіркелген файлдардың бар-жоғын тексеру алгоритмін жақсартуға болады.
  1. 1-тармақ алдыңғы алгоритмнен қайталанады.
  2. 2-тармақ алдыңғы алгоритмнен қайталанады.
  3. Соңғы қолтаңбаны тапқан кезде оның орналасқан жерін есте сақтаңыз және әрі қарай қараңыз;
  4. Осы жолмен соңғы EOF маркеріне жетсеңіз, файл таза.
  5. Егер файл аяқталу қолтаңбасымен аяқталмаса, goto - табылған соңғы қолтаңбаның орны.
Файл өлшемі мен соңғы қолтаңбадан кейінгі орын арасындағы үлкен айырмашылық жабысқақ тіркеменің бар екенін көрсетеді. Айырмашылық он байттан көп болуы мүмкін, бірақ басқа мәндерді орнатуға болады.

ZIP

ZIP мұрағаттарының ерекшелігі үш түрлі қолтаңбаның болуы болып табылады: Мұрағаттың құрылымы келесідей:
Жергілікті файл тақырыбы 1
Файл деректері 1
Деректер дескрипторы 1
Жергілікті файл тақырыбы 2
Файлдық деректер 2
Деректер дескрипторы 2
...
Жергілікті файл тақырыбы
Файл деректері n
Деректер дескрипторы n
Мұрағат шифрын шешу тақырыбы
Қосымша деректер жазбасын мұрағаттау
Орталық каталог
Ең қызықтысы мұрағаттағы файлдар туралы метадеректерден тұратын орталық каталог. Орталық каталог әрқашан 0x50 0x4b 0x01 0x02 қолтаңбасымен басталады және 0x50 0x4b 0x05 0x06 қолтаңбасымен аяқталады, содан кейін 18 байт метадеректер. Бір қызығы, бос мұрағаттар тек соңғы қолтаңбадан және 18 нөлдік байттан тұрады. 18 байттан кейін мұрағаттық түсініктеме аймағы келеді, ол файлды жасыруға арналған тамаша контейнер болып табылады.

ZIP мұрағатын тексеру үшін орталық каталогтың соңғы қолтаңбасын тауып, 18 байтты өткізіп жіберіп, түсініктеме аймағында белгілі пішімдердің қолтаңбаларын іздеу керек. Үлкен өлшемТүсініктеме желімдеу фактісін де көрсетеді.

Өлшем маңызды

AVI

AVI файлының құрылымы келесідей: әрбір файл RIFF қолтаңбасынан басталады (0x52 0x49 0x46 0x46). 8-байтта форматты (0x41 0x56 0x49 0x20) көрсететін AVI қолтаңбасы бар. 4 байттан тұратын 4 офсеттегі блок деректер блогының бастапқы өлшемін қамтиды (байт реті – аз ендіан). Келесі өлшемді қамтитын блок нөмірін білу үшін тақырып өлшемін (8 байт) және 4-8 байт блокта алынған өлшемді қосу керек. Бұл жалпы файл өлшемін есептейді. Есептелген өлшем файлдың нақты өлшемінен кішірек болуы мүмкін. Өлшемді есептегеннен кейін файлда тек нөл байттар болады (1Кб шекараны туралау үшін қажет).

Өлшемді есептеудің мысалы:


WAV

AVI сияқты, WAV файлы RIFF қолтаңбасынан басталады, алайда бұл файлда 8 байт – WAVE (0x57 0x41 0x56 0x45) қолтаңбасы бар. Файл өлшемі AVI сияқты есептеледі. Нақты өлшем есептелгенге толығымен сәйкес келуі керек.

MP4

MP4 немесе MPEG-4 – бейне және аудио ағындарын сақтау үшін пайдаланылатын, сонымен қатар субтитрлер мен кескіндерді сақтауды қамтамасыз ететін медиа контейнер пішімі.
4 байт офсетте қолтаңбалар бар: ftyp файл түрі (66 74 79 70) (QuickTime контейнер файл түрі) және mmp4 файл ішкі түрі (6D 6D 70 34). Тану үшін жасырын файлдар, бізді файл өлшемін есептеу мүмкіндігі қызықтырады.

Бір мысалды қарастырайық. Бірінші блоктың өлшемі нөлдік ығысуда және ол 28 (00 00 00 1С, Big Endian байт реті); ол сонымен қатар екінші деректер блогының өлшемі орналасқан ығысуды көрсетеді. 28 офсетте келесі блок өлшемін 8-ге тең табамыз (00 00 00 08). Келесі блок өлшемін табу үшін алдыңғы табылған блоктардың өлшемдерін қосу керек. Осылайша, файл өлшемі есептеледі:

MOV

Бұл кеңінен қолданылатын пішім де MPEG-4 контейнері болып табылады. MOV меншікті деректерді қысу алгоритмін пайдаланады, MP4-ге ұқсас құрылымы бар және сол мақсаттарда - аудио және бейне деректерді, сондай-ақ қатысты материалдарды сақтау үшін қолданылады.
MP4 сияқты, кез келген mov файлында 4 офсеттегі 4 байт ftyp қолтаңбасы бар, алайда келесі қолтаңба qt__ (71 74 20 20) мәніне ие. Файл өлшемін есептеу ережесі өзгерген жоқ: файлдың басынан бастап келесі блоктың өлшемін есептеп, оны қосамыз.

Пішімдердің осы тобын «жабысқақ» файлдардың бар-жоғын тексеру әдісі жоғарыда келтірілген ережелерге сәйкес өлшемді есептеу және оны тексерілетін файлдың өлшемімен салыстыру болып табылады. Ағымдағы файл өлшемі есептелгеннен әлдеқайда аз болса, бұл желімдеу фактісін көрсетеді. AVI файлдарын тексеру кезінде шекараны туралау үшін қосылған нөлдердің болуына байланысты есептелген өлшем файл өлшемінен кішірек болуы мүмкін деп қабылданады. Бұл жағдайда есептелген файл өлшемінен кейін нөлдердің бар-жоғын тексеру қажет.

Құрама файлдың екілік пішімін тексеру

Microsoft әзірлеген бұл файл пішімі OLE (Объектілерді байланыстыру және енгізу) немесе COM (Компоненттік нысан үлгісі) ретінде де белгілі. DOC, XLS, PPT файлдары CFB пішімдері тобына жатады.

CFB файлы 512 байт тақырып пен деректер ағындарын немесе қызмет ақпаратын сақтайтын бірдей ұзындықтағы секторлардан тұрады. Арнайы сандарды қоспағанда, әрбір сектордың өзінің теріс емес саны бар: «-1» - бос секторды, «-2» - тізбекті жабатын секторды нөмірлейді. Барлық секторлық тізбектер FAT кестесінде анықталған.

Шабуылдаушы белгілі бір .doc файлын өзгертіп, оның соңына басқа файл қойды делік. Бірнеше бар әртүрлі жолдарменоны анықтаңыз немесе құжаттағы аномалияны көрсетіңіз.

Қалыпты емес файл өлшемі

Жоғарыда айтылғандай, кез келген CFB файлы бірдей ұзындықтағы тақырып пен секторлардан тұрады. Сектор өлшемін білу үшін файлдың басынан бастап 30 ығысқан екі байттық санды оқып, осы санның дәрежесіне дейін 2-ні көтеру керек. Бұл сан сәйкесінше 9 (0x0009) немесе 12 (0x000C) тең болуы керек, файл секторының өлшемі 512 немесе 4096 байт. Секторды тапқаннан кейін келесі теңдікті тексеру керек:

(FileSize - 512) мод SectorSize = 0

Егер бұл теңдік қанағаттандырылмаса, файлдарды желімдеу фактісін көрсетуге болады. Дегенмен, бұл әдіс айтарлықтай кемшілігі бар. Егер шабуылдаушы сектор өлшемін білсе, онда ол жай ғана өзінің файлын және тағы бір n байтты қоюы керек, сонда қойылған деректердің өлшемі сектор өлшеміне еселі болады.

Белгісіз сектор түрі

Егер шабуылдаушы алдыңғы тексеруді айналып өту әдісі туралы білсе, онда бұл әдістүрлері анықталмаған секторлардың болуын анықтай алады.

Теңдікке анықтама берейік:

FileSize = 512 + CountReal * SectorSize, мұндағы FileSize - файл өлшемі, SectorSize - сектор өлшемі, CountReal - секторлар саны.

Біз сондай-ақ келесі айнымалыларды анықтаймыз:

  1. CountFat – FAT секторларының саны. Файлдың басынан 44 офсетте орналасқан (4 байт);
  2. CountMiniFAT – MiniFAT секторларының саны. Файлдың басынан 64 офсетте орналасқан (4 байт);
  3. CountDIFAT – DIFAT секторларының саны. Файлдың басынан 72 офсетте орналасқан (4 байт);
  4. CountDE – каталогты енгізу секторларының саны. Бұл айнымалыны табу үшін 48 ығысуында орналасқан бірінші DE секторын табу керек. Содан кейін FAT-тен DE толық көрінісін алу және DE секторларының санын санау қажет;
  5. CountStreams – деректер ағындары бар секторлар саны;
  6. CountFree – бос секторлар саны;
  7. CountClassified – белгілі бір түрі бар секторлар саны;
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

Әлбетте, егер CountClassified және CountReal тең емес болса, файлдар біріктірілуі мүмкін деген қорытынды жасауға болады.

Менің бастығым маған өте қызықты тапсырма берді. Қысқа уақыт ішінде қолтаңбалар негізінде вирус денелерін таба алатын және пайдаланылатын бума/крипторды анықтайтын орындалатын файл анализаторын жазыңыз. Дайын прототип бірнеше сағат ішінде пайда болды.

Автор сөзі

Қолтаңбаны талдау

Қолтаңбаларды пайдаланып зиянды нысанды іздеу кез келген антивирус жасай алатын нәрсе. Жалпы алғанда, қолтаңба сканерленетін файлдың вирус және нақты анықталған вирус екенін анықтауға болатын белгілі бір сипаттамалардың формальды сипаттамасы болып табылады.

Мұнда әртүрлі техникалар бар. Балама - зиянды нысанның N байттан тұратын қолтаңбасын пайдалану. Бұл жағдайда сіз ақымақ салыстыруды емес, қандай да бір масканы пайдаланып салыстыруды жасай аласыз (мысалы, EB ?? ?? CD 13 байттарын іздеу). Немесе «сондай және осындай байттар бағдарламаның кіру нүктесінде болуы керек» және т.б. сияқты қосымша шарттарды орнатыңыз. Зиянды бағдарламаның қолтаңбасы ерекше мәселе.

Сол сияқты, кейбір белгілер сипатталған, олар арқылы орындалатын файлдың сол немесе басқа криптор немесе пакер (мысалы, банальды ASPack) бар екенін анықтауға болады. Егер сіз біздің журналды мұқият оқып шықсаңыз, онда сіз оған жіберілген PE файлы үшін ең жиі қолданылатын бумаларды, крипторларды және компиляторларды (деректер базасында көптеген қолтаңбалар бар) анықтауға қабілетті PEiD сияқты құрал туралы естідіңіз. . Өкінішке орай, бағдарламаның жаңа нұсқалары ұзақ уақыт бойы шығарылмады және жақында ресми сайтта жобаның одан әрі дамуы болмайды деген хабарлама пайда болды. Өкінішке орай, PEiD мүмкіндіктері (әсіресе плагин жүйесін ескере отырып) мен үшін өте пайдалы болуы мүмкін. Қысқаша талдаудан кейін бұл мүмкін емес екені белгілі болды. Бірақ ағылшын тіліндегі блогтарды ақтара отырып, мен өзіме қолайлы нәрсені тез таптым. YARA жобасы (code.google.com/p/yara-project).

YARA дегеніміз не?

Мен ең басынан бастап Интернетте белгілі бір қолтаңба мен зерттелетін файл арасындағы сәйкестікті анықтау міндетін алатын ашық бастапқы кодты әзірлеу бар екеніне сенімді болдым. Егер мен мұндай жобаны таба алсам, оны веб-қосымшаның рельстеріне оңай қоюға болады, сол жерде әртүрлі қолтаңбаларды қосып, менден талап етілетін нәрсені алуға болады. Мен YARA жобасының сипаттамасын оқығанда жоспар одан да шынайы болып көріне бастады.

Әзірлеушілердің өздері оны зиянды бағдарлама зерттеушілеріне зиянды үлгілерді анықтауға және жіктеуге көмектесетін құрал ретінде орналастырады. Зерттеуші сипаттамалар жасай алады әртүрлі түрлерізиянды бағдарламаның ресми сипаттамаларын сипаттайтын мәтінді немесе екілік үлгілерді пайдаланатын зиянды бағдарлама. Қолтаңбалар осылайша алынады. Шын мәнінде, әрбір сипаттама жолдар жиынтығынан және кейбір логикалық өрнектен тұрады, олардың негізінде анализатордың іске қосу логикасы анықталады.

Зерттелетін файл үшін ережелердің бірінің шарттары орындалса, сәйкесінше анықталады (мысалы, анау-мынау құрт). Не туралы айтып жатқанымызды түсіну үшін ереженің қарапайым мысалы:

Silent_banker ережесі: банкир
{
мета:
description = "Бұл жай ғана мысал"
жіп_деңгейі = 3
in_the_wild = шын
жолдар:
$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"
шарты:
$a немесе $b немесе $c
}

Бұл ережеде біз YARA-ға $a, $b, $c айнымалыларында сипатталған үлгі жолдарының кем дегенде біреуін қамтитын кез келген файлды silent_banker троян ретінде жіктеу керек екенін айтамыз. Және бұл өте қарапайым ереже. Шындығында, ережелер әлдеқайда күрделі болуы мүмкін (бұл туралы төменде айтатын боламыз).
Тіпті оны пайдаланатын жобалардың тізімі YARA жобасының беделі туралы айтады, және бұл:

  • VirusTotal зиянды бағдарлама барлау қызметтері (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Біз сіздің веб-сайтыңызды көреміз (wewatchyourwebsite.com).

Барлық код Python тілінде жазылған және пайдаланушыға оларды әзірлеуде пайдалану үшін модульдің өзі де, YARA-ны дербес қолданба ретінде пайдалану үшін жай ғана орындалатын файл ұсынылады. Жұмысымның бір бөлігі ретінде мен бірінші нұсқаны таңдадым, бірақ бұл мақалада қарапайымдылық үшін біз анализаторды консольдік қосымша ретінде қолданамыз.

Біраз іздегеннен кейін мен YARA ережелерін қалай жазу керектігін, сондай-ақ тегін бағдарламалық құралдан вирус қолтаңбаларын және PEiD бумаларын оған қалай қосу керектігін тез түсіндім. Бірақ біз орнатудан бастаймыз.

Орнату

Жоғарыда айтқанымдай, жоба Python тілінде жазылған, сондықтан оны Linux, Windows және Mac жүйелерінде оңай орнатуға болады. Бастапқыда сіз жай ғана екілік ала аласыз. Егер қолданбаны консольде шақырсақ, біз іске қосу ережелерін аламыз.

$yara
қолдану: yara ... ... ФАЙЛ | PID

Яғни, бағдарламаны шақыру пішімі келесідей: алдымен бағдарламаның аты, содан кейін опциялар тізімі, содан кейін ережелері бар файл көрсетіледі, ал соңында - файлдың аты. тексерілген (немесе файлдарды қамтитын каталог) немесе процесс идентификаторы. Енді мен осы ережелердің қалай жасалғанын жақсы түсіндіргім келеді, бірақ мен сізді құрғақ теориямен бірден жүктегім келмейді. Сондықтан YARA біз қойған міндеттердің бірін - қолтаңбалар арқылы вирустарды толық анықтауды орындауы үшін біз басқаша әрекет жасаймыз және басқа адамдардың қолтаңбаларын аламыз.

Өзіңіздің антивирусыңыз

Ең маңызды сұрақ: белгілі вирустардың қолтаңбаларының дерекқорын қайдан алуға болады? Вирусқа қарсы компаниялар мұндай дерекқорларды өзара белсенді түрде бөліседі (кейбіреулері кеңірек, басқалары азырақ). Шынымды айтсам, алғашында тіпті интернетте біреулердің мұндай нәрселерді ашық жариялайтынына күмәнданатынмын. Бірақ, белгілі болғандай, жақсы адамдар бар. Танымал ClamAV антивирусының сәйкес деректер базасы барлығына қолжетімді (clamav.net/lang/en). «Соңғы тұрақты шығарылым» бөлімінде сілтемені таба аласыз соңғы нұсқасыантивирустық өнім, сондай-ақ ClamAV вирус дерекқорларын жүктеп алуға арналған сілтемелер. Бізді ең алдымен main.cvd (db.local.clamav.net/main.cvd) және daily.cvd (db.local.clamav.net/daily.cvd) файлдары қызықтырады.

Біріншісінде қолтаңбалардың негізгі деректер базасы, екіншісінде ең толық деректер базасы бар осы сәтәртүрлі толықтырулармен негіз. 100 000-нан астам зиянды бағдарламаларды қамтитын Daily.cvd бұл мақсат үшін жеткілікті. Дегенмен, ClamAV дерекқоры YARA дерекқоры емес, сондықтан біз оны қажетті пішімге түрлендіруіміз керек. Бірақ қалай? Өйткені, біз ClamAV пішімі немесе Яра пішімі туралы әлі ештеңе білмейміз. ClamAV вирус қолтаңбасының дерекқорын YARA ережелерінің жинағына түрлендіретін шағын сценарийді дайындау арқылы бұл мәселе бізден бұрын шешілді. Сценарий clamav_to_yara.py деп аталады және оны Мэттью Ричард жазған (bit.ly/ij5HVs). Сценарийді жүктеп алып, дерекқорларды түрлендіру:

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

Нәтижесінде, clamav.yara файлында біз дереу пайдалануға дайын болатын қолтаңба дерекқорын аламыз. Енді YARA мен ClamAV дерекқорының тіркесімін қолданып көрейік. Қолтаңбаны пайдаланып қалтаны сканерлеу бір пәрменмен орындалады:

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

-r опциясы сканерлеу ағымдағы қалтаның барлық ішкі қалталарында рекурсивті түрде орындалуы керек екенін көрсетеді. Егер /pentest/msf3/data қалтасында вирус денелері болса (кем дегенде ClamAV дерекқорындағылар), онда YARA бұл туралы дереу хабарлайды. Негізінде, бұл дайын қолтаңба сканері. Ыңғайлы болу үшін мен ClamAV дерекқор жаңартуларын тексеретін, жаңа қолтаңбаларды жүктеп алып, оларды YARA пішіміне түрлендіретін қарапайым сценарий жаздым. Бірақ бұл қазірдің өзінде егжей-тегжейлі. Тапсырманың бір бөлігі аяқталды, енді бумаларды/крипторларды анықтау ережелерін құрастыруға кірісуге болады. Бірақ бұл үшін мен олармен аздап күресуге тура келді.

Ереже бойынша ойнау

Сонымен, ереже – берілген файлды белгілі бір категорияға тағайындауға мүмкіндік беретін бағдарламаның негізгі механизмі. Ережелер бөлек файлда (немесе файлдарда) сипатталған және сыртқы түрі C/C++ тіліндегі struct() конструкциясына өте ұқсас.

BadBoy басқарыңыз
{
жолдар:
$a = "win.exe"
$b = "http://foo.com/badfi le1.exe"
$c = "http://bar.com/badfi le2.exe"
шарты:
$a және ($b немесе $c)
}

Негізінде, жазу ережелерінде күрделі ештеңе жоқ. Бұл мақалада мен тек негізгі ойларға тоқталдым, сіз нұсқаулықта егжей-тегжейлі таба аласыз. Әзірге ең маңызды он тармақ:

1. Әрбір ереже кілт сөз ережесінен басталады, содан кейін ереже идентификаторы. Идентификаторлардың C/C++ тіліндегі айнымалылар сияқты атаулары болуы мүмкін, яғни олар әріптер мен сандардан тұруы мүмкін, ал бірінші таңба сан бола алмайды. Максималды ұзындықидентификатор атауы - 128 таңба.

2. Әдетте ережелер екі бөлімнен тұрады: анықтау бөлімі (жолдар) және шарт бөлімі (шарт). Жолдар бөлімі берілген файлдың белгілі бір шарттарға сәйкес келетін-келмейтінін шарт бөлімі шешетін деректерді анықтайды.

3. Жолдар бөліміндегі әрбір жолдың $ белгісінен басталатын өзіндік идентификаторы бар - жалпы алғанда, PHP-дегі айнымалылар туралы мәлімдеме сияқты. YARA ішіне қосылған тұрақты жолдарды қолдайды қос тырнақша(«») және он алтылық жолдар жақшалар(()), сондай-ақ тұрақты өрнектер:

$my_text_string = "мына жердегі мәтін"
$my_hex_string = ( E2 34 A1 C8 23 FB )

4. Шарт бөлімі ереженің барлық логикасын қамтиды. Бұл бөлімде файл немесе процестің ережеге сәйкес келетінін анықтайтын логикалық өрнек болуы керек. Әдетте, бұл бөлім бұрын жарияланған жолдарға сілтеме жасайды. Ал жол идентификаторы логикалық айнымалы ретінде қарастырылады, егер жол файлда немесе процесс жадында табылса, ақиқат, ал басқа жағдайда жалған мәнін қайтарады. Жоғарыдағы ереже win.exe жолын және екі URL мекенжайының бірін қамтитын файлдар мен процестерді BadBoy (ереже аты бойынша) ретінде санаттау керектігін көрсетеді.

5. Он алтылық жолдар оларды икемді ететін үш құрылымға мүмкіндік береді: қойылмалы таңбалар, секірулер және баламалар. Ауыстырулар жолдағы белгісіз және кез келген мәнмен ауыстырылатын орындар. Олар «?» белгісімен белгіленеді:

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

Бұл тәсіл ұзындығы белгілі, бірақ мазмұны әртүрлі болуы мүмкін жолдарды көрсету кезінде өте ыңғайлы. Егер жолдың бөлігі әртүрлі ұзындықтарда болуы мүмкін болса, диапазондарды пайдалану ыңғайлы:

$hex_string = ( F4 23 62 B4 )

Бұл жазба жолдың ортасында 4-тен 6-ға дейін әртүрлі байт болуы мүмкін дегенді білдіреді. Сіз сондай-ақ балама таңдауды жүзеге асыра аласыз:

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

Бұл үшінші байт орнында 62 B4 немесе 56 болуы мүмкін екенін білдіреді, мұндай жазба F42362B445 немесе F4235645 жолдарына сәйкес келеді.

6. Берілген жолдың файлда немесе процесс мекенжай кеңістігінде белгілі бір ығысуда екенін тексеру үшін at операторы пайдаланылады:

$a 100 және $b 200

Егер жол белгілі бір мекенжай ауқымында болуы мүмкін болса, in операторы қолданылады:

$a in (0..100) және $b in (100..fi lesize)

Кейде файлда берілген жиыннан белгілі бір сан болуы керек екенін көрсету қажет болғанда жағдайлар туындайды. Бұл оператордың көмегімен жасалады:

Мысал 1 ережесі
{
жолдар:
$foo1 = "жалған1"
$foo2 = "манеке2"
$foo3 = "манеке3"
шарты:
2/($foo1,$foo2,$foo3)
}

Жоғарыдағы ереже файлда жиыннан кез келген екі жолдың болуын талап етеді ($foo1,$foo2,$foo3). Файлдағы жолдардың белгілі бір санын көрсетудің орнына кез келген (берілген жиыннан кемінде бір жол) және барлығы (берілген жиынның барлық жолдары) айнымалы мәндерін пайдалануға болады.

7. Қарастыруды қажет ететін соңғы қызықты мүмкіндік - көптеген жолдарға бір шартты қолдану. Бұл мүмкіндік операторға өте ұқсас, тек for..of операторы күштірек:

жол_жиынының өрнегі үшін: (логикалық_өрнек)

Бұл жазбаны келесідей оқу керек: string_ жиынында көрсетілген жолдардың ішінде кем дегенде өрнек бөліктері логикалық_өрнек шартын қанағаттандыруы керек. Немесе, басқаша айтқанда: логикалық_өрнек жол_жиынындағы әрбір жол үшін бағаланады және олардағы өрнектер True мәнін қайтаруы керек. Әрі қарай біз бұл құрылысты нақты мысал арқылы қарастырамыз.

PEiD жасау

Сонымен, ережелермен бәрі азды-көпті түсінікті болған кезде, біз жобамызда пакерлер мен крипторлардың детекторын енгізуді бастай аламыз. Бастапқыда, бастапқы материал ретінде мен сол PEiD-ден белгілі пакерлердің қолтаңбаларын алдым. Плагиндер қалтасында бізге қажет нәрсені қамтитын userdb.txt файлы бар. Менің дерекқорымда 1850 қол болды.

Өте көп, сондықтан оларды толығымен импорттау үшін мен сізге қандай да бір сценарий жазуға кеңес беремін. Бұл дерекқордың пішімі қарапайым - әдеттегісі қолданылады мәтіндік файл, ол келесідей жазбаларды сақтайды:


қолтаңба = 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 = шын

Бірінші жол PEiD-де көрсетілетін бумалаушының атын көрсетеді, бірақ біз үшін бұл ереже идентификаторы болады. Екіншісі - қолтаңбаның өзі. Үшіншісі - ep_only жалаушасы, ол берілген жолды тек кіру нүктесі мекенжайында немесе бүкіл файлда іздеу керектігін көрсетеді.

Ал, ASPack үшін ереже жасауға тырысайық? Белгілі болғандай, бұл жерде күрделі ештеңе жоқ. Алдымен, ережелерді сақтау үшін файлды жасап, оны шақырайық, мысалы, packers.yara. Содан кейін біз PEiD дерекқорынан атауларында ASPack қамтитын барлық қолтаңбаларды іздейміз және оларды ережеге тасымалдаймыз:

ASPack ережесі
{
жолдар:
$ = (60 E8 ??? ?? ?? ?? 5D 81 ED ?? ?? (43 | 44) ?? B8 ?? ?? (43 | 44) ?? 03 C5 )
$ = (60 EB ?? 5D EB ?? FF ?? ?? ?? ?? E9 )
[.. кесу..]
$ = (60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01)
шарты:
олардың кез келгені үшін: ($кіру нүктесінде)
}

Барлық табылған жазбаларда ep_only жалаушасы шын мәніне орнатылған, яғни бұл жолдар кіру нүктесі мекенжайында орналасуы керек. Сондықтан келесі шартты жазамыз: «олардың кез келгені үшін: ($кіру нүктесінде)».

Осылайша, кіру нүктесінің мекенжайында берілген жолдардың кем дегенде біреуінің болуы файлдың ASPack-пен оралғанын білдіреді. Сондай-ақ, бұл ережеде барлық жолдар идентификаторсыз $ белгісі арқылы ғана көрсетілгенін ескеріңіз. Бұл мүмкін, себебі шарт бөлімінде біз нақтыларға қол жеткізе алмаймыз, бірақ бүкіл жиынтықты пайдаланамыз.

Алынған жүйенің функционалдығын тексеру үшін консольдегі пәрменді іске қосыңыз:

$ yara -r packers.yara somefi le.exe

Онда ASPack пакетімен оралған бірнеше қосымшаны тамақтандырып, мен бәрі жұмыс істейтініне сенімді болдым!

Дайын прототип

YARA өте айқын және мөлдір құрал болып шықты. Ол үшін веб-администратор жазу және оны веб-қызмет ретінде жұмыс істеуге орнату маған қиын болған жоқ. Кішкене шығармашылықпен анализатордың құрғақ нәтижелері қазірдің өзінде әртүрлі түстермен боялған, бұл анықталған зиянды бағдарламаның қауіптілік дәрежесін көрсетеді. Дерекқордың кішігірім жаңартуы және көптеген крипторлар үшін қысқаша сипаттама, кейде тіпті орамды ашу нұсқаулары да бар. Прототип жасалды және тамаша жұмыс істейді, ал бастықтар қуанышпен билеп жатыр!

Телеграмма тақырыбындағы функция коды (FC) Сұраныс жеделхаты (Сұраныс немесе Жіберу/Сұрау) және Растау немесе Жауап жеделхаты (Растау кадры, Жауап кадры) сияқты жеделхат түрін анықтайды. Сонымен қатар, функция кодында хабарлардың жоғалуы мен қайталануын болдырмайтын нақты жіберу функциясы мен басқару ақпараты немесе FDL күйі бар станция түрі бар.

7 6 5 4 3 2 1 0 FC: Функция кодын сұрау
1 Telegram сұрау
X FCV = Айнымалы бит қосылды
X href=”http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit”>FCB = Ауыспалы бит (кадрлар санынан)
1 0 (0x0) CV = Сағат мәні()
1 басқа Резервтелген
0 0 (0x0) TE = Уақыт оқиғасы (Сағат синхрондауы)
0 3 (0x3) SDA_LOW = Деректерді жіберу расталды - төмен басымдылық
0 4 (0x4) SDN_LOW = Деректерді жіберу Мақұлданбаған - төмен басымдылық
0 5 (0x5) SDA_HIGH = Деректерді жіберу расталды - жоғары басымдылық
0 6 (0x6) SDN_HIGH = Деректерді жіберу расталмаған
0 7 (0x7) MSRD = Сұраныс деректерін көп тарату жауабымен жіберу
0 9 (0x9) FDL күйін сұрау
0 12(0xC) SRD төмен = Деректерді жіберу және сұрау
0 13(0xD) SRD жоғары = Деректерді жіберу және сұрау
0 14(0xE) Жауаппен сәйкестендіруді сұрау
0 15 (0xF) Жауаппен LSAP күйін сұрау 1)
0 басқа Резервтелген

1) бұл мән стандарттың соңғы нұсқасында енді анықталмаған, тек сақталған

7 6 5 4 3 2 1 0 FC: Функция кодының жауабы
0 Жауап жеделхаты
0 Резервтелген
0 0 Құл
0 1 Мастер дайын емес
1 0 Шебер дайын, белгісіз
1 1 Мастер дайын, токен сақинасында
0 (0x0) ЖАРАЙДЫ МА
1 (0x1) UE = Пайдаланушы қатесі
2 (0x2) RR = Ресурстар жоқ
3 (0x3) RS = SAP қосылмаған
8 (0x8) DL = Деректер аз (DP бар қалыпты жағдай)
9 (0x9) NR = Жауап деректері дайын емес
10(0хА) DH = Жоғары деректер (DP диагнозы күтілуде)
12(0xC) RDL = Деректер алынбады және Деректер аз
13(0xD) RDH = Деректер алынбады және Деректер жоғары
басқа Резервтелген

Кадрлар санау биті FCB (b5) кадр санау биті растаушы немесе жауап беруші станцияның (жауап беруші) хабарламаның қайталануын және қоңырау шалушы станцияның (бастаушы) кез келген жоғалуын болдырмайды. Бұған растаусыз сұраулар (SDN) және FDL күйі, сәйкестендіргіш және LSAP күйі сұраулары кірмейді.

Қауіпсіздік реттілігі үшін бастамашы әрбір жауап беруші үшін FCB алып жүруі керек. Сұраныс жеделхаты (Сұраныс немесе Жіберу/Сұрау) жауап берушіге бірінші рет жіберілгенде немесе ол қазіргі уақытта жұмыс істемейді деп белгіленген жауап берушіге қайта жіберілсе, FCB жауап берушіде анықталғандай орнатылуы керек. Бастамашы бұған FCV=0 және FCB=1 болатын Сұраныс жеделхатында қол жеткізеді. Жауап беруші мұндай жеделхатты бірінші хабарлама циклі ретінде бағалауы және FCB=1 мәнін бастамашының мекенжайымен (SA) бірге сақтауы керек (келесі кестені қараңыз). Бұл хабар циклі бастамашымен қайталанбайды. Бір жауап берушіге келесі Сұраныс жеделхаттарында бастамашы FCV=1 мәнін орнатуы және әрбір жаңа Сұраныс жеделхатымен FCB өзгертуі керек. FCV=1 бар Сұраныс жеделхатын алатын кез келген жауап беруші FCB бағалауы керек. Егер FCB бір бастамашының (сол SA) соңғы Сұраныс жеделхатымен салыстырғанда өзгерсе, бұл алдыңғы хабарлама циклінің дұрыс аяқталғанын растайтын жарамды растау болып табылады. Сұраныс жеделхаты басқа бастамашыдан (басқа SA) туындаса, FCB бағалауы енді қажет емес. Екі жағдайда да жауап беруші оған жіберілген жаңа жеделхат алғанша FCB-ны SA көзімен бірге сақтауы керек. Жоғалған немесе құнсызданған растау немесе жауап жеделхаты жағдайында, FCB сұрауды қайталау әрекетінде бастамашы тарапынан өзгертілмеуі керек: бұл алдыңғы хабар циклінің ақаулы екенін көрсетеді. Жауап беруші FCV=1 Сұраныс жеделхатын және соңғы Сұраныс жеделхатымен бірдей FCB бір бастамашыдан алса (сол SA), бұл сұрауды қайталауды көрсетеді. Жауап беруші өз кезегінде дайын болған растау немесе жауап жеделхатын қайта жіберуі керек. Жоғарыда аталған растауға немесе басқа мекенжайы (SA немесе DA) расталмаған жеделхат алынғанға дейін (Деректерді растаусыз жіберу, SDN) жауап беруші соңғы растау немесе жауап жеделхатын кез келген ықтимал сұрауды қайталауға дайын болуы керек. . Мақұлданбаған және Сұраныс FDL күйі, сәйкестендіргіші және LSAP күйі бар Сұраныс жеделхаттары жағдайында FCV=0 және FCB=0; жауап берушінің бағалауы енді қажет емес.

b5 b4 Бит орны
FCB FCV Шарт Мағынасы Әрекет
0 0 DA = TS/127 Растаусыз сұрау
FDL күйін/ идентификациясын/ LSAP күйін сұрау
Соңғы растауды жою
0/1 0/1 DA#TS Басқа жауап берушіге сұрау
1 0 DA = TS Бірінші өтініш FCBM:= 1
SAM:=SA
Соңғы растауды/жауапты жою
0/1 1 DA = TS
SA = SAM
FCB#FCBM
Жаңа сұрау Соңғы растауды/жауапты жою
FCBM:=FCB
Қайталау әрекетіне дайын болу үшін растауды/жауапты ұстаңыз
0/1 1 DA = TS
SA = SAM
FCB = FCBM
Қайталап сұрау FCBM:=FCB
Растауды/жауапты қайталаңыз және дайын күйде ұстауды жалғастырыңыз
0/1 1 DA = TS
SA#SAM
Жаңа бастамашы FCBM:=FCB
SAM:= SA Қайталау әрекетіне дайын болу үшін растауды/жауапты ұстаңыз

FCBM жадта FCB сақтайды SAM жадта SA сақтайды




Жоғарғы