Skip to content

Commit 30389c6

Browse files
committed
new Ramnit Seed
1 parent 7f9eb37 commit 30389c6

File tree

2 files changed

+23
-13
lines changed

2 files changed

+23
-13
lines changed

gozi/dga.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import argparse
44

55

6-
wordlists = {'luther': 4, 'rfc4343': 3, 'nasa': 5}
6+
wordlists = {'luther': (4, '.com'), 'rfc4343': (3, '.com'), 'nasa': (5, '.com')}
77

88
class Rand:
99

@@ -21,7 +21,7 @@ def get_words(wordlist):
2121
def dga(date, wordlist):
2222
words = get_words(wordlist)
2323
diff = date - datetime.strptime("2015-01-01", "%Y-%m-%d")
24-
days_passed = (diff.days // wordlists[wordlist])
24+
days_passed = (diff.days // wordlists[wordlist][0])
2525
flag = 1
2626
seed = (flag << 16) + days_passed - 306607824
2727
r = Rand(seed)
@@ -39,7 +39,7 @@ def dga(date, wordlist):
3939
l >>= 1
4040
if len(domain) + l <= 24:
4141
domain += word[:l]
42-
domain += '.com'
42+
domain += wordlists[wordlist][1]
4343
yield domain
4444

4545
if __name__ == "__main__":

ramnit/dga.py

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,33 @@
33
class RandInt:
44

55
def __init__(self, seed):
6-
self.seed = seed
6+
self.value = seed
77

88
def rand_int_modulus(self, modulus):
9-
ix = self.seed
9+
ix = self.value
1010
ix = 16807*(ix % 127773) - 2836*(ix / 127773) & 0xFFFFFFFF
11-
self.seed = ix
11+
self.value = ix
1212
return ix % modulus
1313

14-
def get_domains(seed, nr):
14+
def get_domains(seed, nr, tlds):
15+
if not tlds:
16+
tlds = [".com"]
17+
1518
r = RandInt(seed)
1619

1720
for i in range(nr):
18-
seed_a = r.seed
21+
seed_a = r.value
1922
domain_len = r.rand_int_modulus(12) + 8
20-
seed_b = r.seed
23+
seed_b = r.value
2124
domain = ""
22-
for i in range(domain_len):
25+
for j in range(domain_len):
2326
char = chr(ord('a') + r.rand_int_modulus(25))
2427
domain += char
25-
domain += ".com"
28+
tld = tlds[i % len(tlds)]
29+
domain += '.' if tld[0] != '.' else ''
30+
domain += tld
2631
m = seed_a*seed_b
27-
r.seed = (m + m//(2**32)) % 2**32
32+
r.value = (m + m//(2**32)) % 2**32
2833
yield domain
2934

3035
if __name__=="__main__":
@@ -35,10 +40,15 @@ def get_domains(seed, nr):
3540
4BFCBC6A
3641
79159C10
3742
92F4BE35
43+
4302C04A 10 -t "click bid eu"
3844
"""
3945
parser = argparse.ArgumentParser(description="generate Ramnit domains")
4046
parser.add_argument("seed", help="seed as hex")
4147
parser.add_argument("nr", help="nr of domains", type=int)
48+
parser.add_argument("-t", "--tlds", help="list of tlds", default=None)
4249
args = parser.parse_args()
43-
for domain in get_domains(int(args.seed, 16), args.nr):
50+
tlds = None
51+
if args.tlds:
52+
tlds = [x.strip() for x in args.tlds.split(" ")]
53+
for domain in get_domains(int(args.seed, 16), args.nr, tlds):
4454
print(domain)

0 commit comments

Comments
 (0)