Skip to content

Commit c93f137

Browse files
committed
DGA now uses the provided date, old version was based on a debugging sample of the malware
1 parent 2f8e988 commit c93f137

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

corebot/dga.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
import argparse
22
from datetime import datetime
33

4-
r = 0x1DB98930
5-
r = 0x1DBA8930
6-
len_l = 0xC
7-
len_u = 0x18
8-
9-
10-
def init_rand_and_chars(year, month, day, nr_b):
11-
global r
4+
def init_rand_and_chars(year, month, day, nr_b, r):
125
r = (r + year + ((nr_b << 16) + (month << 8) | day)) & 0xFFFFFFFF
136
charset = [chr(x) for x in xrange(ord('a'), ord('z'))] +\
147
[chr(x) for x in xrange(ord('0'), ord('9'))]
158

16-
return charset
9+
return charset, r
1710

18-
def generate_domain(charset):
19-
global r
11+
def generate_domain(charset, r):
12+
len_l = 0xC
13+
len_u = 0x18
2014
r = (1664525*r + 1013904223) & 0xFFFFFFFF
2115
domain_len = len_l + r % (len_u - len_l)
2216
domain = ""
@@ -25,19 +19,23 @@ def generate_domain(charset):
2519
domain += charset[r % len(charset)]
2620
domain += ".ddns.net"
2721
print(domain)
22+
return r
2823

2924
if __name__=="__main__":
3025
parser = argparse.ArgumentParser()
26+
parser.add_argument("-s", "--seed", help="seed", default="1DBA8930")
3127
parser.add_argument("-d", "--date", help="date for which to generate domains")
32-
parser.add_argument("-n", "--nr", help="nr of domains to generate", type=int, default=40)
28+
parser.add_argument("-t", "--debug", help="debug DGA (day set to 8)")
29+
parser.add_argument("-n", "--nr", help="nr of domains to generate",
30+
type=int, default=40)
3331
args = parser.parse_args()
34-
if args.date:
35-
d = datetime.strptime(args.date, "%Y-%m-%d")
36-
else:
37-
d = datetime.now()
32+
33+
d = datetime.strptime(args.date, "%Y-%m-%d") if args.date else datetime.now()
34+
day = 8 if args.debug else d.day
3835

39-
charset = init_rand_and_chars(d.year, d.month, 8, 1)
36+
charset, r = init_rand_and_chars(d.year, d.month, day, 1,
37+
int(args.seed, 16))
4038
for _ in range(40):
41-
generate_domain(charset)
39+
r = generate_domain(charset, r)
4240

4341

0 commit comments

Comments
 (0)