Lab 13
Lab 13
Tools
- VirtualBox
- VMWare
- TShark
Automated Malware Analysis VirtualBox
Initial VirtualBoxSetup (previous lab)
- Automation in Python
- Run vmauto.py: specifically designed for automating malware analysis.
- Use vmauto.py for your automated script
- See malwarecookbook/8/vmauto.py (in the tool folder included in the document)
vmauto.py:
#!/usr/bin/python
# You should have received a copy of the GNU General Public License
#
# [NOTES] -----------------------------------------------------------
#--------------------------------------------------------------------
import subprocess
# -----------------------------------------------------------------------
vm_paths = {
'/usr/bin/vmrun': 'ws',
def pinfo(msg):
def perror(msg):
# -----------------------------------------------------------------------
class VBoxAuto:
self.ctx = {}
self.mach = None
def get_mach(self):
def check(self):
try:
except ImportError:
return False
self.ctx = {'global':vbm,
'const' :vbm.constants,
'vb' :vbm.vbox,
'mgr' :vbm.mgr}
for m in self.get_mach():
self.mach = m
break
if self.mach == None:
return False
"SessionState", self.mach.sessionState))
"MachineState", self.mach.state))
return True
try:
all = self.ctx['const'].all_values(enum)
for e in all.keys():
if str(elem) == str(all[e]):
return e
except:
def list(self):
try:
for m in self.get_mach():
self.get_const("MachineState", m.state),
self.get_const("SessionState", m.sessionState))
except:
vb = self.ctx['vb']
session = self.ctx['mgr'].getSessionObject(vb)
p.waitForCompletion(1000)
self.ctx['global'].waitForEvents(0)
if int(p.resultCode) == 0:
session.close()
else:
time.sleep(nsecwait)
def opensession(self):
session = self.ctx['global'].openMachineSession(self.mach.id)
mach = session.machine
self.ctx['global'].closeMachineSession(session)
time.sleep(5)
def stop(self):
try:
session.console.powerDown()
time.sleep(5)
self.closesession(session)
except Exception, e:
pinfo(e)
try:
snap = mach.findSnapshot(snapname)
session.console.restoreSnapshot(snap)
time.sleep(5)
self.closesession(session)
except Exception, e:
pinfo(e)
try:
except:
argstr = ''
pinfo("Executing '%s' with args '%s'" % (args[0], argstr))
env = []
ret = session.console.guest.executeProcess(
args[0],
0,
args,
env,
user, passwd, 0)
if os.name == "nt":
pid = ret[3]
else:
pid = ret[1]
# -----------------------------------------------------------------------
class VMwareAuto:
self.vmx = vmx
self.vmrun = None
self.vmtype = None
if not os.path.isfile(vmx):
self.vmrun = path
self.vmtype = type
break
if self.vmrun == None:
else:
'''
'''
self.user = user
self.passwd = passwd
'''
'''
if guest:
pargs.extend(['-gu', self.user])
pargs.extend(['-gp', self.passwd])
pargs.append(cmd)
pargs.append(self.vmx)
pargs.extend(args)
proc = subprocess.Popen(
pargs,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT
return proc.communicate()[0]
def list(self):
'''
'''
print pargs
proc = subprocess.Popen(
pargs,
stdout=subprocess.PIPE
return proc.communicate()[0]
def start(self):
'''
'''
return self.run_cmd('start')
def stop(self):
'''
'''
return self.run_cmd('stop')
'''
'''
def suspend(self):
'''
memory sample
'''
return self.run_cmd('suspend')
'''
'''
'''
'''
if not os.path.isfile(src):
return
return self.run_cmd(
'''
'''
return self.run_cmd(
'''
'''
return self.run_cmd(
'runProgramInGuest',
'-noWait',
'-interactive',
'-activeWindow',
file, args
],
guest=True)
def findmem(self):
'''
'''
path = os.path.dirname(self.vmx)
def main(argv):
return 0
if __name__ == '__main__':
main(sys.argv)
Create a script to revert all snapshots for virtual machines running on VMware.
Create a script to delete newly created snapshot files from the above script