Piero V.

Brute force in PHP

Attenzione: lo scopo di questo articolo è solamente didattico e l’autore non si assume nessuna responsabilità di ogni suo uso illecito.

Il brute force è una tecnica per trovare una password tentando tutte le combinazioni possibili di certi caratteri.

Ne avevo già parlato di come scriverne uno ma non era fatto molto bene.

Questo qui invece è completamente personalizzabile, ma vi lascio il codice che parla da sé:

<?php
/**
 * Questa funzione è eseguita quando hai una password completa.
 * Ovvero è un collback di esempio, nonché quello di default.
 *
 * @param string $stringa: La password
 * @return boolean: La password va bene?
 **/
function callback($stringa) {
}

/**
 * Questa funzione serve per annidare dei cicli for che provano le
 * varie possibilità di caratteri.
 *
 * @param string $stringa: La stringa di partenza
 * @param array $chars: I caratteri da provare
 * @param integer $lunghezza: Lunghezza a cui si vuole arrivare
 * @param mixed $callback: Il callback per verificare la password
 * @return string: La password, altrimenti se fallisce il booleano false
 */
function for_annidato($stringa, $chars, $lunghezza=1, $callback='callback') {
	$stringa_originale=$stringa;
	$found=false;

	for($i=0; $i<count($chars); $i++) {
		$stringa=$stringa_originale.$chars[$i];

		if(strlen($stringa)==$lunghezza) {
			$found=call_user_func($callback, $stringa) ? $stringa : false;
		} else {
			$found=for_annidato($stringa, $chars, $lunghezza, $callback);
		}

		if($found!==false) {
			break;
		}

	}

	return $found===false ? false : $found;

}