mirror of
https://github.com/autistic-symposium/sec-pentesting-toolkit.git
synced 2025-04-25 10:09:08 -04:00
182 lines
5.3 KiB
Python
Executable File
182 lines
5.3 KiB
Python
Executable File
# try:
|
|
# from distorm import *
|
|
# module = 'distorm'
|
|
# except ImportError:
|
|
import utils
|
|
try:
|
|
from nasm import *
|
|
module = 'nasm'
|
|
except ImportError:
|
|
raise EnvironmentError("Couldn't find distorm or nasm")
|
|
|
|
from Tkinter import *
|
|
from ttk import *
|
|
|
|
import codecs
|
|
import subprocess
|
|
import sys
|
|
import interpreter
|
|
import sqlite3
|
|
|
|
class Disassembler():
|
|
def __init__(self, frame):
|
|
|
|
top = Frame(frame)
|
|
self.shell_bar = Scrollbar(top)
|
|
self.shell_bar.pack(side=RIGHT, fill=Y, expand=0)
|
|
self.shellcode = Text(top, yscrollcommand=self.shell_bar.set)
|
|
self.shellcode.pack(anchor=W, fill=BOTH, expand=1)
|
|
self.shellcode.config(height=4, bd=2)
|
|
self.shell_bar.config(command=self.shellcode.yview)
|
|
|
|
bottom = Frame(frame)
|
|
self.disasm_bar = Scrollbar(bottom)
|
|
self.disasm_bar.pack(side=RIGHT, fill=Y, expand=0)
|
|
self.disasm = Text(bottom, yscrollcommand=self.disasm_bar.set)
|
|
self.disasm.pack(anchor=W, fill=BOTH, expand=1)
|
|
self.disasm.config(height=4, bd=2)
|
|
self.shell_bar.config(command=self.disasm.yview)
|
|
|
|
top.pack(anchor=W, fill=BOTH, expand=1)
|
|
bottom.pack(anchor=W, fill=BOTH, expand=1)
|
|
|
|
var = IntVar()
|
|
|
|
R1 = Radiobutton(frame, text="16-bit", variable=var, value=1, command=lambda: self.value(16))
|
|
R1.pack(side=LEFT)
|
|
|
|
R2 = Radiobutton(frame, text="32-bit", variable=var, value=2, command=lambda: self.value(32))
|
|
R2.pack(side=LEFT)
|
|
|
|
R3 = Radiobutton(frame, text="64-bit", variable=var, value=3, command=lambda: self.value(64))
|
|
R3.pack(side=LEFT)
|
|
|
|
B = Button(frame, text="Disassemble", command=self.render)
|
|
B.pack(side=RIGHT)
|
|
|
|
def value(self, val):
|
|
'''
|
|
Sets disassembler mode (e.g. 16bit, 32bit, or 64bit)
|
|
'''
|
|
global mode
|
|
self.mode = val
|
|
|
|
def clean(self, shellcode):
|
|
'''
|
|
Cleans the format that we get from tkinter into a format we can disassemble easily. (i.e. \x00\x00)
|
|
'''
|
|
return codecs.escape_decode(shellcode.decode('utf-8').strip())[0]
|
|
|
|
def render(self):
|
|
'''
|
|
Cleans out the Text widget, does the disassembly and inserts it.
|
|
'''
|
|
self.disasm.delete(1.0, END)
|
|
self.disasm.insert(INSERT, disassemble(self.clean(self.shellcode.get(1.0, END)), self.mode))
|
|
|
|
class Assembler():
|
|
def __init__(self, frame):
|
|
self.assembler = Text(frame)
|
|
self.assembler.pack(fill=BOTH, expand=1)
|
|
self.assembler.config(height=8, bd=2)
|
|
|
|
self.output = Text(frame)
|
|
self.output.pack(anchor=W, fill=BOTH, expand=1)
|
|
self.output.config(height=4, bd=2)
|
|
|
|
self.value = StringVar()
|
|
self.dropdown = Combobox(frame, textvariable=self.value, state='readonly')
|
|
self.dropdown['values'] = ('elf', 'elf64', 'bin')
|
|
self.dropdown.current(0)
|
|
self.dropdown.pack(side=LEFT)
|
|
|
|
self.asm_button = Button(frame, text="Assemble", command=self.render)
|
|
self.asm_button.pack(side=RIGHT)
|
|
|
|
self.asm_test = Button(frame, text="Test Shellcode", command=self.test)
|
|
self.asm_test.pack(side=RIGHT)
|
|
|
|
def render(self):
|
|
mode = self.dropdown['values'][self.dropdown.current()]
|
|
asm = str(self.assembler.get(1.0, END))
|
|
self.output.delete(1.0, END)
|
|
self.output.insert(INSERT, repr(assemble(asm, mode))[1:-1] )
|
|
|
|
def clean(self, shellcode):
|
|
'''
|
|
Cleans the format that we get from tkinter into a format we can disassemble easily. (i.e. \x00\x00)
|
|
'''
|
|
return codecs.escape_decode(shellcode.decode('utf-8').strip())[0]
|
|
|
|
def test(self):
|
|
shellcode = repr(self.clean(self.output.get(1.0, END)))[1:-1]
|
|
subprocess.Popen([sys.executable, 'shellcode.py', shellcode]).communicate()
|
|
|
|
def draw(self):
|
|
pass
|
|
|
|
class Shellcode():
|
|
def __init__(self, frame):
|
|
tree = Treeview(frame)
|
|
|
|
# Inserted at the root, program chooses id:
|
|
tree.insert('', 'end', 'windows', text='Windows')
|
|
tree.insert('', 'end', 'linux', text='Linux')
|
|
|
|
# Same thing, but inserted as first child:
|
|
# tree.insert('', 0, 'gallery', text='Applications')
|
|
|
|
# Treeview chooses the id:
|
|
|
|
|
|
# Inserted underneath an existing node:
|
|
tree.insert('windows', 'end', text='Canvas')
|
|
tree.insert('linux', 'end', text='Canvas')
|
|
|
|
tree.pack(side=LEFT, fill=Y)
|
|
|
|
class ConnectBack():
|
|
def __init__(self, frame):
|
|
pass
|
|
|
|
|
|
root = Tk()
|
|
root.title("Eggshells - " + module)
|
|
note = Notebook(root)
|
|
|
|
tab1 = Frame(note)
|
|
tab2 = Frame(note)
|
|
tab3 = Frame(note)
|
|
tab4 = Frame(note)
|
|
tab5 = Frame(note)
|
|
tab6 = Frame(note)
|
|
|
|
#################DISASM################
|
|
Disassembler(tab1)
|
|
#######################################
|
|
|
|
################ASM####################
|
|
Assembler(tab2)
|
|
#######################################
|
|
|
|
###############Shellcode###############
|
|
Shellcode(tab6)
|
|
#######################################
|
|
|
|
|
|
################Python#################
|
|
c = interpreter.Console(tab4)
|
|
c.dict["console"] = c
|
|
c.pack(fill=BOTH, expand=1)
|
|
#######################################
|
|
|
|
note.add(tab1, text = "Disassembler")
|
|
note.add(tab2, text = "Assembler")
|
|
note.add(tab3, text = "Sockets")
|
|
note.add(tab4, text = "Python")
|
|
note.add(tab5, text = "Hex Editor")
|
|
note.add(tab6, text = "Shellcode")
|
|
|
|
note.pack(fill=BOTH, expand=1)
|
|
root.mainloop()
|
|
exit() |