CHECKARC 1.1 24/10/96 Introduction Ce programme est mailware (afin de voir si des gens, autre que moi et mes potes, s'en servent :-(. Il peut être aussi suggestionware, à vous de voir... Ce petit programme est censé examiner RÉCURSIVEMENT vos archives afin de voir si elles ne contiennent pas une de ces vilaines bêtes communément appelées VIRUS (Pouarc ...). C'est grace au port AREXX de VirusZ que le scan virus va être possible. Ce script remplace, en mieux à mon goût, la fonction "Extract Archives" de VirusZ. Pourquoi j'ai fait ce programme ? - VirusZ ne scanne pas les .DMS (sauf erreur de ma part) - Mon script détecte les erreurs physiques dans les .DMS (Utilisateur d'une version enregistré de Dms uniquement) - Mon rapport en fin de scan est à mon goût plus explicite pour tout le monde et plus complet - J'avais envie de programmer en AREXX De quoi ce script a-t-il besoin ?? * La RexxReqTools.library (util/rexx/RexxReqTools.lha) * La RexxSupport.library (elle doit être sur une de vos disquettes systèmes) * Lha (util/arc/LhA_e138.run) * Lzx (util/arc/lzx121.lha) * Dms (util/arc/dms111.run) * VirusZ 1.3x (util/virus/VirusZ_II135.lha) * Unzip (util/arc/Unzip512x.lha) * Unrar (util/arc/Unrar202.lha) Les versions données ci-dessus sont des versions publiques puisqu'elles sont disponibles sur tout miroir Aminet digne de ce nom. Tout utilisateur, même les débutants d'Aminet, pourront ainsi facilement récupérer tout ce qui est nécessaire au bon fonctionnement du script. Comment qu'on s'en sert ?? La ligne de commande est la suivante : Rx Chemin/CheckArc.vzrx Argument. L'Argument peut être soit un chemin soit une archive. L'Argument n'est pas obligatoire : si vous lancez l'exécution Rx Chemin/CheckArc.vzrx vous aurez 1) une boite de requête qui vous demandera de préciser ce que vous allez sélectionner (répertoire ou archive) 2) une requête de fichier (de type Reqtools) qui s'ouvrira dans le répertoire courant dans laquelle vous choisirez ce que vous avez précisé au 1). Si vous n'y sélectionnez rien, le script fera récursivement la liste des archives (Liste2 = 'RAM:CheckArc.ListeArchives2') contenues dans le chemin courant pour les scanner ensuite. Les archives sont reconnues grace à leur suffixes (.lha, .lzh,...). Si l'Argument que vous avez transmis ne plait pas à CheckArc.vzrx, il saura vous le faire comprendre :-) ATTENTION : Quand vous donnerez un chemin au script, il ne listera que des archives (ET PAS LES AUTRES FICHIERS) contenues dans ce chemin. Pour scanner les autres fichiers, utilisez VirusZ sans l'option "Extract Archives".Bien entendu, lors d'un scan d'archives, il s'occupe de tous les types de fichiers qu'elles contiennent (c'est la moindre des choses, non ?). *** AVERTISSEMENT IMPORTANT *** Lors du scan, vous risquez de vous apercevoir que des commandes échouent. Exemple : C:List erreur code 20 Pas d'affolement, c'est parfaitement contrôlé par le script. Je sais que cela ne fait pas propre, mais je ne sais pas comment empêcher AREXX de retourner ces messages d'erreur !!! (voir plus bas la section "To do") Comment on règle les paramètres ?? Il faut éditer le script avec l'editeur de votre choix (ceci n'est pas important). Voici les champs que vous avez à éventuellemnt modifier : /* Programmes externes */ Prog_VirusZ = 'UTILITAIRES:SHAREWARE/VIRUSZ/VirusZ' Prog_Lha = 'C:Lha' Prog_Lzx = 'C:Lzx' Prog_Dms = 'C:Dms' Prog_Zip = 'C:Unzip' Prog_Rar = 'C:Unrar' /* Fichiers indispensables à CheckArc.vzrx */ ListeProbleme = 'RAM:CheckArc.BadArchives' Liste1 = 'RAM:CheckArc.ListeArchives1' Liste2 = 'RAM:CheckArc.ListeArchives2' SortieDMS = 'RAM:CheckArc.SortieDMS' /* Initialisations de variables */ TempPath = 'T:CheckArcTMP' /* CE CHEMIN SERA EFFACE RECURSIVEMENT A LA FIN DU SCRIPT */ TempPath2 = 'blabla' TempPathDMS = 'RAD1:' UseQuitFlag = 'no' NomParDefaut = 'ListeProblèmes' Symbole = '›32m->›31m' <- On peut donner des codes ASCII pour faire de zolies choses :-) * En ce qui concerne les programmes externes, tout le monde a compris qu'il s'agit de dire au script où il doit aller les chercher (Chemin d'accès + Nom). * CheckArc.vzrx va créer au plus 4 fichiers. Le premier, on aimerait qu'il ne soit jamais créé. En effet c'est la liste de toutes les archives qui contiennent au moins un des 6 problèmes que peut détecter le script. Le fichier Liste2 est la liste des archives contenues dans l'éventuel chemin que vous aurez transmis en Argument (Si vous transmettez une archive en Argument, Liste2 ne sera pas créée). Le fichier SortieDMS récupère tout le barratin que vous fait Dms lorsqu'il désarchive. Ceci sera indispensable pour voir si une archive a des erreurs physiques (Pour les possesseur d'une version enregistrée de Dms uniquement). REMARQUE : Il est conseillé de mettre le nom du script dans les noms fichiers temporaires au lieu d'utiliser les éternels RAM:titi, RAM:toto,...En effet, si vous utilisez RAM:toto dans tous vos scripts et que vous en lanciez au moins 2 en multitâche, il risque d'y avoir des conflits lors des accès aux fichiers temporaires à cause de noms identiques !!! * Les variables : - TempPath est le répertoire temporaire dans lequel le désarchivage des .LHA, .LZH, .LZX, .RUN, .ZIP et .RAR s'effectura. ATTENTION1 : L'arborescence sauf le dernier tiroir DOIT exister : le dernier répertoire, s'il est présent sera utilisé, s'il est absent il sera créé. Exemple : Si vous voulez TempPath = 'UneArborescenceQuelconque/MonDernierTiroir', il faudra que l'intégralité de "UneArborescenceQuelconque" existe (si au moins un des tiroirs n'existe pas, c'est foutu :-(. ATTENTION2 : "MonDernierTiroir" sera effacé récursivement à la fin du script ("MonDernierTiroir" inclu). REMARQUE : Désolé pour ces contraintes, mais la commande MakeDir ne crée pas d'arborescence :-( Une boucle paliant à ce problème serait facile à faire mais j'en ai pas vu la nécessité. - TempPath2 est la variable qui contrôle la fin de la récursivité. Sa valeur d'initialisation est sans importance. - TempPathDMS est le chemin dans lequel le désarchivage des .DMS s'effectura. - UseQuitFlag indiquera à VirusZ de s'éteindre s'il est mis à yes. Plus clairement : vous n'avez peut être pas envie d'avoir VirusZ activé en permanence, donc mettre yes comme valeur à UseQuitFlag aura pour conséquence de quitter VirusZ à la fin du script. - NomParDefaut est le nom par défaut sous lequel CheckArc.vzrx sauvera le rapport en fin du script : une requête vous demandera si oui ou non vous voulez le sauver. - Symbole représente le symbole que vous préférez pour avoir un contrôle visuel de la récursivité. ATTENTION : Ne modifier rien d'autre au script, sauf si vous savez ce que vous faites. Qu'est ce qui m'veut ce #!!@@ de rapport !!! Bon ça y est, vous avez tout compris et vous allez lancer votre première exécution. Voilà les différentes erreurs qui peuvent arriver. * ERREUR !!! au cours de l'extraction Ceci peut vouloir dire que : - L'archive est corrompue. Dans ce cas votre archive est bonne pour la poubelle :-( - Le disque contenant le chemin de désarchivage est plein. Indiquez un autre disque à CheckArc.vzrx en changeant la valeur de TempPath et recommencez le scan. - ... * ERREUR !!! durant la copie des fichiers de RAD1: Ceci peut vouloir dire que : - Sur votre disque RAD1, des fichiers n'ont pu être lus. Soit des fichiers sont protégés contre toutes tentatives de lecture, soit ils sont endommagés. - ... * VIRUS localisé dans Je crois que tout le monde à compris :-) * Disque non DOS dans le périphérique RAD1: Ceci n'est pas une erreur grave. Elle est juste là à titre indicatif (Coucou André :-). * ERREUR !!! durant l'examen récursif du répertoire Ceci peut vouloir dire que : - La commande List a échouée lors de son exécution sur le répertoire en question. Ceci peut être du au fait que certains noms de répertoire contiennent des caractères interdits. Exemple : RAM:|toto Le caractère "|" ne doit pas être utilisé pour un nom de répertoire. Ceci a une conséquence grave : la commande List ayant échouée, le scan est interrompu, donc votre archive n'a pas été scannée à 100%. Donc, un virus peut se cacher dans la partie non scannée. - Au moins un des tiroirs de l'arborescence à lister n'existe pas. - ... * ERREUR !!! durant la vérification de l'archive Ceci peut vouloir dire que : - Vous n'avez pas assez de RAM. En effet, le script est programmé pour décompresser les exécutables et les données lors du scan. - ... Historique CheckArc 1.0 : Première version distribuée CheckArc 1.1 : - Reconnait les archives .RAR - Gestion plus élégantes des répertoires ne contenant pas d'archives. En effet, dans la version 1.0, si vous donniez un tel tiroir, la commande Sort retournait une erreur code 20. Rien de grave, mais peu esthétique. Maintenant, vous serez informé et le programme quittera proprement. - Meilleure reconnaissance entre fichier et tiroir grace à la RexxSupport.library : terminé la magouille avec la commande Dir. Cette astuce retournait une erreur code 20 lors d'un CheckArc sur une simple archive. Rien de grave pour la reconnaisance des virus (le script était pleinement fonctionnel) mais c'est pas beau. Na !! - Meilleure gestion de la requête ReqTools : * Une première boite pour préciser votre type de sélection (répertoire ou archive) et une seconde pour la sélection. * Ajout du filtre #?.lha|#?.lzh|#?.lzx|#?.run|#?.dms|#?.zip|#?.rar * Maintenant on quitte si on clique le bouton "Annuler" (et oui, un oubli :-( - Meilleure gestion des .RUN : en effet, tous les .RUN ne sont pas des archives !! Ceci était une erreur grave qui compromettait l'intégralité du scan virus sur ces archives. C'est maintenant corrigé. Heureusement que de tels fichiers ne courent pas les rues. To do - Simplifier la sélection RexxReqTools.library (si possible) - Faire taire les erreurs code une fois pour toutes !!!!!!!!!! - An english documentation :-) - Les différentes idées des utilisateurs (si j'en reçoie :-) Toutes aides ou suggestions sont les bienvenues (surtout pour les deux premiers). Les remerciements * Georg Hörmann pour son excellent VirusZ. * Nico François et Magnus Holmgren pour la génialissime RexxReqTools.library. * Lionel qui par ses idées avisées, clairvoyantes, limpides, pleines de bon sens,... (ça ira comme ça ou un peu plus :-) m'a permis d'améliorer le script. * Ma copine qui a été privée de ses jeux favoris et de sa télé. * André, Marc, Nelson, ... pour leur tests plus ou moins sérieux :-)... * Jérôme pour ses conseils et son écoute de dernière minute (hello RAM :-) * et ceux que j'ai oublié de citer... L'auteur Jean-Philippe MISTROT j_p_m@hotmail.com Si vous pensez avoir trouvé des optimisations pour que le script fonctionne mieux ou que vous souhaitez que j'y apporte d'autres fonctions n'hésitez pas à me contacter. J'attire votre attention sur le fait que je suis totalement débutant en AREXX, donc n'en veuillez pas trop à mes éventuelles maladresses...