Sei sulla pagina 1di 5

ManualeWordlistMaker

http://escher07.altervista.org

NoteGenerali

WordlistMakerunprogrammafattopercreareedelaboraredizionari,ovverosostanzialmentelistedi
parole,chepossanoessereutilizzateperattacchiadizionarioadesempiosuhashprecedentemente
catturati,comeaccadeadesempionelleprovedicrackdelleretiwireless.

Lasuastrutturalogicasicapisceosservandolaseguentemascheraprincipale:

Lefunzioniprincipalisono3ossia:

Funzione Descrizione
Create Percrearenuovidizionaridaalgoritmiclassicidi
calcolocombinatoriooinmodocasuale
Process Pereseguireoperazioni(esempiopermutazionisu
undizionarioesistente)
Join Joinpercombinarefraloro(sostanzialmente
attraversoilprodottocartesiano)duedizionari
esistenti

Ciascunafunzionehaipropriparametricaratteristici(es.setdicaratteri,filediinput,output)che
compaiononelrelativotab.Tuttelefunzionihannoperincomuneunaseriedicontrollichecompaiono
nellapartebassadellaform,ovveroiseguenti:

oltreadunabarradiavanzamentoedunboxdidialogoilcuiruoloevidente.Mediantelelencoa
discesaOutputTosiscegliesostanzialmenteseloutputdellanostraoperazionedeveesseredirettoverso
unfileoppureversoildialogboxdicuisopra.

Laredirezioneversoildialogboxoltrearallentareiltuttodchiaramentedeiproblemidilimitemassimo
dirighe.Luscitadaintendersicomenormalesostanzialmenteilfile:quellaversolacaselladidialogosi
utilizzaingenereperprove,debug,eperrendersicontodiquellochesuccede.

LavelocitinscritturapuessereinqualchemodomassimizzataattraversoilnumerodicicliWriteEvery
(Loop).Seadesempioquestonumerovale100vuoldirecheilprogrammabufferizza100righeprimadi
chiamarelaFile.WriteLine()cheabbastanzalenta.Ilnumeropernondeveesseretroppoaltopernon
incorrerenellalentezzalegataagestirestringheenormi.

LintervallodiaggiornamentodeltemporesiduoUpdateRemainingTime(Loop)hasignificatosimile.
Anchequiaumentandolintervallodiaggiornamentoaumentaunpolavelocit,masolofinoaduncerto
punto.Ilmotivoche,percomestatofattoalmomentoilprogrammalasolapresenzadiunafunzionedi
updateformsitraduceinunacallbackdalthreaddielaborazionedellacorrispondenteoccurrence:callback
cheseilnumerodioccurrenceelevato(miliardi,ovveroGB)rallentanoinmodoinaffrontabileiltutto.

Lasoluzioneperlagenerazionedifilegrandisostanzialmentequelladidisattivaretuttolavanzamento
graficotramiteildecheckdellInteractiveOuputchepoilasoluzionedidefault.Inquestocasoper
rendersicontodellavanzamentosipucomunquesempreguardareiltassodicrescitadelfiledioutputa
sistemaoperativo.

Riguardoaibottoni,ilsignificatoovvio.LoStopchiaramentepossibileperchlelaborazionesisvolgein
unthreaddiversorispettoaquelloincuivieneeseguitalamainform.IlClearpuliscedialogboxe
informazionidiavanzamento.

Riguardoallacasellarelativaalfilesplittingparticolarmenteutilequandoilprogrammadicrackutilizzato
nonaccettafilepigrandiditanto(adesempioperAirCrackconlopzionewillimite2GB):ifilese
prova.txtilnomeassegnatoalloutputfilesarannoprova_0.txt,prova_1.txtecosvia.

FunzioneCreate

Servecomedettoagenerarenuovidizionarieiparametricaratteristicisonoquesti:


Sostanzialmente:ilcharacterset,lalgoritmoelalunghezzamassimadellaparola.Isetdicaratteriutilizzabili
sonoquellipresentinelfilecharsets.txtpresentenelladirectorydellapplicazione.Didefaultnesonostati
messialcuni(nominatiedefiniticomedastandarddiCaindiOxid.it):senepossoovviamenteaggiungere
altriotoglierli(ovviamente:almenounonelfilecharsets.txtdeveessercieilfilemedesimodeveesistere
sennlapplicazionevaincrash).

Glialgoritmipossibilisonoquesti:

Ovvero:

Disposizioniconripetizioni
PermutazioniSemplici
PermutazioniconRipetizioni
GenerazioneCasuale

Perognipossibilitnellarigadescrittivaelencato:

Iltipodiinsiemedisimboli(distintioqualunque,ovveroancheconripetizioni)
Iltipodisequenza(ordinataononordinata,lunghezza,conripetizioniono)
IlnumeroNdicasitotali

FraglialgoritminonsonostatiinseritileDisposizioniSemplicieleCombinazioni(SemplicieConRipetizioni)
perchnonritenutiutiliperilcasospecifico.Alivellodiimplementazionetuttiivarialgoritmisono
implementaticondelleclassi,figliediunaclassebase,esempio(perledisposizioniconripetizioni):

classAlg_OrdSeq:Alg_Base

Leclassisonosostanzialmentetuttesimili:lelencopropriet/metodiforniscequestorisultato:


Incuievidenziamoquestielementi:

Costruttorechericevefraglialtriininputlinsiemedeisimbolielalunghezzadelleparoleda
generare(primidueargomenti)elavoid(callback)dachiamarequandohafinitoliesima
iterazione;
MetodiPubbliciCount()ePrintAll()rispettivamenteperilconteggiodelleoccurrenceseperavviare
lagenerazione;
MetodiPrivatoFindNextIndexArray()checalcolailprossimopassaggio(inquestocasonuova
permutazionedelvettoredegliindici)

FunzioneProcess

Iparametricaratteristicistavoltasonoquesti:

Almomentolunicoalgoritmoimplementatolapermutazionedellinteraparolaconlapossibilitdi
scegliereunaappropriataazioneselaparolapilungaopicortadiuncertovalore.Fissatouncerto
limite(es.MaxWordLength=8)sipusceglierese:

Nonprocessareparolepilunghe
Processaresoloparolepilunghe

Questafunzionesirivelaindispensabilequando,datoundizionariosivoglionogenerarepertutteleparole
tuttelepossibilipermutazioni:inquestocasofissatoadesempioillimitead8caratterisisaltanoleparole
lunghe(ciononsenecalcolanole8!opipermutazioni)chepotrebberocostituiredeimomentiincui
sostanzialmenteliterazionesiblocca.

Unaprecisazionerelativaallavanzamento:questomisuratosuicicli(linee)dellinputfile.Sequestoha
parolelungheadunciclodiquestotiponecorrispondonomoltitotali(8!,9!etc..).Eccoperchquesto
lunicocasoincuiinsostanzamettereneiparametricomuniWriteEvery(Loop):=1nonsolononrallenta
troppomaanchelunicomodopervedereunaggiornamentodeidatidiavanzamentoabbastanza
continuo(edquindicosafortementeconsigliata).

FunzioneJoin

Stavoltaiparametrisonoquesti:

LalogicasimileaquelladelProcess.Glialgoritmisonostavoltadue:charunionechardifference,lacui
differenzasicapiscedagliesempinelcomboAlgorythm.Leazioniselezionabilistavoltasonoinvece
quattro,ossia:

RiguardoallimplementazionedelleoperazionidiProcesseJoinquestasostanzialmentesimile.Efatta
attraversoclassicheereditanodaunaclasseOperazioneBase:

classOpr_JoinFiles:Opr_Base

AllinternodellaWriteAll()diquestaclassesiesegueilcicloprincipale(sulfilediinputperprocess,sul
cartesianodeifilediinputperiljoin),doveadognirigasichiamaunalgoritmosullaWordcorrente,esempi:

Process:Alg_RepPermRP=newAlg_RepPerm(CurrentWordAsArray,refDummy,InternalCallback);
Join:CurrentOutput=EvalFilteredCurrentOutput(s1,s2,CurrentOutput);

Links

http://it.wikipedia.org/wiki/Calcolo_combinatorio
http://www.ioprogrammo.it/cc/algoritmo_combinazionit13636.0.html
http://forum.html.it/forum/showthread/t723252.html