IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows 7 Discussion :

Lancé un .bat a l'insertion d'une clé usb sans autorun possible ?


Sujet :

Windows 7

  1. #21
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Si j'installe Perl que le clé USB en question ça marcherais ?

  2. #22
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Ben oui, il n'y a aucune raison pour que ça ne fonctionne pas
    Perl 5.20 se trouve ICI en version 32 ou 64 bits suivant ton PC
    Ensuite il peut y avoir des modules à installer, le plus facile c'est cpan qui se lance depuis une invite DOS par exemple
    C:\> cpan File::Spec
    ou File::Spec est le nom du module à installer...

    NB : le programme usb.pl est juste une vérification de la fonctionnalité, il faut l'adapter en fonction des besoins.

    Par exemple en l'état, lorsqu'il est lancé, il ne supprime les fichiers que lors de la première insertion de la clé, donc il faut :
    - soit faire une boucle infinie avec une temporisation, ce qui n'est pas très beau
    - soit le refaire sous la forme d'un thread, ce qui n'est pas immédiat...

    Voici ce que j'obtiens :
    [EDIT 05:50] Modification des images trop grandes

  3. #23
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bon c'est encore plus simple que je pensais
    Dans la mesure où la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (defined (my $row = $sth->fetchrow_arrayref())) {
    est en attente d'évènement, il n'est pas nécessaire de faire un thread.
    La boucle infinie ne consomme pratiquement rien !

    Donc voici une petite mouture rudimentaire, dans laquelle il suffit de passer les print qui restent en commentaire pour ne plus avoir les messages sur l'invite de commande DOS
    Et pour lancer ce programme sans l'invite de commande DOS, il suffit de faire un :
    usb.bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\Strawberry\perl\bin\wperl.exe E:\_APPLI\usb\usb_MAX.pl
    qu'il ne reste plus qu'à mettre dans Démarrer->Démarrage pour qu'il se lance automatiquement à l'ouverture de la session
    usb_MAX.pl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    #!/usr/bin/perl
    use strict;
    use warnings;
    use utf8;
    use DBI;																	# Pour interroger la base WMI sous Windows
    use Win32::GUI ();												# Pour afficher une fenêtre d'ATTENTION
    use Encode;																# Pour encoder en iso-8859-16
    use File::Spec;														# Pour gérée les noms des chemins sous tous les OS
    use File::Path;														# Pour effacement récursif de répertoire
    
    my $dbh = DBI->connect('dbi:WMI:');
    
    my $sth = $dbh->prepare(<<WQL);
        SELECT * FROM __instanceoperationevent
        WITHIN 5
        WHERE TargetInstance ISA 'Win32_LogicalDisk'
        and TargetInstance.Name != 'C:'
    WQL
    $sth->execute();
    
    ActiverAccents();
    my ( $Disk, $FhRep ) = ();
    while (1) {
    	while (defined (my $row = $sth->fetchrow_arrayref())) {
    		my $ev = $row->[0];
    		if ($ev->Path_->Class eq '__InstanceCreationEvent') {
    			$Disk = $ev->{TargetInstance}->{Name};
    			$Disk = $Disk ."\\";
    			print "Un support USB est inséré en $Disk\n";
    			# print "\a\a\a\a ATTENTION il va être effacé ! \a\a\a\a\n";
    			# my $Message =encode("iso-8859-16", "Le disque $Disk va être effacé !");
    			# Win32::GUI::MessageBox(0,$Message,"ATTENTION !");
    			opendir my $FhRep, $Disk or die "impossible d'ouvrir le répertoire $Disk\n $!";
    			my @Contenus = grep { !/^\.\.?$/ } readdir($FhRep);
    			foreach my $Contenu ( @Contenus ) {
    				$Contenu = File::Spec->catfile($Disk, $Contenu );
    				if ( -f $Contenu  || -d $Contenu ) {
    					print "\a$Contenu en cours d'effacement\n";
    				
    					#### ATTENTION si vous supprimez le #
    					#    dans la ligne suivante vous effacerez le contenu du support USB fraîchement connecté !
    					#
    					rmtree([$Contenu], 1, 0);
    				} else {
    					print "ATTENTION $Contenu n'est ni un fichier, ni un répertoire !\n";
    				}
    			}
    		}
    	}
    }
    
    #==============================================================
    # Pour avoir les accents sur la console DOS
    # http://perl.developpez.com/faq/perl/?page=Terminal#AccentsDOS
    #==============================================================
    sub ActiverAccents {
    	my $encodage;
    	# Windows
      	if ( lc($^O ) eq 'mswin32') {
    		eval {
    			my ($codepage) = ( `chcp` =~ m/:\s+(\d+)/ );
    			$encodage = "cp$codepage";
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
    	else {
    		$encodage = `locale charmap`;
    		eval {
    			foreach my $h ( \*STDOUT, \*STDERR, \*STDIN, ) {
    				binmode $h, ":encoding($encodage)";
    			}
    		};	
    	}
      return $encodage;
    }
    
    #Sinon :
    #ü 	\x81 	à 	\x85 	è 	\x8A
    #é 	\x82 	ç 	\x87 	ï 	\x8B
    #â 	\x83 	ê 	\x88 	î 	\x8C
    #ä 	\x84 	ë 	\x89 	
    
    
    =pod
    ##############################################
    #
    # DOC & ORIGINES
    #
    #http://www.perlmonks.org/bare/?node_id=827106
    
    
    #!/usr/bin/perl -w
    package main;
    use strict;
    use DBI;
    use Data::Dumper;
    
    my $dbh = DBI->connect('dbi:WMI:');
    
    my $sth = $dbh->prepare(<<WQL);
        SELECT * FROM __instanceoperationevent
        WITHIN 5
        WHERE TargetInstance ISA 'Win32_LogicalDisk'
        and TargetInstance.Name != 'C:'
    WQL
    $sth->execute();
    
    # loops forever
    while (defined (my $row = $sth->fetchrow_arrayref())) {
        my $ev = $row->[0];
        
        # Windows XP only :(
        print "Class\t",$ev->Path_->Class,"\n";
        for (qw(Name DeviceID Caption MediaType InterfaceType)) {
            print join "\t", $_, ($ev->TargetInstance->{$_} || '<none>');
            print "\n";
            if ($ev->Path_->Class eq '__InstanceCreationEvent') {
                print "Device (letter) $ev->{TargetInstance}->{Name} added\n";
            }
        }
    }
    
    
    VOIR AUSSI :
    http://powershell-scripting.com/index.php?option=com_joomlaboard&Itemid=76&func=view&catid=14&id=4844
    S'il n'y a plus de print à faire, il faut nettoyer...
    Supprimer tous les commentaires
    Supprimer la fonction sub ActiverAccents { et tout ce qui suit...
    ...

    NB : Si tu utilises ce programme à des fins malicieuses, c'est de ton entière responsabilité !

    Entre temps j'ai éjecté la clé, puis copié des répertoires différents... à la réinsertion il y a effacement.
    Voici ce que ça donne :

  4. #24
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    AJOUT :
    ATTENTION : Lorsqu'on connecte un disque USB contenant plusieurs partitions,
    la totalité des contenus dans toutes les partitions est effacé !

    Exemple avec 3 partitions sur un DD USB :

  5. #25
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2014
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Corrige moi si je me trompe mais la tu fait en sorte que le script ce lance au démarage de la session mais vue que je n'est pas accès au pc sur lequel le sdript doit s’exécute bah je ne peut pas l'utilisé et comme je ne connais rien en Perl bah je ne peut pas essayer de d'adapter ton code ..

    En tous cas encore merci

  6. #26
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Citation Envoyé par leverrid Voir le message
    Corrige moi si je me trompe mais la tu fait en sorte que le script ce lance au démarage de la session mais vue que je n'est pas accès au pc sur lequel le sdript doit s’exécute bah je ne peut pas l'utilisé et comme je ne connais rien en Perl bah je ne peut pas essayer de d'adapter ton code ..

    En tous cas encore merci
    Oui il se lance au démarrage.
    Soit dans Démarrer->Démarrage
    Et beaucoup mieux dans la clé Run de CURRENT_USERS

    En tout état de cause si tu n'as pas accès au PC, rien n'est faisable

    PS : J'effacerai d'ici 2, 3 jours les images qui prennent de la place pour rien.
    Bonne continuation !

  7. #27
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Août 2006
    Messages : 7
    Points : 8
    Points
    8
    Par défaut sacré problème cet autorun
    Je relance un peu cette conversation.
    En effet, j'ai le même problème (ou presque)
    Je voudrais tout simplement lancer automatiquement au branchement de la clé soit un petit programme, soit un menu (en html ?), par pure élégance envers l'utilisateur comme ça se fait sur les cd
    Le problème est que Windows n'accepte pas cette démarche par sécurité. Normal on pourrait lancer automatiquement n'importe quel virus ou autre programme malveillant (effacer le disque dur !).
    La question qui semble posée - et que je pose - est : y a-t-il moyen pour un honnête homme, de contourner ce comportement ?

  8. #28
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,
    Citation Envoyé par turblad
    y a-t-il moyen pour un honnête homme, de contourner ce comportement ?
    Bien sûr ! c'est toujours le même principe :
    Donc je pars encore du programme en Perl donné ICI ou d'adapter la dernière mouture de usb_MAX.pl

    Dans lequel il suffit d'adapter la commande à lancer.
    Donc dans la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while (defined (my $row = $sth->fetchrow_arrayref())) {
    	my $ev = $row->[0];
    	if ($ev->Path_->Class eq '__InstanceCreationEvent') {
    		$Disk = $ev->{TargetInstance}->{Name};
    		$Disk = $Disk ."\\";
    		my @Cde = "E:\\_DEV\\USB\\commande.bat";
    		system @Cde;
    	}
    }
    Plutôt que de lancer le .bat qui va effacer fichiers et répertoires tu lances ce que tu veux un navigateur, un jeu perso, un traitement de texte...
    - soit en modifiant le programme commande.bat
    comme ceci, par exemple pour ouvrir une page html qui se trouve ICI sur le PC, mais on peut aussi bien en ouvrir une du WEB...commande.bat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    E:\_DEV>"C:\Program Files (x86)\FirefoxPerso\Firefox_24_0\firefox.exe" -P FF24 E:\_SITE\Orange\index.html
    
    E:\_DEV>"C:\Program Files (x86)\FirefoxPerso\Firefox_24_0\firefox.exe" -P FF24 http://strawberryperl.com/
    - soit en lançant directement la commande dans le programme Perl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while (defined (my $row = $sth->fetchrow_arrayref())) {
    	my $ev = $row->[0];
    	if ($ev->Path_->Class eq '__InstanceCreationEvent') {
    		$Disk = $ev->{TargetInstance}->{Name};
    		$Disk = $Disk ."\\";
    		my @Cde = 'E:\_DEV>"C:\Program Files (x86)\FirefoxPerso\Firefox_24_0\firefox.exe" -P FF24 E:\_SITE\Orange\index.html';
    # OU            my @Cde = 'E:\_DEV>"C:\Program Files (x86)\FirefoxPerso\Firefox_24_0\firefox.exe" -P FF24 http://strawberryperl.com/';
    # OU            my @Cde = 'Word.exe';
    # OU            my @Cde = 'notepad';
    		system @Cde;
    	}
    }
    Le plus souple étant de mettre les commandes souhaitées dans un .bat, il n'y a plus à revenir dans le programme Perl

    Attention, dès que le port USB est sollicité le programme est déclenché, ceci qu'il s'agisse d'une clé, d'un DD, d'un téléphone portable, une tablette...
    Donc pour limiter l'action, il faut par exemple tester la présence d'un fichier particulier sur une clé USB pour que le programme souhaité ne se lance qu'à l'insertion de celle-ci uniquement.
    Il est certainement possible de faire la même chose avec d'autres langages que Perl, dès l'instant où ils sont en mesure de détecter un évènement sur un port USB, powershell probablement mais je ne connais pas...

Discussions similaires

  1. [XL-2010] comment faire des insert dans une base access sans avoir access
    Par Poulki dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/08/2012, 07h45
  2. Désactiver le "contenu mixe" lors de l'insertion d'une clé USB
    Par AntonioDella dans le forum Windows XP
    Réponses: 1
    Dernier message: 11/01/2010, 18h32
  3. Composant détectant l'insertion d'une clé USB
    Par ero-sennin dans le forum Composants VCL
    Réponses: 95
    Dernier message: 11/01/2010, 17h14
  4. Réponses: 8
    Dernier message: 30/01/2007, 23h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo