Salut, voici mon code, j'ai un autre problème, c'est quand le fichier de préférence est fermé, que le thread est lancé et que le nouveau fichier de préférence est créé, le programme plante. Pour voir le problème avec ClearList() mettre 2 à la 2eme boucle (For Lent=1 To 2) et pour le problème de préférence, il faut mettre 3 (For Lent=1 To 3).
Code:
EnableExplicit
Define Dir_Comp.s, Key.s, MD5.s, Test.l, *ASC_SRC.l, Caract.l, ThreadCompress.l, PasswordNumber.l, Lent.l, PreferencesNumber.l
Global Charset_List.s, DirIni.s, DirCompress.s, MutexCompress
Declare.s BruteForceNext(Key.s, Size.l, Charset.s)
Declare Compress(FileNumber.l)
MutexCompress = CreateMutex()
For Caract=0 To 255
Charset_List + Chr(Caract)
Next Caract
DirIni = PathRequester("Dossier pour les fichiers .ini", "")
DirCompress = PathRequester("Dossier pour les fichiers compressés.", "")
NewList Verif.s()
; premier exemple d'utilisation :
; Une recherche pure et simple de toutesles combinaisons
Key = ""
MD5 = ""
PassWordNumber = 0
PreferencesNumber = 0
Macro Pass
Key = BruteForceNext(Key, Lent, Charset_List)
*ASC_SRC = AllocateMemory(Len(Key)+1)
PokeS(*ASC_SRC, Key, Len(Key), #PB_Ascii)
MD5 = MD5Fingerprint(*ASC_SRC, Len(Key))
Test = 0
ForEach Verif()
If Key = Verif()
Test = 1
EndIf
Next
If Test = 0
AddElement(Verif())
Verif() = Key
PreferenceGroup("MD5ASC")
WritePreferenceString(MD5, Key)
PasswordNumber + 1
EndIf
EndMacro
For Lent=1 To 3
Repeat
If PasswordNumber <= 0
CreatePreferences(DirIni+Str(PreferencesNumber)+".ini")
Pass
ElseIf PasswordNumber >= 200000
PreferenceGroup("")
PreferenceComment("Preference file of MegaNet Brute Force")
PreferenceComment("Date : "+FormatDate("%yyyy/%mm/%dd %hh:%ii:%ss", Date()))
PreferenceComment("File : "+Str(PreferencesNumber)+" .")
WritePreferenceLong("PasswordNumber", CountList(Verif()))
WritePreferenceString("Type", "MD5 To ASC .")
ClosePreferences()
Delay(3000)
ThreadCompress = CreateThread(@Compress(), PreferencesNumber)
PasswordNumber = 0
PreferencesNumber + 1
CreatePreferences(DirIni+Str(PreferencesNumber)+".ini")
Pass
Else
Pass
EndIf
Until Not Key
Next Lent
PreferenceGroup("")
PreferenceComment("Preference file of MegaNet Brute Force")
PreferenceComment("Date : "+FormatDate("%yyyy/%mm/%dd %hh:%ii:%ss", Date()))
PreferenceComment("File : "+Str(PreferencesNumber)+" .")
WritePreferenceLong("PasswordNumber", CountList(Verif()))
WritePreferenceString("Type", "MD5 To ASC")
ClosePreferences()
Delay(4000)
MessageRequester("ClosePreferences", "OK!", 0)
FreeMemory(*ASC_SRC)
MessageRequester("FreeMemory", "OK!", 0)
ClearList(Verif())
Delay(4000)
MessageRequester("ClearList", "OK", 0)
ThreadCompress = CreateThread(@Compress(), 0)
MessageRequester("CreateThread", "OK!", 0)
WaitThread(ThreadCompress)
MessageRequester("Fini!", "Les mots de passes on tous été génèrés.", #PB_MessageRequester_Ok)
End
Procedure.s BruteForceNext(Key.s, Size.l, Charset.s)
Protected Partial.l, Pos.l, rKey.s, rSet.s
If Len(Key) < Size
Partial = #True
ElseIf Len(Key) > Size Or Len(Charset) <= 1
Key = #NULL$
EndIf
If Key And Not Partial
While Right(Key, 1) = Right(Charset, 1)
Key = Left(Key, Len(Key)-1)
Wend
EndIf
If Key And Not Partial
rKey.s = Right(Key, 1)
rSet.s = Right(Charset, 1)
While rKey = rSet
Key = Left(Key, Len(Key)-1)
rKey.s = Right(Key, 1)
Wend
EndIf
If Key And Not Partial
Pos = FindString(Charset, Right(Key, 1), 1) + 1
Key = Left(Key, Len(Key)-1) + Mid(Charset, Pos, 1)
EndIf
If Key Or Partial
While Len(Key) < Size
Key + Left(Charset, 1)
Wend
EndIf
ProcedureReturn Key
EndProcedure
Procedure Compress(FileNumber.l)
LockMutex(MutexCompress)
MessageRequester("Nombre", "Nombre = "+Str(FileNumber)+" .", #PB_MessageRequester_Ok)
CreatePack(DirCompress+Str(FileNumber)+".cmp")
Delay(300)
AddPackFile(DirIni+Str(FileNumber)+".ini", 9)
Delay(6000)
ClosePack()
Delay(6000)
UnlockMutex(MutexCompress)
ProcedureReturn 1
EndProcedure
DisableExplicit
Voilà également le lien du fichier .rar qui contient le programme compilé, le fichier source, et les 2 fichiers créés pour le 2eme problème :
Brute_Force.rar.
Merci de votre aide!!!