lib/cuckoo/core/screener.py
import subprocess
import os
import shutil
import hashlib, md5
import string, random
from time import sleep
from threading import Thread
from lib.cuckoo.common.exceptions import CuckooAnalysisError, CuckooMachineError, CuckooGuestError
from lib.cuckoo.common.utils import File
class Screener(Thread):
# path to save screens
# path vmrun
def __init__(self, vmrun, vm_path, username, password, shot_path):
Thread.__init__(self)
self.lock_file = None
self.vmrun = vmrun
self.vm_path = vm_path
self.username = username
self.password = password
self.shot_path = shot_path
#def do_start(self, vm_path, username, password, shot_path):
def run(self):
idx = 1
# creating a file .pid
#self.lock_file = '/tmp/lock.pid'
#self.lock_file = 'C:\\WINDOWS\Temp\\lock.pid'
self.lock_file = 'C:\\Users\\avtest\\Documents\\lock.pid'
if not os.path.exists(self.lock_file):
lock = open(self.lock_file, 'w')
lock.write("\n\n")
lock.close()
#first = "%s/%s.png" % (self.shot_path.replace(' ','\ '), "".join(random.sample(string.letters, 5)))
if not os.path.exists(self.shot_path + "/shots"):
os.mkdir(self.shot_path + "/shots")
#first = u"%s/shots/%s.png" % (self.shot_path, "".random.sample(string.letters, 5))
first = self.shot_path + "/shots/0000.png"
self.proc = subprocess.Popen([self.vmrun,
"-h", "https://vcenter5.hackingteam.local/sdk",
"-u", "avtest", "-p", "Av!Auto123",
"-gu", "%s" % self.username,
"-gp", "%s" % self.password,
"captureScreen",
self.vm_path,
first])
#try:
# first_hash = File(first).get_md5()
#except (IOError, shutil.Error) as e:
# raise CuckooAnalysisError("Unable get md5 for file \"%s\", analysis aborted" % first)
# pass
while True:
""" Screenshotting time"""
if not os.path.exists(self.lock_file):
print "stopping time"
break
# Take screenshot
# TODO:
# username, password of guest account
if idx < 10:
cur = self.shot_path + "/shots/000" + str(idx) + ".png"
elif idx > 9:
cur = self.shot_path + "/shots/00" + str(idx) + ".png"
self.proc = subprocess.Popen([self.vmrun,
"-h", "https://vcenter5.hackingteam.local/sdk",
"-u", "avtest", "-p", "Av!Auto123",
"-gu", "%s" % self.username,
"-gp", "%s" % self.password,
"captureScreen",
self.vm_path,
cur])
# 2. md5 of file
#try:
# cur_hash = File(cur).get_md5()
#except (IOError, shutil.Error) as e:
# raise CuckooAnalysisError("Unable get md5 for file \"%s\", analysis aborted" % cur)
# pass
# 3. if md5 current == previous delete file
#if cur_hash == first_hash:
# print "removing current snapshot"
# os.remove(cur)
# 4. sleeping time
idx+=1
sleep(1)
def stop(self):
if os.path.exists(self.lock_file):
os.remove(self.lock_file)