Création d'un type de fichier connu de l'utilisateur pour R-Studio. Méthodes de détection des fichiers "collés" Recherche de fichiers de signature perdus

Le concept de " nombre magique"Dans la programmation a trois significations:

  • Signature des données
  • Valeurs uniques sélectionnées qui ne doivent pas coïncider avec d'autres valeurs (par exemple, UUID)
  • Mauvaise pratique de programmation.

Signature des données

nombre magique, ou alors signature- une constante entière ou de texte utilisée pour l'identification sans ambiguïté d'une ressource ou de données. Un tel nombre en soi n'a aucun sens et peut provoquer un découragement, après avoir rencontré le code de programme sans contexte ou commentaire approprié, une tentative de la modification d'une autre, voire proche de la valeur, peut entraîner des conséquences absolument imprévisibles. Pour cette raison, ces chiffres étaient ironiquement appelés magiques. Actuellement, ce nom est fermement fixé comme un terme. Par exemple, toute classe compilée de la langue Java commence par un "numéro magique" hexadécimal 0xcafafebabe. La seconde est un exemple bien connu - tout fichier exécutable Microsoft Windows avec une extension .exe commence par une séquence d'octets 0x4d5a (qui correspond à ASCII -SIMVOLS MZ - Initiales Mark Zbikovski, l'un des créateurs MS-DOS). Un exemple moins connu est un pointeur ininitialisé de Microsoft Visual C ++ (à partir de la version 2005 de Microsoft Visual Studio), qui en mode de débogage a une adresse 0xDeadbeef.

Dans les systèmes d'exploitation de type UNIX, le type de fichier est généralement déterminé par la signature de fichier, quelle que soit l'expansion de son nom. Pour interpréter la signature de fichier en eux, l'utilitaire de fichier standard est fourni.

Programmation de mauvaise pratique

En outre, les «nombres magiques» sont appelés mauvaises pratiques de programmation lorsque l'importance numérique est trouvée dans le texte source et n'est pas évidente que cela signifie. Par exemple, un tel fragment écrit en Java sera mauvais:

drawsprite (53, 320, 240);

final int screyc_width \u003d 640; Final int screyc_height \u003d 480; Final int screyc_x_center \u003d écran_width / 2; Final int screyc_y_center \u003d screen_height / 2; Final int sprite_crosshair \u003d 53; ... Drawsprite (Sprite_crosshair, Screen_x_Center, Screen_Y_Center);

Maintenant, il est clair: cette ligne apporte au centre de l'écran Sprite - Trash croisé. Dans la plupart des langages de programmation, toutes les valeurs utilisées pour de telles constantes seront calculées au stade de la compilation et sont substituées à l'utilisation de valeurs. Par conséquent, une telle modification du texte source ne détériore pas la vitesse du programme.

De plus, des nombres magiques constituent une source potentielle d'erreurs dans le programme:

  • Si le même numéro magique est utilisé dans le programme plus d'une fois (ou peut être utilisé potentiellement), sa modification nécessitera un recours de chaque entrée (au lieu d'une édition de la valeur nommée constante). Si toutes les entrées ne seront pas corrigées, au moins une erreur se posera.
  • Au minimum, dans l'une des occurrences, le numéro magique peut être écrit avec une erreur initialement et il est assez difficile de détecter.
  • Le numéro magique peut dépendre du paramètre implicite ou d'un autre nombre magique. Si ces dépendances, non sélectionnées explicitement, ne seront pas satisfaites, il y aura au moins une erreur.
  • Lors de la modification des occurrences d'un nombre magique, il est possible de tromper un autre nombre magique, indépendant, mais ayant la même valeur numérique.

Nombres magiques et plate-forme multiples

Parfois, les nombres magiques du codes de cadres croisés. Le fait est que dans le système d'exploitation SI dans 32 et 64 bits, la taille des types de caractères, courtes et longues longues est garantie, tandis que la taille INT, longue, taille_t et ptrdiff_t peut varier (dans les deux premiers - selon Les préférences des développeurs de compilateur, deux derniers - selon la décharge du système cible). Dans un code écrit ancien ou non qualifié, des "nombres magiques", ce qui signifie n'importe quel type de taille, lors de la mise sous tension des machines avec un autre bit, ils peuvent entraîner des erreurs difficiles à bogues.

Par example:

const taille_t number_of_elements \u003d 10; Long A [Number_of_elements]; MEMSET (A, 0, 10 * 4); // mal - il est entendu que longtemps est de 4 octets, un nombre magique d'éléments est utilisé. Memset (A, 0, Number_Of_Elements * 4); // incorrectement - cela signifie que longtemps est égal à 4 octets MEMSET (A, 0, Number_Of_Elements * Tailleof (Long)); // pas entièrement correct - duplication du nom de type (si le type changera, vous devrez changer ici) MEMSET (A, 0, Number_Of_EELS * Taille de (A [0])); // C'est vrai, de manière optimale pour les matrices dynamiques de taille non nulle Memset (a, 0, taille de (a)); // droite, de manière optimale pour les tableaux statiques

Nombres qui ne sont pas magiques

Tous les chiffres ne doivent pas être transférés aux constantes. Par exemple, code sur

Recherche Lors de la numérisation de fichiers de types connus (ou, comme on dit, la recherche de fichiers de signature) est l'une des utilisées les plus efficaces dans l'utilitaire de récupération de données R-Studio. L'utilisation d'une signature donnée vous permet de restaurer les fichiers d'un type spécifique dans le cas où des informations partiellement ou complètement absentes (corrompues) sur la structure de répertoire et les noms de fichiers.

Habituellement, une table des partitions de disque est utilisée pour définir l'emplacement du fichier. Si vous comparez un disque avec un livre, la table de partition sera similaire à sa table des matières. Lorsque la numérisation R-Studio recherche les fichiers de types connus dans la table de partition de disque en fonction d'une signature spécifiée spécifique. Cela devient possible en raison du fait que presque tous les types de fichiers ont une signature ou un modèle de données unique. Les signatures de fichiers sont dans un endroit spécifique au début du fichier et dans de nombreux cas également à la fin du fichier. Lorsque la numérisation R-Studio correspond aux données trouvées avec les signatures des fichiers de types connus, ce qui leur permet d'identifier et de restaurer leurs données.

Avec l'aide de fichiers de numérisation des types connus de R-Studio, il vous permet de restaurer les données des disques reformatés, ainsi que les sections dont ils ont été écrasés. De plus, si la partition du disque est écrasée, endommagée ou supprimée, la numérisation des types de types connus est le seul possible.

Mais presque toujours et dans tout ce qu'il y a des inconvénients, et les fichiers des types connus utilisés dans R-Studio ne font pas exception. Ainsi, lorsque la numérisation des fichiers de types connus de R-Studio vous permet de restaurer uniquement des fichiers non-néphomie, mais, comme déjà mentionné, dans la plupart des méthodes possibles les plus récentes.

Le R-Studio inclut déjà les signatures des types de fichiers les plus courants (voir la liste complète des fichiers de types connus peut être dans la section R-Studio Online.)

Si nécessaire, l'utilisateur peut ajouter de nouveaux types de types de fichiers au R-Studio. Par exemple, si vous avez besoin de trouver des fichiers de type unique ou conçu après la date de la dernière version de R-Studio, vous pouvez ajouter vos propres signatures aux fichiers de types connus. Suivant sera considéré comme ce processus.

Fichiers personnalisés de types célèbres
Les signatures de fichier personnalisées des types connus sont stockées dans le fichier XML spécifié dans la boîte de dialogue Paramètres. Ajouter une signature se compose de deux parties:

  1. Identifiez la signature de fichier au début du fichier et s'il est à la fin du fichier.
  2. Création d'un fichier XML contenant une signature de fichier et d'autres informations sur le type de fichier.

Tout cela peut être effectué à l'aide de R-Studio. Dans ce cas, vous n'avez pas besoin d'être un spécialiste de la préparation (édition) des documents XML ou dans le domaine de l'édition hexadécimale - dans ce manuel (article), orienté vers le niveau initial de l'utilisateur, toutes les étapes de ce processus seront considéré en détail.

Exemple: Ajout de la signature du fichier de format MP4 (codec xdcam-ex)
Envisagez d'ajouter une signature de fichier sur l'exemple d'un fichier.mp4 créé à l'aide de Sony XDCAM-EX. Il peut l'utiliser, par exemple, en cas de dommages à la carte SD pour que vous n'ayez pas eu le temps d'enregistrer sur le disque dur de l'ordinateur.

Première étape: Définition de la signature de fichier
Pour déterminer la signature de fichier, envisagez des exemples de fichiers du même format.

Laissez ces quatre fichiers vidéo avec Sony XDCAM-EX:
Zrv-3364_01.mp4
Zrv-3365_01.mp4
Zrv-3366_01.mp4
Zrv-3367_01.mp4

Pour la facilité de considération, que ce soit un petit fichier. Les fichiers plus grands sont plus difficiles à visualiser sous forme hexadécimale.

1. Ouvrez les fichiers dans R-Studio. Pour ce faire, cliquez sur chaque fichier avec le bouton droit de la souris et sélectionnez Afficher / Modifier (Afficher / Modifier) \u200b\u200bdu menu contextuel.

2. Comparez les fichiers. Nous rechercherons le même modèle trouvé dans les quatre fichiers. Il sera signature du fichier. En règle générale, les signatures de fichier sont au début du fichier, mais parfois à la fin.

3. Déterminez la signature de fichier au début du fichier. Dans notre exemple, c'est au tout début du fichier. Notez qu'il n'arrive pas toujours - souvent la signature de fichier est au début du fichier, mais pas dans la première ligne (déplacement).

À partir des images suivantes, il s'ensuit que le contenu des quatre fichiers est différent, mais ils commencent tous avec la même signature de fichier.


Cliquez sur l'image pour l'augmenter.


Cliquez sur l'image pour l'augmenter.


Cliquez sur l'image pour l'augmenter.


Cliquez sur l'image pour l'augmenter.

La zone sélectionnée sur les images est la signature de fichier de ce type de fichiers. Il est représenté dans les textes et hexadécimaux.

Inv Text Form Fichier Signature a le formulaire suivant:
.... fttypmp42 .... mp42 ........ gratuit

Points (".") Les caractères qui ne peuvent pas être présentés sous forme de texte sont indiqués. Par conséquent, il est également nécessaire de donner une vue hexadécimale de la signature de fichier:
00 00 00 00 66 74 79 6d 70 34 32 32 00 00 00 6D 70 34 32 00 00 00 00 00 00 08 66 72 65 65 65

4. De la même manière, nous définissons la signature de fichier, mais à la fin du fichier. Cela peut être une autre signature de fichier, une autre longueur.

La signature d'image à la fin du fichier est mise en surbrillance dans les images ci-dessous:


Cliquez sur l'image pour l'augmenter.


Cliquez sur l'image pour l'augmenter.


Cliquez sur l'image pour l'augmenter.


Cliquez sur l'image pour l'augmenter.

Veuillez noter que les données sont avant la zone sélectionnée (signature de fichier), dans les quatre fichiers, les mêmes. Il s'agit d'une information technique qui n'est pas une signature de fichier, mais elle suggère que tous les quatre instantanés (fichier) ont été effectués à l'aide d'une caméra avec les mêmes paramètres. Il est généralement possible de distinguer les motifs coïncidants avec des informations techniques de la signature de fichier. Dans notre exemple, dans la dernière ligne avant le début de la signature de fichier, nous voyons le texte 'Enregistrement de type \u003d "normal"', qui indique clairement qu'il s'agit d'une sorte de paramètre de fichier et non de signature. Portez toujours une attention particulière à cette chaîne pour éviter les informations techniques dans la signature de fichier.

Dans notre cas, la signature de fichier est le texte suivant:
...
Rappelez-vous que les points indiquent des caractères qui ne peuvent pas être présentés sous forme de texte.

D'une forme hexadécimale, la signature de fichier a le formulaire suivant:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Remarque: à la fin du fichier, la signature ne sera pas toujours.

Deuxième étape: Création d'un fichier XML décrivant un type de fichier connu
Maintenant, en définissant la signature de fichier, vous pouvez créer un fichier XML et allumer le type de fichiers approprié sur le R-Studio. Ceci peut être fait de deux façons:

2.1 Utilisation de l'éditeur de signature de fichier intégré:
Sélectionnez Paramètres (Outils) Menu (Outils), dans la boîte de dialogue Paramètres qui s'ouvre, cliquez sur l'onglet Types de fichiers connus), puis cliquez sur Modifier les types de fichiers utilisateur.

Cliquez sur l'image pour l'augmenter.

Cliquez sur le bouton Créer le type de fichier (modifier la boîte de dialogue Types de fichiers de l'utilisateur.
Définissez les paramètres suivants:

  • ID est un identifiant numérique unique. Ce nombre sera choisi arbitrairement; Le seul ne doit pas coïncider avec l'identifiant numérique d'un autre type de fichiers.
  • La description du groupe est un groupe dans lequel des fichiers trouvés dans R-Studio seront trouvés. Vous pouvez définir un nouveau groupe ou choisir l'un de ceux qui sont déjà là. Nous aurons ce groupe "Vidéo multimédia (multimédia: vidéo)".
  • Description - Une brève description du type de fichiers. Dans notre exemple, vous pouvez utiliser, par exemple, "Vidéo Sony Cam, XDCAM-EX".
  • Extension - Expansion des fichiers de ce type. Dans notre cas - MP4.

Le paramètre Propriétés (fonctionnalités) est facultatif, dans notre cas, nous n'avons pas besoin de l'utiliser.

Cliquez sur l'image pour l'augmenter.

Ensuite, vous devez entrer la signature de fichier initiale et finale. Pour ce faire, sélectionnez Démarrer (Commencer), puis dans la commande de menu contextuel, ajoutez une signature (ajouter une signature).

Cliquez sur l'image pour l'augmenter.

Puis double-cliquez sur le champ<пустая сигнатура> (Et entrez le texte approprié.

Cliquez sur l'image pour l'augmenter.

Ensuite, créez la signature du fichier final. N'oubliez pas d'entrer 21 dans le champ de colonne de (à partir de).

Cliquez sur l'image pour l'augmenter.

Vous avez créé avec succès votre propre signature de fichiers du type connu.

Maintenant, vous devez le sauvegarder. Il existe deux manières: vous pouvez l'enregistrer dans le fichier par défaut spécifié dans l'onglet Accueil (Main) de la boîte de dialogue Paramètres (sauvegarde) en cliquant sur le bouton Enregistrer. Soit cliquez sur le bouton Enregistrer en tant que ... (Enregistrer sous ...) et enregistrez la signature dans n'importe quel autre fichier.

2.2 Création d'un fichier XML décrivant un type de fichier bien connu, manuellement:
Pour créer ce fichier, utilisez la version XML version 1.0 et le codage UTF-8. Ne désespérez pas si vous ne savez pas ce que c'est - il suffit d'ouvrir n'importe quel éditeur de texte (par exemple, NotePad.exe) et dans la première ligne, entrez le texte suivant:

Ensuite, nous créerons une balise XML définissant le type de fichier (filetype). Prise en compte des attributs précédemment décrits de la balise XML ressemblera à ceci:

Insérez-le immédiatement après

Ensuite, nous définissons la signature de fichier (balise ). La signature initiale (au début du fichier) sera à l'intérieur de la balise sans aucun attributs. Nous utilisons la vue texte de la signature, tout en remplaçant les caractères hexadécimaux qui ne peuvent pas être représentés sous forme de texte. Avant chaque symbole hexadécimal insérer "\\ x" alors la balise Avec la signature de fichier ressemblera à ceci:

Si vous devez également définir la dernière signature (à la fin du fichier). Pour cela, la même balise est utilisée, mais avec l'élément "de" et l'attribut "fin". Il ressemblera à ceci:

Rappelez-vous que dans la signature du fichier final, il n'y avait pas de symboles de non-puts, cependant, il a été empilé et des crochets triangulaires. Pour éviter toute confusion et erreurs dans la syntaxe XML, nous remplacerons les caractères de signature "/" ","<" и ">«Ils sont hexadécimaux.

À la fin des signatures de fichiers, vous devez contenir des étiquettes de fermeture Filetype et la filetypePelist:

Ainsi, tout le dossier devrait ressembler à ceci:


\\ X00 \\ x00 \\ x00 \\ x18ftypmp42 \\ x00 \\ x00 \\ x00 \\ x00mp42 \\ x00 \\ x00 \\ x00 \\ x00 \\ x00 \\ x00 \\ x00 \\ x08free
\\ x3c \\ x2fnonrealtimemeta \\ x3e \\ x0d \\ x0a \\ x00

N'oubliez pas que la syntaxe XML est sensible au registre. Par conséquent, la balise sera correcte , mais non .

Enregistrez le fichier au format texte avec extension.xml. Par exemple: Sonycam.xml.

Nous avons créé votre propre signature des fichiers du type connu. Cet exemple est tout à fait suffisant pour comprendre les principes de base de la création d'un fichier de type utilisateur. Les utilisateurs plus expérimentés peuvent utiliser XML version 2.0. Vous pouvez en savoir plus à ce sujet dans la section de certificats en ligne R-Studio.

Étape 3: Vérifiez et ajoutez un fichier décrivant le type connu de fichiers
Dans la prochaine étape, vous devez ajouter (télécharger) votre fichier XML sur R-Studio. Dans ce cas, il sera automatiquement vérifié.

Télécharger dans le R-Studio créé au fichier XML précédent. Pour ce faire, choisissez les paramètres (Paramètres) Menu Outils (Outils). Dans la zone Types de fichiers de qualité (Types de fichiers de l'utilisateur) Tabs Accueil (Main) Boîte de dialogue Paramètres (Paramètres) Nous ajouterons le fichier XML créé par nous (Sonycam.xml). Cliquez sur le bouton Appliquer.

Cliquez sur l'image pour l'augmenter.

2. Examiner Oui (oui) à la demande de téléchargement d'un nouveau type de fichiers.

Cliquez sur l'image pour l'augmenter.

3. Pour vérifier le fait que le type de fichiers a été chargé avec succès, cliquez sur l'onglet Types de fichiers connus (types de fichiers connus) de la boîte de dialogue Paramètres (Paramètres). Rappelez-vous que nous avons ajouté type de fichier au groupe vidéo multimédia (multimédia: vidéo). Ouverture de ce groupe (dossier), nous devons voir l'élément avec la description spécifiée par nous lors de la création d'un fichier XML: Sony Cam Video, XDCAM-EX (.mp4).

Cliquez sur l'image pour l'augmenter.


Cliquez sur l'image pour l'augmenter.

S'il y a des erreurs dans la syntaxe de fichier, vous verrez le message correspondant:

Cliquez sur l'image pour l'augmenter.

Dans ce cas, vérifiez à nouveau votre fichier XML. N'oubliez pas que la syntaxe XML est sensible au registre et pour chaque balise à la fin, une étiquette de fermeture doit être une étiquette de fermeture.

Étape 4: Testez un fichier décrivant le type connu de fichiers
Pour vérifier l'exactitude du fichier créé par l'utilisateur créé par nous, trouvons nos fichiers.mp4 sur un lecteur flash USB amovible.

1. Sous Windows Vista ou Windows 7, vous effectuerez une mise en forme du disque complet (non rapide) ou utilisera l'utilitaire de nettoyage de disque (par exemple, R-Wipe & Netty) pour supprimer complètement toutes les données disponibles sur le disque de données. Soit un disque USB est décoré dans FAT32 (la taille des fichiers de recherche ne dépasse pas 2 Go).

2. Recréez des fichiers de test sur le disque et redémarrez l'ordinateur de sorte que le contenu de la mémoire cache soit enregistré sur le disque. Vous pouvez également éteindre le disque externe, puis la connecter à nouveau.

3. L'opérateur de disque sera défini comme étant, par exemple, un disque logique F: \\.

4. Démarrez R-Studio. Choisissez notre disque (F: \\) et cliquez sur le bouton Numérisation (Numérisation)

Cliquez sur l'image pour l'augmenter.

5. Dans la boîte de dialogue Scan (Numérisation) dans le système de fichiers, cliquez sur le bouton Modifier ... (Changer ...) et supprimez tous les drapeaux. Ainsi, nous éteignons la recherche de systèmes de fichiers et de fichiers à l'aide de la table de partition.
Cliquez sur l'image pour l'augmenter.

6. Installez la case à cocher Rechercher des types de fichiers (recherche supplémentaire de types de fichiers connus). Cela permettra à R-Studio de rechercher lors de la numérisation des fichiers de types connus.

7. Pour commencer à numériser, cliquez sur le bouton Numériser (Numériser).

8. Attendons que R-Studio scanne le disque. Dans l'onglet Informations de numérisation, la numérisation (progression) sera affichée.


Cliquez sur l'image pour l'augmenter.

9. Une fois la numérisation terminée, sélectionnez les fichiers trouvés supplémentaires (fichiers supplémentaires trouvés) et double-cliquez dessus.


Cliquez sur l'image pour l'augmenter.

10. Nos fichiers de test seront situés dans le dossier vidéo Sony Cam, le dossier XDCAM-EX (ou dans un dossier sous un nom différent, correspondant à la description du type de fichiers spécifié dans la deuxième étape).


Cliquez sur l'image pour l'augmenter.

Vous voyez que les noms de fichiers, les dates et les emplacements (dossiers) n'ont pas été restaurés, car ces informations sont stockées dans le système de fichiers. Par conséquent, dans R-Studio, chaque fichier sera automatiquement affiché avec un nouveau nom.

Cependant, on peut voir que le contenu des fichiers n'est pas endommagé. Pour vous assurer que vous les ouvrirez dans le programme approprié, tel que VLC Media Player.


Cliquez sur l'image pour l'augmenter.

Conclusion
La possibilité de R-Studio lors de la numérisation, la recherche de types connus vous permet de restaurer des données même à partir d'un disque, dont les systèmes de fichiers ou écrasés. Vous pouvez effectuer de rechercher efficacement des fichiers à l'aide de leurs signatures, ce qui est particulièrement utile si vous êtes connu avec précision pour le type de fichiers récupérés, par exemple dans notre exemple. La possibilité de créer des types de fichiers personnalisés vous permet d'ajouter n'importe quel fichier avec une signature de fichier spécifique à la liste des fichiers des types connus.

Les patrons me mettent une tâche assez intéressante. En bref, écrivez un analyseur de fichiers exécutables, que par signatures seraient en mesure de trouver un corps de virus et de déterminer le packer / cryptor utilisé. Le prototype fini est apparu dans quelques heures.

Le mot de l'auteur

Analyse d'alarme

La recherche d'une signature d'objet malveillante est ce que tout antivirus peut. En général, la signature est une description formalisée de certaines fonctionnalités, ce qui peut déterminer que le fichier numérisé est un virus et le virus est tout à fait défini.

Il y a diverses techniques ici. En option, utilisez une signature composée de N octets d'un objet malveillant. Dans ce cas, il est possible de comparer une comparaison stupide, mais une comparaison de certains masques (comme la recherche d'octets EB ?? ?? CD 13). Ou définir des conditions supplémentaires comme "de tels octets devraient être au point d'entrée du programme" et ainsi de suite. La signature de Malviva est particulière.

De même, certaines fonctionnalités sont décrites dans lesquelles il est possible de déterminer que le fichier exécutable est emballé avec un cryptor particulier ou un emballeur (par exemple, un Aspack banal). Si vous lisez attentivement notre magazine, je viens d'entendre parler d'un tel outil en tant que PEID, capable de déterminer les emballeurs, les crypteurs et les compilateurs les plus couramment utilisés (dans la base de données, il existe un grand nombre de signatures) pour le fichier PE transféré. Hélas, de nouvelles versions du programme ne partent pas depuis longtemps et récemment un message apparu sur le site officiel du projet ne sera pas développé. C'est une pitié, car les possibilités de PEID (surtout compte tenu du système de plug-in) pourraient être utiles pour moi. Après une brève analyse, il est devenu évident que ce n'est pas une option. Mais se battre dans des blogs anglophones, j'ai rapidement trouvé ce que je suis venu. Projet Yara (code.google.com/p/yara-project).

Qu'est-ce que Yara?

J'ai été convaincu du tout début que quelque part dans le réseau existe déjà des développements ouverts qui assumeraient la tâche de déterminer la conformité entre une signature et le dossier à l'étude. Si je pouvais trouver un tel projet, cela pourrait être facilement mis sur les rails d'une application Web, ajouter des signatures différentes là-bas et obtenir ce qui était nécessaire de moi. Le plan a commencé à sembler plus réel lorsque j'ai lu la description du projet Yara.

Les développeurs eux-mêmes le positionnent comme un outil d'aide aux chercheurs de Malvari pour identifier et classer les échantillons malveillants. Le chercheur peut créer des descriptions pour un type de mégieuse différent à l'aide de textes ou de motifs binaires, qui décrivent des signes formalisés de Malvari. Ainsi, les signatures sont obtenues. En fait, chaque description consiste en un ensemble de lignes et une expression logique, sur la base de laquelle l'analyse de l'analyseur est déterminée.

Si les conditions de l'une des règles sont satisfaites pour le fichier à l'étude, il est défini en conséquence (par exemple, un ver de ce type). Un exemple simple de la règle pour comprendre ce qui importe:

règle silent_banker: banquier
{
Meta:
Description \u003d "Ceci est juste un exemple"
Thread_level \u003d 3.
in_the_wild \u003d true.
Cordes:
$ A \u003d (6a 40 68 00 30 00 00 6A 14 8D 91)
$ B \u003d (8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9)
$ C \u003d "uvodfrysihlnwpejxqzakcbgmt"
État:
$ A ou $ B ou $ C
}

Dans cette règle, nous parlons Yara que tout fichier contenant au moins une des échantillons de lignes décrites dans $ A, $ B et des variables C devraient être classés comme silent_banker Troie. Et c'est une règle très simple. En fait, les rouleaux peuvent être beaucoup plus compliqués (nous en parlerons ci-dessous).
L'autorité du projet Yara dit même une liste de projets qui l'utilisent, ce qui est:

  • Services de renseignement Virustotal Malware (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Wewatchyourwebsite.com).

Tous les codes sont écrits en Python et l'utilisateur est offert à la fois le module lui-même à utiliser dans son développement et simplement un fichier exécutable pour utiliser Yara comme application indépendante. Dans le cadre de ses travaux, j'ai choisi la première option, mais pour la simplicité de l'article, nous utiliserons l'analyseur simplement comme une demande de console.

En cours d'exécution un peu, j'ai rapidement compris comment écrire pour les règles de Yara, ainsi que pour fixer la signature des virus de Free Avra \u200b\u200bet PEID Packers. Mais commençons par l'installation.

Installation

Comme je l'ai dit, le projet est écrit en Python. Il peut donc être facilement installé sur Linux et sur Windows, et sur Mac. Au début, vous pouvez simplement prendre un binaire. Si vous appelez l'application dans la console, nous obtiendrons les règles de fonctionnement.

$ yara.
Utilisation: Yara ... ... Fichier | Pid

C'est-à-dire que le format d'appel du programme est le suivant: Premièrement, le nom du programme est arrivé, puis la liste des options, après quoi le fichier avec les règles est spécifié et à la fin - le nom du fichier à l'étude (ou répertoire contenant des fichiers) ou l'identifiant de processus. Maintenant, ce serait bien d'expliquer comment ces paramètres sont compilés, mais je ne veux pas immédiatement vous expédier avec une théorie sèche. Par conséquent, nous allons procéder différemment et considérez les signatures d'autres personnes afin que Yara puisse effectuer l'une des tâches que vous avez fournies - une définition complète des virus par signatures.

Son antivirus

La question la plus importante est l'endroit où prendre les signatures de base des virus célèbres? Les entreprises antivirus sont activement divisées par de telles bases (une personne de plus généreusement, une personne est moins). Pour être honnête, j'ai même douté que quelque part sur le réseau, quelqu'un posait ouvertement de telles choses. Mais, comme il s'est avéré, il y a de bonnes personnes. La base appropriée de l'antivirus populaire Clamav est disponible pour tous (Clamav.net/lang/en). Dans la dernière section de libération stable, vous pouvez trouver un lien vers la dernière version du produit antivirus, ainsi que des liens pour télécharger des bases de virus de Clamav. Nous serons d'abord intéressés par les fichiers principaux.cvd (db.local.clamav.net/main.cvd) et quotidien.cvd (db.local.clavd.net/daily.cvd).

La première contient la base de données principale de signature, la deuxième est la base la plus folnante avec divers ajouts. Pour l'objectif défini, Daily.CVD est assez assez, dans lequel plus de 100 000 blinds sont collectés. Cependant, la base Clamav n'est pas une base Yara, nous devons donc la convertir au format souhaité. Mais comment? Après tout, nous ne savons toujours rien sur le format Clamav, ni sur le format Yara. Ce problème a déjà été pris en charge par nous, après avoir préparé un petit scriptor, convertissant la base de données de signature du virus de Clamav à un ensemble de règles Yara. Le script s'appelle clamav_to_ yara.py et écrit Matthew Richard (bit.ly/ij5hvs). Téléchargez le script et convertissez les bases de données:

$ Python clamav_to_yara.py -f quotidien.cvd -o clamav.yara

En conséquence, dans le fichier Clamav.yara, nous obtiendrons une base de données de signature qui sera immédiatement prête à être utilisée. Nous essayons maintenant la combinaison des bases de Yara et de Clamav en action. Numériser un dossier à l'aide d'une signature est effectué par une seule commande:

$ yara -r clamav.yara / pentest / msf3 / données

L'option -R indique que la numérisation doit être effectuée de manière récursive pour tous les sous-dossiers du dossier en cours. Si le dossier / PENSEST / MSF3 / Data a eu une sorte de virus (au moins ceux de la base Clamav), Yara annoncera immédiatement cela. En principe, il s'agit d'un scanner de signature prêt à l'emploi. Pour plus de commodité, j'ai écrit un script simple qui a vérifié la mise à jour de la base Clamav, téléchargée de nouvelles signatures et les converties au format Yara. Mais ce sont les détails. Une partie de la tâche est terminée, vous pouvez maintenant procéder pour élaborer les règles de détermination des emballeurs / crypteurs. Mais pour cela, je devais le comprendre un peu.

Jeu selon les règles

La règle est donc le principal mécanisme du programme qui vous permet d'attribuer un fichier spécifié à n'importe quelle catégorie. Les règles sont décrites dans un fichier (ou des fichiers) distincts et dans sa vue ressemblent beaucoup à la structure structure () de la langue C / C ++.

règle badboy
{
Cordes:
$ a \u003d "win.exe"
$ B \u003d "http://foo.com/badfi le1.exe"
$ C \u003d "http://bar.com/badfi le2.exe"
État:
$ A et ($ B ou $ C)
}

En principe, rien de compliqué dans les règles d'écriture. Dans le cadre de cet article, j'ai seulement touché les points principaux et vous trouverez des détails à Manul. Entre-temps, les dix points les plus importants:

1. Chaque règle commence par la règle de mots-clés, après quoi l'identifiant de la règle arrive. Les identifiants peuvent avoir les mêmes noms que les variables en C / C ++, c'est-à-dire des lettres et des chiffres, et le premier caractère ne peut pas être un chiffre. La longueur maximale du nom d'identifiant est de 128 caractères.

2. Habituellement, les règles sont composées de deux sections: section de définitions (chaînes) et section de condition (condition). Dans la section Cordes, des données sont données sur la base desquelles une solution sera effectuée dans la section des conditions, que le fichier spécifié répond à certaines conditions.

3. Chaque chaîne de la section Cordes a son propre identifiant qui commence à partir de la connexion $ générale, en tant que variable d'annonce dans PHP. YARA soutient les lignes habituelles enfermées dans des guillemets doubles ("") et des lignes hexadécimales conclues dans des supports bouclés (()), ainsi que des expressions régulières:

$ My_text_string \u003d "texte ici"
$ My_hex_string \u003d (E2 34 A1 C8 23 FB)

4. La section Condition contient toute la logique des règles. Cette section doit contenir une expression logique qui détermine auquel cas le fichier ou le processus satisfait à la règle. Habituellement, dans cette section, il y a un appel aux lignes précédemment annoncées. Un identifiant de chaîne est considéré comme une variable logique qui renvoie true si la chaîne a été trouvée dans le fichier ou la mémoire de processus, et de faux sinon. La règle ci-dessus détermine que les fichiers et les processus contenant la chaîne Win.exe et l'une des deux URL doivent être attribués à la catégorie Badboy (par le nom de la règle).

5. Les lignes hexadécimales vous permettent d'utiliser trois designs qui les rendent plus flexibles: substitutions (Wildcards), bandes (sauts) et sélection alternative (alternatives). Les substitutions sont des endroits dans la chaîne inconnue et à leur place peut être une signification. Ils indiquent le symbole "?":

$ hex_string \u003d (E2 34 ?? C8 A? FB)

Cette approche est très pratique lors de la spécification des chaînes, dont la longueur est connue et que le contenu peut varier. Si une partie de la ligne peut être de différentes longueurs, il est pratique d'utiliser les gammes:

$ hex_string \u003d (F4 23 62 B4)

Cet enregistrement signifie qu'au milieu de la ligne peut être de 4 à 6 octets différents. Vous pouvez également implémenter un autre choix:

$ hex_string \u003d (f4 23 (62 B4 | 56) 45)

Cela signifie que sur la scène du troisième octet peut être de 62 B4 ou 56, un tel enregistrement correspondre aux chaînes F42362B445 ou F4235645.

6. Pour vérifier que la chaîne spécifiée est sur un déplacement spécifique du fichier ou de l'espace d'adressage du processus, l'opérateur est utilisé:

$ A à 100 et $ B à 200

Si la chaîne peut être à l'intérieur d'une certaine gamme d'adresses, l'IN est utilisé:

$ A In (0..100) et $ B dans (100..fi Lesize)

Il existe parfois des situations où il est nécessaire de spécifier que le fichier doit contenir un nombre spécifique à partir de l'ensemble spécifié. Ceci est fait en utilisant l'opérateur de:

règle deexample11
{
Cordes:
$ foo1 \u003d "mannequin1"
$ foo2 \u003d "mannequin2"
$ foo3 \u003d "Dummy3"
État:
2 de ($ foo1, $ foo2, $ foo3)
}

La règle exige que le fichier contienne deux lignes de l'ensemble ($ FOO1, $ FOO2, $ FOO3). Au lieu de spécifier un nombre spécifique de lignes dans le fichier, vous pouvez utiliser toutes les variables (au moins une ligne de l'ensemble spécifié) et toutes (toutes les lignes d'un ensemble donné).

7. Eh bien, la dernière occasion intéressante d'envisager est d'appliquer une condition à de nombreuses lignes. Cette fonctionnalité est très similaire à celle de l'opérateur d'état, que le plus puissant est le plus puissant.

pour l'expression de string_set: (boolean_expression)

Cette entrée doit être lue comme ceci: à partir des chaînes spécifiées dans String_ Set, au moins une expression doit satisfaire la condition Boolean_Expression. Ou, autrement dit: l'expression boolean_expression est calculée pour chaque ligne de String_set, et l'expression d'entre eux doit revenir à True. Ensuite, nous considérons cette conception sur un exemple spécifique.

Faire du peu de pique.

Ainsi, lorsque tout est devenu moins clair avec les règles, vous pouvez procéder à la mise en œuvre de notre projet du détecteur des emballeurs et des crypteurs. En premier lieu, j'ai emprunté des signatures d'emballeurs connus du même peid. Dans le dossier Plugins, il existe un fichier userdb.txt, qui contient ce dont nous avons besoin. Dans ma base de données, il s'est avéré de 1850 signatures.

Beaucoup, afin de les importer pleinement, je vous conseille d'écrire des scripts. Le format de cette base de données est simple - le fichier texte habituel est utilisé dans lequel les enregistrements du formulaire sont stockés:


Signature \u003d 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 \u003d true.

La première chaîne définit le nom de l'emballeur qui sera affiché dans le PEID, pour nous, ce sera l'identifiant de la règle. La seconde est la signature elle-même. Le troisième est le drapeau EP_ONLY, indiquant si vous souhaitez rechercher cette chaîne uniquement à l'adresse du point d'entrée ou tout au long du fichier.

Eh bien, essayons de créer une règle, disons, pour Aspack? Comme il s'est avéré, il n'y a rien de compliqué. Premièrement, créez un fichier pour stocker les règles et appelez-le, par exemple, Packers.yara. Nous recherchons ensuite dans la base de données PEID toutes les signatures, dans le titre qui apparaît Aspack et les mener à la règle:

règle aspack
{
Cordes:
$ \u003d (60 E8 ?? ?? ?? 5d 81 Ed ?? ?? ?? (43 | 44) ?? B8 ?? ?? (43 | 44) ?? 03 C5)
$ \u003d (60 eb ?? 5d eb ?? ff ?? ?? ?? ?? ?? ?? E9)
[.. découper ..]
$ \u003d (60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01)
État:
Pour l'un d'entre eux: ($ au point d'entrée)
}

Tous les enregistrements trouvés L'indicateur EP_ONLY est défini sur True, c'est-à-dire que ces lignes doivent être situées à l'adresse du point d'entrée. Par conséquent, nous écrivons la condition suivante: "Pour l'un d'entre eux: ($ à l'entréePoint)."

Ainsi, la présence d'au moins une des lignes spécifiées à l'adresse du point d'entrée signifie que le fichier est emballé Aspack. Aussi également l'attention que dans cette règle, toutes les lignes sont simplement définies à l'aide du panneau $, sans identifiant. Cela est possible, car dans les sections de condition, nous ne contactez pas en particulier un particulier, mais nous utilisons l'ensemble complet.

Pour vérifier les performances du système obtenu, il suffit d'effectuer la commande dans la console:

$ Yara -r packers.yara quelquefi le.exe

Je suis là quelques applications, aspack emballés, je me suis assuré que tout fonctionne!

Prototype fini

Yara était un outil extrêmement clair et transparent. Je n'ai pas beaucoup de difficulté à écrire une webadming pour lui et à établir du travail en tant que service Web. Certains résultats créatifs et secs de l'analyseur sont déjà peints avec différentes couleurs, indiquant le degré de danger de la Fondation trouvée. Une petite mise à jour de la base de données et une brève description est disponible pour de nombreux crypteurs et parfois même des instructions de déballage. Le prototype est créé et fonctionne annulé et les patrons danse de délices!

Le code de fonction (FC) dans l'en-tête de télégramme identifie le type de télégramme, tel que Demander Telegram (demande ou télégramme d'envoi / demande (cadre d'accusé de réception, cadre de réponse). De plus, le code de fonction contient la fonction de transmission et les informations de contrôle réelles qui empêchent la perte et la duplication des messages, ou le type de station avec l'état FDL.

7 6 5 4 3 2 1 0 FC: demande de code de fonction
1 Demander Télégrammation.
X. Fcv \u003d alternatif bit activé sur
X. href \u003d "http://profibus.felser.ch/fr/funktionscode.htm#aufruffolgebit"\u003e fcb \u003d bit alternatif (du compte de cadre)
1 0 (0x0) CV \u003d valeur d'horloge ()
1 autre Réservé
0 0 (0x0) Te \u003d événement temporel (synchronisation d'horloge)
0 3 (0x3) SDA_LOW \u003d envoyer des données reconnues - Priorité faible
0 4 (0x4) Sdn_low \u003d Envoyer des données non reconnues - Priorité faible
0 5 (0x5) Sda_high \u003d envoyer des données acquittées - priorité élevée
0 6 (0x6) Sdn_high \u003d envoyer des données non sciées
0 7 (0x7) MSRD \u003d Envoyer des données de demande avec une réponse multidiffusion
0 9 (0x9) Demander le statut FDL.
0 12 (0xc) SRD Low \u003d Envoyer et demander des données
0 13 (0xd) SRD HIGH \u003d Envoyer et demander des données
0 14 (0xE) Demande Ident avec réponse
0 15 (0xf) Demander le statut de LSAP avec la réponse 1)
0 autre Réservé

1) Cette valeur est dans la dernière version de la norme non définie, mais réservée uniquement

7 6 5 4 3 2 1 0 FC: réponse du code de fonction
0 Télégramme de réponse
0 Réservé
0 0 Trimer.
0 1 Maître non prêt.
1 0 Master prêt, sans jeton
1 1 Master prêt, en anneau de jeton
0 (0x0) D'ACCORD.
1 (0x1) Ue \u003d erreur utilisateur
2 (0x2) RR \u003d pas de ressources
3 (0x3) Rs \u003d sap non activé
8 (0x8) DL \u003d Data Low (cas normal avec DP)
9 (0x9) Nr \u003d pas de données de réponse prête
10 (0xa) DH \u003d Data High (Diagnostic DP en attente)
12 (0xc) RDL \u003d données non reçues et données basses
13 (0xd) RDH \u003d données non reçues et données élevées
autre Réservé

Nombre de châssis Le bit de la trame Le bit FCB (B5) empêche la duplication des messages par la station d'accusé de réception ou de réponse (répondeur) et de toute perte de la station d'appel (initiateur). Exclus de ceci sont des demandes sans accusé de réception (SDN) et le statut FDL, Ident et les demandes d'état de la LSAP.

Pour la séquence de sécurité, l'initiateur doit porter un FCB pour chaque répondeur. Lorsqu'un télégramme de demande (demande ou envoi / demande) est envoyé à un répondeur pour la première fois ou s'il est envoyé à un répondeur actuellement marqué comme non opérationnel, le FCB doit être défini tel que défini dans le répondeur. L'initiateur atteint cela dans un télégramme de demande avec FCV \u003d 0 et FCB \u003d 1. Le répondeur doit évaluer un télégramme de ce type en tant que premier cycle de message et stocker le FCB \u003d 1 avec l'adresse de l'initiateur (SA). Ce cycle de message ne sera pas répété par l'initiateur. Dans les télégrammes de demande suivants au même répondant, l'initiateur doit définir FCV \u003d 1 et modifier le FCB avec chaque nouveau télégramme de demande. Tout répondeur qui reçoit un télégramme de demande adressé avec FCV \u003d 1 doit évaluer la FCB. Si la FCB a changé par rapport au même initiateur (même SA), il s'agit de la confirmation de la validité que le cycle de message précédent a été conclu correctement. Si le télégramme de la demande provient d'un initiateur différent (différent SA), l'évaluation de la FCB n'est plus nécessiteuse. Dans les deux cas, le répondeur doit enregistrer la FCB avec la source SA jusqu'à la réception d'un nouveau télégramme adressé à celui-ci. Dans le cas d'un télégramme ou d'une réponse perdus ou malvoyants, le FCB ne doit pas être modifié par l'initiateur du cycle de message précédent était défectueux. Si le répondant reçoit un télégramme de demande avec FCV \u003d 1 et le même FCB que le même initiateur (même SA), cela indiquera une nouvelle tentative. Le répondeur doit à son tour retransmettre le télégramme de reconnaissance ou de réponse tenu en état de préparation. Jusqu'à la confirmation ou la réception d'un télégramme mentionné ci-dessus avec une adresse différente (SA ou DA) qui n'est pas acquittée (envoi de données sans reconnaissance, SDN), le répondeur doit contenir le dernier télégramme d'accusé de réception ou de réponse en état de préparation à toute demande possible . Dans le cas des télégrammes de demande qui ne sont pas reconnus et avec la demande Status FDL, Ident et Statut LSAP, FCV \u003d 0 et FCB \u003d 0; L'évaluation par le répondant n'est plus nécessaire.

b5. b4. Position de bit
Fcb. Fcv. État Sens. Action.
0 0 DA \u003d TS / 127 Demande sans accusé de réception
Demander le statut FDL / Ident / Statut LSAP
Supprimer le dernier accusé de réception
0/1 0/1 Da # ts. Demande à un autre répondant
1 0 DA \u003d TS. Première demande FCBM: \u003d 1
Sam: \u003d SA
Supprimer le dernier accusé de récitation / réponse
0/1 1 DA \u003d TS.
SA \u003d Sam.
FCB # FCBM.
Nouvelle requête. Supprimer le dernier accusé de récitation / réponse
FCBM: \u003d FCB
Tenir reconnaissance / réponse en état de préparation pour réessayer
0/1 1 DA \u003d TS.
SA \u003d Sam.
Fcb \u003d fcbm.
Demande de réessayer FCBM: \u003d FCB
Répéter la reconnaissance / la réponse et continuer à tenir prêt
0/1 1 DA \u003d TS.
SA # Sam.
Nouvel initiateur FCBM: \u003d FCB
Sam: \u003d SA Hold Réponse / réponse en état de préparation

FCBM stocké FCB dans la mémoire SAM stockée SA en mémoire

Beaucoup pouvaient entendre parler de tels fichiers que Rarjpeg "et. Ceci est un type spécial de fichiers, qui est une image collée de Fermer Jpeg et une archive RAR. C'est un excellent conteneur pour cacher le transfert d'informations. Créer Rarjpeg à l'aide des commandes suivantes :

UNIX: cat image1.jpg archive.rar\u003e image2.jpg
Les fenêtres: copier / b Image1.jpg + archive.rar image2.jpg

Ou en présence d'un éditeur hexagonal.

Bien sûr, non seulement le format JPEG peut être utilisé pour masquer le transfert d'informations d'informations, mais beaucoup d'autres. Chaque format a ses propres caractéristiques, grâce à laquelle elle peut être appropriée ou non pour le rôle du conteneur. Je vais décrire comment trouver les fichiers collés dans les formats les plus populaires ou spécifier le fait de collage.

Les méthodes de détection de fichiers collés peuvent être divisées en trois groupes:

  1. La méthode de vérification de la zone après le marqueur EOF. De nombreux formats de fichiers populaires ont le marqueur de fin de fichier, responsable de l'affichage des données souhaitées. Par exemple, des programmes de visionnage de photos Lisent tous les octets jusqu'à ce marqueur, cependant, la zone après son ignorée. Cette méthode est idéale pour les formats: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. La méthode de vérification de la taille du fichier. La structure de certains formats (conteneurs audio et vidéo) vous permet de calculer la taille du fichier réelle et de la comparer à la taille d'origine. Formats: AVI, WAV, MP4, MOV.
  3. Méthode de vérification des fichiers BFC. Format binaire de fichier BFC ou composé - format de document développé dans Microsoft, qui est un conteneur avec son propre système de fichiers. Cette méthode est basée sur des anomalies de découverte dans le fichier.

Y a-t-il une vie après la fin du fichier?

Jpeg.

Pour trouver une réponse à cette question, il est nécessaire d'approfondir dans la spécification de format, qui est un "SpringChart" de fichiers collées et comprenez sa structure. Tout JPEG commence par 0XFF 0xD8 Signature.

Une fois cette signature une information de service, éventuellement l'icône de l'image et, enfin, l'image comprimée elle-même. Dans ce format, la fin de l'image est marquée d'une signature 0xD9 0xFF de deux octets 0xFF.

Png.

Les huit premiers octets du fichier PNG prend la signature suivante: 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a. La signature finale qui termine le flux de données: 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82.

Rar

Signature totale pour toutes les archives RAR: 0x52 0x61 0x72 0x21 (RAR!). Après cela, des informations sur la version des archives et d'autres données associées sont disponibles. La manière expérimentale a été constatée que l'archive se termine par une signature de 0x0a, 0x25, 0x25, 0x45, 0x4f, 0x46.

Tableau des formats et leurs signatures:
L'algorithme de vérification du collage de ces formats est extrêmement simple:

  1. Trouver la signature initiale;
  2. Trouver la dernière signature;
  3. Si, après la dernière signature, il n'y a pas de données - votre fichier est propre et ne contient pas de pièces jointes! Dans ce cas, vous devez rechercher d'autres formats après la dernière signature.

GIF et PDF.

Le document PDF peut avoir plus d'un marqueur EOF, par exemple en raison de la génération inappropriée du document. Le nombre de signatures finies dans le fichier GIF est égal au nombre de cadres dedans. Sur la base des caractéristiques de ces formats, vous pouvez améliorer l'algorithme de vérifier la présence de fichiers collés.
  1. Le paragraphe 1 est répété à partir de l'algorithme précédent.
  2. Le paragraphe 2 est répété à partir de l'algorithme précédent.
  3. Lors de la recherche de la dernière signature pour vous rappeler son emplacement et cherchez plus loin;
  4. Si cela a atteint le dernier marqueur EOF - le fichier est propre.
  5. Si le fichier ne se termine pas avec la signature finale - goto Placez la dernière signature de fin trouvée.
La grande différence entre la taille du fichier et la position après la dernière signature finie indique la présence d'une fixation adhésif. La différence peut être plus de dix octets, bien qu'il soit possible d'installer d'autres valeurs.

Zipper.

La caractéristique des ZIP-Archives est la présence de trois signatures différentes: la structure des archives est la suivante:
En-tête de fichier local 1
Données de fichier 1.
Descripteur de données 1.
En-tête de fichier local 2
Données de fichier 2.
Descripteur de données 2.
...
En-tête de fichier local n
Données de fichier N.
Descripteur de données N.
Archives d'en-tête de déchiffrement.
Archive data record
Directoire central.
Le plus intéressant est le répertoire central contenant des métadonnées sur les fichiers de l'archive. Le répertoire central commence toujours par une signature de 0x50 0x4b 0x01 0x02 et se termine par une signature 0x50 0x4b 0x05 0x06, après quoi 18 octets de métadonnées suit. Ce qui est intéressant, les archives vides ne sont constituées que de la signature finale et de 18 notes zéro. Après 18 octets suit la zone de commentaire à l'archive, qui est le conteneur idéal pour masquer le fichier.

Pour vérifier l'archive ZIP, vous devez trouver la signature de fin du répertoire central, sauter 18 octets et rechercher des signatures de formats connus dans la zone de commentaire. Une grande taille de commentaire indique également un fait de collage.

Questions de taille

Avi.

La structure du fichier AVI est la suivante: chaque fichier commence par la signature RIFF (0x52 0x49 0x46 0x46). Sur 8, la signature AVI Signature (0x41 0x56 0x49 0x20) suit. Un bloc de compensation 4, composé de 4 octets, contient la taille initiale du bloc de données (ordre d'octet-petit Endian). Pour connaître le numéro de bloc contenant la taille suivante, vous devez plier la taille du titre (8 octets) et la taille obtenue dans le bloc 4-8 octets. Ainsi, la taille du fichier complet est calculée. On suppose que la taille calculée peut être inférieure à la taille réelle du fichier. Après la taille calculée, le fichier ne contiendra que zéro octets (il est nécessaire d'aligner la limite dans 1 Ko).

Exemple de calcul de taille:


Wav

Comme AVI, le fichier WAV commence par la signature Riff, cependant, ce fichier a une signature à partir de 8 octets - Wave (0x57 0x41 0x56 0x45). La taille du fichier est calculée de la même manière que AVI. La taille réelle doit coïncider complètement avec le calcul calculé.

Mp4

MP4 ou MPEG-4 - Le format du processeur de support utilisé pour stocker des flux vidéo et audio, permet également de stocker des sous-titres et des images.
Sur le décalage de 4 octets, il existe des signatures: le type de fichier FTYP (66 74 79 70) et le sous-type du fichier MMP4 (6D 60 34). Reconnaître les fichiers cachés, nous sommes intéressés par la possibilité de calculer la taille du fichier.

Considérer un exemple. La taille du premier bloc est sur zéro décalage et est égale à 28 (00 00 00 1c, l'ordre de Big Endian Octet); Il pointe également du décalage où se trouve la taille du deuxième bloc de données. Sur 28 Déplacement, nous trouvons la prochaine taille de bloc de 8 (00 00 00 08). Pour trouver la taille du bloc suivant, vous devez ajouter les tailles des blocs précédents trouvés. Ainsi, la taille du fichier est calculée:

MOV.

Ce format largement utilisé est également un conteneur MPEG-4. MOV utilise un algorithme de compression de données propriétaire, a une structure MP4 et est utilisée aux mêmes objectifs - pour stocker des données audio et vidéo, ainsi que de matériaux associés.
Comme MP4, tout fichier MOV a une signature de 4 octets de 4 octets de FTYP, cependant, la signature suivante a la valeur Qt__ (71 74 20 20). La règle de calcul de la taille du fichier n'a pas changé: depuis le début du fichier, calculez la taille du bloc suivant et pliez.

La méthode de vérification de ce groupe de formats pour la présence de fichiers "collés" est de calculer la taille en fonction des règles spécifiées ci-dessus et de la comparer à la taille du fichier en cours de vérification. Si la taille du fichier actuel est beaucoup plus petite que celle calculée, cela indique le fait de collage. Lors de la vérification des fichiers AVI, il est permis que la taille calculée puisse être inférieure à la taille du fichier en raison de la présence de zéros ajoutés pour aligner la limite. Dans ce cas, il est nécessaire de vérifier les zéros après la taille du fichier calculé.

Cocher le format binaire de fichier compafin

Ce format de fichier, conçu dans Microsoft, est également appelé ole (liaison d'objet et incorporation) ou COM (modèle d'objet composant). Doc, fichiers XLS, PPT appartiennent au groupe de formats BFC.

Le fichier BFC consiste en une en-tête de 512 octets et des secteurs de la même longueur qui stockent des flux de données ou des informations de service. Chaque secteur a son propre nombre non négatif, l'exception est des chiffres spéciaux: "-1" - Nombres le secteur libre, "-2" - Nombres le secteur, fermant la chaîne. Toutes les chaînes de secteurs sont définies dans la table FAT.

Supposons que l'attaquant a modifié une sorte de fichier DOC et collé un autre fichier à sa fin. Il existe différentes façons de la détecter ou d'indiquer une anomalie dans le document.

Taille de fichier anomaleuse

Comme mentionné ci-dessus, tout fichier BFC consiste en un en-tête et des secteurs de la même longueur. Pour connaître la taille du secteur, vous devez lire un numéro de deux octets sur 30 décalage à partir du début du fichier et construire 2 dans le degré de ce numéro. Ce nombre doit être égal à 9 (0x0009) ou 12 (0x000C), respectivement, la taille du secteur des fichiers est de 512 ou 4096 octets. Après avoir trouvé le secteur, vous devez vérifier l'égalité suivante:

(Filedize - 512) Mod Secteur Secteur \u003d 0

Si cette égalité n'est pas exécutée, vous pouvez spécifier le fait de la pose de fichiers. Cependant, cette méthode présente un inconvénient important. Si l'attaquant connaît la taille du secteur, il suffit de coller son fichier et un autre octet, de sorte que l'ampleur des données collées est une taille de secteur multiple.

Type de secteur inconnu

Si l'attaquant connaît la méthode de contournement de la vérification précédente, cette méthode peut détecter la disponibilité des secteurs avec des types incertains.

Nous définissons l'égalité:

FILLESIZE \u003d 512 + Catégorie * Secteur Secteur, où FileSize est la taille du fichier, Secteur - Taille du secteur, Catégorie - Nombre de secteurs.

Nous définissons également les variables suivantes:

  1. Comptefat - Nombre de secteurs de la graisse. Il est 44 compensé dès le début du fichier (4 octets);
  2. CountMinifat - Nombre de secteurs de minift. Situé sur 64 compensé dès le début du fichier (4 octets);
  3. CountDifat - Nombre de DIFAT SECTEURS. Situé sur 72 offset depuis le début du fichier (4 octets);
  4. Countde - Nombre de secteurs de la saisie de l'annuaire. Pour trouver cette variable, il est nécessaire de trouver le premier secteur de, situé sur 48 déplacements. Ensuite, vous devez obtenir une vue complète de De de la graisse et calculer le nombre de secteurs;
  5. Counttreams - Nombre de secteurs de données;
  6. CountFree - le nombre de secteurs libres;
  7. Comptez-classifié - Nombre de secteurs avec un type spécifique;
CountClassified \u003d Countfat + CountMinifat + CountDifat + Countde + Counttreams + CountFree

De toute évidence, dans l'inégalité de CountClassified and Countryeal, vous pouvez conclure une éventuelle collage de fichiers.