+-----+--------+----------+-------------------------------+
| 001 | coding | An-Mojeg | an-mojeg@mail-developpeur.com |
+-----+--------+----------+-------------------------------+

WSH (Windows Scripting Host) - tutorial
#######################################

Introduction :
--------------
	Bon je sait que vous allez vous dire "putain mais An-Mojeg n'as vraiment rien a foutre de
sa vie, pourquoi il nous parle des WSH se con" mais en fait je me suis rendu compte que beaucoup de
personnes avait du mal avec le VB Scripting donc j'en fait un tut passke moi chui gentil j'aide les
gens na ! 
Note : on trouve normalement un interpreteur de script windows sur toutes les becanes win depuis 
W98 c'est le fichier C:\WINDOWS\wscript.exe si vous l'avez c'est bon sinon faut le chercher (puis
quoi encore je vais pas vous donner l'url!).

Exemple simple :
----------------
	On va commencer par le traditionel "Hello World !".
1 - Ouvrez le notepad
2 - Copiez collez ce code :
'------------------------------------------ >>
msgbox "Hello World !", vbExclamation, "An-Mojeg fear !"
'------------------------------------------ >>
3 - Enregistrez le fichier
4 - Double cliquez dessus
5 - Wouaaaaaaaouuuu !!!
	Bon ben voilà j'espère que vous êtes fiers de vous.

Concepts basiques :
-------------------
	En VBScript (comme dans la pluspart des languages de programmations) il existe des variables.
Bon (une image) ce sont des tiroirs dans lesquelles vous mettez des informations(chaine de caractère,
nombres, ...) et les récupérez.
On va reprendre l'exemple ci-dessus pour appliquer des variables. On va mettre le message et le titre
de la box dans les tiroirs et on va dire a la fonction d'aller chercher dans ces tiroirs :
'------------------------------------------ >>
Dim message, titre			' ici on définit les tiroirs

message = "Hello World !"		' on rempli les tiroirs
titre = "An-Mojeg fear !"		' on rempli les tiroirs

msgbox message, vbExclamation, titre	' on dit a la fonction d'aller chercher dans ces tiroirs directement
'------------------------------------------ >>
Retestez le prog, ... ça marche ... wouaou je sait c un peu la honte moi avec mes tiroirs :\

	Ensuite il existe les commentaires, ça vous permets de mettre des petites notes dans votre
code pour que si quelqu'un d'autre le regarde il puisse comprendre plus facilement 
ATTENTION : ne foutez pas trop de commentaire sinon ça encombre le code inutilement.
En vbscript les commentaires sont définit en mettant une apostrophe devant le commentaire, elle
dit a l'interpreteur "stop le reste c'est pas important, ça te regarde pas".

	Maintenant on va s'attaquer aux boucles for ici encore le concept est simple il s'agit d'une
boucle avec un compteur (on reprend notre exemple, mais cette fois ci on va faire apparaitre 3 fois
la box) :
'------------------------------------------ >>
Dim compteur				' la on va definir la variable du compteur (imperatif)

for compteur = 1 to 3			' on met le compteur a 1 et on lui dit d'executer le code suivant jussqu'a ce qu'il soit a 3
	msgbox "Hello World !", vbExclamation, "An-Mojeg fear !"
next					' la le compteur est augmenté de 1 unité et on repart si il est pas égale a 3
'------------------------------------------ >>
	Le compteur doit obligatoirement être une variable pour qu'il puisse etre incrémenté (augmenté).
	Une boucle for peut aussi etre dans le sens inverse c'est a dire que le compteur est décrémenté (diminué)
	Exemple :
'------------------------------------------ >>
Dim compteur				' la on va definir la variable du compteur (imperatif)

for compteur = 3 to 1 step -1		' on met le compteur a 3 et on lui dit d'executer le code suivant jussqu'a ce qu'il soit a 1
	msgbox "Hello World !", vbExclamation, "An-Mojeg fear !"
next					' la le compteur est décrémenté de 1 unité et on repart si il est pas égale a 1
'------------------------------------------ >>
	ça revien au même :) en fait on peut même lui dire d'augmenter (ou diminuer) non pas d'une unite mais de autant d'unite qu'on le veut	:
'------------------------------------------ >>
Dim compteur				' la on va definir la variable du compteur (imperatif)

for compteur = 1 to 9 step 3		' on met le compteur a 1 et on lui dit d'executer le code suivant jussqu'a ce qu'il soit a 9
	msgbox "Hello World !", vbExclamation, "An-Mojeg fear !"
next					' la le compteur est incrémenté de 3 unité et on repart si il est pas égale a 9
'------------------------------------------ >>
	Je croit que c'est tout pour les boucles for.

	En programmation il existe aussi des instruction if qui si une condition est vraie execute une certaine
partie de code ex :
'------------------------------------------ >>
Dim variable				' la on va definir la variable du compteur dont on s'occupera nous même

variable = 1				' on met la variable a 1

if variable = 1 then			' si la variable est egale a 1 il execute le code jusska l'instruction end if
	msgbox "Hello World !", vbExclamation, "An-Mojeg fear !"
end if					' fin du si
'------------------------------------------ >>
	Maintenant réessayez avec :
'------------------------------------------ >>
Dim variable				' la on va definir la variable du compteur dont on s'occupera nous même

variable = 0				' on met la variable a 0

if variable = 1 then			' si la variable est egale a 1 il execute le code jusska l'instruction end if
	msgbox "Hello World !", vbExclamation, "An-Mojeg fear !"
end if					' fin du si
'------------------------------------------ >>
	Et voilà rien s'affiche maintenant on va faire un truc un peu plus développé : 
'------------------------------------------ >>
Dim variable				' la on va definir la variable du compteur dont on s'occupera nous même

variable = 0				' on met la variable a 0

if variable = 1 then			' si la variable est egale a 1 il execute le code jusska l'instruction else
	msgbox "Hello World !", vbExclamation, "An-Mojeg fear !"
else					' sinon <<<<<<<< execute le code jusska l'instruction end if
	msgbox "Meuhhh", vbExclamation, "An-Mojeg fear !"
end if					' fin du si
'------------------------------------------ >>
	Je vous laisse tester toutes les valeurs de variables possibles :)

	Bon voilà a peu près ce que vous devez absolument savoir pour pouvoir progresser maintenant on va
s'attaquer a certaines fonctions plus spécifiques.

Messages Box :
--------------
	Les messages box vous en voyez obligatoirement sous windows ce sont ces petits messages
que tout l'monde adore tant voilà l'explication de la fonction disponible pour les scripts :

msgbox [message], [style], [titre] (... le reste n'est pas important ...)

[message] = le message contenu dans la msgbox
[style] = le style de msgbox
peut prendre ces valeurs :
	- vbOKOnly : Affiche le bouton OK uniquement. 
	- vbOKCancel : Affiche les boutons OK et Annuler. 
	- vbAbortRetryIgnore : Affiche le bouton Abandonner, Réessayer et Ignorer. 
	- vbYesNoCancel : Affiche les boutons Oui, Non et Annuler. 
	- vbYesNo : Affiche les boutons Oui et Non. 
	- vbRetryCancel : Affiche les boutons Réessayer et Annuler.  
	- vbCritical : Affiche l'icône Message critique.  
	- vbQuestion : Affiche l'icône Requête d'avertissement. 
	- vbExclamation : Affiche l'icône Message d'avertissement. 
	- vbInformation : Affiche l'icône Message d'information. 
	- vbDefaultButton1 : Le premier bouton est le bouton par défaut. 
	- vbDefaultButton2 : Le deuxième bouton est le bouton par défaut. 
	- vbDefaultButton3 : Le troisième bouton est le bouton par défaut. 
	- vbDefaultButton4 : Le quatrième bouton est le bouton par défaut. 
	- vbApplicationModal : Boîte de dialogue modale. L'utilisateur doit répondre au message affiché dans la zone de message avant de pouvoir continuer de travailler dans l'application en cours. 
	- vbSystemModal : Modal système. Toutes les applications sont interrompues jusqu'à ce que l'utilisateur réponde au message affiché dans la zone de message. 
	- vbMsgBoxHelpButton : Ajoute le bouton Aide à la zone de message. 
	- VbMsgBoxSetForeground : Indique la fenêtre de zone de message comme fenêtre de premier plan. 
	- vbMsgBoxRight : Le teste est aligné à droite. 
	- vbMsgBoxRtlReading : Indique que le texte doit apparaître de droite à gauche sur les systèmes hébraïques et arabes. 
[titre] = le titre de la box

Input box :
-----------
	Ces messages box permettent de receuillir une valeur :

InputBox [message], [titre], [default], [xpos], [ypos] (... le reste n'est pas important ...)

[message] = Message de l'input
[titre] = Ben son titre
[default] = valeur par default
[xpos] = Position horizontale
[ypos] = Position verticale

Exemple :
'------------------------------------------ >>
Dim nom

nom = InputBox("Quel est ton nom ?","QuEsTiOn !!!", "An-Mojeg", 0, 0) 
MsgBox "Salut : " & nom
'------------------------------------------ >>

Manipulation de fichiers :
--------------------------
	Rha là ça devient plus interressant :)
	Bon pour manipuler des fichier il faut tout d'abord créer un objet FileSystemObject, un objet regroupe plein
de propriétées et de fonctions, ici par exemple ce sont des fonction de manipulation de fichier :)
Voilà comment créer l'objet :

Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")

	Maintenant a partir de cet objet nous allons créer un fichier toto.txt et y inscrire une ligne de texte.
'------------------------------------------ >>
Dim fs, a

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("toto.txt", True)
a.WriteLine("An-Mojeeeeeeuuuuuuuuuuuuuuuuuuugggggggggg")
a.Close
'------------------------------------------ >>
	En fait a est le handle du fichier c'est a dire que c'est avec lui que nous pouvons faire toutes les opérations
dessus. Maintenant nous allons ouvrir ce même fichier et lire la ligne que nous y avons mis :
'------------------------------------------ >>
Dim fs, a, donnes

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("toto.txt",1)
donnes = a.ReadLine
a.Close

msgbox donnes
'------------------------------------------ >>
	Rajoutez maintenant une ligne a votre fichier manuellement nous allons lire le fichier entier :
'------------------------------------------ >>
Dim fs, a, donnes

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile("toto.txt",1)
donnes = a.ReadAll
a.Close

msgbox donnes
'------------------------------------------ >>

Conclusion :
------------
	Je pourrai continuer et faire des tones de textes en vous expliquant diverses fonctions mais ce n'est pas le but de l'article
le plus important est que vous vous penchier longuement sur les Concepts Basiques du language qui sont des concepts présent dans pratiquement
tout les languages de programmation. Je vous en conjure n'utilisez pas le WSH pour faire des macro-virus car je trouve vraiment ça 
lamentable, les macro-virus c'est de la merde fumante donc suivez mon conseil utilisez le pour automatiser des tache répetitives.
	Sur ce je vous quitte sur un exemple.

Dernier exemple :
-----------------
	Lors du décryptage d'un fichier de mot de passe avec john je me suis rendu compte que j'avais plein de fichier dictionnaires
et que je voulais pas tous les entrer manuellement donc je les ais tous mit dans un dossier WordLists situé lui même dans le dossier
run de john et j'ai créé ce script qui crée à son tour un script batch qui lui traite le fichier passwd voilà :

'------------------------------------------ >>

Dim fichier		
Dim fs, a, f, f1, fc

fichier = InputBox("Entrez le fichier a décrypter :","[ john the ripper automation by An-Mojeg ]")	' ici on récupère le nom du fichier passwd a traiter

Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.CreateTextFile("attack.bat", True)								' on crée le fichier batch

a.WriteLine("john -single " & fichier)									' on y met déjà la technique -single de john (première commande a tester)

Set f = fs.GetFolder("WORDLISTS")									' la on acquiers le dossier WORDLISTS contenant les dicos
Set fc = f.Files											' ici ce sont les fichiers qu'il contient

For Each f1 in fc
	a.WriteLine("john -wordfile:WORDLISTS/" & f1.name & " " & fichier)				' pour chaque fichier on va insérer la ligne de commande qui va utiliser le fichier dico 
Next

a.WriteLine("john -i" & fichier)									' si il reste des survivants on les attaques en mode incrémentielle 
a.WriteLine("john -show:" & fichier)									' on montre le resultat des mots de passe ( tout fière :)) 

a.Close													' on ferme le handle du fichier script batch ( on a plus rien a y faire )

'------------------------------------------ >>

An-Mojeg		[ an-mojeg@mail-developpeur.com ]