55
66wordlists = {'luther' : (4 , '.com' ), 'rfc4343' : (3 , '.com' ), 'nasa' : (5 , '.com' )}
77
8+ seeds = {
9+ 'luther' : {'div' : 4 , 'tld' : '.com' , 'nr' : 12 },
10+ 'rfc4343' : {'div' : 3 , 'tld' : '.com' , 'nr' : 10 },
11+ 'nasa' : {'div' : 5 , 'tld' : '.com' , 'nr' : 12 },
12+ 'gpl' : {'div' : 5 , 'tld' : '.ru' , 'nr' : 10 }
13+ }
14+
15+
816class Rand :
917
1018 def __init__ (self , seed ):
@@ -21,7 +29,7 @@ def get_words(wordlist):
2129def dga (date , wordlist ):
2230 words = get_words (wordlist )
2331 diff = date - datetime .strptime ("2015-01-01" , "%Y-%m-%d" )
24- days_passed = (diff .days // wordlists [wordlist ][0 ])
32+ days_passed = (diff .days // seeds [wordlist ]['div' ])
2533 flag = 1
2634 seed = (flag << 16 ) + days_passed - 306607824
2735 r = Rand (seed )
@@ -39,15 +47,15 @@ def dga(date, wordlist):
3947 l >>= 1
4048 if len (domain ) + l <= 24 :
4149 domain += word [:l ]
42- domain += wordlists [wordlist ][1 ]
50+ domain += seeds [wordlist ]['tld' ]
4351 yield domain
4452
4553if __name__ == "__main__" :
4654 parser = argparse .ArgumentParser (description = "gozi dga" )
4755 parser .add_argument ("-d" , "--date" ,
4856 help = "date for which to generate domains" )
4957 parser .add_argument ("-w" , "--wordlist" , help = "wordlist" ,
50- choices = wordlists .keys (), default = 'luther' )
58+ choices = seeds .keys (), default = 'luther' )
5159 args = parser .parse_args ()
5260 if args .date :
5361 d = datetime .strptime (args .date , "%Y-%m-%d" )
0 commit comments