update to standard python formatting

This commit is contained in:
Brent Cook
2019-12-19 08:58:40 -06:00
parent d64f53e462
commit 3cc6b8f8fd
+90 -84
View File
@@ -14,92 +14,98 @@
#
# Author: Stephen Fewer (stephen_fewer[at]harmonysecurity[dot]com)
#=============================================================================#
import os, sys, time
import os
import sys
import time
from subprocess import Popen
from struct import pack
#=============================================================================#
def clean( dir="./bin/" ):
for root, dirs, files in os.walk( dir ):
for name in files:
if name[-4:] == ".bin":
os.remove( os.path.join( root, name ) )
#=============================================================================#
def locate( src_file, dir="./src/" ):
for root, dirs, files in os.walk( dir ):
for name in files:
if src_file == name:
return root
return None
#=============================================================================#
def build( name ):
location = locate( "%s.asm" % name )
if location:
input = os.path.normpath( os.path.join( location, name ) )
output = os.path.normpath( os.path.join( "./bin/", name ) )
p = Popen( ["nasm", "-f bin", "-O3", "-o %s.bin" % output, "%s.asm" % input ] )
p.wait()
xmit( name )
else:
print("[-] Unable to locate '%s.asm' in the src directory" % name)
#=============================================================================#
def xmit_dump_ruby( data, length=16 ):
dump = ""
for i in range( 0, len( data ), length ):
bytes = data[ i : i+length ]
hex = "\"%s\"" % ( ''.join( [ "\\x%02X" % x for x in bytes ] ) )
if i+length <= len(data):
hex += " +"
dump += "%s\n" % ( hex )
print(dump)
#=============================================================================#
def xmit_offset( data, name, value ):
offset = data.find( value );
if offset != -1:
print("# %s Offset: %d" % ( name, offset ))
#=============================================================================#
def xmit( name, dump_ruby=True ):
bin = os.path.normpath( os.path.join( "./bin/", "%s.bin" % name ) )
f = open( bin, 'rb')
data = f.read()
print("# Name: %s\n# Length: %d bytes" % ( name, len( data ) ))
xmit_offset( data, "Port", pack( ">H", 4444 ) ) # 4444
xmit_offset( data, "Host", pack( ">L", 0x7F000001 ) ) # 127.0.0.1
xmit_offset( data, "ExitFunk", pack( "<L", 0x0A2A1DE0 ) ) # kernel32.dll!ExitThread
xmit_offset( data, "ExitFunk", pack( "<L", 0x56A2B5F0 ) ) # kernel32.dll!ExitProcess
xmit_offset( data, "ExitFunk", pack( "<L", 0xEA320EFE ) ) # kernel32.dll!SetUnhandledExceptionFilter
xmit_offset( data, "ExitFunk", pack( "<L", 0xE035F044 ) ) # kernel32.dll!Sleep
if dump_ruby:
xmit_dump_ruby( data )
#=============================================================================#
def main( argv=None ):
if not argv:
argv = sys.argv
if len( argv ) == 1:
print("Usage: build.py [clean|all|<name>]")
else:
print("# Built on %s\n" % ( time.asctime( time.localtime() ) ))
if argv[1] == "clean":
clean()
elif argv[1] == "all":
for root, dirs, files in os.walk( "./src/migrate/" ):
def clean(dir='./bin/'):
for root, dirs, files in os.walk(dir):
for name in files:
if name[-4:] == ".asm":
build( name[:-4] )
for root, dirs, files in os.walk( "./src/single/" ):
if name[-4:] == '.bin':
os.remove(os.path.join(root, name))
def locate(src_file, dir='./src/'):
for root, dirs, files in os.walk(dir):
for name in files:
if name[-4:] == ".asm":
build( name[:-4] )
for root, dirs, files in os.walk( "./src/stage/" ):
for name in files:
if name[-4:] == ".asm":
build( name[:-4] )
for root, dirs, files in os.walk( "./src/stager/" ):
for name in files:
if name[-4:] == ".asm":
build( name[:-4] )
if src_file == name:
return root
return None
def build(name):
location = locate('%s.asm' % name)
if location:
input = os.path.normpath(os.path.join(location, name))
output = os.path.normpath(os.path.join('./bin/', name))
p = Popen(['nasm', '-f bin', '-O3', '-o %s.bin' %
output, '%s.asm' % input])
p.wait()
xmit(name)
else:
build( argv[1] )
#=============================================================================#
if __name__ == "__main__":
main()
#=============================================================================#
print("[-] Unable to locate '%s.asm' in the src directory" % name)
def xmit_dump_ruby(data, length=16):
dump = ''
for i in range(0, len(data), length):
bytes = data[i: i+length]
hex = "\"%s\"" % (''.join(['\\x%02X' % x for x in bytes]))
if i+length <= len(data):
hex += ' +'
dump += '%s\n' % (hex)
print(dump)
def xmit_offset(data, name, value):
offset = data.find(value)
if offset != -1:
print('# %s Offset: %d' % (name, offset))
def xmit(name, dump_ruby=True):
bin = os.path.normpath(os.path.join('./bin/', '%s.bin' % name))
f = open(bin, 'rb')
data = f.read()
print('# Name: %s\n# Length: %d bytes' % (name, len(data)))
xmit_offset(data, 'Port', pack('>H', 4444)) # 4444
xmit_offset(data, 'Host', pack('>L', 0x7F000001)) # 127.0.0.1
# kernel32.dll!ExitThread
xmit_offset(data, 'ExitFunk', pack('<L', 0x0A2A1DE0))
# kernel32.dll!ExitProcess
xmit_offset(data, 'ExitFunk', pack('<L', 0x56A2B5F0))
# kernel32.dll!SetUnhandledExceptionFilter
xmit_offset(data, 'ExitFunk', pack('<L', 0xEA320EFE))
xmit_offset(data, 'ExitFunk', pack('<L', 0xE035F044)) # kernel32.dll!Sleep
if dump_ruby:
xmit_dump_ruby(data)
def main(argv=None):
if not argv:
argv = sys.argv
if len(argv) == 1:
print('Usage: build.py [clean|all|<name>]')
else:
print('# Built on %s\n' % (time.asctime(time.localtime())))
if argv[1] == 'clean':
clean()
elif argv[1] == 'all':
for root, dirs, files in os.walk('./src/migrate/'):
for name in files:
if name[-4:] == '.asm':
build(name[:-4])
for root, dirs, files in os.walk('./src/single/'):
for name in files:
if name[-4:] == '.asm':
build(name[:-4])
for root, dirs, files in os.walk('./src/stage/'):
for name in files:
if name[-4:] == '.asm':
build(name[:-4])
for root, dirs, files in os.walk('./src/stager/'):
for name in files:
if name[-4:] == '.asm':
build(name[:-4])
else:
build(argv[1])
if __name__ == '__main__':
main()