Este es un script pequeño que cree con el objetivo de editar los gigantescos diccionarios de passwords que hay en la red.
Muchas veces utilizamos un diccionario de claves grande pensando que es lo mejor, pero no nos detemos a pensar que en ese diccionario hay claves como "%" y si vemos con mas detalle la mayoria de los sitios restringen las claves a un minimo 5-7 caracteres.
Por tanto es importante limitar los diccionarios a las soluciones viables de una password, es por esto que cree Dictditor: Editor de diccionarios por medio de una exprecion regular.
El uso es muy simple:
Usage: python dictditor.py [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-i FILE, --input=FILE
Dictionary to modify
-o PATH, --output=PATH
Modified dictionary.
-r REGEX, --regex=REGEX
Regular expression to apply.
(En la url del final podran ver un ejemplo de su uso)
El proyecto en la actualidad lo estoy mejorando para poder reordenar el diccionario y a su vez para generar una base de datos online que permita crear diccionarios. Pero por ahora este es el codigo:
__version__ = "1.0"
__author__ = "3n31ch"
__website__ = "http://www.elhacker.net/"
import re
from optparse import OptionParser
def printError(error):
print "[ERROR] ", error
def dictditor(inputPath, outputPath, regex):
inputFile = open(inputPath, "r")
outputFile = open(outputPath, "w")
pattern = re.compile(regex)
for line in inputFile:
word = line.replace("\n", "")
if(pattern.match(word)):
outputFile.write(line)
inputFile.close()
outputFile.close()
return;
def main():
print "DICTDITOR - Dictionary Editor"
print "Author: ",__author__
print __website__
parser = OptionParser(usage="usage: python %prog [options]",
version= "%prog "+__version__ )
parser.add_option("-i", "--input",
dest="input",
help="Dictionary to modify",
metavar="FILE");
parser.add_option("-o", "--output",
dest="output",
help= 'Modified dictionary.',
metavar="PATH");
parser.add_option("-r", "--regex",
dest="regex",
help= 'Regular expression to apply.',
metavar="REGEX");
(options, args) = parser.parse_args()
if options.input and options.output and options.regex:
dictditor(options.input, options.output, options.regex)
else:
printError("All options are necessary");
parser.print_help()
if __name__ == '__main__':
main()
Link github: https://github.com/3n31ch/dictditor (https://github.com/3n31ch/dictditor)
mmm...está bien, pero yo no diría que es un editor, más bien diría que
es un 'Extractor/Selector'... ya que mirando el código, busca un patrón y si coincide guarda la clave a un fichero nuevo, pero no edita esa misma clave, solo busca coincidencias y las copia a otro fichero aislado.
Citarfor line in inputFile:
word = line.replace("\n", "")
if(pattern.match(word)):
outputFile.write(line)
Desde luego es útil, porque muchas veces un diccionario completo, no va a ser tan útil como uno más específico (cuando se tienen datos para poder restringirlo).
...pero vamos no es un editor, no modifica una clave existente.
Claro, tienes razón. Mas acorde es el nombre "extractor", pero lo seguiré mejorando y seguramente no sea ni editor ni extractor sino mas bien... creador.
(O extractor de base de datos grande en un archivo... pero es mas lindo "creador").