Facebookda komputerimde orfoqrafiyanı necə tənzimləyə bilərəm
So far we have only seen examples of basic data stored in this structure where the type of data is implicit but in most files you are likely to encounter you will see additional data relating to the type of the objects being stored.
Geek post: NSKeyedArchiver files – what are they, and how can I use them?
If you have spent any time investigating iOS or OSX devices you will probably have come across files (usually property lists) making reference to NSKeyedArchiver. Certainly, in my experience working with iOS, these files can often contain really interesting data (chat data for example) but the data can appear at first glance unstructured and difficult to work with.
In this blog post I aim to explain where these files come from, how they are structured and how you can get the most out of them.
Remember, remember…
NSKeyedArchiver is a class in the Mac programming API which is designed to serialise data. Data serialisation is the process through which data belonging to a program currently held in memory is written to a file on disk, so that it may be reloaded into memory at some point in the future.
This process can be achieved in a number of ways depending on the requirements of the programmer; however, NSKeyedArchiver provides a convenient way for entire “objects” in memory to be serialised, so it is a widely-used method.
Let’s take a moment to consider what is meant by an “object” in terms of programming (don’t worry; I’m not going to get too programmery). Many modern programming languages allow for (or are entirely based upon) the Object Oriented Programming paradigm. Put very generally this means that they are based around data structures (objects) which contain both data fields and built-in functionality (usually known as “methods”).
So let’s imagine that we were writing the code to define a “Person” object: we might define data fields such as: “Name”; “Age”; “Height”; and “Weight” – but we might also want to give it functionality. For example: “Speak” and “Wave”.
Obviously, a “Car” object would be different from a “Person” – it would have data fields like: “Make”; “Model”; and “Fuel-Type”. It might also have a data field for “Driver” which would hold a reference to a “Person” object.
A “Road” object might have a data fields for: “Name”; “Length”; and “Speed-Limit” along with a data field containing a collection of “Car” objects (each having a reference to a “Person” object in their “Driver” data field).
Similar (and often far more complicated) data structures might be represented in a chat application: a “Message-List” object containing a collection of “Message” objects containing fields for “Sent-Time”, “Message-Text” and “Sender”, which itself contains a reference to a “Contact” object which contains fields for “Nickname”, “Email-Address” and so on.
It’s these kinds of data structures that NSKeyedArchiver converts from objects in memory and stores as a file which can subsequently be loaded back into the memory to rebuild the structure.
So what must NSKeyedArchiver store in order to achieve this? Well, there are two requirements: it has to store details of the type of object it’s serialising; and it has to store the data held in the objects (and the correct structure of the data).
NSKeyedArchiver property lists
NSKeyedArchiver serialises the object data into a binary property list file, the basic layout of which is always the same:
$archiver NSKeyedArchiver $objects Alex Name CF$UID 1 $top root CF$UID 2 $version 100000
Listing 1: Overview of an NSKeyedArchiver XML property list file.
In Listing 1 we have an example of an NSKeyedArchiver property list (converted to XML for ease of reading). At the top level, every NSKeyedArchiver file is made up of a dictionary with four keys.
Two of the keys simply provide metadata about the file: the “$archiver” key should always be followed by a string giving the name of the archiver used to create this file, which should obviously always be “NSKeyedArchiver” and the “$version” key should be followed by an integer giving the version of the archiver (100000 appears to be the only valid value).
The other two keys (“$objects” and “$top”) contain the data that has been serialised and its structure.
The “$objects” key is followed by an array containing all the pieces of data involved in the serialisation, but stored flat with little or no structure. Each of these pieces of data can be understood as being enumerated starting from zero. Within this array of objects may be data which contains the structure shown in Listing 2:
CF$UID 0
Listing 2: an example of the CF$UID data type.
The CF$UID data type in Listing 2 is a dictionary with a single key (“CF$UID”) which is followed by an integer number (this layout is what you will see when the property list is represented in XML; in the raw binary format the “UID” data type is a separate entity which doesn’t require the dictionary structure).
These data types represent a reference to another entity in the “$objects” array. The number of the CF$UID gives the position of the array. Consider the snippet shown in Listing 3:
$objects Alex Name CF$UID 1
Listing 3: an example of a “$objects” array.
Listing 3 shows an “$objects” array containing three pieces of data. Indexing them starting from 0 we have:
- A null
- A string containing the value “Alex”
- A dictionary
The dictionary at index 2 contains a single key: “Name”. The following value is a “CF$UID” data type referencing index 1 in the “$objects” array so we could consider the data to be equivalent to Listing 4:
$objects Alex Name Alex
Listing 4: the “$objects” array from Listing 3 “unpacked”.
This example is very simplistic; in reality the structure revealed by unpacking the object array can be extremely deeply nested with objects containing references to objects containing references to objects…and so on.
The observant among you may be thinking “this seems like a very inefficient way to represent the data”, and for this example you’d certainly be right! However, in most real-life cases the complex data held in these files contains many repeating values which, when arranged this way, only have to be stored once but can be referenced in the “$objects” array multiple times.
The “$top” key is our entry point to the data, so it is the data held at this key that represents the total structure of the object that has been serialised. This key will be followed by a single dictionary which again contains a single key “root”. The “root” key will be followed by a single CF$UID data type which will be a reference the top level object in the “$objects” array.
Returning to the example in Listing 1 the “root” is referencing the object at index 2 in the objects array. So expanding this, our complete data structure is shown in Listing 5:
$top root Name Alex
Listing 5: Expanded “$top” object, showing complete data structure.
A sense of identity
So far we have only seen examples of basic data stored in this structure where the type of data is implicit but in most files you are likely to encounter you will see additional data relating to the type of the objects being stored.
Listing 6 shows an unpacked “$top” object from a “CHATS2.plist” file produced by the iOS application “PingChat”:
$top root $class $classes NSMutableDictionary NSDictionary NSObject $classname NSMutableDictionary NS.keys pingchat NS.objects $class $classes NSMutableArray NSArray NSObject $classname NSMutableArray NS.objects $class $classes BubbleItem NSObject $classname BubbleItem state 1 image $null msg Yo author testingtesting time $class $classes NSDate NSObject $classname NSDate NS.time 307828812.649871
Listing 6: Expanded “$top” object taken from a PingChat “CHATS2.plist” file.
In Listing 6 we can begin to see how complex the serialised data can become (and this is a simpler example). However, if you keep your cool and realise that the data is still well-structured it is possible to parse the data into something more meaningful.
One new data structure we encounter for the first time here is the “$class” structure. “$class” isn’t part of the data itself, but rather information about which type of object has been serialised. This information is obviously important when the program that serialised the data comes to deserialise it, but we can also use it to give us clues about the meaning of the data; consider the snippet in Listing 7:
$class $classes NSMutableArray NSArray NSObject $classname NSMutableArray NS.objects $class $classes BubbleItem NSObject $classname BubbleItem state 1 image $null msg Yo author testingtesting time $class $classes NSDate NSObject $classname NSDate NS.time 307828812.649871
Listing 7: Snippet of a single object in a PingChat “CHATS2.plist” file.
Let’s take a look at the objects involved here and what the “$class” sections can tell us about the data held. The “$class” structure takes the form of a dictionary containing two keys. The “$classname” section is fairly straightforward; it simply gives us the name of the type of object we’re dealing with.
So in the case of the first “$class” structure encountered, we find that the object is of type “NSMutableArray”, which a quick Google search tells us is a “Modifiable array of objects” – so the data held in this object is going to take the form of an array or list.
The other key in the “$class” structure is “$classes”; this is a little more subtle and requires a little more explanation of one of the key concepts in most object-oriented programming languages: inheritance.
Think back to the explanation of the “Person” object. A “Person” object had the fields: “Name”; “Age”; “Height”; and “Weight” and the functionality to “Speak” and “Wave”. Now imagine that we wanted to create a new type of object: “DigitalForensicAnalyst”. We would want this new type of object to have some specialised functionality: “Image”; “Analyse”, and so on.
However, a “DigitalForensicAnalyst” is a “Person” too – they have a name, they can speak and wave. Now, programmers are stereotyped as being lazy (because they are) so it is unlikely that after spending all that time writing and debugging the code to represent a “Person” that they are going to duplicate all that hard work when it comes to creating a “DigitalForensicAnalyst”.
Instead they would have the “DigitalForensicAnalyst” object inherit the functionality from “Person”; this means that only the new functionality of “Image” and “Analyse” need be created from scratch, all of the other functionality comes free thanks to this inheritance.
Coming back to the “$classes” key, this will be followed by an array containing the names of all of the types that this object inherits from. So in the case of our first “$class” structure we can see that the “NSMutableArray” inherits functionality from both “NSArray” and “NSObject” which may give us further hints about what data might be held.
So, this “NSMutableArray” is going to contain a collection of other objects, and looking at the rest of this object’s structure we find a key “NS.Objects” which is followed by an array containing just that collection. This array has only one item, another object containing a “$class” definition, so let’s take a look. This time our “$classname” is particularly useful: “BubbleItem” – making reference to the “speech bubbles” displayed on screen; and indeed we find message details (author, message text, timestamp) in the object’s data fields.
There’s got to be an easier way…
NSKeyedArchiver files can contain really key evidence but even a data-sadist like me is going to lose their mind converting all of these files into a usable format by hand; so how can we speed things up?
Well our PIP tool has a “Unpack NSKeyedArchiver” feature which reveals the object structure so that you can use XPaths to parse the file (either by using one of many already in the included XPath library or by writing your own).
Also, if you are a Python fan (if not, why not?) I have updated our ccl_bplist python module, which you can get here, with a “deserialise_NsKeyedArchiver” function to unpack the “$top” object.
I hope you found this blog post useful. As always, if you have any questions or suggestions, leave a comment below or contact the R&D team at research@ccl-forensics.com.
Alex Caithness, Lazy Data-Sadist, CCL-Forensics
Special thanks to Arun Prasannan for assisting the BlogKeeper by rendering the code readable.
Facebookda komputerimde orfoqrafiyanı necə tənzimləyə bilərəm
Əgər siz mobil qadjet, smartfon işlətmirsinizsə, Amazon, Ebay, Linkedin şirkətləri barədə məlumatınız yoxdursa, komputerinizə Microsoft Office proqramlarından başqa heçnə yazılmayıbsa onda məqaləni bağlayın – Siz Javadan çox uzaqsınız (açığı onda məqalə necə əlinizə düşüb, bilmirəm). Yox, əgər oxumağa davam eləmək istəyirsinizsə, hazır olun. Sizə ən maraqlı proqramlaşdırma dillərindən biri olan Java haqqında danışacağam. Java dünyaya 23 May 1995-ci ildə “Sun Microsystems” şirkətində gəldi. Yeri gəlmişkən, bir müddət sonra bu şirkəti onun Java adlı məhsulu ilə birgə Oracle alır. Yarandıqda bu balaca proqramlaşdırma dilinin adı Oak (Palıd) idi. Jeyms Qoslinq onu əslində kiçik elektron məişət cihazları üçün yaratmışdı. Az müddət keçdikdən sonra o böyüdü və adını indi bildiyimiz Javaya dəyişdi. Deyilənə görə Qoslinq bu adı sevdiyi Java kofesinin şərəfinə dəyişdi. Bəzi mənbələrdə isə ümumiyyətlə Javanın ilkin olaraq bir kiçik kofe aparatı üçün yazıldığı qeyd olunur. Böyüdükdə təbii ki, gördüyü işin də həcmi genişləndi. Hal hazırda Javada klient proqramlarından tutmuş server təminatına qədər, köhnə mobil oyunlarından tutmuş müasir Android tətbiqlərinə qədər milyonlarla proqram təminatı yazılır. Bunlar barədə birazdan daha ətraflı danışacağıq. İndi isə istərdim ki, siz Javaya həsr olunmuş kiçik komedik bir kinoya baxasınız. (çox maraqlıdır)
Bənzər xəbər
Bir ‘Java’ proqramçısı illik nə qədər qazanır? Necə ‘Java’ proqramçısı ola bilərəm?
Kinoya baxdız? Maraqlıdır? Yəqinki başa düşdüz niyə Java belə geniş yayılıb. Sərhədsizlik, asanlıq, azadlıq, geniş imkanlar. Dil özündə bir növ gənclik üsyanı daşıyırdı və bu da onun qısa bir zamanda sürətlə yayılmasına səbəb oldu. Düzdür indi Node.js, C#, Dart, Go kimi yeni dillər yaranıb, Javanın artıq 22 yaşı var. Bəli, bu rəqəm artıq bir proqramlaşdırma dili üçün qoca sayılır. Amma necə deyərlər “old but gold”. Dil hələ də o aktivliyini itirməyib. Əmin olmaq üçün dice.com saytında “Java” dilini axtarışa daxil edin və qlobal bazarda nə qədər vakansiya mövcud olduğunu özünüz görəcəksiz. Yox, əgər siz ölkədaxilində iş düşünürsünzsə o işi özünüz də qura bilərsiniz. Javanı bildikdə siz Android sistemi üçün mükəmməl tətbiqlər yaza biləcəksiniz. Bilmək olmaz, bəlkə siz Angrybirds kimi bir oyun yazacaqsınız? Bəlkə siz yeni bir fotoredaktor, və ya videoredaktor yazacaqsız? Ola bilər ki, tam ciddi bir hesablama sistemi yaratdınız. Sərhəd yoxdur. Nə istəsəz yaradın. (bircə subway surfers-dən başqa,xahiş edirəm. O oyunu hələdə metroda oynayan görürəm).
Java öyrənmək üçün kurs? Həm də Bakıda. Buradan tanış ola bilərsiniz.
Mobildən o qədər danışdım ki, desktop yaddan çıxdı. Siz Gmail işlədirsiz? Bilirsiz ki o da Javada kodlanıb? İçərisində mürəkəb hesablama mexanizmi olan bir çox saytların “backend” hissəsində məhz Java durur. Masaüstü oyunların sayı o qədərdə çox deyil. Amma Javada yazılmış bir oyun sizə deyə bilərəm hansını ki mütləq ki, görmüsüz bəlkə oynamısız da. Minecraft! Bəli bəli. Bu yekəpikselləri olan maraqlı sərhədsiz online oyun məhz Javada yazılmışdır.
Oracle şirkətinin verdiyi rəsmi məlumata görə, hal hazırda 3 milyardan çox cihaz Java ilə işləyir. Bu o deməkdir ki siz Javadan istifadə edərək “hardware” ixtiralar da edə bikərsiniz.
Goldman Sachs, Citigroup, Barclays, Standard Charted şirkətlərini tanıyırsız? (Wolf of Wall Street kinosundaki investisiya şirkətlərinin bənzərləri). Yəgin onların hər saniyə milyonlarla məlumatı hesabladığını başa düşürsünüz. Baxın bu şirkətlərin proqram təminatları da Javada yazılır. Gəldik çatdıq məqalənin sonuna. Düzdür mən sizə böyük hesabatlar alqoritmlar vermədim. Məqsədim sizi maraqlandırmaq və sizə bu dili öyrənməyə motivasiya vermək idi. Və məncə mən buna nail oldum. Ümüdvaram ki, bu məqaləni oxuyandan sonra bir neçə insan bu dili öyrənəcək və yaxın zamanlarda maraqlı proqramlarla bizim marağımızı cəlb edəcəklər. 1 dəqiqə, hələ bitmədi. “Bu dili necə və hansı vasitələrlə öyrənə bilərik?” – desəz, sizə bir şad xəbər verə bilərik. 1 il müddətində sizi mütəxəssis səviyyəsində yetişdirə biləcək və qlobal sertifaktla təmin edəcək IT Kurs – Step IT Akademiya Java üzrə proqram təminatının yaradılması kurslarına start verib. Nə üçün Java öyrənməliyik sualına isə ən yaxşı cavabı elə Akademiyanın özü verir.
İnformasiya təhlükəsizliyi/Kompüter şəbəkələrində təhlükələrin təsnifatı
Təhlükə dedikdə sistemə dağılma, verilənlərin üstünün açılması və ya dəyişdirilməsi, xidmətdən imtina formasında ziyan vurulmasına səbəb ola bilən istənilən hal, şərait, proses və hadisələr nəzərdə tutulur.
Təhlükələri müxtəlif siniflərə ayırmaq olar. Meydana çıxma səbəblərinə görə təhlükələri təbii və süni xarakterli təhlükələrə ayırırlar. Süni xarakterli təhlükələr də öz növbəsində bilməyərəkdən və qəsdən törədilən təhlükələrə bölünür. Təsir məqsədlərinə görə təhlükələrin üç əsas növü ayırd edilir:
- İnformasiyanın konfidensiallığının pozulmasına yönələn təhlükələr;
- İnformasiyanın bütövlüyünün pozulmasına yönələn təhlükələr;
- Əlyetənliyin pozulmasına yönələn təhlükələr (DoS hücumlar, Denial of Service – xidmətdən imtina).
- Konfidensiallıq informasiyanın subyektiv müəyyən olunan xassəsidir. Verilən informasiyaya müraciət icazəsi olan subyektlərin siyahısına məhdudiyyət qoyulmasının zəruriliyini göstərir. Konfidensiallığın pozulmasına yönələn təhlükələr məxfi və ya gizli informasiyanın üstünün açılmasına yönəlib. Belə təhlükələrin reallaşması halında informasiya ona müraciət icazəsi olmayan şəxslərə məlum olur.
- Bütövlük – informasiyanın təhrifsiz şəkildə mövcudolma xassəsidir. İnformasiyanın bütövlüyünün pozulmasına yönələn təhlükələr onun dəyişdirilməsinə və ya təhrifinə yönəlib ki, bunlar da onun keyfiyyətinin pozulmasına və tam məhvinə səbəb ola bilər. İnformasiyanın bütövlüyü bədniyyətli tərəfindən qəsdən və ya sistemi əhatə edən mühit tərəfindən obyektiv təsirlər nəticəsində pozula bilər.
- Əlyetənlik – yolverilən vaxt ərzində tələb olunan informasiya xidmətini almaq imkanıdır. Həmçinin əlyetənlik – daxil olan sorğulara xidmət üçün onlara müraciət zəruri olduqda uyğun xidmətlərin həmişə hazır olmasıdır. Əlyetənliyin pozulmasına yönələn təhlükələr elə şəraitin yaradılmasına yönəlib ki, bu zaman müəyyən qəsdli hərəkətlər ya sistemin iş qabiliyyətini aşağı salır, ya da sistemin müəyyən resurslarına girişi bağlayır.
Təhlükələr digər əlamətlərinə görə də təsnif oluna bilər:
- Baş vermə ehtimalına görə (çox ehtimallı, ehtimallı, az ehtimallı);
- Meydana çıxma səbəblərinə görə (təbii fəlakətlər, qəsdli hərəkətlər);
- Vurulmuş ziyanın xarakterinə görə (maddi, mənəvi);
- Təsir xarakterinə görə (aktiv, passiv);
- Obyektə münasibətinə görə (daxili, xarici).
Daxili və xarici təhlükələrin nisbətini təqribi olaraq belə xarakterizə etmək olar.
Təhlükələrin 80%-i təşkilatın öz işçiləri tərəfindən onların bilavasitə və ya dolayısı yolla iştirakı ilə baş verir. Təhlükələrin 20%-i kənardan icra olunur. Kompyuter virusları. Kompyuter virusları təxminən 1980-ci illərin əvvəllərində meydana çıxmışdır. «Kompyuter virusu» termini 1984-cü ildə ABŞ-da keçirilən informasiya təhlükəsizliyi üzrə 7-ci konfransda Fred Koen tərəfindən işlədilmişdi. Kompyuter viruslarının ümumi qəbul edilmiş tərifi yoxdur. Biz aşağıdakı tərifdən istifadə edəcəyik. Kompyuter virusu – elə proqramdır ki, özünü təxminən bioloji virus kimi aparır: çoxalır, maskalanır və ziyanlı təsirlər göstərir (əməliyyatlar yerinə yetirir). Virusları aşağıdakı əlamətlərə görə təsnif etmək olar:
- yaşayış mühitinə görə: fayl virusları (com, exe, bat, doc virusları), yükləmə virusları, makro viruslar;
- yaşayış mühitini yoluxdurma üsuluna görə: rezident və qeyri-rezident;
- əməliyyat sisteminə görə: MS-DOS virusları, Windows virusları, *NIX virusları və s.;
- destruktiv imkanlarına görə: ziyansız, təhlükəsiz, təhlükəli, çox təhlükəli;
- virus alqoritminin xüsusiyyətlərinə görə: «tələbə» virusları, kompanyon-viruslar, «soxulcanlar» (worm), «stels»-viruslar («görünməz» viruslar), «polimorf»-viruslar (özüşifrlənən viruslar), şəbəkə virusları və s.
Virusların yaradılması. Hər gün 10-15 yeni növ virus meydana çıxır. Virusların miqdarı həndəsi silsilə üzrə artır. Bunu statistika və real həyat təsdiq edir. 1990-cı ildə təxminən 500 virus, 1992-ci ildə – 3 000, 1994-cü ildə – 5 000, 1996 – 9 000, 1999 – 30 000, 2001 – 50 000, 2004-cü ildə 112 000-dən çox virus məlum idi.
Kompyuter viruslarının sayının artması ilk növbədə onunla bağlıdır ki, proqramlaşdırmanı bir qədər öyrəndikdən sonra istənilən şəxs virus yaza bilər. Bu işdə ona leqal və qeyri-leqal ədəbiyyat, virusların yazılması üçün xüsusi proqram təminatı kömək edə bilər. Hətta müxtəlif mutasiya generatorları mövcuddur ki, birinci kurs tələbəsinin yaratdığı sadə virusdan onun köməyi ilə mürəkkəb virus yaratmaq olar.
Virusların yayılması. Şəbəkə və kommunikasiya texnologiyalarında hər bir yenilik virusların yaradılması və yayılması üçün yeni imkanlar, yollar açır. Yaxın vaxtlara kimi viruslar disketlər və digər daşıyıcılar vasitəsi ilə yayılırdı, İnternet viruslar üçün geniş magistral açdı. Kompyuter virusları Internetdə bioloci virusların real dünyada yayıdmasından daha sürətlə yayılır. 2003-cü ildə Slammer “soxulcanı” 10 dəqiqə ərzində 75 min kompyuter yoluxdurmuşdu.
1999-cu ildə ilk dəfə dünya miqyasında virus epidemiyası yaranmışdı. Melissa virusu on minlərlə kompyuteri yoluxdurmuş və 80 milyon dollar ziyan vurmuşdu. Bu insidentdən sonra dünyada antivirus proqramlara böyük tələb yarandı. 2000-ci ilin mayında Melissanın rekordunu bir neçə saat ərzində milyonlarla kompyuteri yoluxdurmuş I Love You! virusu təzələdi. Praktik olaraq virusla “yoluxdurmaq” mümkün olmayan fayl növü qalmamışdır. Artıq mobil telefonları və proqram təminatından istifadə edən dizər qurğuları yoluxduran viruslar da sürətlə yayılır.
Virus müəllifləri təkcə texnoloci zəifliklərdən deyil, “psixoloci” zəifliklərdən də istifadə edirlər. Tədqiqatlar göstərmişdir ki, Anna Kournikova, Sean Connery, Julia Roberts, Elvis Presley Lives, Explicit Hot Porn kimi viruslardan əziyyət çəkmiş hər beşinci İnternet istifadəçisi edilmiş xəbərdarlıqlara baxmayaraq həmin adlı qoşma faylları açmışdılar. Antivirus proqramlarının növləri. Viruslarla mübarizə proqramlarının bir neçə növü var – skanerlər (başqa adı: faqlar, polifaqlar), disk müfəttişləri (CRC-skanerlər), rezident monitorlar və immunizatorlar.
Skanerlər. Antivirus skanerlərin iş prinsipi faylların və sistem yaddaşının yoxlanmasına və onlarda məlum və ya yeni (skanerə məlum olmayan) virusların axtarışına əsaslanır. Məlum virusların axtarışı üçün «maska»lardan istifadə edilir. Virusun maskası konkret virus üçün spesifik olan müəyyən sabit kodlar ardıcıllığıdır. Bir çox skanerlərdə həmçinin «evristik skanlama» alqoritmlərindən istifadə edilir, yəni yoxlanan obyektdə komandalar ardıcıllığı analiz edilir, müəyyən statistika toplanır və hər bir yoxlanan obyekt üçün qərar qəbul edilir («ola bilsin yoluxub» və ya «yoluxmayıb»).
Disk müfəttişləri. Disk müfəttişlərinin (CRC-skanerlərin) iş prinsipi diskdə olan fayllar və sistem sektorları üçün CRC-cəmlərin (nəzarət cəmlərinin) hesablanmasına əsaslanıb. Rezident monitorlar. Rezident monitorlar – daim operativ yaddaşda yerləşən və disklə və operativ yaddaşla aparılan əməliyyatlara nəzarət edən proqramlardır. Məhz bu proqramlar sistemin real yoluxma anına kimi virusu aşkarlamağa imkan verir (əvvəlki ikisindən fərqli olaraq).
İmmunizatorlar. İmmunizatorların iki növü var: yoluxma barədə məlumat verən immunizatorlar və hər-hansı növ virusla yoluxmanın qarşısını alan immunizatorlar. Onlardan birincisi adətən faylların sonuna yazılır və hər dəfə fayl işlədikdə onun dəyişməsini yoxlayır. Bu immunizatorların bir nöqsanı var – stels-virusla yoluxma barədə məlumat verməyə qabil deyil. Buna görə bu immunizatorlar hazırda praktikada istifadə edilmir. İkinci növ immunizator sistemi hər hansı müəyyən növ virusla yoluxmaqdan mühafizə edir. Diskdə fayllar elə modifikasiya edilir ki, virus onları artıq yoluxmuş fayl kimi qəbul edir. Rezident virusdan mühafizə üçün kompyuterin yaddaşına virusu imitasiya edən proqram yüklənir. Virus işə düşdükdə onunla rastlaşır və hesab edir ki, sistem artıq yoluxub.
Comments are closed, but trackbacks and pingbacks are open.