Skip to content

Commit

Permalink
Added multicalls and exec_service
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael Appel committed Jun 10, 2015
1 parent d48470e commit a259bac
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 41 deletions.
2 changes: 1 addition & 1 deletion remote/rpcserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def main(addr, port, type_):
logging.info('No or invalid arguments found. Defaulting to defaults')
addr = intern('0.0.0.0')
port = 4828
type_ = intern('servers.vserver.EvalServer')
type_ = intern('vserver.EvalServer')
except ValueError:
sys.stderr.write("Invalid port number string: %s\n" % sys.argv[2])
sys.exit(0)
Expand Down
62 changes: 22 additions & 40 deletions tools/pin.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import os
import threading
import time
import xmlrpclib
from util import files


def remote_run(tsk, cmd, execution_time, verbose, working_dir, retval):
print "Remote Run: %s" % cmd
tsk.log("remote run: %s" % cmd)
retval = tsk.vm.launch(cmd, exec_time=execution_time, verbose=verbose, working_dir=working_dir)

Expand All @@ -14,6 +14,9 @@ def analyze(tsk, pincmd, bincmd, execution_time, suffix='pe32'):
:type tsk: jobs.task.Task
"""
guest_dir = tsk.cfg.get("job", "guestworkingdir")
interactive = tsk.cfg.get_bool("job", "interactive")

if not tsk.setup_vm():
tsk.log("VM setup failed")
return False
Expand All @@ -26,56 +29,35 @@ def analyze(tsk, pincmd, bincmd, execution_time, suffix='pe32'):
tsk.log("Starting PCAP for %s" % suffix)
tsk.start_pcap(name_suffix=".%s" % suffix)

interactive = False
if tsk.cfg.get_bool("job", "interactive"):
if interactive:
tsk.log("Running in interactive mode")
tsk.load(os.path.join(os.getcwd(), "remote/bin/clicks.exe"), "clicks.exe")
tsk.load(os.path.join(os.getcwd(), "remote/bin/clicker.exe"), "clicker.exe")
interactive = True
tsk.log("Starting clicker")
cmd = guest_dir + "\\clicker.exe"
tsk.vm._guest.exec_service(cmd, guest_dir)
else:
tsk.log("NON-interactive mode")

guest_dir = tsk.cfg.get("job", "guestworkingdir")
multicall = xmlrpclib.MultiCall(tsk.vm._guest)

bincmd += '"%s"' % tsk.sample.name
cmd = ' -- '.join([pincmd, bincmd])
tsk.log("CMD: %s" % cmd)

analysis_rv = True
analysis_thread = threading.Thread(target=remote_run, args=(tsk, cmd, execution_time, True,
tsk.cfg.get("job", "guestworkingdir"), analysis_rv))
analysis_thread.start()
multicall.execute(cmd, 60, True, guest_dir)

if interactive:
"""
Pause for sample to start
"""
time.sleep(5)

"""
Simulate 3 clicks
"""
tsk.log("Running clicks")
cmd = guest_dir + "clicks.exe"
clicks_rv = True
clicks_thread = threading.Thread(target=remote_run, args=(tsk, cmd, execution_time, True,
tsk.cfg.get("job", "guestworkingdir"), clicks_rv))
clicks_thread.start()
clicks_thread.join()

"""
Walk through install dialogs
"""
tsk.log("Running clicker")
cmd = guest_dir + "clicker.exe " + guest_dir + r"\\clicker-log.txt"
clicker_rv = True
clicker_thread = threading.Thread(target=remote_run, args=(tsk, cmd, execution_time, True,
tsk.cfg.get("job", "guestworkingdir"), clicker_rv))
clicker_thread.start()

analysis_thread.join()
if analysis_rv:
rv = analysis_rv
tsk.log("Starting clicks")
cmd = guest_dir + "\\clicks.exe"
multicall.execute(cmd, 60, True, guest_dir)

rv = False
for result in multicall():
tsk.log("Getting multicall result")
rv = result
break

if rv:
src = tsk.cfg.get("job", "pinlog")
dst = os.path.join(tsk.logdir, '%s.%s.txt' % (tsk.sample.name, suffix))
tsk.log("Getting results: %s, %s" % (src, dst))
Expand Down

0 comments on commit a259bac

Please sign in to comment.