Anti-illégalité. -Post inutile.
Publié : mar. 27/juil./2004 13:52
Voila, comme je suis hébergeur, et que je veux vérifier le contenu des comptes de mes hébergés sans passer par le web, sans chercher dans leur FTP, j'ai mis au point un anti-illégalité. Cela marche comme un anti-virus sauf que ça marche pas avec les virus
. Juste avec les choses illégales.
Au début, je voulais vous mettre le code tel quel (ouhouh ! le pas gentil), mis j'ai vu que ce code, vu ce que j'utilsais, pouvais répondre à ceertaines questions de débutants. Ainsi je vous fourni un code completement commenté.
CheckBotMain.pb
CheckBotInclude.pb
Voila, le programme est encore assez instable, il ne supporte pas certaines choses mais je vais essayer de le completer pour montrer plus de choses ! 

Au début, je voulais vous mettre le code tel quel (ouhouh ! le pas gentil), mis j'ai vu que ce code, vu ce que j'utilsais, pouvais répondre à ceertaines questions de débutants. Ainsi je vous fourni un code completement commenté.
CheckBotMain.pb
Code : Tout sélectionner
;- Défini les variables globales.
Global crack.l, warez.l, gamez.l, p2p.l, sexe.l, ignored.l, LIgnore.l, nbdirectories.l, Tocheck
;- Créé le tableau pour les fichiers à ignorer.
Dim ToIgnore.s(100)
;- Créé la structure pour les fichiers sensibles.
Structure Files
file.s
directory.s
lfcrack.l
lfwarez.l
lfgamez.l
lfp2p.l
lfsexe.l
EndStructure
;- Créé la liste chaînée permet d'enregistrer les fichiers.
NewList Infected.Files()
;- Compte le nombre de dossiers à scanner.
If ReadFile(1, "directories.conf")
; Part à 1 car il y a déjà avec le readstring de while.
nbdirectories = 1
; Boucle de lecture du fichier
While ReadString()
; ligne$ est la ligne courante.
ligne$ = ReadString()
; Si elle ne commence pas par # (commentaire)
If Left(ligne$, 1) <> "#"
; Incrémentation
nbdirectories = nbdirectories + 1
EndIf
Wend
; Fermeture du fichier
CloseFile(1)
EndIf
;- Inclue le fichier contenant toutes les fonctions et constantes.
IncludeFile "CheckBotInclude.pb"
;- Ouvre la fenêtre principale
Open_Window_0()
;- Boucle principale
Repeat
; Attend un évenement
Event = WaitWindowEvent()
; Si cet évenement vient d'un gadget
If Event = #PB_EventGadget
; Cherche l'ID du gadget
GadgetID = EventGadgetID()
; Si c'est le bouton vérifier
If GadgetID = #Button_1
; Lancement d'un thread pour vérifier les fichiers/dossiers.
CreateThread(@main(), 0)
; Si c'est le bouton quitter
ElseIf GadgetID = #Button_2
; Quitte la boucle
quit = 1
EndIf
EndIf
; Fin de la boucle
Until Event = #PB_EventCloseWindow Or quit = 1
;- Quitte le programme
End
Code : Tout sélectionner
;- Déclaration des constantes pour les fenêtres.
Enumeration
#Window_0
#Window_1
EndEnumeration
;- Déclaration des constantes pour les gadgets.
Enumeration
#ProgressBar_0
#Text_0
#Text_1
#Listview_0
#Button_1
#Button_2
#Intro
#Fichier
#Demande
#FDelete
#Clear
#Rien
EndEnumeration
Procedure FindFile(file$) ; Cherche un fichier dans la liste des fichiers à ignorer.
; Boucle de 0 à 99 (taille maximale du tableau).
For i = 0 To 99
; Retourne le nom de fichier contenu dans le tableau à l'adresse i.
Lfile$ = ToIgnore(i)
; Si ce fichier est le fichier en cours.
If Lfile$ = file$
; la prococédure retourne vrai (true).
ProcedureReturn #TRUE
; Et quitte la boucle.
Break
EndIf
Next i
EndProcedure
Procedure WriteLog(text$, mode) ; Écrit le fichier log.
; Si le mode est 2
If mode = 2
; Ajout de l'information dans la liste.
AddGadgetItem(#Listview_0, -1, text$)
EndIf
; S'il arrive à ouvrir/créer le fichier.
If OpenFile(0, "results.log")
; Place le pointeur en fin de fichier.
FileSeek(Lof())
; Et écrit le texte demandé.
WriteStringN(text$)
; Puis ferme le fichier
CloseFile(0)
EndIf
EndProcedure
Procedure ExamineFile(file$) ; Scanne le fichier à la recherche de mots 'interdits'
; S'il arrive à ouvrir le fichier en lecture.
If ReadFile(2, file$)
; Mise en place de variables.
delay = 1
vide = 0
notclean = 0
fcrack.l = 0
fwarez.l = 0
fgamez.l = 0
fp2p.l = 0
fsexe.l = 0
; Boucle de lecture.
Repeat
; Lit la ligne en cours.
ligne$ = ReadString()
; La met en miniscules.
ligne$ = LCase(ligne$)
; S'il trouve le mot 'crack'.
If FindString(ligne$, "crack", 0)
; Incrémente la variable globale crack.
crack = crack + 1
; Incrémente la variable fcrack.
fcrack = fcrack + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'warez'.
If FindString(ligne$, "warez", 0)
; Incrémente la variable globale warez.
warez = warez + 1
; Incrémente la variable fwarez.
fwarez = fwarez + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'gamez'.
If FindString(ligne$, "gamez", 0)
; Incrémente la variable globale gamez.
gamez = gamez + 1
; Incrémente la variable fgamez.
fgamez = fgamez + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'p2p'.
If FindString(ligne$, "p2p", 0)
; Incrémente la variable globale p2p.
p2p = p2p + 1
; Incrémente la variable fp2p.
fp2p = fp2p + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; S'il trouve le mot 'sexe'.
If FindString(ligne$, "sexe", 0)
; Incrémente la variable globale sexe.
sexe = sexe + 1
; Incrémente la variable fsexe.
fsexe = fsexe + 1
; Et informe de l'existance de ce mot.
WriteLog("Texte illégal dans "+file$, 2)
; Met la variable notclean à 1.
notclean = 1
EndIf
; Supprime tous les espaces au début et à la fin de la chaîne, si la chaîne devient nulle.
If Trim(ligne$) = ""
; Incrémente la variable vide.
vide = vide + 1
EndIf
; Si delay (= 1)
If delay
; Pause de 1 milliseconde.
Delay(1)
; Mise à zéro de delay.
delay = 0
EndIf
; Fin de la boucle : avoir atteint la fin du fichier ou le nombre de lignes vides (10000).
Until Eof(2) Or vide = 10000
; Si notclean égale 1, le fichier n'est pas propre, il contient des mots 'interdits'.
If notclean = 1
; Enregistrement de ce fichier dans la liste.
AddElement(Infected())
; Met son nom.
Infected()\file = GetFilePart(file$)
; Met son chemin.
Infected()\directory = GetPathPart(file$)
; Met le nombre de mots interdits trouvés (non utilsé).
Infected()\lfcrack = fcrack
Infected()\lfwarez = fwarez
Infected()\lfgamez = fgamez
Infected()\lfp2p = fp2p
Infected()\lfsexe = fsexe
; Incrémente la variable globale Tocheck.
Tocheck = Tocheck + 1
EndIf
; Ferme le fichier.
CloseFile(2)
; S'il ne peut pas lire le fichier.
Else
; En informe l'utilisateur.
WriteLog("Impossible de lire "+NextD$+DEN$, 2)
EndIf
EndProcedure
Procedure ClearFile(file$) ; Nettoie le fichier.
; Renome le fichier en fichier *.bak.
If RenameFile(file$, file$+".bak")
; Ouvre le fichier renommé et créé un fichier ayant le nom du précédent.
If ReadFile(2, file$+".bak") And CreateFile(3, file$)
; Mise en place de variables.
vide = 0
delay = 1
; Boucle de lecture, remplacement, écriture.
Repeat
; Utilise le fichier deux (le renommé).
UseFile(2)
; Lit la ligne en cours.
ligne$ = ReadString()
; Remplace tous les mots interdits par 'rien'
ligne$ = ReplaceString(ligne$, "crack", "")
ligne$ = ReplaceString(ligne$, "warez", "")
ligne$ = ReplaceString(ligne$, "gamez", "")
ligne$ = ReplaceString(ligne$, "p2p", "")
ligne$ = ReplaceString(ligne$, "sexe", "")
; Change de fichier et prend le trois (le nouveau créé)
UseFile(3)
; Et écris la chaîne 'pure'.
WriteStringN(ligne$)
; Supprime tous les espaces au début et à la fin de la chaîne, si la chaîne devient nulle.
If Trim(ligne$) = ""
; Incrémente la variable vide.
vide = vide + 1
EndIf
; Si delay (= 1)
If delay
; Pause de 1 milliseconde.
Delay(1)
; Mise à zéro de delay.
delay = 0
EndIf
; Fin de la boucle : avoir atteint la fin du fichier ou le nombre de lignes vides (10000).
Until Eof(2) Or vide = 10000
; Ferme les deux fichiers.
CloseFile(2)
CloseFile(3)
; Supprime le fichier *.bak.
DeleteFile(file$+".bak")
; Informe que le nettoyage a réussi.
WriteLog("Fichier "+file$+" nettoyé avec succès !", 2)
; S'il ne peut pas créer un lire un fichier, informe.
Else
MessageRequester("Erreur", "Impossible de nettoyer le fichier !", #MB_ICONERROR)
EndIf
; S'il ne peut pas renommer, informe.
Else
MessageRequester("Erreur", "Impossible de nettoyer le fichier !", #MB_ICONERROR)
EndIf
EndProcedure
Procedure ExamineFDirectory(nbdirectory, directory$, type) ; Examine les répertoires.
; S'il l'examen a réussi.
If ExamineDirectory(nbdirectory, directory$, "*.*")
; Cherche la prochaine entrée.
NDE = NextDirectoryEntry()
; Tant qu'elle n'est pas nulle (inexistante).
While NDE <> 0
; Si elle vaut un, c'est un fichier.
If NDE = 1
; Cherche le nom du fichier.
DEN$ = DirectoryEntryName()
; Cherche si le fichier est dans la liste des fichiers à ignorer.
If FindFile(DEN$)
; Si oui, incrémente la variable globale ignored.
ignored = ignored+1
Else
; Sinon, ajoute le fichier qui va être scanné dans la liste.
AddGadgetItem(#Listview_0, -1, directory$+DEN$)
; Et l'affiche sous la barre de progression.
SetGadgetText(#Text_1, directory$+DEN$)
; Puis examine le fichier.
ExamineFile(directory$+DEN$)
EndIf
; Si l'entrée vaut deux, c'est un répertoire.
ElseIf NDE = 2
; Cherche le nom du répertoire.
DEN$ = DirectoryEntryName()
; S'il ne vaut pas les points de DOS/UNIX.
If DEN$ <> "." And DEN$ <> ".."
; Si le répertoire ne termine pas par un contre slash.
If Right(DEN$, 1) <> "\"
; Ajout de ce dernier.
DEN$ = DEN$ + "\"
EndIf
; Ajoute le dossier qui va être examiné dans la liste.
AddGadgetItem(#Listview_0, -1, directory$+DEN$)
; Et l'affiche sous la barre de progression.
SetGadgetText(#Text_1, directory$+DEN$)
; Puis examine ce répertoire (en incrementant la variable des répertoires, afin de pouvoir retourner au précédent)
ExamineFDirectory(nbdirectory+1, directory$+DEN$, 2)
EndIf
EndIf
; Utilise le répertoire précédent.
UseDirectory(nbdirectory)
; Cherche l'entrée suivante.
NDE = NextDirectoryEntry()
; Attend une milliseconde.
Delay(1)
Wend
; Si le type de répertoire est 1 (répertoire et non sous-répertoire).
If type = 1
; Informe du succès de l'opération.
WriteLog("Répertoire examiné avec succés", 2)
If crack = 0 And warez = 0 And gamez = 0 And p2p = 0 And sexe = 0
; Si rien d'illégal n'a été trouvé, informe.
WriteLog("Rien d'ill"+Chr(130)+"gal n'a "+Chr(130)+"t"+Chr(130)+" trouv"+Chr(130)+" !", 2)
Else
; Sinon, informe de ce qui a été trouvé.
WriteLog("crack = "+Str(crack), 2)
WriteLog("warez = "+Str(warez), 2)
WriteLog("gamez = "+Str(gamez), 2)
WriteLog("p2p = "+Str(p2p), 2)
WriteLog("sexe = "+Str(sexe), 2)
EndIf
; Si le nombre de fichiers ignorés est différent de zéro.
If ignored <> 0
; Informe du nombre de fichiers ignorés.
WriteLog(Str(ignored)+" fichier(s) ignoré(s) !", 2)
EndIf
EndIf
EndIf
EndProcedure
Procedure Open_Window_1() ; Créé la fenêtre de demande d'execution pour les fichiers 'sensibles'.
If OpenWindow(#Window_1, 235, 104, 230, 109, #PB_Window_TitleBar | #PB_Window_WindowCentered, "Que faire ?")
If CreateGadgetList(WindowID())
TextGadget(#Intro, 10, 10, 210, 20, "Des élements illégaux ont été trouvés dans :")
TextGadget(#Fichier, 10, 30, 210, 20, "")
TextGadget(#Demande, 10, 60, 230, 20, "Que désirez vous faire ?")
ButtonGadget(#FDelete, 10, 80, 60, 20, "Supprimer")
ButtonGadget(#Clear, 80, 80, 60, 20, "Nettoyer")
ButtonGadget(#Rien, 160, 80, 60, 20, "Rien", #PB_Button_Default)
EndIf
EndIf
EndProcedure
Procedure main() ; le coeur du programme.
; Désactive le bouton vérifier.
DisableGadget(#Button_1, 1)
; Ouvre la liste de fichier à ignorer.
If ReadFile(0, "ignore.list")
; L'affiche.
SetGadgetText(#Text_0, "Lecture de la liste des fichiers à ignorer")
; Et l'ajoute à la liste.
AddGadgetItem(#Listview_0, -1, "Lecture de la liste des fichiers à ignorer")
; Boucle de lecture.
Repeat
; Lit la ligne en cours.
FToIgnore$ = ReadString()
; Et l'ajoute à la liste des fichiers à ignorer.
ToIgnore(LIgnore) = FToIgnore$
; Incrémente la variable globale LIgnore
LIgnore = LIgnore + 1
; Ce, jusqu'à la prochaine ligne vide.
Until FToIgnore$ = ""
; Fermeture du fichier.
CloseFile(0)
; Avancement de la barre de progression.
SetGadgetState(#ProgressBar_0, 1)
EndIf
; Lit de le fichier contenant les répertoires.
If ReadFile(1, "directories.conf")
; Et commence la vérification.
SetGadgetText(#Text_0, "Vérification en cours...")
; Lit la ligne en cours.
NextD$ = ReadString()
; Met la variable i en place.
i = 2
; Pendant qu'il y aura des répertoire à lire.
While NextD$
; Si le répertoire ne commence pas par # (répertoire).
If Left(NextD$, 1) <> "#"
; Si le répertoire ne termine pas par un contre slash.
If Right(NextD$, 1) <> "\"
; Ajout de ce dernier.
NextD$ = NextD$ + "\"
EndIf
; Informe du répertoire en cours d'examin.
WriteLog(NextD$, 2)
; Et avance.
SetGadgetState(#ProgressBar_0, i)
; Examine le répertoire.
ExamineFDirectory(3, NextD$, 1)
EndIf
; Remise à zéro de varaibles globales.
crack = 0
warez = 0
gamez = 0
p2p = 0
sexe = 0
ignored = 0
; Change de fichier.
UseFile(1)
; Et lit le répertoire suivant.
NextD$ = ReadString()
; Pause de 1 milliseconde.
Delay(1)
; Incrémente i
i = i + 1
Wend
; Si la variable globale Tocheck est supérieure à zéro.
If Tocheck > 0
; Boucle de 1 à Tocheck.
For k = 1 To Tocheck
; Affiche l'opération en cours.
SetGadgetText(#Text_0, "Nettoyage et suppression des fichiers...")
; Supprime le texte des fichiers.
SetGadgetText(#Text_1, "")
; Remet la liste des fichier 'sensibles' au début.
ResetList(Infected())
; Ouvre la fenêtre 'd'execution'
Open_Window_1()
; Prend l'entrée suivante dans la liste.
NextElement(Infected())
; Et l'affiche dans la fenêtre.
SetGadgetText(#Fichier, Infected()\file)
; Mise à zéro de suite.
Suite = 0
; Boucle pour la fenêtre.
Repeat
; Attend un évenement.
Event = WaitWindowEvent()
; S'il vient d'un gagdet.
If Event = #PB_EventGadget
; Cherche l'ID du gadget.
GadgetID = EventGadgetID()
; Si le gadget est le bouton 'supprimer'.
If GadgetID = #FDelete
; Suppression du fichier sur le disque.
DeleteFile(Infected()\directory+Infected()\file)
; Information.
WriteLog("Fichier "+file$+" supprimé avec succès !", 2)
; Mise à 1 de suite.
Suite = 1
; Si c'est le bouton 'nettoyer'.
ElseIf GadgetID = #Clear
; Nettoie le fichier.
ClearFile(Infected()\directory+Infected()\file)
; Mise à 1 de suite.
Suite = 1
; Si c'est le bouton 'rien'.
ElseIf GadgetID = #Rien
; Mise à 1 de suite.
Suite = 1
EndIf
EndIf
; Fin de la boucle si Suite égale 1
Until Suite = 1
; Supprime le fichier en cours de la liste.
DeleteElement(Infected())
Next k
; Mise à zéro de Tocheck.
Tocheck = 0
EndIf
; Réactive le gadget.
DisableGadget(#Button_1, 0)
; Enlève le texte des zone de texte.
SetGadgetText(#Text_0, "")
SetGadgetText(#Text_1, "")
; Remet la barre de progression à zéro.
SetGadgetState(#ProgressBar_0, 0)
; Sinon, informe de la non lecture.
Else
AddGadgetItem(#Listview_0, -1, "Impossible de lire le fichier de configuration !")
EndIf
EndProcedure
Procedure Open_Window_0() ; Ouvre la fenêtre principale
If OpenWindow(#Window_0, 297, 133, 350, 489, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered, "Vérificateur de fichiers")
If CreateGadgetList(WindowID())
ProgressBarGadget(#ProgressBar_0, 20, 30, 310, 30, 0, nbdirectories+1)
TextGadget(#Text_0, 20, 10, 310, 20, "")
TextGadget(#Text_1, 20, 60, 310, 20, "")
ListViewGadget(#Listview_0, 20, 80, 310, 370)
ButtonGadget(#Button_1, 20, 460, 150, 20, "Vérifier")
ButtonGadget(#Button_2, 180, 460, 150, 20, "Quitter")
EndIf
EndIf
EndProcedure
