+-----+--------+----------+-------------------------------+
| 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'espre 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 caractre,
nombres, ...) et les rcuprez.
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 dfinit 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 dfinit 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 incrment (augment).
	Une boucle for peut aussi etre dans le sens inverse c'est a dire que le compteur est dcrment (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 dcrment de 1 unit et on repart si il est pas gale a 1
'------------------------------------------ >>
	a revien au mme :) en fait on peut mme 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 incrment 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 mme

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 ressayez avec :
'------------------------------------------ >>
Dim variable				' la on va definir la variable du compteur dont on s'occupera nous mme

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 dvelopp : 
'------------------------------------------ >>
Dim variable				' la on va definir la variable du compteur dont on s'occupera nous mme

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 prs ce que vous devez absolument savoir pour pouvoir progresser maintenant on va
s'attaquer a certaines fonctions plus spcifiques.

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, Ressayer et Ignorer. 
	- vbYesNoCancel : Affiche les boutons Oui, Non et Annuler. 
	- vbYesNo : Affiche les boutons Oui et Non. 
	- vbRetryCancel : Affiche les boutons Ressayer et Annuler.  
	- vbCritical : Affiche l'icne Message critique.  
	- vbQuestion : Affiche l'icne Requte d'avertissement. 
	- vbExclamation : Affiche l'icne Message d'avertissement. 
	- vbInformation : Affiche l'icne Message d'information. 
	- vbDefaultButton1 : Le premier bouton est le bouton par dfaut. 
	- vbDefaultButton2 : Le deuxime bouton est le bouton par dfaut. 
	- vbDefaultButton3 : Le troisime bouton est le bouton par dfaut. 
	- vbDefaultButton4 : Le quatrime bouton est le bouton par dfaut. 
	- vbApplicationModal : Bote de dialogue modale. L'utilisateur doit rpondre au message affich dans la zone de message avant de pouvoir continuer de travailler dans l'application en cours. 
	- vbSystemModal : Modal systme. Toutes les applications sont interrompues jusqu' ce que l'utilisateur rponde au message affich dans la zone de message. 
	- vbMsgBoxHelpButton : Ajoute le bouton Aide  la zone de message. 
	- VbMsgBoxSetForeground : Indique la fentre de zone de message comme fentre de premier plan. 
	- vbMsgBoxRight : Le teste est align  droite. 
	- vbMsgBoxRtlReading : Indique que le texte doit apparatre de droite  gauche sur les systmes hbraques 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 crer un objet FileSystemObject, un objet regroupe plein
de proprites et de fonctions, ici par exemple ce sont des fonction de manipulation de fichier :)
Voil comment crer l'objet :

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

	Maintenant a partir de cet objet nous allons crer 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 oprations
dessus. Maintenant nous allons ouvrir ce mme 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 prsent 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 rpetitives.
	Sur ce je vous quitte sur un exemple.

Dernier exemple :
-----------------
	Lors du dcryptage 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 mme dans le dossier
run de john et j'ai cr ce script qui cre  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 dcrypter :","[ john the ripper automation by An-Mojeg ]")	' ici on rcupre le nom du fichier passwd a traiter

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

a.WriteLine("john -single " & fichier)									' on y met dj la technique -single de john (premire 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 insrer 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 incrmentielle 
a.WriteLine("john -show:" & fichier)									' on montre le resultat des mots de passe ( tout fire :)) 

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

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

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