Comment copier des dossiers automatiquement au démarrage d'une clé USB?

Quelle inconscience ce truc ! À ne sourtout pas suivre, la partie exécutée étant sur la clé, n’importe quelle clé insérée peut exécuter n’importe quoi !!!
@tous : Ne surtout pas suivre cette manip
@l’auteur de cette m… il faut coder la partie de copie dans l’exe résidant, et ne surtout pas exécuter un script provenant d’une clé USB.

1 « J'aime »

Ouai, j’approuve le code est vraiment pas beau, et la logique pas terrible.

Pour ceux que ça intéresse :

On défini une requête WMI event, qui cherche les nouvelles instances dans Win32_LogicalDisk ou DriveType est “2”

http://msdn.microsoft.com/en-us/library/aa394173(v=vs.85).aspx

$Query = “select * from __InstanceCreationEvent within 5 where TargetInstance ISA ‘Win32_LogicalDisk’ and TargetInstance.DriveType = 2”;

On défini un PowerShell ScriptBlock qui va être executé :

$Action = { & C:\test\script.ps1; };

On enregistre l’event

Register-WmiEvent -Query $Query -Action $Action -SourceIdentifier USBFlashDrive;

2 minutes de recherche google, j’ai la flemme. https://stackoverflow.com/questions/21805166/start-powershell-script-when-usb-drive-is-inserted

penser à faire un installateur pour vos scripts avec 7zip, ça prend 5 minutes, https://fr.tipsandtrics.com/how-make-an-exe-installation-file-752682

et penser également à faire un script de désinstallation.

Si vous n’aimez pas PowerShell, le code si dessus peut-être fait via AutoIt également en 2 minutes, avec TrayIcon, etc.

Bon code.

Bonjour,

Je ne suis bien sûr pas un expert du tout dans ce domaine pour l’instant et je ne demande qu’une chose c’est apprendre.

Je partage ce que je recherche, car pour moi ça fonctionne très bien, j’ai déjà expliqué qu’il suffit de tuer le processus “USB autorun” pour éviter justement des problèmes avec les clés inconnues…

Tu me dis de coder directement dans l’exe ? :thinking: Tu aurais une piste pour m’aider ? Au lieu de simplement critiquer sans réel apport à la communauté ?

Merci :wink::+1:

En mettant ça en // avec l’exécution automatique sur 1,5 milliard de Zindows j’en suis tout ébaudis ! :upside_down_face:

Oui relis ce que j’ai écrit aucune logique ne dois être stocker sur la clé, tout coté client (dans un exe un script, peu importe) :

  • Détection de l’évènement clé insérée
  • avec le numéro de série de la clé vérifier si des réglages connus (dossiers à synchroniser) existent dans la base de registre,
  • sinon vérifier sur la clé elle même, demander confirmation et sauvegarder les réglages dans le registre,
  • enfin lancer le xcopy des dossiers paramétrés.
    Bien sûr il faut être vigilant aux dossiers, et n’autoriser que les copies clés USB vers disque.

Règle #1 de l’info : Il ne faut jamais faire confiance à ce qui vient de l’extérieur (support amovible, téléchargement, réseau local).
Quand tu charges un fichier sur internet il est flagué non-sûr et windows demande avant de l’exécuter, idem quand l’autorun était encore en service sous XP tu avais une fenêtre te demandant confirmation avant d’exécuter l’autorun.

Là ton truc lit un fichier autorun sur un support amovible et fait ce qui est écrit dedans (quoi que ce soit), c’est un peu la base de tout virus / hack, sauf que toi tu le fais volontairement.
Bon techniquement c’est un bon test pour l’heuristique des antivirus, au bout de quelques branchement un bon antivirus devrait détecter le processus autorun.exe comme malveillant et le bloquer.

Donc je suppose que c’est même pas toi l’auteur de cet EXE, tu as accès au code source ? tu sais ce qu’il fait exactement ? Qu’est qui te dis que ça mine pas du bitcoin, ou ouvre des ports réseaux en attente d’ordre extérieur ? => cf règle #1 :wink:

Reformulation sur le thème de l’automobile :

  • Y’a un grave problème de sécurité avec la voiture, quand on passe sur un dos d’âne, l’airbag se déclenche et tue le conducteur
  • il suffit d’enlever le fusible de l’airbag avant de passer sur un dos d’âne.

Bon sinon pour un débutant c’est bien tu as atteint le but que tu t’étais fixé bravo, par contre avant de diffuser, pense à la sécurité.

J’achète, pour l’installation NSIS https://nsis.sourceforge.io/Main_Page n’est pas inaccessible l’avantage est qu’on a un vrai installeur désinstalleur pro.
Il suffit de partir d’un example et d’adapter

Hello,

Je t’ai fais un petit script autoit qui te demande de l’approuver, si tu acceptes, cela l’ajoute dans un fichier ini, ou se trouve l’exe, et copie les fichiers vers C:\temp\leserialnumberdelaclé. Il faut corriger la partie FileCopy, cela ne copie pas en récursif les sous dossiers.

Tu peux, compiler en exe les scripts autoit.

le site autoit : https://www.autoitscript.com/site/

il y a un forum français : https://www.autoitscript.fr/forum/

bon code ^^

 #cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.14.5
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here

#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

;Chemin de destination pour enregister les clés trusted
Const $FilePathToSettings = @ScriptDir & "\settings.ini"

;Local computer
$strComputer = "."

;On recupère l'objet
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\cimv2")

;Si un evenement type disk survient
$colEvents = $objWMIService.ExecNotificationQuery("Select * From __InstanceOperationEvent Within 5 Where TargetInstance isa 'Win32_LogicalDisk'")

While 1
	$objEvent = $colEvents.NextEvent
	;Si c'est un disque "non" fixe type clé usb
	If $objEvent.TargetInstance.DriveType = 2 Then
		Select
			;Si l'evenement c'est une creation "insert"
			Case $objEvent.Path_.Class()="__InstanceCreationEvent"
				;Debug console
				Consolewrite("Drive " & $objEvent.TargetInstance.DeviceId & " has been added." & @CR)
				Consolewrite("SerialNumber " & $objEvent.TargetInstance.VolumeSerialNumber & " has been added." & @CR)

				$Result = CheckIfSerialMatch($objEvent.TargetInstance.VolumeSerialNumber)
				If $Result = "True" Then
					Consolewrite("This USB is trusted we copy the file...." & @CR)
					FileCopy($objEvent.TargetInstance.DeviceId & "\*.*", "C:\Temp\Test\" & $objEvent.TargetInstance.VolumeSerialNumber & "\", $FC_OVERWRITE + $FC_CREATEPATH)
				EndIf
			Case $objEvent.Path_.Class()="__InstanceDeletionEvent"
				Consolewrite("Drive " & $objEvent.TargetInstance.DeviceId & " has been removed."& @CR)

		EndSelect
	EndIf
WEnd







Func CheckIfSerialMatch($SerialNumber)

    ; Contrôle si la clé est "trusted"
    Local $sTrusted = IniRead($FilePathToSettings, "TrustedUSB", $SerialNumber, "False")

	;Debug console
	Consolewrite("Trusted " & $sTrusted & @CR)

	;Si la clé est trusted
	If $sTrusted = "True" Then
		;On quitte la fonction
		Return True
	Else
		;Sinon, on demande si il faut la "trust"
		$ResMsgBox = MsgBox(4, "USB Trusted Device", "This device is not trusted. Do you want to trust it?")

		;Si l'utilisateur clique sur Yes
		If $ResMsgBox = 1 Then
			;On ajoute la clé dans "trusted"
			TrustDevice($SerialNumber)
		Else
			Return False
		EndIf
	EndIf

EndFunc


Func TrustDevice($SerialNumber)
	IniWrite(@ScriptDir & "\settings.ini", "TrustedUSB", $SerialNumber, "True")
EndFunc
1 « J'aime »

on, alors j’étais resté sur ta première solution, mais la c’est encore plus simple !!!

Merci !!

Je n’arrive vraiment pas a comprendre comment fonctionne la barre de progrès :frowning:
Si jpai un script qui copie d’un dossier a un autre, comment y integrer cette belle barre de progression ? Oui jpen demande toujours plus :wink:

2 « J'aime »

Pour la barre de progression je t’avoue que je n’y ai pas du tout prêté attention j’ai juste vérifié son intégrité et surtout vérifié que le script ne faisait rien de dangereux !
Si tu veux plus d’informations sur ce script je pense que le mieux est de s’adresser directement au créateur de celui-ci.
Le lien est tout en bas de ma publication mais je te le remets ici : http://batch.xoo.it/t4211-Une-barre-de-chargement.htm