Mebus / cupp

Common User Passwords Profiler (CUPP)
GNU General Public License v3.0
4.54k stars 1.17k forks source link

Adding to 1337 mode #17

Open Inc0nce1vable opened 7 years ago

Inc0nce1vable commented 7 years ago

Hi guys, Just thought I'd let you know that when I try to add to leet mode, cupp completely disregards the new input. I have edited both the config file and the cupp.py file. I am trying to add l=1 and a=@ but also keeping the default values there too.

Here is the code in the cupp.cfg and cupp.py file if you guys need it. Also I am aware that the entry for a=@ isn't in the code, but what is the point if I can't get it to work with l=1

Also sorry for the super long post, if there is a way to upload the files then I would do it. (there probably is im just new here lol)

cupp.cfg `# [ cupp.cfg ] #

This is configuration file for cupp.py

#

There are no options to configure the application within it. The app reads it,

does not change it. I'm hoping you'll figure out how to looking at this.

[ 1337 mode ]

If you think this default settings are not right,

you can change it for yourself. For example if you

don't like a=4, just change it to a=@ :)

If you don't need some chars, just comment it! Duplicates are allowed too.

For adding chars, you might need to add some lines in cupp.py...

[years] years = 2008,2009,2010,2011,2012,2013,2014,2015,2016,2017

[leet] a=4 i=1 e=3 t=7 o=0 s=5 g=9 z=2 l=1

[ Special chars ] for adding some pwnsauce! Remove or add as necessary,

separated by comma

[specialchars] chars=!,@,'#',$,%%,&,*

[ Random years ] take it as much as you need!

[ Random numbers ]

In this default setting, numbers from 0 to 100 will be added to all words

compiled by cupp.py

[nums] from=0 to=100

[ Word length shaping ]

This setting will exclude words from compiled wordlist that are shorter

than [wcfrom] and longer than [wcto].

wcfrom=5 wcto=12

[ Threshold ]

Threshold setting for word concatenations parsed from existing wordlist

(using -w option).

For example, from 200 words CUPP will compile 200*200=40,000 new words.

Increasing this level may cause high memory consumption, be careful.

threshold=200

[ Wordlist config ]

[alecto] alectourl=http://www.helith.net/projects/alecto/alectodb.csv.gz

[downloader] ftpname=FUNET ftpurl=ftp.funet.fi ftppath=/pub/unix/security/passwd/crack/dictionaries/ ftpuser=anonymous ftppass=cupp3`

cupp.py `#!/usr/bin/python #

[Program]

#

CUPP 3.1.0-alpha

Common User Passwords Profiler

# # #

[Author]

#

Muris Kurgas aka j0rgan

j0rgan [at] remote-exploit [dot] org

http://www.remote-exploit.org

http://www.azuzi.me

# # #

[License]

#

This program is free software; you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation; either version 3 of the License, or

any later version.

#

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

#

You should have received a copy of the GNU General Public License

along with this program; if not, write to the Free Software

Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

#

See 'docs/LICENSE' for more information.

import sys import os import ftplib import ConfigParser import urllib import gzip import csv

Reading configuration file...

config = ConfigParser.ConfigParser() config.read('/etc/cupp.cfg')

years = config.get('years', 'years').split(',') chars = config.get('specialchars', 'chars').split(',')

numfrom = config.getint('nums','from') numto = config.getint('nums','to')

wcfrom = config.getint('nums','wcfrom') wcto = config.getint('nums','wcto')

threshold = config.getint('nums','threshold')

1337 mode configs, well you can add more lines if you add it to config file too.

You will need to add more lines in two places in cupp.py code as well...

a = config.get('leet','a') i = config.get('leet','i') e = config.get('leet','e') t = config.get('leet','t') o = config.get('leet','o') s = config.get('leet','s') g = config.get('leet','g') z = config.get('leet','z') l = config.get('leet','l')

for concatenations...

def concats(seq, start, stop): for mystr in seq: for num in xrange(start, stop): yield mystr + str(num)

for sorting and making combinations...

def komb(seq, start, special = ""): for mystr in seq: for mystr1 in start: yield mystr + special + mystr1

print list to file counting words

def print_to_file(filename, unique_list_finished): f = open ( filename, 'w' ) unique_list_finished.sort() f.write (os.linesep.join(unique_list_finished)) f = open ( filename, 'r' ) lines = 0 for line in f: lines += 1 f.close() print "[+] Saving dictionary to \033[1;31m"+filename+"\033[1;m, counting \033[1;31m"+str(lines)+" words.\033[1;m" print "[+] Now load your pistolero with \033[1;31m"+filename+"\033[1;m and shoot! Good luck!"

if len(sys.argv) < 2 or sys.argv[1] == '-h': print " ___ " print " \033[07m cupp.py! \033[27m # Common" print " \ # User" print " \ \033[1;31m,,\033[1;m # Passwords" print " \ \033[1;31m(\033[1;moo\033[1;31m)__\033[1;m # Profiler" print " \033[1;31m(__) )\ \033[1;m " print " \033[1;31m ||--|| \033[1;m\033[05m*\033[25m\033[1;m [ Muris Kurgas | j0rgan@remote-exploit.org ]\r\n\r\n"

print " [ Options ]\r\n"
print " -h  You are looking at it baby! :)"
print "          For more help take a look in docs/README"
print "      Global configuration file is cupp.cfg\n"

print " -i  Interactive questions for user password profiling\r\n"

print " -w  Use this option to improve existing dictionary,"
print "      or WyD.pl output to make some pwnsauce\r\n"

print " -l  Download huge wordlists from repository\r\n"
print " -a  Parse default usernames and passwords directly from Alecto DB."
print "      Project Alecto uses purified databases of Phenoelit and CIRT"
print "      which where merged and enhanced.\r\n"
print " -v  Version of the program\r\n"
exit()

elif sys.argv[1] == '-v': print "\r\n \033[1;31m[ cupp.py ] v3.1.0-alpha\033[1;m\r\n" print " Hacked up by j0rgan - j0rgan@remote-exploit.org" print " http://www.remote-exploit.org\r\n" print " Take a look ./README.md file for more info about the program\r\n" exit()

elif sys.argv[1] == '-w': if len(sys.argv) < 3: print "\r\n[Usage]: "+sys.argv[0]+" -w [FILENAME]\r\n" exit() fajl = open(sys.argv[2], "r") listic = fajl.readlines() linije = 0 for line in listic: linije += 1

listica = []
for x in listic:
    listica += x.split()

print "\r\n      *************************************************"
print "      *                    \033[1;31mWARNING!!!\033[1;m                 *"
print "      *         Using large wordlists in some         *"
print "      *       options bellow is NOT recommended!      *"
print "      *************************************************\r\n"

conts = raw_input("> Do you want to concatenate all words from wordlist? Y/[N]: ").lower()

if conts == "y" and linije > threshold:
    print "\r\n[-] Maximum number of words for concatenation is "+str(threshold)
    print "[-] Check configuration file for increasing this number.\r\n"
    conts = raw_input("> Do you want to concatenate all words from wordlist? Y/[N]: ").lower()
conts = conts
cont = ['']
if conts == "y":
    for cont1 in listica:
        for cont2 in listica:
            if listica.index(cont1) != listica.index(cont2):
                cont.append(cont1+cont2)

spechars = ['']
spechars1 = raw_input("> Do you want to add special chars at the end of words? Y/[N]: ").lower()
if spechars1 == "y":
    for spec1 in chars:
        spechars.append(spec1)
        for spec2 in chars:
            spechars.append(spec1+spec2)
            for spec3 in chars:
                spechars.append(spec1+spec2+spec3)

randnum = raw_input("> Do you want to add some random numbers at the end of words? Y/[N]:").lower()
leetmode = raw_input("> Leet mode? (i.e. leet = 1337) Y/[N]: ").lower()

kombinacija1 = list(komb(listica, years))
kombinacija2 = ['']
if conts == "y":
    kombinacija2 = list(komb(cont, years))
kombinacija3 = ['']
kombinacija4 = ['']
if spechars1 == "y":
    kombinacija3 = list(komb(listica, spechars))
    if conts == "y":
        kombinacija4 = list(komb(cont, spechars))
kombinacija5 = ['']
kombinacija6 = ['']
if randnum == "y":
    kombinacija5 = list(concats(listica, numfrom, numto))
    if conts == "y":
        kombinacija6 = list(concats(cont, numfrom, numto))

print "\r\n[+] Now making a dictionary..."

print "[+] Sorting list and removing duplicates..."

komb_unique1 = dict.fromkeys(kombinacija1).keys()
komb_unique2 = dict.fromkeys(kombinacija2).keys()
komb_unique3 = dict.fromkeys(kombinacija3).keys()
komb_unique4 = dict.fromkeys(kombinacija4).keys()
komb_unique5 = dict.fromkeys(kombinacija5).keys()
komb_unique6 = dict.fromkeys(kombinacija6).keys()
komb_unique7 = dict.fromkeys(listica).keys()
komb_unique8 = dict.fromkeys(cont).keys()

uniqlist = komb_unique1+komb_unique2+komb_unique3+komb_unique4+komb_unique5+komb_unique6+komb_unique7+komb_unique8

unique_lista = dict.fromkeys(uniqlist).keys()
unique_leet = []
if leetmode == "y":
    for x in unique_lista: # if you want to add more leet chars, you will need to add more lines in cupp.cfg too...
        x = x.replace('a',a)
        x = x.replace('i',i)
        x = x.replace('e',e)
        x = x.replace('t',t)
        x = x.replace('o',o)
        x = x.replace('s',s)
        x = x.replace('g',g)
        x = x.replace('z',z)
        x = x.replace('l',l)
        unique_leet.append(x)

unique_list = unique_lista + unique_leet

unique_list_finished = []

unique_list_finished = [x for x in unique_list if len(x) > wcfrom and len(x) < wcto]

print_to_file(sys.argv[2]+'.cupp.txt', unique_list_finished)

fajl.close()
exit()

elif sys.argv[1] == '-i': print "\r\n[+] Insert the informations about the victim to make a dictionary" print "[+] If you don't know all the info, just hit enter when asked! ;)\r\n"

We need some informations first!

name = raw_input("> First Name: ").lower()
while len(name) == 0 or name == " " or name == "  " or name == "   ":
    print "\r\n[-] You must enter a name at least!"
    name = raw_input("> Name: ").lower()
name = str(name)

surname = raw_input("> Surname: ").lower()
nick = raw_input("> Nickname: ").lower()
birthdate = raw_input("> Birthdate (DDMMYYYY): ")
while len(birthdate) != 0 and len(birthdate) != 8:
    print "\r\n[-] You must enter 8 digits for birthday!"
    birthdate = raw_input("> Birthdate (DDMMYYYY): ")
birthdate = str(birthdate)

print "\r\n"

wife = raw_input("> Partners) name: ").lower()
wifen = raw_input("> Partners) nickname: ").lower()
wifeb = raw_input("> Partners) birthdate (DDMMYYYY): ")
while len(wifeb) != 0 and len(wifeb) != 8:
    print "\r\n[-] You must enter 8 digits for birthday!"
    wifeb = raw_input("> Partners birthdate (DDMMYYYY): ")
wifeb = str(wifeb)
print "\r\n"

kid = raw_input("> Child's name: ").lower()
kidn = raw_input("> Child's nickname: ").lower()
kidb = raw_input("> Child's birthdate (DDMMYYYY): ")
while len(kidb) != 0 and len(kidb) != 8:
    print "\r\n[-] You must enter 8 digits for birthday!"
    kidb = raw_input("> Child's birthdate (DDMMYYYY): ")
kidb = str(kidb)
print "\r\n"

pet = raw_input("> Pet's name: ").lower()
company = raw_input("> Company name: ").lower()
print "\r\n"

words = ['']
words1 = raw_input("> Do you want to add some key words about the victim? Y/[N]: ").lower()
words2 = ""
if words1 == "y":
    words2 = raw_input("> Please enter the words, separated by comma. [i.e. hacker,juice,black], spaces will be removed: ").replace(" ","")
words = words2.split(",")

spechars = ['']
spechars1 = raw_input("> Do you want to add special chars at the end of words? Y/[N]: ").lower()
if spechars1 == "y":
    for spec1 in chars:
        spechars.append(spec1)
        for spec2 in chars:
            spechars.append(spec1+spec2)
            for spec3 in chars:
                spechars.append(spec1+spec2+spec3)

randnum = raw_input("> Do you want to add some random numbers at the end of words? Y/[N]:").lower()
leetmode = raw_input("> Leet mode? (i.e. leet = 1337) Y/[N]: ").lower()

print "\r\n[+] Now making a dictionary..."

Now me must do some string modifications...

Birthdays first

birthdate_yy = birthdate[-2:]
birthdate_yyy = birthdate[-3:]
birthdate_yyyy = birthdate[-4:]
birthdate_xd = birthdate[1:2]
birthdate_xm = birthdate[3:4]
birthdate_dd = birthdate[:2]
birthdate_mm = birthdate[2:4]

wifeb_yy = wifeb[-2:]
wifeb_yyy = wifeb[-3:]
wifeb_yyyy = wifeb[-4:]
wifeb_xd = wifeb[1:2]
wifeb_xm = wifeb[3:4]
wifeb_dd = wifeb[:2]
wifeb_mm = wifeb[2:4]

kidb_yy = kidb[-2:]
kidb_yyy = kidb[-3:]
kidb_yyyy = kidb[-4:]
kidb_xd = kidb[1:2]
kidb_xm = kidb[3:4]
kidb_dd = kidb[:2]
kidb_mm = kidb[2:4]

# Convert first letters to uppercase...

nameup = name.title()
surnameup = surname.title()
nickup = nick.title()
wifeup = wife.title()
wifenup = wifen.title()
kidup = kid.title()
kidnup = kidn.title()
petup = pet.title()
companyup = company.title()

wordsup = []
wordsup = map(str.title, words)

word = words+wordsup

# reverse a name

rev_name = name[::-1]
rev_nameup = nameup[::-1]
rev_nick = nick[::-1]
rev_nickup = nickup[::-1]
rev_wife = wife[::-1]
rev_wifeup = wifeup[::-1]
rev_kid = kid[::-1]
rev_kidup = kidup[::-1]

reverse = [rev_name, rev_nameup, rev_nick, rev_nickup, rev_wife, rev_wifeup, rev_kid, rev_kidup]
rev_n = [rev_name, rev_nameup, rev_nick, rev_nickup]
rev_w = [rev_wife, rev_wifeup]
rev_k = [rev_kid, rev_kidup]
# Let's do some serious work! This will be a mess of code, but... who cares? :)

# Birthdays combinations

bds = [birthdate_yy, birthdate_yyy, birthdate_yyyy, birthdate_xd, birthdate_xm, birthdate_dd, birthdate_mm]

bdss = []

for bds1 in bds:
    bdss.append(bds1)
    for bds2 in bds:
        if bds.index(bds1) != bds.index(bds2):
            bdss.append(bds1+bds2)
            for bds3 in bds:
                if bds.index(bds1) != bds.index(bds2) and bds.index(bds2) != bds.index(bds3) and bds.index(bds1) != bds.index(bds3):
                    bdss.append(bds1+bds2+bds3)

# For a woman...
wbds = [wifeb_yy, wifeb_yyy, wifeb_yyyy, wifeb_xd, wifeb_xm, wifeb_dd, wifeb_mm]

wbdss = []

for wbds1 in wbds:
    wbdss.append(wbds1)
    for wbds2 in wbds:
        if wbds.index(wbds1) != wbds.index(wbds2):
            wbdss.append(wbds1+wbds2)
            for wbds3 in wbds:
                if wbds.index(wbds1) != wbds.index(wbds2) and wbds.index(wbds2) != wbds.index(wbds3) and wbds.index(wbds1) != wbds.index(wbds3):
                    wbdss.append(wbds1+wbds2+wbds3)

# and a child...
kbds = [kidb_yy, kidb_yyy, kidb_yyyy, kidb_xd, kidb_xm, kidb_dd, kidb_mm]

kbdss = []

for kbds1 in kbds:
    kbdss.append(kbds1)
    for kbds2 in kbds:
        if kbds.index(kbds1) != kbds.index(kbds2):
            kbdss.append(kbds1+kbds2)
            for kbds3 in kbds:
                if kbds.index(kbds1) != kbds.index(kbds2) and kbds.index(kbds2) != kbds.index(kbds3) and kbds.index(kbds1) != kbds.index(kbds3):
                    kbdss.append(kbds1+kbds2+kbds3)

# string combinations....

kombinaac = [pet, petup, company, companyup]

kombina = [name, surname, nick, nameup, surnameup, nickup]

kombinaw = [wife, wifen, wifeup, wifenup, surname, surnameup]

kombinak = [kid, kidn, kidup, kidnup, surname, surnameup]

kombinaa = []
for kombina1 in kombina:
    kombinaa.append(kombina1)
    for kombina2 in kombina:
        if kombina.index(kombina1) != kombina.index(kombina2) and kombina.index(kombina1.title()) != kombina.index(kombina2.title()):
            kombinaa.append(kombina1+kombina2)

kombinaaw = []
for kombina1 in kombinaw:
    kombinaaw.append(kombina1)
    for kombina2 in kombinaw:
        if kombinaw.index(kombina1) != kombinaw.index(kombina2) and kombinaw.index(kombina1.title()) != kombinaw.index(kombina2.title()):
            kombinaaw.append(kombina1+kombina2)

kombinaak = []
for kombina1 in kombinak:
    kombinaak.append(kombina1)
    for kombina2 in kombinak:
        if kombinak.index(kombina1) != kombinak.index(kombina2) and kombinak.index(kombina1.title()) != kombinak.index(kombina2.title()):
            kombinaak.append(kombina1+kombina2)

komb1 = list(komb(kombinaa, bdss))
komb1 += list(komb(kombinaa, bdss, "_"))
komb2 = list(komb(kombinaaw, wbdss))
komb2 += list(komb(kombinaaw, wbdss, "_"))
komb3 = list(komb(kombinaak, kbdss))
komb3 += list(komb(kombinaak, kbdss, "_"))
komb4 = list(komb(kombinaa, years))
komb4 += list(komb(kombinaa, years, "_"))
komb5 = list(komb(kombinaac, years))
komb5 += list(komb(kombinaac, years, "_"))
komb6 = list(komb(kombinaaw, years))
komb6 += list(komb(kombinaaw, years, "_"))
komb7 = list(komb(kombinaak, years))
komb7 += list(komb(kombinaak, years, "_"))
komb8 = list(komb(word, bdss))
komb8 += list(komb(word, bdss, "_"))
komb9 = list(komb(word, wbdss))
komb9 += list(komb(word, wbdss, "_"))
komb10 = list(komb(word, kbdss))
komb10 += list(komb(word, kbdss, "_"))
komb11 = list(komb(word, years))
komb11 += list(komb(word, years, "_"))
komb12 = ['']
komb13 = ['']
komb14 = ['']
komb15 = ['']
komb16 = ['']
komb21 = ['']
if randnum == "y":
    komb12 = list(concats(word, numfrom, numto))
    komb13 = list(concats(kombinaa, numfrom, numto))
    komb14 = list(concats(kombinaac, numfrom, numto))
    komb15 = list(concats(kombinaaw, numfrom, numto))
    komb16 = list(concats(kombinaak, numfrom, numto))
    komb21 = list(concats(reverse, numfrom, numto))
komb17 = list(komb(reverse, years))
komb17 += list(komb(reverse, years, "_"))
komb18 = list(komb(rev_w, wbdss))
komb18 += list(komb(rev_w, wbdss, "_"))
komb19 = list(komb(rev_k, kbdss))
komb19 += list(komb(rev_k, kbdss, "_"))
komb20 = list(komb(rev_n, bdss))
komb20 += list(komb(rev_n, bdss, "_"))
komb001 = ['']
komb002 = ['']
komb003 = ['']
komb004 = ['']
komb005 = ['']
komb006 = ['']
if spechars1 == "y":
    komb001 = list(komb(kombinaa, spechars))
    komb002 = list(komb(kombinaac, spechars))
    komb003 = list(komb(kombinaaw , spechars))
    komb004 = list(komb(kombinaak , spechars))
    komb005 = list(komb(word, spechars))
    komb006 = list(komb(reverse, spechars))

print "[+] Sorting list and removing duplicates..."

komb_unique1 = dict.fromkeys(komb1).keys()
komb_unique2 = dict.fromkeys(komb2).keys()
komb_unique3 = dict.fromkeys(komb3).keys()
komb_unique4 = dict.fromkeys(komb4).keys()
komb_unique5 = dict.fromkeys(komb5).keys()
komb_unique6 = dict.fromkeys(komb6).keys()
komb_unique7 = dict.fromkeys(komb7).keys()
komb_unique8 = dict.fromkeys(komb8).keys()
komb_unique9 = dict.fromkeys(komb9).keys()
komb_unique10 = dict.fromkeys(komb10).keys()
komb_unique11 = dict.fromkeys(komb11).keys()
komb_unique12 = dict.fromkeys(komb12).keys()
komb_unique13 = dict.fromkeys(komb13).keys()
komb_unique14 = dict.fromkeys(komb14).keys()
komb_unique15 = dict.fromkeys(komb15).keys()
komb_unique16 = dict.fromkeys(komb16).keys()
komb_unique17 = dict.fromkeys(komb17).keys()
komb_unique18 = dict.fromkeys(komb18).keys()
komb_unique19 = dict.fromkeys(komb19).keys()
komb_unique20 = dict.fromkeys(komb20).keys()
komb_unique21 = dict.fromkeys(komb21).keys()
komb_unique01 = dict.fromkeys(kombinaa).keys()
komb_unique02 = dict.fromkeys(kombinaac).keys()
komb_unique03 = dict.fromkeys(kombinaaw).keys()
komb_unique04 = dict.fromkeys(kombinaak).keys()
komb_unique05 = dict.fromkeys(word).keys()
komb_unique07 = dict.fromkeys(komb001).keys()
komb_unique08 = dict.fromkeys(komb002).keys()
komb_unique09 = dict.fromkeys(komb003).keys()
komb_unique010 = dict.fromkeys(komb004).keys()
komb_unique011 = dict.fromkeys(komb005).keys()
komb_unique012 = dict.fromkeys(komb006).keys()

uniqlist = bdss+wbdss+kbdss+reverse+komb_unique01+komb_unique02+komb_unique03+komb_unique04+komb_unique05+komb_unique1+komb_unique2+komb_unique3+komb_unique4+komb_unique5+komb_unique6+komb_unique7+komb_unique8+komb_unique9+komb_unique10+komb_unique11+komb_unique12+komb_unique13+komb_unique14+komb_unique15+komb_unique16+komb_unique17+komb_unique18+komb_unique19+komb_unique20+komb_unique21+komb_unique07+komb_unique08+komb_unique09+komb_unique010+komb_unique011+komb_unique012

unique_lista = dict.fromkeys(uniqlist).keys()
unique_leet = []
if leetmode == "y":
    for x in unique_lista: # if you want to add more leet chars, you will need to add more lines in cupp.cfg too...
        x = x.replace('a',a)
        x = x.replace('i',i)
        x = x.replace('e',e)
        x = x.replace('t',t)
        x = x.replace('o',o)
        x = x.replace('s',s)
        x = x.replace('g',g)
        x = x.replace('z',z)
        x = x.replace('l',l)
        unique_leet.append(x)

unique_list = unique_lista + unique_leet

unique_list_finished = []
unique_list_finished = [x for x in unique_list if len(x) < wcto and len(x) > wcfrom]

print_to_file(name+'.txt', unique_list_finished)
exit()

elif sys.argv[1] == '-a': url = config.get('alecto','alectourl')

print "\r\n[+] Checking if alectodb is not present..."
if os.path.isfile('alectodb.csv.gz') == 0:
    print "[+] Downloading alectodb.csv.gz..."
    webFile = urllib.urlopen(url)
    localFile = open(url.split('/')[-1], 'w')
    localFile.write(webFile.read())
    webFile.close()
    localFile.close()

f = gzip.open('alectodb.csv.gz', 'rb')

data = csv.reader(f)

usernames = []
passwords = []
for row in data:
    usernames.append(row[5])
    passwords.append(row[6])
gus = list(set(usernames))
gpa = list(set(passwords))
gus.sort()
gpa.sort()

print "\r\n[+] Exporting to alectodb-usernames.txt and alectodb-passwords.txt\r\n[+] Done."
f = open ( 'alectodb-usernames.txt', 'w' )
f.write (os.linesep.join(gus))
f.close()

f = open ( 'alectodb-passwords.txt', 'w' )
f.write (os.linesep.join(gpa))
f.close()

f.close()
sys.exit()

elif sys.argv[1] == '-l':

ftpname = config.get('downloader','ftpname')
ftpurl = config.get('downloader','ftpurl')
ftppath = config.get('downloader','ftppath')
ftpuser = config.get('downloader','ftpuser')
ftppass = config.get('downloader','ftppass')

if os.path.isdir('dictionaries') == 0:
    os.mkdir('dictionaries')

print " \r\n    Choose the section you want to download:\r\n"

print "     1   Moby            14      french          27      places"
print "     2   afrikaans       15      german          28      polish"
print "     3   american        16      hindi           39      random"
print "     4   aussie          17      hungarian       30      religion"
print "     5   chinese         18      italian         31      russian"
print "     6   computer        19      japanese        32      science"
print "     7   croatian        20      latin           33      spanish"
print "     8   czech           21      literature      34      swahili"
print "     9   danish          22      movieTV         35      swedish"
print "    10   databases       23      music           36      turkish"
print "    11   dictionaries    24      names           37      yiddish"
print "    12   dutch           25      net             38      exit program"
print "    13   finnish         26      norwegian       \r\n"
print " \r\n    Files will be downloaded from "+ftpname+" repository"
print " \r\n    Tip: After downloading wordlist, you can improve it with -w option\r\n"

filedown = raw_input("> Enter number: ")
filedown.isdigit()
while filedown.isdigit() == 0:
    print "\r\n[-] Wrong choice. "
    filedown = raw_input("> Enter number: ")
filedown = str(filedown)
while int(filedown) > 38:
    print "\r\n[-] Wrong choice. "
    filedown = raw_input("> Enter number: ")
filedown = str(filedown)

def handleDownload(block):
    file.write(block)
    print ".",

def downloader():
    ftp.login(ftpuser, ftppass)
    ftp.cwd(ftppath)

def filequitter():
    file.close()
    print ' done.'

if filedown == "1":
    print "\r\n[+] connecting...\r\n"
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('Moby')
    if os.path.isdir('dictionaries/Moby/') == 0:
        os.mkdir('dictionaries/Moby/')
    dire = 'dictionaries/Moby/'
    file = open(dire+'mhyph.tar.gz', 'wb')
    print "\r\n[+] downloading mhyph.tar.gz..."
    ftp.retrbinary('RETR ' + 'mhyph.tar.gz', handleDownload)
    filequitter()

    file = open(dire+'mlang.tar.gz', 'wb')
    print "\r\n[+] downloading mlang.tar.gz..."
    ftp.retrbinary('RETR ' + 'mlang.tar.gz', handleDownload)
    filequitter()

    file = open(dire+'moby.tar.gz', 'wb')
    print "\r\n[+] downloading moby.tar.gz..."
    ftp.retrbinary('RETR ' + 'moby.tar.gz', handleDownload)
    filequitter()

    file = open(dire+'mpos.tar.gz', 'wb')
    print "\r\n[+] downloading mpos.tar.gz..."
    ftp.retrbinary('RETR ' + 'mpos.tar.gz', handleDownload)
    filequitter()

    file = open(dire+'mpron.tar.gz', 'wb')
    print "\r\n[+] downloading mpron.tar.gz..."
    ftp.retrbinary('RETR ' + 'mpron.tar.gz', handleDownload)
    filequitter()

    file = open(dire+'mthes.tar.gz', 'wb')
    print "\r\n[+] downloading mthes.tar.gz..."
    ftp.retrbinary('RETR ' + 'mthes.tar.gz', handleDownload)
    filequitter()

    file = open(dire+'mwords.tar.gz', 'wb')
    print "\r\n[+] downloading mwords.tar.gz..."
    ftp.retrbinary('RETR ' + 'mwords.tar.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "2":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('afrikaans')
    if os.path.isdir('dictionaries/afrikaans/') == 0:
        os.mkdir('dictionaries/afrikaans/')
    dire = 'dictionaries/afrikaans/'

    file = open(dire+'afr_dbf.zip', 'wb')
    print "\r\n[+] downloading afr_dbf.zip..."
    ftp.retrbinary('RETR ' + 'afr_dbf.zip', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "3":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('american')
    if os.path.isdir('dictionaries/american/') == 0:
        os.mkdir('dictionaries/american/')
    dire = 'dictionaries/american/'

    file = open(dire+'dic-0294.tar.gz', 'wb')
    print "\r\n[+] downloading dic-0294.tar.gz..."
    ftp.retrbinary('RETR ' + 'dic-0294.tar.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "4":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('aussie')
    if os.path.isdir('dictionaries/aussie/') == 0:
        os.mkdir('dictionaries/aussie/')
    dire = 'dictionaries/aussie/'

    file = open(dire+'oz.gz', 'wb')
    print "\r\n[+] downloading oz.gz..."
    ftp.retrbinary('RETR ' + 'oz.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "5":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('chinese')
    if os.path.isdir('dictionaries/chinese/') == 0:
        os.mkdir('dictionaries/chinese/')
    dire = 'dictionaries/chinese/'

    file = open(dire+'chinese.gz', 'wb')
    print "\r\n[+] downloading chinese.gz..."
    ftp.retrbinary('RETR ' + 'chinese.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "6":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('computer')
    if os.path.isdir('dictionaries/computer/') == 0:
        os.mkdir('dictionaries/computer/')
    dire = 'dictionaries/computer/'

    file = open(dire+'Domains.gz', 'wb')
    print "\r\n[+] downloading Domains.gz..."
    ftp.retrbinary('RETR ' + 'Domains.gz', handleDownload)
    filequitter()

    file = open(dire+'Dosref.gz', 'wb')
    print "\r\n[+] downloading Dosref.gz..."
    ftp.retrbinary('RETR ' + 'Dosref.gz', handleDownload)
    filequitter()

    file = open(dire+'Ftpsites.gz', 'wb')
    print "\r\n[+] downloading Ftpsites.gz..."
    ftp.retrbinary('RETR ' + 'Ftpsites.gz', handleDownload)
    filequitter()

    file = open(dire+'Jargon.gz', 'wb')
    print "\r\n[+] downloading Jargon.gz..."
    ftp.retrbinary('RETR ' + 'Jargon.gz', handleDownload)
    filequitter()

    file = open(dire+'common-passwords.txt.gz', 'wb')
    print "\r\n[+] downloading common-passwords.txt.gz..."
    ftp.retrbinary('RETR ' + 'common-passwords.txt.gz', handleDownload)
    filequitter()

    file = open(dire+'etc-hosts.gz', 'wb')
    print "\r\n[+] downloading etc-hosts.gz..."
    ftp.retrbinary('RETR ' + 'etc-hosts.gz', handleDownload)
    filequitter()

    file = open(dire+'foldoc.gz', 'wb')
    print "\r\n[+] downloading foldoc.gz..."
    ftp.retrbinary('RETR ' + 'foldoc.gz', handleDownload)
    filequitter()

    file = open(dire+'language-list.gz', 'wb')
    print "\r\n[+] downloading language-list.gz..."
    ftp.retrbinary('RETR ' + 'language-list.gz', handleDownload)
    filequitter()

    file = open(dire+'unix.gz', 'wb')
    print "\r\n[+] downloading unix.gz..."
    ftp.retrbinary('RETR ' + 'unix.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "7":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('croatian')
    if os.path.isdir('dictionaries/croatian/') == 0:
        os.mkdir('dictionaries/croatian/')
    dire = 'dictionaries/croatian/'

    file = open(dire+'croatian.gz', 'wb')
    print "\r\n[+] downloading croatian.gz..."
    ftp.retrbinary('RETR ' + 'croatian.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "8":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('czech')
    if os.path.isdir('dictionaries/czech/') == 0:
        os.mkdir('dictionaries/czech/')
    dire = 'dictionaries/czech/'

    file = open(dire+'czech-wordlist-ascii-cstug-novak.gz', 'wb')
    print "\r\n[+] downloading czech-wordlist-ascii-cstug-novak.gz..."
    ftp.retrbinary('RETR ' + 'czech-wordlist-ascii-cstug-novak.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "9":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('danish')
    if os.path.isdir('dictionaries/danish/') == 0:
        os.mkdir('dictionaries/danish/')
    dire = 'dictionaries/danish/'

    file = open(dire+'danish.words.gz', 'wb')
    print "\r\n[+] downloading danish.words.gz..."
    ftp.retrbinary('RETR ' + 'danish.words.gz', handleDownload)
    filequitter()

    file = open(dire+'dansk.zip', 'wb')
    print "\r\n[+] downloading dansk.zip..."
    ftp.retrbinary('RETR ' + 'dansk.zip', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "10":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('databases')
    if os.path.isdir('dictionaries/databases/') == 0:
        os.mkdir('dictionaries/databases/')
    dire = 'dictionaries/databases/'

    file = open(dire+'acronyms.gz', 'wb')
    print "\r\n[+] downloading acronyms.gz..."
    ftp.retrbinary('RETR ' + 'acronyms.gz', handleDownload)
    filequitter()

    file = open(dire+'att800.gz', 'wb')
    print "\r\n[+] downloading att800.gz..."
    ftp.retrbinary('RETR ' + 'att800.gz', handleDownload)
    filequitter()

    file = open(dire+'computer-companies.gz', 'wb')
    print "\r\n[+] downloading computer-companies.gz..."
    ftp.retrbinary('RETR ' + 'computer-companies.gz', handleDownload)
    filequitter()

    file = open(dire+'world_heritage.gz', 'wb')
    print "\r\n[+] downloading world_heritage.gz..."
    ftp.retrbinary('RETR ' + 'world_heritage.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "11":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('dictionaries')
    if os.path.isdir('dictionaries/dictionaries/') == 0:
        os.mkdir('dictionaries/dictionaries/')
    dire = 'dictionaries/dictionaries/'

    file = open(dire+'Antworth.gz', 'wb')
    print "\r\n[+] downloading Antworth.gz..."
    ftp.retrbinary('RETR ' + 'Antworth.gz', handleDownload)
    filequitter()

    file = open(dire+'CRL.words.gz', 'wb')
    print "\r\n[+] downloading CRL.words.gz..."
    ftp.retrbinary('RETR ' + 'CRL.words.gz', handleDownload)
    filequitter()

    file = open(dire+'Roget.words.gz', 'wb')
    print "\r\n[+] downloading Roget.words.gz..."
    ftp.retrbinary('RETR ' + 'Roget.words.gz', handleDownload)
    filequitter()

    file = open(dire+'Unabr.dict.gz', 'wb')
    print "\r\n[+] downloading Unabr.dict.gz..."
    ftp.retrbinary('RETR ' + 'Unabr.dict.gz', handleDownload)
    filequitter()

    file = open(dire+'Unix.dict.gz', 'wb')
    print "\r\n[+] downloading Unix.dict.gz..."
    ftp.retrbinary('RETR ' + 'Unix.dict.gz', handleDownload)
    filequitter()

    file = open(dire+'englex-dict.gz', 'wb')
    print "\r\n[+] downloading englex-dict.gz..."
    ftp.retrbinary('RETR ' + 'englex-dict.gz', handleDownload)
    filequitter()

    file = open(dire+'knuth_britsh.gz', 'wb')
    print "\r\n[+] downloading knuth_britsh.gz..."
    ftp.retrbinary('RETR ' + 'knuth_britsh.gz', handleDownload)
    filequitter()

    file = open(dire+'knuth_words.gz', 'wb')
    print "\r\n[+] downloading knuth_words.gz..."
    ftp.retrbinary('RETR ' + 'knuth_words.gz', handleDownload)
    filequitter()

    file = open(dire+'pocket-dic.gz', 'wb')
    print "\r\n[+] downloading pocket-dic.gz..."
    ftp.retrbinary('RETR ' + 'pocket-dic.gz', handleDownload)
    filequitter()

    file = open(dire+'shakesp-glossary.gz', 'wb')
    print "\r\n[+] downloading shakesp-glossary.gz..."
    ftp.retrbinary('RETR ' + 'shakesp-glossary.gz', handleDownload)
    filequitter()

    file = open(dire+'special.eng.gz', 'wb')
    print "\r\n[+] downloading special.eng.gz..."
    ftp.retrbinary('RETR ' + 'special.eng.gz', handleDownload)
    filequitter()

    file = open(dire+'words-english.gz', 'wb')
    print "\r\n[+] downloading words-english.gz..."
    ftp.retrbinary('RETR ' + 'words-english.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "12":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('dutch')
    if os.path.isdir('dictionaries/dutch/') == 0:
        os.mkdir('dictionaries/dutch/')
    dire = 'dictionaries/dutch/'

    file = open(dire+'words.dutch.gz', 'wb')
    print "\r\n[+] downloading words.dutch.gz..."
    ftp.retrbinary('RETR ' + 'words.dutch.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "13":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('finnish')
    if os.path.isdir('dictionaries/finnish/') == 0:
        os.mkdir('dictionaries/finnish/')
    dire = 'dictionaries/finnish/'

    file = open(dire+'finnish.gz', 'wb')
    print "\r\n[+] downloading finnish.gz..."
    ftp.retrbinary('RETR ' + 'finnish.gz', handleDownload)
    filequitter()

    file = open(dire+'firstnames.finnish.gz', 'wb')
    print "\r\n[+] downloading firstnames.finnish.gz..."
    ftp.retrbinary('RETR ' + 'firstnames.finnish.gz', handleDownload)
    filequitter()

    file = open(dire+'words.finnish.FAQ.gz', 'wb')
    print "\r\n[+] downloading words.finnish.FAQ.gz..."
    ftp.retrbinary('RETR ' + 'words.finnish.FAQ.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "14":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('french')
    if os.path.isdir('dictionaries/french/') == 0:
        os.mkdir('dictionaries/french/')
    dire = 'dictionaries/french/'

    file = open(dire+'dico.gz', 'wb')
    print "\r\n[+] downloading dico.gz..."
    ftp.retrbinary('RETR ' + 'dico.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "15":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('german')
    if os.path.isdir('dictionaries/german/') == 0:
        os.mkdir('dictionaries/german/')
    dire = 'dictionaries/german/'

    file = open(dire+'deutsch.dic.gz', 'wb')
    print "\r\n[+] downloading deutsch.dic.gz..."
    ftp.retrbinary('RETR ' + 'deutsch.dic.gz', handleDownload)
    filequitter()

    file = open(dire+'germanl.gz', 'wb')
    print "\r\n[+] downloading germanl.gz..."
    ftp.retrbinary('RETR ' + 'germanl.gz', handleDownload)
    filequitter()

    file = open(dire+'words.german.gz', 'wb')
    print "\r\n[+] downloading words.german.gz..."
    ftp.retrbinary('RETR ' + 'words.german.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "16":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('hindi')
    if os.path.isdir('dictionaries/hindi/') == 0:
        os.mkdir('dictionaries/hindi/')
    dire = 'dictionaries/hindi/'

    file = open(dire+'hindu-names.gz', 'wb')
    print "\r\n[+] downloading hindu-names.gz..."
    ftp.retrbinary('RETR ' + 'hindu-names.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "17":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('hungarian')
    if os.path.isdir('dictionaries/hungarian/') == 0:
        os.mkdir('dictionaries/hungarian/')
    dire = 'dictionaries/hungarian/'

    file = open(dire+'hungarian.gz', 'wb')
    print "\r\n[+] downloading hungarian.gz..."
    ftp.retrbinary('RETR ' + 'hungarian.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "18":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('italian')
    if os.path.isdir('dictionaries/italian/') == 0:
        os.mkdir('dictionaries/italian/')
    dire = 'dictionaries/italian/'

    file = open(dire+'words.italian.gz', 'wb')
    print "\r\n[+] downloading words.italian.gz..."
    ftp.retrbinary('RETR ' + 'words.italian.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "19":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('japanese')
    if os.path.isdir('dictionaries/japanese/') == 0:
        os.mkdir('dictionaries/japanese/')
    dire = 'dictionaries/japanese/'

    file = open(dire+'words.japanese.gz', 'wb')
    print "\r\n[+] downloading words.japanese.gz..."
    ftp.retrbinary('RETR ' + 'words.japanese.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "20":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('latin')
    if os.path.isdir('dictionaries/latin/') == 0:
        os.mkdir('dictionaries/latin/')
    dire = 'dictionaries/latin/'

    file = open(dire+'wordlist.aug.gz', 'wb')
    print "\r\n[+] downloading wordlist.aug.gz..."
    ftp.retrbinary('RETR ' + 'wordlist.aug.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "21":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('literature')
    if os.path.isdir('dictionaries/literature/') == 0:
        os.mkdir('dictionaries/literature/')
    dire = 'dictionaries/literature/'

    file = open(dire+'LCarrol.gz', 'wb')
    print "\r\n[+] downloading LCarrol.gz..."
    ftp.retrbinary('RETR ' + 'LCarrol.gz', handleDownload)
    filequitter()

    file = open(dire+'Paradise.Lost.gz', 'wb')
    print "\r\n[+] downloading Paradise.Lost.gz..."
    ftp.retrbinary('RETR ' + 'Paradise.Lost.gz', handleDownload)
    filequitter()

    file = open(dire+'aeneid.gz', 'wb')
    print "\r\n[+] downloading aeneid.gz..."
    ftp.retrbinary('RETR ' + 'aeneid.gz', handleDownload)
    filequitter()

    file = open(dire+'arthur.gz', 'wb')
    print "\r\n[+] downloading arthur.gz..."
    ftp.retrbinary('RETR ' + 'arthur.gz', handleDownload)
    filequitter()

    file = open(dire+'cartoon.gz', 'wb')
    print "\r\n[+] downloading cartoon.gz..."
    ftp.retrbinary('RETR ' + 'cartoon.gz', handleDownload)
    filequitter()

    file = open(dire+'cartoons-olivier.gz', 'wb')
    print "\r\n[+] downloading cartoons-olivier.gz..."
    ftp.retrbinary('RETR ' + 'cartoons-olivier.gz', handleDownload)
    filequitter()

    file = open(dire+'charlemagne.gz', 'wb')
    print "\r\n[+] downloading charlemagne.gz..."
    ftp.retrbinary('RETR ' + 'charlemagne.gz', handleDownload)
    filequitter()

    file = open(dire+'fable.gz', 'wb')
    print "\r\n[+] downloading fable.gz..."
    ftp.retrbinary('RETR ' + 'fable.gz', handleDownload)
    filequitter()

    file = open(dire+'iliad.gz', 'wb')
    print "\r\n[+] downloading iliad.gz..."
    ftp.retrbinary('RETR ' + 'iliad.gz', handleDownload)
    filequitter()

    file = open(dire+'myths-legends.gz', 'wb')
    print "\r\n[+] downloading myths-legends.gz..."
    ftp.retrbinary('RETR ' + 'myths-legends.gz', handleDownload)
    filequitter()

    file = open(dire+'odyssey.gz', 'wb')
    print "\r\n[+] downloading odyssey.gz..."
    ftp.retrbinary('RETR ' + 'odyssey.gz', handleDownload)
    filequitter()

    file = open(dire+'sf.gz', 'wb')
    print "\r\n[+] downloading sf.gz..."
    ftp.retrbinary('RETR ' + 'sf.gz', handleDownload)
    filequitter()

    file = open(dire+'shakespeare.gz', 'wb')
    print "\r\n[+] downloading shakespeare.gz..."
    ftp.retrbinary('RETR ' + 'shakespeare.gz', handleDownload)
    filequitter()

    file = open(dire+'tolkien.words.gz', 'wb')
    print "\r\n[+] downloading tolkien.words.gz..."
    ftp.retrbinary('RETR ' + 'tolkien.words.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "22":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('movieTV')
    if os.path.isdir('dictionaries/movieTV/') == 0:
        os.mkdir('dictionaries/movieTV/')
    dire = 'dictionaries/movieTV/'

    file = open(dire+'Movies.gz', 'wb')
    print "\r\n[+] downloading Movies.gz..."
    ftp.retrbinary('RETR ' + 'Movies.gz', handleDownload)
    filequitter()

    file = open(dire+'Python.gz', 'wb')
    print "\r\n[+] downloading Python.gz..."
    ftp.retrbinary('RETR ' + 'Python.gz', handleDownload)
    filequitter()

    file = open(dire+'Trek.gz', 'wb')
    print "\r\n[+] downloading Trek.gz..."
    ftp.retrbinary('RETR ' + 'Trek.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "23":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('music')
    if os.path.isdir('dictionaries/music/') == 0:
        os.mkdir('dictionaries/music/')
    dire = 'dictionaries/music/'

    file = open(dire+'music-classical.gz', 'wb')
    print "\r\n[+] downloading music-classical.gz..."
    ftp.retrbinary('RETR ' + 'music-classical.gz', handleDownload)
    filequitter()

    file = open(dire+'music-country.gz', 'wb')
    print "\r\n[+] downloading music-country.gz..."
    ftp.retrbinary('RETR ' + 'music-country.gz', handleDownload)
    filequitter()

    file = open(dire+'music-jazz.gz', 'wb')
    print "\r\n[+] downloading music-jazz.gz..."
    ftp.retrbinary('RETR ' + 'music-jazz.gz', handleDownload)
    filequitter()

    file = open(dire+'music-other.gz', 'wb')
    print "\r\n[+] downloading music-other.gz..."
    ftp.retrbinary('RETR ' + 'music-other.gz', handleDownload)
    filequitter()

    file = open(dire+'music-rock.gz', 'wb')
    print "\r\n[+] downloading music-rock.gz..."
    ftp.retrbinary('RETR ' + 'music-rock.gz', handleDownload)
    filequitter()

    file = open(dire+'music-shows.gz', 'wb')
    print "\r\n[+] downloading music-shows.gz..."
    ftp.retrbinary('RETR ' + 'music-shows.gz', handleDownload)
    filequitter()

    file = open(dire+'rock-groups.gz', 'wb')
    print "\r\n[+] downloading rock-groups.gz..."
    ftp.retrbinary('RETR ' + 'rock-groups.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "24":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('names')
    if os.path.isdir('dictionaries/names/') == 0:
        os.mkdir('dictionaries/names/')
    dire = 'dictionaries/names/'

    file = open(dire+'ASSurnames.gz', 'wb')
    print "\r\n[+] downloading ASSurnames.gz..."
    ftp.retrbinary('RETR ' + 'ASSurnames.gz', handleDownload)
    filequitter()

    file = open(dire+'Congress.gz', 'wb')
    print "\r\n[+] downloading Congress.gz..."
    ftp.retrbinary('RETR ' + 'Congress.gz', handleDownload)
    filequitter()

    file = open(dire+'Family-Names.gz', 'wb')
    print "\r\n[+] downloading Family-Names.gz..."
    ftp.retrbinary('RETR ' + 'Family-Names.gz', handleDownload)
    filequitter()

    file = open(dire+'Given-Names.gz', 'wb')
    print "\r\n[+] downloading Given-Names.gz..."
    ftp.retrbinary('RETR ' + 'Given-Names.gz', handleDownload)
    filequitter()

    file = open(dire+'actor-givenname.gz', 'wb')
    print "\r\n[+] downloading actor-givenname.gz..."
    ftp.retrbinary('RETR ' + 'actor-givenname.gz', handleDownload)
    filequitter()

    file = open(dire+'actor-surname.gz', 'wb')
    print "\r\n[+] downloading actor-surname.gz..."
    ftp.retrbinary('RETR ' + 'actor-surname.gz', handleDownload)
    filequitter()

    file = open(dire+'cis-givenname.gz', 'wb')
    print "\r\n[+] downloading cis-givenname.gz..."
    ftp.retrbinary('RETR ' + 'cis-givenname.gz', handleDownload)
    filequitter()

    file = open(dire+'cis-surname.gz', 'wb')
    print "\r\n[+] downloading cis-surname.gz..."
    ftp.retrbinary('RETR ' + 'cis-surname.gz', handleDownload)
    filequitter()

    file = open(dire+'crl-names.gz', 'wb')
    print "\r\n[+] downloading crl-names.gz..."
    ftp.retrbinary('RETR ' + 'crl-names.gz', handleDownload)
    filequitter()

    file = open(dire+'famous.gz', 'wb')
    print "\r\n[+] downloading famous.gz..."
    ftp.retrbinary('RETR ' + 'famous.gz', handleDownload)
    filequitter()

    file = open(dire+'fast-names.gz', 'wb')
    print "\r\n[+] downloading fast-names.gz..."
    ftp.retrbinary('RETR ' + 'fast-names.gz', handleDownload)
    filequitter()

    file = open(dire+'female-names-kantr.gz', 'wb')
    print "\r\n[+] downloading female-names-kantr.gz..."
    ftp.retrbinary('RETR ' + 'female-names-kantr.gz', handleDownload)
    filequitter()

    file = open(dire+'female-names.gz', 'wb')
    print "\r\n[+] downloading female-names.gz..."
    ftp.retrbinary('RETR ' + 'female-names.gz', handleDownload)
    filequitter()

    file = open(dire+'givennames-ol.gz', 'wb')
    print "\r\n[+] downloading givennames-ol.gz..."
    ftp.retrbinary('RETR ' + 'givennames-ol.gz', handleDownload)
    filequitter()

    file = open(dire+'male-names-kantr.gz', 'wb')
    print "\r\n[+] downloading male-names-kantr.gz..."
    ftp.retrbinary('RETR ' + 'male-names-kantr.gz', handleDownload)
    filequitter()

    file = open(dire+'male-names.gz', 'wb')
    print "\r\n[+] downloading male-names.gz..."
    ftp.retrbinary('RETR ' + 'male-names.gz', handleDownload)
    filequitter()

    file = open(dire+'movie-characters.gz', 'wb')
    print "\r\n[+] downloading movie-characters.gz..."
    ftp.retrbinary('RETR ' + 'movie-characters.gz', handleDownload)
    filequitter()

    file = open(dire+'names.french.gz', 'wb')
    print "\r\n[+] downloading names.french.gz..."
    ftp.retrbinary('RETR ' + 'names.french.gz', handleDownload)
    filequitter()

    file = open(dire+'names.hp.gz', 'wb')
    print "\r\n[+] downloading names.hp.gz..."
    ftp.retrbinary('RETR ' + 'names.hp.gz', handleDownload)
    filequitter()

    file = open(dire+'other-names.gz', 'wb')
    print "\r\n[+] downloading other-names.gz..."
    ftp.retrbinary('RETR ' + 'other-names.gz', handleDownload)
    filequitter()

    file = open(dire+'shakesp-names.gz', 'wb')
    print "\r\n[+] downloading shakesp-names.gz..."
    ftp.retrbinary('RETR ' + 'shakesp-names.gz', handleDownload)
    filequitter()

    file = open(dire+'surnames-ol.gz', 'wb')
    print "\r\n[+] downloading surnames-ol.gz..."
    ftp.retrbinary('RETR ' + 'surnames-ol.gz', handleDownload)
    filequitter()

    file = open(dire+'surnames.finnish.gz', 'wb')
    print "\r\n[+] downloading surnames.finnish.gz..."
    ftp.retrbinary('RETR ' + 'surnames.finnish.gz', handleDownload)
    filequitter()

    file = open(dire+'usenet-names.gz', 'wb')
    print "\r\n[+] downloading usenet-names.gz..."
    ftp.retrbinary('RETR ' + 'usenet-names.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "25":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('net')
    if os.path.isdir('dictionaries/net/') == 0:
        os.mkdir('dictionaries/net/')
    dire = 'dictionaries/net/'

    file = open(dire+'hosts-txt.gz', 'wb')
    print "\r\n[+] downloading hosts-txt.gz..."
    ftp.retrbinary('RETR ' + 'hosts-txt.gz', handleDownload)
    filequitter()

    file = open(dire+'inet-machines.gz', 'wb')
    print "\r\n[+] downloading inet-machines.gz..."
    ftp.retrbinary('RETR ' + 'inet-machines.gz', handleDownload)
    filequitter()

    file = open(dire+'usenet-loginids.gz', 'wb')
    print "\r\n[+] downloading usenet-loginids.gz..."
    ftp.retrbinary('RETR ' + 'usenet-loginids.gz', handleDownload)
    filequitter()

    file = open(dire+'usenet-machines.gz', 'wb')
    print "\r\n[+] downloading usenet-machines.gz..."
    ftp.retrbinary('RETR ' + 'usenet-machines.gz', handleDownload)
    filequitter()

    file = open(dire+'uunet-sites.gz', 'wb')
    print "\r\n[+] downloading uunet-sites.gz..."
    ftp.retrbinary('RETR ' + 'uunet-sites.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "26":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('norwegian')
    if os.path.isdir('dictionaries/norwegian/') == 0:
        os.mkdir('dictionaries/norwegian/')
    dire = 'dictionaries/norwegian/'

    file = open(dire+'words.norwegian.gz', 'wb')
    print "\r\n[+] downloading words.norwegian.gz..."
    ftp.retrbinary('RETR ' + 'words.norwegian.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "27":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('places')
    if os.path.isdir('dictionaries/places/') == 0:
        os.mkdir('dictionaries/places/')
    dire = 'dictionaries/places/'

    file = open(dire+'Colleges.gz', 'wb')
    print "\r\n[+] downloading Colleges.gz..."
    ftp.retrbinary('RETR ' + 'Colleges.gz', handleDownload)
    filequitter()

    file = open(dire+'US-counties.gz', 'wb')
    print "\r\n[+] downloading US-counties.gz..."
    ftp.retrbinary('RETR ' + 'US-counties.gz', handleDownload)
    filequitter()

    file = open(dire+'World.factbook.gz', 'wb')
    print "\r\n[+] downloading World.factbook.gz..."
    ftp.retrbinary('RETR ' + 'World.factbook.gz', handleDownload)
    filequitter()

    file = open(dire+'Zipcodes.gz', 'wb')
    print "\r\n[+] downloading Zipcodes.gz..."
    ftp.retrbinary('RETR ' + 'Zipcodes.gz', handleDownload)
    filequitter()

    file = open(dire+'places.gz', 'wb')
    print "\r\n[+] downloading places.gz..."
    ftp.retrbinary('RETR ' + 'places.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "28":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('polish')
    if os.path.isdir('dictionaries/polish/') == 0:
        os.mkdir('dictionaries/polish/')
    dire = 'dictionaries/polish/'

    file = open(dire+'words.polish.gz', 'wb')
    print "\r\n[+] downloading words.polish.gz..."
    ftp.retrbinary('RETR ' + 'words.polish.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "29":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('random')
    if os.path.isdir('dictionaries/random/') == 0:
        os.mkdir('dictionaries/random/')
    dire = 'dictionaries/random/'

    file = open(dire+'Ethnologue.gz', 'wb')
    print "\r\n[+] downloading Ethnologue.gz..."
    ftp.retrbinary('RETR ' + 'Ethnologue.gz', handleDownload)
    filequitter()

    file = open(dire+'abbr.gz', 'wb')
    print "\r\n[+] downloading abbr.gz..."
    ftp.retrbinary('RETR ' + 'abbr.gz', handleDownload)
    filequitter()

    file = open(dire+'chars.gz', 'wb')
    print "\r\n[+] downloading chars.gz..."
    ftp.retrbinary('RETR ' + 'chars.gz', handleDownload)
    filequitter()

    file = open(dire+'dogs.gz', 'wb')
    print "\r\n[+] downloading dogs.gz..."
    ftp.retrbinary('RETR ' + 'dogs.gz', handleDownload)
    filequitter()

    file = open(dire+'drugs.gz', 'wb')
    print "\r\n[+] downloading drugs.gz..."
    ftp.retrbinary('RETR ' + 'drugs.gz', handleDownload)
    filequitter()

    file = open(dire+'junk.gz', 'wb')
    print "\r\n[+] downloading junk.gz..."
    ftp.retrbinary('RETR ' + 'junk.gz', handleDownload)
    filequitter()

    file = open(dire+'numbers.gz', 'wb')
    print "\r\n[+] downloading numbers.gz..."
    ftp.retrbinary('RETR ' + 'numbers.gz', handleDownload)
    filequitter()

    file = open(dire+'phrases.gz', 'wb')
    print "\r\n[+] downloading phrases.gz..."
    ftp.retrbinary('RETR ' + 'phrases.gz', handleDownload)
    filequitter()

    file = open(dire+'sports.gz', 'wb')
    print "\r\n[+] downloading sports.gz..."
    ftp.retrbinary('RETR ' + 'sports.gz', handleDownload)
    filequitter()

    file = open(dire+'statistics.gz', 'wb')
    print "\r\n[+] downloading statistics.gz..."
    ftp.retrbinary('RETR ' + 'statistics.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "30":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('religion')
    if os.path.isdir('dictionaries/religion/') == 0:
        os.mkdir('dictionaries/religion/')
    dire = 'dictionaries/religion/'

    file = open(dire+'Koran.gz', 'wb')
    print "\r\n[+] downloading Koran.gz..."
    ftp.retrbinary('RETR ' + 'Koran.gz', handleDownload)
    filequitter()

    file = open(dire+'kjbible.gz', 'wb')
    print "\r\n[+] downloading kjbible.gz..."
    ftp.retrbinary('RETR ' + 'kjbible.gz', handleDownload)
    filequitter()

    file = open(dire+'norse.gz', 'wb')
    print "\r\n[+] downloading norse.gz..."
    ftp.retrbinary('RETR ' + 'norse.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "31":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('russian')
    if os.path.isdir('dictionaries/russian/') == 0:
        os.mkdir('dictionaries/russian/')
    dire = 'dictionaries/russian/'

    file = open(dire+'russian.lst.gz', 'wb')
    print "\r\n[+] downloading russian.lst.gz..."
    ftp.retrbinary('RETR ' + 'russian.lst.gz', handleDownload)
    filequitter()

    file = open(dire+'russian_words.koi8.gz', 'wb')
    print "\r\n[+] downloading russian_words.koi8.gz..."
    ftp.retrbinary('RETR ' + 'russian_words.koi8.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "32":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('science')
    if os.path.isdir('dictionaries/science/') == 0:
        os.mkdir('dictionaries/science/')
    dire = 'dictionaries/science/'

    file = open(dire+'Acr-diagnosis.gz', 'wb')
    print "\r\n[+] downloading Acr-diagnosis.gz..."
    ftp.retrbinary('RETR ' + 'Acr-diagnosis.gz', handleDownload)
    filequitter()

    file = open(dire+'Algae.gz', 'wb')
    print "\r\n[+] downloading Algae.gz..."
    ftp.retrbinary('RETR ' + 'Algae.gz', handleDownload)
    filequitter()

    file = open(dire+'Bacteria.gz', 'wb')
    print "\r\n[+] downloading Bacteria.gz..."
    ftp.retrbinary('RETR ' + 'Bacteria.gz', handleDownload)
    filequitter()

    file = open(dire+'Fungi.gz', 'wb')
    print "\r\n[+] downloading Fungi.gz..."
    ftp.retrbinary('RETR ' + 'Fungi.gz', handleDownload)
    filequitter()

    file = open(dire+'Microalgae.gz', 'wb')
    print "\r\n[+] downloading Microalgae.gz..."
    ftp.retrbinary('RETR ' + 'Microalgae.gz', handleDownload)
    filequitter()

    file = open(dire+'Viruses.gz', 'wb')
    print "\r\n[+] downloading Viruses.gz..."
    ftp.retrbinary('RETR ' + 'Viruses.gz', handleDownload)
    filequitter()

    file = open(dire+'asteroids.gz', 'wb')
    print "\r\n[+] downloading asteroids.gz..."
    ftp.retrbinary('RETR ' + 'asteroids.gz', handleDownload)
    filequitter()

    file = open(dire+'biology.gz', 'wb')
    print "\r\n[+] downloading biology.gz..."
    ftp.retrbinary('RETR ' + 'biology.gz', handleDownload)
    filequitter()

    file = open(dire+'tech.gz', 'wb')
    print "\r\n[+] downloading tech.gz..."
    ftp.retrbinary('RETR ' + 'tech.gz', handleDownload)
    filequitter()

    print '[+] files saved to '+ dire
    ftp.quit()
    exit()

if filedown == "33":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('spanish')
    if os.path.isdir('dictionaries/spanish/') == 0:
        os.mkdir('dictionaries/spanish/')
    dire = 'dictionaries/spanish/'

    file = open(dire+'words.spanish.gz', 'wb')
    print "\r\n[+] downloading words.spanish.gz..."
    ftp.retrbinary('RETR ' + 'words.spanish.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "34":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('swahili')
    if os.path.isdir('dictionaries/swahili/') == 0:
        os.mkdir('dictionaries/swahili/')
    dire = 'dictionaries/swahili/'

    file = open(dire+'swahili.gz', 'wb')
    print "\r\n[+] downloading swahili.gz..."
    ftp.retrbinary('RETR ' + 'swahili.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "35":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('swedish')
    if os.path.isdir('dictionaries/swedish/') == 0:
        os.mkdir('dictionaries/swedish/')
    dire = 'dictionaries/swedish/'

    file = open(dire+'words.swedish.gz', 'wb')
    print "\r\n[+] downloading words.swedish.gz..."
    ftp.retrbinary('RETR ' + 'words.swedish.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "36":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('turkish')
    if os.path.isdir('dictionaries/turkish/') == 0:
        os.mkdir('dictionaries/turkish/')
    dire = 'dictionaries/turkish/'

    file = open(dire+'turkish.dict.gz', 'wb')
    print "\r\n[+] downloading turkish.dict.gz..."
    ftp.retrbinary('RETR ' + 'turkish.dict.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

if filedown == "37":
    print "[+] connecting..."
    ftp = ftplib.FTP(ftpurl)
    downloader()
    ftp.cwd('yiddish')
    if os.path.isdir('dictionaries/yiddish/') == 0:
        os.mkdir('dictionaries/yiddish/')
    dire = 'dictionaries/yiddish/'

    file = open(dire+'yiddish.gz', 'wb')
    print "\r\n[+] downloading yiddish.gz..."
    ftp.retrbinary('RETR ' + 'yiddish.gz', handleDownload)
    filequitter()

    print '[+] file saved to '+ dire
    ftp.quit()
    exit()

else:
    print '[-] leaving.'
    exit()

else: print "\r\n[Usage]: "+sys.argv[0] +" [OPTIONS] \r\n" print "[Help]: "+sys.argv[0] +" -h\r\n" exit()`

Ma5onic commented 6 years ago

Try taking a look at this pull request and analyze the changes he/she made. However, I am not sure if this works since it is still an open pull request. I might try this code myself when I have some free time.

Also, if you want to try doing it yourself without relying on someone else's pending merge, you can try doing a search for the keyword "leet" in cuppy.py. add the desired characters to the cupp.cfg and save the file, then go to cuppy.py and add the appropriate code corresponding characters that you added in cupp.cfg. The code that you want to edit will usually have the following notes above it (without quotes): "# if you want to add more leet chars, you will need to add more lines in cupp.cfg too..."