Exemplo n.º 1
0
def run_command(flargs):
    #arg = args.kind
    #if args.action == "command":
    #    arg = args.cmd
    vm_name, args = flargs
    cmd = args.cmd
    if cmd is None:
        return False
    vm = VMachine(vm_conf_file, vm_name)
    vm._run_cmd(cmd)

    return True
Exemplo n.º 2
0
def run_command(flargs):
#arg = args.kind
    # if args.action == "command":
    #    arg = args.cmd
    vm_name, args = flargs
    cmd = args.cmd
    if cmd is None:
        return False
    vm = VMachine(vm_conf_file, vm_name)
    vm._run_cmd(cmd)

    return True
Exemplo n.º 3
0
def do_test(flargs):
    '''
    results = [['fakeav, silent, STARTED',
        'fakeav, melt, ERROR',
        'fakeav, exploit, SUCCESS',
        'fakeav, exploit_ppsx, FAILED']]

    rep = Report(9999, results)
    if rep.send_report_color_mail("reportz") is False:
        print "[!] Problem sending HTML email Report!"
    '''
    #    results = [['360cn, silent, + SUCCESS ELITE BLACKLISTED', '360cn, melt, + SUCCESS SCOUT SYNC', '360cn, exploit_docx, + SUCCESS EXPLOIT SAVE', '360cn, exploit_web, + SUCCESS EXPLOIT SAVE', '360cn, mobile, + SUCCESS PULL android'], ['avast, silent, + SUCCESS ELITE UNINSTALLED', 'avast, melt, + SUCCESS SCOUT SYNC', 'avast, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avast, exploit_web, + SUCCESS EXPLOIT SAVE', 'avast, mobile, + SUCCESS PULL android'], ['avira, silent, + SUCCESS ELITE UNINSTALLED', 'avira, melt, + SUCCESS SCOUT SYNC', 'avira, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avira, exploit_web, + SUCCESS EXPLOIT SAVE', 'avira, mobile, + SUCCESS PULL android'], ['avg, silent, + SUCCESS ELITE BLACKLISTED', 'avg, melt, + SUCCESS SCOUT SYNC', 'avg, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avg, exploit_web, + SUCCESS EXPLOIT SAVE', 'avg, mobile, + SUCCESS PULL android'], ['ahnlab, silent, + SUCCESS ELITE UNINSTALLED', 'ahnlab, melt, + SUCCESS SCOUT SYNC', 'ahnlab, exploit_docx, + SUCCESS EXPLOIT SAVE', 'ahnlab, exploit_web, + SUCCESS EXPLOIT SAVE', 'ahnlab, mobile, + SUCCESS PULL android'], ['adaware, silent, + SUCCESS ELITE UNINSTALLED', 'adaware, melt, + SUCCESS SCOUT SYNC', 'adaware, exploit_docx, + SUCCESS EXPLOIT SAVE', 'adaware, exploit_web, + SUCCESS EXPLOIT SAVE', 'adaware, mobile, + SUCCESS PULL android'], ['avg32, silent, + SUCCESS ELITE BLACKLISTED', 'avg32, melt, + SUCCESS SCOUT SYNC', 'avg32, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avg32, exploit_web, + SUCCESS EXPLOIT SAVE', 'avg32, mobile, + SUCCESS PULL android'], ['avast32, silent, + SUCCESS ELITE UNINSTALLED', 'avast32, melt, + SUCCESS SCOUT SYNC', 'avast32, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avast32, exploit_web, + SUCCESS EXPLOIT SAVE', 'avast32, mobile, + SUCCESS PULL android'], ['bitdef, silent, + SUCCESS ELITE BLACKLISTED', 'bitdef, melt, + FAILED SCOUT SYNC', 'bitdef, exploit_docx, + SUCCESS EXPLOIT SAVE', 'bitdef, exploit_web, + SUCCESS EXPLOIT SAVE', 'bitdef, mobile, + SUCCESS PULL android'], ['comodo, silent, + SUCCESS ELITE BLACKLISTED', 'comodo, melt, + SUCCESS SCOUT SYNC', 'comodo, exploit_docx, + SUCCESS EXPLOIT SAVE', 'comodo, exploit_web, + SUCCESS EXPLOIT SAVE', 'comodo, mobile, + SUCCESS PULL android'], ['drweb, silent, + SUCCESS ELITE BLACKLISTED', 'drweb, melt, + SUCCESS SCOUT SYNC', 'drweb, exploit_docx, + SUCCESS EXPLOIT SAVE', 'drweb, exploit_web, + SUCCESS EXPLOIT SAVE', 'drweb, mobile, + SUCCESS PULL android'], ['eset, silent, + SUCCESS ELITE UNINSTALLED', 'eset, melt, + SUCCESS SCOUT SYNC', 'eset, exploit_docx, + SUCCESS EXPLOIT SAVE', 'eset, exploit_web, + SUCCESS EXPLOIT SAVE', 'eset, mobile, + SUCCESS PULL android'], ['fsecure, silent, + SUCCESS ELITE UNINSTALLED', 'fsecure, melt, + SUCCESS SCOUT SYNC', 'fsecure, exploit_docx, + SUCCESS EXPLOIT SAVE', 'fsecure, exploit_web, + SUCCESS EXPLOIT SAVE', 'fsecure, mobile, + SUCCESS PULL android'], ['gdata, silent, + SUCCESS ELITE BLACKLISTED', 'gdata, melt, + SUCCESS SCOUT SYNC', 'gdata, exploit_docx, + SUCCESS EXPLOIT SAVE', 'gdata, exploit_web, + SUCCESS EXPLOIT SAVE', 'gdata, mobile, + SUCCESS PULL android'], ['kis, silent, + SUCCESS ELITE UNINSTALLED', 'kis, melt, + SUCCESS SCOUT SYNC', 'kis, exploit_docx, + SUCCESS EXPLOIT SAVE', 'kis, exploit_web, + SUCCESS EXPLOIT SAVE', 'kis, mobile, + SUCCESS PULL android'], ['kis32, silent, + SUCCESS ELITE BLACKLISTED', 'kis32, melt, + SUCCESS SCOUT SYNC', 'kis32, exploit_docx, + SUCCESS EXPLOIT SAVE', 'kis32, exploit_web, + SUCCESS EXPLOIT SAVE', 'kis32, mobile, + SUCCESS PULL android'], ['mcafee, silent, + SUCCESS ELITE UNINSTALLED', 'mcafee, melt, + SUCCESS SCOUT SYNC', 'mcafee, exploit_docx, + SUCCESS EXPLOIT SAVE', 'mcafee, exploit_web, + SUCCESS EXPLOIT SAVE', 'mcafee, mobile, + SUCCESS PULL android'], ['msessential, silent, + SUCCESS ELITE UNINSTALLED', 'msessential, melt, + SUCCESS SCOUT SYNC', 'msessential, exploit_docx, + SUCCESS EXPLOIT SAVE', 'msessential, exploit_web, + SUCCESS EXPLOIT SAVE', 'msessential, mobile, + SUCCESS PULL android'], ['mbytes, silent, + SUCCESS ELITE UNINSTALLED', 'mbytes, melt, + SUCCESS SCOUT SYNC', 'mbytes, exploit_docx, + SUCCESS EXPLOIT SAVE', 'mbytes, exploit_web, + SUCCESS EXPLOIT SAVE', 'mbytes, mobile, + SUCCESS PULL android'], ['norton, silent, + SUCCESS ELITE UNINSTALLED', 'norton, melt, + SUCCESS SCOUT SYNC', 'norton, exploit_docx, + SUCCESS EXPLOIT SAVE', 'norton, exploit_web, + SUCCESS EXPLOIT SAVE', 'norton, mobile, + SUCCESS PULL android'], ['norman, silent, n', 'norman, melt, + SUCCESS SCOUT SYNC', 'norman, exploit_docx, + SUCCESS EXPLOIT SAVE', 'norman, exploit_web, + SUCCESS EXPLOIT SAVE', 'norman, mobile, + SUCCESS PULL android'], ['panda, silent, + SUCCESS ELITE UNINSTALLED', 'panda, melt, + SUCCESS SCOUT SYNC', 'panda, exploit_docx, + SUCCESS EXPLOIT SAVE', 'panda, exploit_web, + SUCCESS EXPLOIT SAVE', 'panda, mobile, + SUCCESS PULL android'], ['pctools, silent, + SUCCESS ELITE UNINSTALLED', 'pctools, melt, + SUCCESS SCOUT SYNC', 'pctools, exploit_docx, + SUCCESS EXPLOIT SAVE', 'pctools, exploit_web, + SUCCESS EXPLOIT SAVE', 'pctools, mobile, + SUCCESS PULL android'], ['risint, silent, + SUCCESS ELITE UNINSTALLED', 'risint, melt, + SUCCESS SCOUT SYNC', 'risint, exploit_docx, + SUCCESS EXPLOIT SAVE', 'risint, exploit_web, + SUCCESS EXPLOIT SAVE', 'risint, mobile, + SUCCESS PULL android'], ['sophos, silent, + SUCCESS ELITE BLACKLISTED', 'sophos, melt, + SUCCESS SCOUT SYNC', 'sophos, exploit_docx, + SUCCESS EXPLOIT SAVE', 'sophos, exploit_web, + SUCCESS EXPLOIT SAVE', 'sophos, mobile, + SUCCESS PULL android'], ['trendm, silent, + SUCCESS ELITE UNINSTALLED', 'trendm, melt, + SUCCESS SCOUT SYNC', 'trendm, exploit_docx, + SUCCESS EXPLOIT SAVE', 'trendm, exploit_web, + SUCCESS EXPLOIT SAVE', 'trendm, mobile, + SUCCESS PULL android'], ['zoneal, silent, + SUCCESS ELITE UNINSTALLED', 'zoneal, melt, + SUCCESS SCOUT SYNC', 'zoneal, exploit_docx, + SUCCESS EXPLOIT SAVE', 'zoneal, exploit_web, + SUCCESS EXPLOIT SAVE', 'zoneal, mobile, + SUCCESS PULL android']]
    # results = [['360cn, silent, + SUCCESS ELITE BLACKLISTED', '360cn, melt, + SUCCESS SCOUT SYNC', '360cn, exploit_docx, + SUCCESS EXPLOIT SAVE', '360cn, exploit_web, + SUCCESS EXPLOIT SAVE', '360cn, mobile, + SUCCESS PULL android'], ['avast, silent, + SUCCESS ELITE UNINSTALLED', 'avast, melt, + SUCCESS SCOUT SYNC', 'avast, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avast, exploit_web, + SUCCESS EXPLOIT SAVE', 'avast, mobile, + SUCCESS PULL android'], ['avira, silent, + SUCCESS ELITE UNINSTALLED', 'avira, melt, + SUCCESS SCOUT SYNC', 'avira, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avira, exploit_web, + SUCCESS EXPLOIT SAVE', 'avira, mobile, + SUCCESS PULL android'], ['avg, silent, + SUCCESS ELITE BLACKLISTED', 'avg, melt, + SUCCESS SCOUT SYNC', 'avg, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avg, exploit_web, + SUCCESS EXPLOIT SAVE', 'avg, mobile, + SUCCESS PULL android'], ['ahnlab, silent, + SUCCESS ELITE UNINSTALLED', 'ahnlab, melt, + SUCCESS SCOUT SYNC', 'ahnlab, exploit_docx, + SUCCESS EXPLOIT SAVE', 'ahnlab, exploit_web, + SUCCESS EXPLOIT SAVE', 'ahnlab, mobile, + SUCCESS PULL android'], ['adaware, silent, + SUCCESS ELITE UNINSTALLED', 'adaware, melt, + SUCCESS SCOUT SYNC', 'adaware, exploit_docx, + SUCCESS EXPLOIT SAVE', 'adaware, exploit_web, + SUCCESS EXPLOIT SAVE', 'adaware, mobile, + SUCCESS PULL android'], ['avg32, silent, + SUCCESS ELITE BLACKLISTED', 'avg32, melt, + SUCCESS SCOUT SYNC', 'avg32, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avg32, exploit_web, + SUCCESS EXPLOIT SAVE', 'avg32, mobile, + SUCCESS PULL android'], ['avast32, silent, + SUCCESS ELITE UNINSTALLED', 'avast32, melt, + SUCCESS SCOUT SYNC', 'avast32, exploit_docx, + SUCCESS EXPLOIT SAVE', 'avast32, exploit_web, + SUCCESS EXPLOIT SAVE', 'avast32, mobile, + SUCCESS PULL android'], ['bitdef, silent, + SUCCESS ELITE BLACKLISTED', 'bitdef, melt, + FAILED SCOUT SYNC', 'bitdef, exploit_docx, + SUCCESS EXPLOIT SAVE', 'bitdef, exploit_web, + SUCCESS EXPLOIT SAVE', 'bitdef, mobile, + SUCCESS PULL android'], ['comodo, silent, + SUCCESS ELITE BLACKLISTED', 'comodo, melt, + SUCCESS SCOUT SYNC', 'comodo, exploit_docx, + SUCCESS EXPLOIT SAVE', 'comodo, exploit_web, + SUCCESS EXPLOIT SAVE', 'comodo, mobile, + SUCCESS PULL android'], ['drweb, silent, + SUCCESS ELITE BLACKLISTED', 'drweb, melt, + SUCCESS SCOUT SYNC', 'drweb, exploit_docx, + SUCCESS EXPLOIT SAVE', 'drweb, exploit_web, + SUCCESS EXPLOIT SAVE', 'drweb, mobile, + SUCCESS PULL android'], ['eset, silent, + SUCCESS ELITE UNINSTALLED', 'eset, melt, + SUCCESS SCOUT SYNC', 'eset, exploit_docx, + SUCCESS EXPLOIT SAVE', 'eset, exploit_web, + SUCCESS EXPLOIT SAVE', 'eset, mobile, + SUCCESS PULL android'], ['fsecure, silent, + SUCCESS ELITE UNINSTALLED', 'fsecure, melt, + SUCCESS SCOUT SYNC', 'fsecure, exploit_docx, + SUCCESS EXPLOIT SAVE', 'fsecure, exploit_web, + SUCCESS EXPLOIT SAVE', 'fsecure, mobile, + SUCCESS PULL android'], ['gdata, silent, + SUCCESS ELITE BLACKLISTED', 'gdata, melt, + SUCCESS SCOUT SYNC', 'gdata, exploit_docx, + SUCCESS EXPLOIT SAVE', 'gdata, exploit_web, + SUCCESS EXPLOIT SAVE', 'gdata, mobile, + SUCCESS PULL android'], ['kis, silent, + SUCCESS ELITE UNINSTALLED', 'kis, melt, + SUCCESS SCOUT SYNC', 'kis, exploit_docx, + SUCCESS EXPLOIT SAVE', 'kis, exploit_web, + SUCCESS EXPLOIT SAVE', 'kis, mobile, + SUCCESS PULL android'], ['kis32, silent, + SUCCESS ELITE BLACKLISTED', 'kis32, melt, + SUCCESS SCOUT SYNC', 'kis32, exploit_docx, + SUCCESS EXPLOIT SAVE', 'kis32, exploit_web, + SUCCESS EXPLOIT SAVE', 'kis32, mobile, + SUCCESS PULL android'], ['mcafee, silent, + SUCCESS ELITE UNINSTALLED', 'mcafee, melt, + SUCCESS SCOUT SYNC', 'mcafee, exploit_docx, + SUCCESS EXPLOIT SAVE', 'mcafee, exploit_web, + SUCCESS EXPLOIT SAVE', 'mcafee, mobile, + SUCCESS PULL android'], ['msessential, silent, + SUCCESS ELITE UNINSTALLED', 'msessential, melt, + SUCCESS SCOUT SYNC', 'msessential, exploit_docx, + SUCCESS EXPLOIT SAVE', 'msessential, exploit_web, + SUCCESS EXPLOIT SAVE', 'msessential, mobile, + SUCCESS PULL android'], ['mbytes, silent, + SUCCESS ELITE UNINSTALLED', 'mbytes, melt, + SUCCESS SCOUT SYNC', 'mbytes, exploit_docx, + SUCCESS EXPLOIT SAVE', 'mbytes, exploit_web, + SUCCESS EXPLOIT SAVE', 'mbytes, mobile, + SUCCESS PULL android'], ['norton, silent, + SUCCESS ELITE UNINSTALLED', 'norton, melt, + SUCCESS SCOUT SYNC', 'norton, exploit_docx, + SUCCESS EXPLOIT SAVE', 'norton, exploit_web, + SUCCESS EXPLOIT SAVE', 'norton, mobile, + SUCCESS PULL android'], ['norman, silent, n', 'norman, melt, + SUCCESS SCOUT SYNC', 'norman, exploit_docx, + SUCCESS EXPLOIT SAVE', 'norman, exploit_web, + SUCCESS EXPLOIT SAVE', 'norman, mobile, + SUCCESS PULL android'], ['panda, silent, + SUCCESS ELITE UNINSTALLED', 'panda, melt, + SUCCESS SCOUT SYNC', 'panda, exploit_docx, + SUCCESS EXPLOIT SAVE', 'panda, exploit_web, + SUCCESS EXPLOIT SAVE', 'panda, mobile, + SUCCESS PULL android'], ['pctools, silent, + SUCCESS', 'pctools, melt, + SUCCESS', 'pctools, exploit_docx, + SUCCESS', 'pctools, exploit_web, + SUCCESS', 'pctools, mobile, SUCCESS']] #, ['risint, silent, + SUCCESS ELITE UNINSTALLED', 'risint, melt, + SUCCESS SCOUT SYNC', 'risint, exploit_docx, + SUCCESS EXPLOIT SAVE', 'risint, exploit_web, + SUCCESS EXPLOIT SAVE', 'risint, mobile, + SUCCESS PULL android'], ['sophos, silent, + SUCCESS ELITE BLACKLISTED', 'sophos, melt, + SUCCESS SCOUT SYNC', 'sophos, exploit_docx, + SUCCESS EXPLOIT SAVE', 'sophos, exploit_web, + SUCCESS EXPLOIT SAVE', 'sophos, mobile, + SUCCESS PULL android'], ['trendm, silent, + SUCCESS ELITE UNINSTALLED', 'trendm, melt, + SUCCESS SCOUT SYNC', 'trendm, exploit_docx, + SUCCESS EXPLOIT SAVE', 'trendm, exploit_web, + SUCCESS EXPLOIT SAVE', 'trendm, mobile, + SUCCESS PULL android'], ['zoneal, silent, + SUCCESS ELITE UNINSTALLED', 'zoneal, melt, + SUCCESS SCOUT SYNC', 'zoneal, exploit_docx, + SUCCESS EXPLOIT SAVE', 'zoneal, exploit_web, + SUCCESS EXPLOIT SAVE', 'zoneal, mobile, + SUCCESS PULL android']]
    #    rep = Report(42, results)
    # print rep.results
    #    if rep.send_report_color_mail("rep") is False:
    #        print "[!] Problem sending HTML email Report!"

    #    for result in rep.results:
    #        print "%s: %s" % (result.vm_name,result.result)

    vm_name = "gdata"
    vm = VMachine(vm_conf_file, vm_name)
    out = vmman.listProcesses(vm)
    if "msdtc.exe" in out:
        print "found"
    else:
        print "not found"
    print "end test"
Exemplo n.º 4
0
def execute(vm_name, cmd, *args):
    global vm_conf_file
    # pysphere, vi_server
    vmachine_cmds = ["startup", "shutdown", "reboot",
                     "get_snapshots", "revert_last_snapshot", "revert_to_snapshot", "create_snapshot",
                     "delete_snapshot",
                     "is_powered_on", "is_powered_off", "get_status",
                     "list_directory", "make_directory", "get_file", "send_file", "list_processes"]
    # vmware tools
    vmrun_cmds = ["executeCmd", "runTest", "takeScreenshot", "listProcesses",
                  "mkdirInGuest", "copyFileToGuest", "copyFileFromGuest", "deleteDirectoryInGuest",
                  "listDirectoryInGuest", "refreshSnapshot"]

    if config.verbose:
        logging.debug("vm: %s, command: %s" % (vm_name, cmd))

    try:
        vm = VMachine(vm_name)
        vm.get_params(vm_conf_file)

        assert vm.config

        if cmd in vmrun_cmds:
            vmrun = VMRun(vm_conf_file)
            f = getattr(vmrun, cmd)
            if not args:
                return f(vm)
            else:
                return f(vm, *args)

        elif cmd in vmachine_cmds:
            f = getattr(vm, cmd)
            if not args:
                return f()
            else:
                return f(args)
        else:
            logging.error("command not found: %s" % cmd)
            raise Exception("Command not found")
    except AssertionError as ae:
        logging.error("Assertion found: %s" % ae)
        raise
    except Exception as e:
        logging.error("Exception found. %s" % e)
        raise
Exemplo n.º 5
0
def push(flargs):
    vm_name, args = flargs
    kind = args.kind

    vm = VMachine(vm_conf_file, vm_name)

    if vm.is_powered_on():
        print "[!] %s is already powered on. please shutdown vm before." % vm_name
        return "%s not pushed %s" % (vm_name, kind)

    job_log(vm_name, "PUSH %s" % kind)

    vm.revert_last_snapshot()
    job_log(vm_name, "REVERTED")

    sleep(random.randint(30, 60))
    vm.startup()
    job_log(vm_name, "STARTUP")

    test_dir = "C:\\Users\\avtest\\Desktop\\AVTEST"

    buildbat = "push_%s_%s.bat" % (kind, args.server)

    filestocopy = [
        "./%s" % buildbat, "./push_all_minotauro.bat", "lib/build.py",
        "lib/logger.py", "lib/rcs_client.py", "conf/vmavtest.cfg",
        "assets/config_desktop.json", "assets/config_mobile.json",
        "assets/keyinject.exe", "assets/meltapp.exe", "assets/meltexploit.txt",
        "assets/meltexploit.docx", "assets/meltexploit.ppsx"
    ]

    result = "%s, ERROR GENERAL" % vm_name
    """
    if wait_for_startup(vm) is False:
        result = "ERROR wait for startup for %s" % vm_name
    else:
        copy_to_guest(vm, test_dir, filestocopy)
        job_log(vm_name, "ENVIRONMENT")
        result = "%s, pushed %s." % (vm_name, kind)
    """
    r = StrictRedis(socket_timeout=5 * 60)
    p = r.pubsub()
    p.subscribe(vm_name)

    try:
        for m in p.listen():
            try:
                print "DBG %s: %s" % (m['channel'], m['data'])
                if "STARTED" in m['data']:  # and started is False:
                    copy_to_guest(vm, test_dir, filestocopy)
                    job_log(vm_name, "ENVIRONMENT")
                    result = "%s, pushed %s." % (vm_name, kind)
                    return result
            except TypeError:
                pass
    except ConnectionError:
        print "DBG %s: not STARTED. Timeout occurred." % vm_name
        return push(flargs)

    return result
Exemplo n.º 6
0
def test_internet(flargs):
    vm_name = flargs[0]
    try:
        vm = VMachine(vm_conf_file, vm_name)
        vm.startup()
        test_dir = "C:\\Users\\avtest\\Desktop\\TEST_INTERNET"
        filestocopy = [
            "./test_internet.bat", "lib/agent.py", "lib/logger.py",
            "lib/rcs_client.py"
        ]
        if wait_for_startup(vm) is False:
            result = "ERROR wait for startup for %s" % vm_name
        else:
            vm.send_files("../AVAgent", test_dir, filestocopy)
            # executing bat synchronized
            vm.execute_cmd("%s\\test_internet.bat" % test_dir)
            sleep(random.randint(100, 200))
            #vmman.shutdown(vm)
            return "[%s] dispatched test internet" % vm_name
    except Exception as e:
        return "[%s] failed test internet. reason: %s" % (vm_name, e)
Exemplo n.º 7
0
def test_internet(flargs):
    vm_name = flargs[0]
    try:
        vm = VMachine(vm_conf_file, vm_name)
        vm.startup()
        test_dir = "C:\\Users\\avtest\\Desktop\\TEST_INTERNET"
        filestocopy = ["./test_internet.bat",
                       "lib/build.py",
                       "lib/logger.py",
                       "lib/rcs_client.py"]
        if wait_for_startup(vm) is False:
            result = "ERROR wait for startup for %s" % vm_name
        else:
            vm.send_files("../AVAgent", test_dir, filestocopy)
            # executing bat synchronized
            vm.execute_cmd("%s\\test_internet.bat" % test_dir)
            sleep(random.randint(100, 200))
            # vmman.shutdown(vm)
            return "[%s] dispatched test internet" % vm_name
    except Exception as e:
        return "[%s] failed test internet. reason: %s" % (vm_name, e)
Exemplo n.º 8
0
def push(flargs):
    vm_name, args = flargs
    kind = args.kind

    vm = VMachine(vm_conf_file, vm_name)

    if vm.is_powered_on():
        print "[!] %s is already powered on. please shutdown vm before." % vm_name
        return "%s not pushed %s" % (vm_name, kind)

    job_log(vm_name, "PUSH %s" % kind)

    vm.revert_last_snapshot()
    job_log(vm_name, "REVERTED")

    sleep(random.randint(30, 60))
    vm.startup()
    job_log(vm_name, "STARTUP")

    test_dir = "C:\\Users\\avtest\\Desktop\\AVTEST"

    buildbat = "push_%s_%s.bat" % (kind, args.server)

    filestocopy = ["./%s" % buildbat,
                   "./push_all_minotauro.bat",
                   "lib/build.py",
                   "lib/logger.py",
                   "lib/rcs_client.py",
                   "conf/vmavtest.cfg",
                   "assets/config_desktop.json",
                   "assets/config_mobile.json",
                   "assets/keyinject.exe",
                   "assets/meltapp.exe",
                   "assets/meltexploit.txt",
                   "assets/meltexploit.docx",
                   "assets/meltexploit.ppsx"]

    result = "%s, ERROR GENERAL" % vm_name
    """
    if wait_for_startup(vm) is False:
        result = "ERROR wait for startup for %s" % vm_name
    else:
        copy_to_guest(vm, test_dir, filestocopy)
        job_log(vm_name, "ENVIRONMENT")
        result = "%s, pushed %s." % (vm_name, kind)
    """
    r = StrictRedis(socket_timeout=5 * 60)
    p = r.pubsub()
    p.subscribe(vm_name)

    try:
        for m in p.listen():
            try:
                print "DBG %s: %s" % (m['channel'], m['data'])
                if "STARTED" in m['data']:  # and started is False:
                    copy_to_guest(vm, test_dir, filestocopy)
                    job_log(vm_name, "ENVIRONMENT")
                    result = "%s, pushed %s." % (vm_name, kind)
                    return result
            except TypeError:
                pass
    except ConnectionError:
        print "DBG %s: not STARTED. Timeout occurred." % vm_name
        return push(flargs)

    return result
Exemplo n.º 9
0
def update(flargs):
    vms = len(flargs[1].vms)
    try:
        vm_name = flargs[0]
        vm = VMachine(vm_conf_file, vm_name)
        job_log(vm_name, "UPDATE")

        vm.revert_last_snapshot()
        job_log(vm_name, "REVERTED")

        sleep(random.randint(60, 60 * vms))
        vm.startup()
        job_log(vm_name, "STARTED")

        #sleep(5 * 60)

        if wait_for_startup(vm) is False:
            job_log(vm_name, "NOT STARTED")
            return "ERROR wait for startup for %s" % vm_name

        if check_infection_status(vm) is not True:
            vm.shutdown()
            return "ERROR VM IS INFECTED!!!"

        out_img = "%s/screenshot_%s_update.png" % (logdir, vm_name)
        vmman.takeScreenshot(vm, out_img)

        print "[%s] waiting for Updates" % vm_name
        sleep(updatetime * 60)
        sleep(random.randint(10, 300))

        job_log(vm_name, "SHUTDOWN")
        r = vmman.shutdownUpgrade(vm)

        if r is False:
            job_log(vm_name, "NOT UPDATED")
            return "%s, ERROR: NOT Updated! no shutdown..." % vm_name
        else:

            # RESTART TIME
            while vm.is_powered_off() is False:
                sleep(60)

            job_log(vm_name, "POWERED OFF")

            vm.startup()

            if wait_for_startup(vm) is False:
                job_log(vm_name, "NOT RESTARTED")

            vm.shutdown()
            job_log(vm_name, "RESTARTED")

            vm.refresh_snapshot()
            job_log(vm_name, "UPDATED")
            return "%s, SUCCESS: Updated!" % vm_name
    except Exception as e:
        job_log(vm_name, "ERROR")
        print "DBG trace %s" % traceback.format_exc()
        return "%s, ERROR: not updated. Reason: %s" % (vm_name, e)
Exemplo n.º 10
0
def dispatch_kind(vm_name, kind, args, r_id=None, tries=0):
    #   PREPARE FILES

    global status, test_id

    print "DBG test_id is %s" % test_id

    delay = len(args.vms)

    test_dir_7 = "C:\\Users\\avtest\\Desktop\\AVTEST"
    #    test_dir_xp = "C:\\Documents and Settings\\avtest\\Desktop\\AVTEST"

    buildbat = "build_%s_%s.bat" % (kind, args.server)

    filestocopy = ["./%s" % buildbat,
                   "lib/build.py",
                   "lib/logger.py",
                   "lib/rcs_client.py",
                   "conf/vmavtest.cfg",
                   "assets/config_desktop.json",
                   "assets/config_mobile.json",
                   "assets/keyinject.exe",
                   "assets/meltapp.exe",
                   "assets/meltexploit.txt",
                   "assets/meltexploit.docx",
                   "assets/meltexploit.ppsx"]

    if kind == "exploit_web":
        filestocopy.append("assets/avtest.swf")
        filestocopy.append("assets/owned.docm")
        filestocopy.append("assets/PMIEFuck-WinWord.dll")

    if kind == "mobile" or kind == "silent":
        filestocopy.append("assets/codec")
        filestocopy.append("assets/codec_mod")
        filestocopy.append("assets/sqlite")
        filestocopy.append("assets/sqlite_mod")

    res = "%s, %s, ERROR GENERAL" % (vm_name, kind)

    vm = VMachine(vm_conf_file, vm_name)
    job_log(vm.name, "DISPATCH %s" % kind)

    #   STARTUP VM

    if tries <= 0:
        vm.revert_last_snapshot()
        job_log(vm.name, "REVERTED")
        sleep(random.randint(30, delay * 30))
    elif tries == 10:
        return "%s, %s, ERROR not started after 10 tries." % (vm_name, kind)
    else:
        vm.shutdown()
        while vm.is_powered_off() is False:
            sleep(5)

    vm.startup()
    job_log(vm.name, "STARTUP")

    #   OPEN CHANNEL

    if kind == "silent" or kind == "melt":
        max_minute = 45
    elif kind == "exploit":
        max_minute = 20
    elif kind == "mobile" or "exploit_" in kind:
        max_minute = 5

    r = StrictRedis(socket_timeout=max_minute * 60)
    p = r.pubsub()
    p.subscribe(vm.name)

    started = False
    results = []
    log = ""
    res = ""

    try:
        for m in p.listen():
            print "DBG %s: %s" % (m['channel'], m['data'])
            try:
                if started is False:
                    if "STARTED" in m['data']:  # and started is False:
                        started = True

                        # PREPARE ENVIRONMENT

                        if r_id is None:
                            result_id = add_record_result(
                                vm_name, kind, test_id, status, "STARTED")
                        else:
                            result_id = r_id
                        print "DBG %s added result with id %s" % (vm_name, result_id)

                        job_log(vm_name, "LOGGED")
                        test_dir = test_dir_7
                        copy_to_guest(vm, test_dir, filestocopy)
                        job_log(vm_name, "ENVIRONMENT")

                        # EXECUTE

                        vmman.executeCmd(
                            vm, "%s\\%s" % (test_dir, buildbat), interactive=True, bg=True)

                        # CHECK FOR ERROR IN EXECUTION

                        sleep(3)
                        out = vmman.listProcesses(vm)
                        found = False
                        tick = 0
                        script_name = "build_%s_minotauro.bat" % kind
                        print "DBG script to find is %s" % script_name

                        while tick <= 5:
                            if "python.exe" in out or script_name in out or "cmd.exe" in out:
                                found = True
                                print "DBG process found for %s!" % vm_name
                            if found == True:
                                break
                            print "DBG Python.EXE not found for %s. sleeping 5 secs (retry %d)" % (vm_name, tick)
                            print "DBG processes:\n%s" % out
                            tick += 1
                            sleep(5)

                        if found == False:
                            tries += 1
                            print "%s STARTED but not EXECUTED. Retry %d setup" % (vm_name, tries)
                            return dispatch_kind(vm_name, kind, args, result_id, tries)

                        job_log(vm_name, "EXECUTED %s" % kind)

                else:  # started is True

                    if "ENDED" not in m['data']:  # and started is True:

                        #   SAVING LOGS

                        if log is "":
                            log = str(m['data'])
                            save_logs(result_id, log)
                        else:
                            log += ", %s" % str(m['data'])
                            save_logs(result_id, log)

                        # SAVING CURRENT RESULT

                        if "+" in m['data']:
                            results.append(str(m['data']))
                            if "STARTED" not in res:  # or res is not "":
                                res += ", %s" % str(m['data'])
                            else:
                                res += "%s" % str(m['data'])
                            upd_record_result(
                                result_id, result=res.replace("+ ", "").strip())

                        if "FAILED SCOUT BUILD" in m['data'] or "FAILED SCOUT EXECUTE" in m['data']:

                            # SAVING SAMPLE

                            test_dir = "C:\\Users\\avtest\\Desktop\\AVTEST\\build"
                            platform = m['data'].split(" ")[-1].split("\\")[-2]
                            build_zip_src = "%s\\%s\\build.zip" % (
                                test_dir, platform)
                            build_zip_dst = "tmp/detected_%s.zip" % vm
                            print "DBG copying %s to %s" % (build_zip_src, build_zip_dst)
                            vm.get_file(build_zip_src, build_zip_dst)
                            #vmman.copyFileFromGuest(vm, build_zip_src, build_zip_dst)
                            print "DBG adding record sample"
                            a = add_record_sample(result_id, build_zip_dst)
                            if a:
                                print "sample SAVED on db"
                                #os.system('sudo rm -fr %s') % build_zip_dst
                            else:
                                print "sample NOT SAVED on db"
                    else:
                        print "DBG [%s] passing debug files txt from host" % vm.name
                        res_txt_dst = "%s/results_%s_%s.txt" % (
                            logdir, vm, kind)
                        res_txt_src = "C:\\Users\\avtest\\Desktop\\AVTEST\\results.txt"
                        vm.get_file(res_txt_src, res_txt_dst)

                        print "DBG results are %s" % results

                        job_log(vm_name, "SAVED %s" % kind)

                        #execute(vm, test_id, result_id, "%s\\%s" % (test_dir, buildbat), kind)

                        #timestamp = time.strftime("%Y%m%d_%H%M", time.gmtime())
                        if save_screenshot(vm, result_id) is True:
                            job_log(vm_name, "SCREENSHOT ok")

                        # suspend & refresh snapshot
                        # vm.suspend()
                        vm.shutdown()
                        job_log(vm_name, "SUSPENDED %s" % kind)

                        # return results # should be: vm_name, kind, results
                        return "%s, %s, %s" % (vm_name, kind, res.split(",")[-1].replace("+ ", ""))
            except TypeError:
                pass
    except ConnectionError:
        if started is False:
            tries += 1
            print "DBG %s: not STARTED. Timeout occurred." % vm
            return dispatch_kind(vm_name, kind, args, None, tries)
        else:
            tries += 1
            print "DBG %s: Timeout occurred during execution" % vm
            return dispatch_kind(vm_name, kind, args, result_id, tries)
Exemplo n.º 11
0
def revert(flargs):
    vm_name = flargs[0]
    job_log(vm_name, "REVERT")
    vm = VMachine(vm_conf_file, vm_name)
    vm.revert_last_snapshot()
    return "[*] %s reverted!" % vm_name
Exemplo n.º 12
0
def update(flargs):
    vms = len(flargs[1].vms)
    try:
        vm_name = flargs[0]
        vm = VMachine(vm_conf_file, vm_name)
        job_log(vm_name, "UPDATE")

        vm.revert_last_snapshot()
        job_log(vm_name, "REVERTED")

        sleep(random.randint(60, 60 * vms))
        vm.startup()
        job_log(vm_name, "STARTED")

        #sleep(5 * 60)

        if wait_for_startup(vm) is False:
            job_log(vm_name, "NOT STARTED")
            return "ERROR wait for startup for %s" % vm_name

        if check_infection_status(vm) is not True:
            vm.shutdown()
            return "ERROR VM IS INFECTED!!!"

        out_img = "%s/screenshot_%s_update.png" % (logdir, vm_name)
        vmman.takeScreenshot(vm, out_img)

        print "[%s] waiting for Updates" % vm_name
        sleep(updatetime * 60)
        #sleep(60*5)
        sleep(random.randint(10, 300))

        job_log(vm_name, "SHUTDOWN")
        r = vmman.shutdownUpgrade(vm)

        if r is False:
            job_log(vm_name, "NOT UPDATED")
            return "%s, ERROR: NOT Updated! no shutdown..." % vm_name
        else:

            # RESTART TIME
            while vm.is_powered_off() is False:
                sleep(60)

            job_log(vm_name, "POWERED OFF")

            vm.startup()

            if wait_for_startup(vm) is False:
                job_log(vm_name, "NOT RESTARTED")

            vm.shutdown()
            job_log(vm_name, "RESTARTED")

            vm.refresh_snapshot()
            job_log(vm_name, "UPDATED")
            return "%s, SUCCESS: Updated!" % vm_name
    except Exception as e:
        job_log(vm_name, "ERROR")
        print "DBG trace %s" % traceback.format_exc()
        return "%s, ERROR: not updated. Reason: %s" % (vm_name, e)
Exemplo n.º 13
0
def dispatch_kind(vm_name, kind, args, r_id=None, res=None, tries=0, status=0):
    #global status, test_id
    global test_id  #, res
    if res is None or status == 0:
        res = "%s, %s, ERROR GENERAL" % (vm_name, kind)

    #   PREPARE FILES

    print "DBG test_id is %s" % test_id

    delay = len(args.vms)

    buildbat = "build_%s_%s.bat" % (kind, args.server)

    filestocopy = [
        "./%s" % buildbat, "lib/agent.py", "lib/logger.py",
        "lib/rcs_client.py", "conf/vmavtest.cfg", "assets/config_desktop.json",
        "assets/config_mobile.json", "assets/keyinject.exe",
        "assets/meltapp.exe", "assets/meltexploit.txt",
        "assets/meltexploit.docx", "assets/meltexploit.ppsx"
    ]

    if kind == "exploit_web":
        filestocopy.append("assets/avtest.swf")
        filestocopy.append("assets/owned.docm")
        filestocopy.append("assets/PMIEFuck-WinWord.dll")

    if kind == "mobile" or kind == "silent":
        filestocopy.append("assets/codec")
        filestocopy.append("assets/codec_mod")
        filestocopy.append("assets/sqlite")
        filestocopy.append("assets/sqlite_mod")

    #   OPEN CHANNEL

    if kind == "silent" or kind == "melt":
        max_minute = 45
    elif kind == "exploit":
        max_minute = 20
    elif kind == "mobile" or "exploit_" in kind:
        max_minute = 10

    vm = VMachine(vm_conf_file, vm_name)
    job_log(vm.name, "DISPATCH %s" % kind)

    r = StrictRedis(socket_timeout=max_minute * 60)
    p = r.pubsub()
    p.subscribe(vm.name)

    #    results = []

    #   STARTUP VM
    if r_id is None:
        result_id = add_record_result(vm_name, kind, test_id, status,
                                      "NOT STARTED")
    else:
        result_id = r_id

    vm.revert_last_snapshot()
    job_log(vm.name, "REVERTED")
    sleep(random.randint(30, delay * 30))
    vm.startup()
    job_log(vm.name, "STARTUP")

    #    print "DBG starting Test Loop"
    try:
        for m in p.listen():
            #
            # 1. dispatch vm test case
            # 2. executing test
            # 3. report results
            #
            try:
                print "DBG message on chan %s: %s" % (m['channel'], m['data'])
                print "DBG status: %d, vm: %s, kind: %s, passing msg '%s'" % (
                    status, vm.name, kind, m['data'])
                status, res = dispatch_status(vm, kind, args.server, test_id,
                                              result_id, res, status,
                                              m['data'])

                if status == 4:
                    print "DBG STATUS 4"
                    print "DBG [%s] passing debug files txt from host" % vm.name

                    res_txt_dst = "%s/results_%s_%s.txt" % (logdir, vm, kind)
                    res_txt_src = "C:\\Users\\avtest\\Desktop\\AVTEST\\results.txt"
                    vm.get_file(res_txt_src, res_txt_dst)
                    job_log(vm.name, "SAVED %s" % kind)

                    if save_screenshot(vm, result_id) is True:
                        job_log(vm.name, "SCREENSHOT ok")

                    # suspend & refresh snapshot
                    vm.shutdown()
                    job_log(vm.name, "SUSPENDED %s" % kind)
                    return res
            except TypeError:
                pass
    except ConnectionError:
        #        """
        if status > 0:
            print "DBG ERROR: ConnectionError Exception trapped, restarting %s %s" % (
                vm_name, kind)
            status = 0
            tries += 1
            if tries < 2:
                return dispatch_kind(vm_name, kind, args, result_id, res,
                                     tries, status)
            else:
                upd_record_result(result_id, result="ERROR NOT EXECUTED")
                res = "%s, %s, ERROR NOT EXECUTED" % (vm.name, kind)
                return res
        else:
            print "DBG ERROR: ConnectionError test %s %s not started" % (
                vm_name, kind)
            upd_record_result(result_id, result="ERROR NOT EXECUTED")
            res = "%s, %s, ERROR NOT EXECUTED" % (vm.name, kind)
            return res
Exemplo n.º 14
0
def revert(flargs):
    vm_name = flargs[0]
    job_log(vm_name, "REVERT")
    vm = VMachine(vm_conf_file, vm_name)
    vm.revert_last_snapshot()
    return "[*] %s reverted!" % vm_name
Exemplo n.º 15
0
def dispatch_kind(vm_name, kind, args, r_id=None, res=None, tries=0, status=0):
    #global status, test_id
    global test_id #, res
    if res is None or status == 0:
        res = "%s, %s, ERROR GENERAL" % (vm_name, kind)

    #   PREPARE FILES

    print "DBG test_id is %s" % test_id

    delay = len(args.vms)

    buildbat = "build_%s_%s.bat" % (kind, args.server)

    filestocopy =[  "./%s" % buildbat,
                    "lib/agent.py",
                    "lib/logger.py",
                    "lib/rcs_client.py",
                    "conf/vmavtest.cfg",
                    "assets/config_desktop.json",
                    "assets/config_mobile.json",
                    "assets/keyinject.exe",
                    "assets/meltapp.exe",
                    "assets/meltexploit.txt",
                    "assets/meltexploit.docx",
                    "assets/meltexploit.ppsx"     ]

    if kind == "exploit_web":
        filestocopy.append("assets/avtest.swf")
        filestocopy.append("assets/owned.docm")
        filestocopy.append("assets/PMIEFuck-WinWord.dll")

    if kind == "mobile" or kind == "silent":
        filestocopy.append("assets/codec")
        filestocopy.append("assets/codec_mod")
        filestocopy.append("assets/sqlite")
        filestocopy.append("assets/sqlite_mod")

    #   OPEN CHANNEL

    if kind == "silent" or kind == "melt":
        max_minute = 45
    elif kind == "exploit":
        max_minute = 20
    elif kind == "mobile" or "exploit_" in kind:
        max_minute = 10

    vm = VMachine(vm_conf_file, vm_name)
    job_log(vm.name, "DISPATCH %s" % kind)

    r = StrictRedis(socket_timeout=max_minute * 60)
    p = r.pubsub()
    p.subscribe(vm.name)

#    results = []

    #   STARTUP VM
    if r_id is None:
        result_id = add_record_result(vm_name, kind, test_id, status, "NOT STARTED")
    else:
        result_id = r_id

    vm.revert_last_snapshot()
    job_log(vm.name, "REVERTED")
    sleep(random.randint(30, delay * 30))
    vm.startup()
    job_log(vm.name, "STARTUP")

#    print "DBG starting Test Loop"
    try:
        for m in p.listen():
            #
            # 1. dispatch vm test case
            # 2. executing test
            # 3. report results
            #
            try:
                print "DBG message on chan %s: %s"  % (m['channel'], m['data'])
                print "DBG status: %d, vm: %s, kind: %s, passing msg '%s'" % (status,vm.name,kind,m['data'])
                status, res = dispatch_status(vm, kind, args.server, test_id, result_id, res, status, m['data'])
                
                if status == 4:
                    print "DBG STATUS 4"
                    print "DBG [%s] passing debug files txt from host" % vm.name

                    res_txt_dst = "%s/results_%s_%s.txt" % (logdir, vm, kind)
                    res_txt_src = "C:\\Users\\avtest\\Desktop\\AVTEST\\results.txt"
                    vm.get_file(res_txt_src, res_txt_dst)
                    job_log(vm.name, "SAVED %s" % kind)
                    
                    if save_screenshot(vm, result_id) is True:
                        job_log(vm.name, "SCREENSHOT ok")
                        
                    # suspend & refresh snapshot
                    vm.shutdown()
                    job_log(vm.name, "SUSPENDED %s" % kind)
                    return res
            except TypeError:
                pass
    except ConnectionError:
#        """
        if status > 0:
            print "DBG ERROR: ConnectionError Exception trapped, restarting %s %s" % (vm_name, kind)
            status = 0
            tries += 1
            if tries < 2:
                return dispatch_kind(vm_name, kind, args, result_id, res, tries, status)
            else:
                upd_record_result(result_id, result="ERROR NOT EXECUTED")
                res = "%s, %s, ERROR NOT EXECUTED" % (vm.name, kind)
                return res
        else:
            print "DBG ERROR: ConnectionError test %s %s not started" % (vm_name, kind)
            upd_record_result(result_id, result="ERROR NOT EXECUTED")
            res = "%s, %s, ERROR NOT EXECUTED" % (vm.name, kind)
            return res
Exemplo n.º 16
0
def dispatch_kind(vm_name, kind, args, r_id=None, tries=0):
    #   PREPARE FILES

    global status, test_id

    print "DBG test_id is %s" % test_id

    delay = len(args.vms)

    test_dir_7 = "C:\\Users\\avtest\\Desktop\\AVTEST"
    #    test_dir_xp = "C:\\Documents and Settings\\avtest\\Desktop\\AVTEST"

    buildbat = "build_%s_%s.bat" % (kind, args.server)

    filestocopy = [
        "./%s" % buildbat, "lib/build.py", "lib/logger.py",
        "lib/rcs_client.py", "conf/vmavtest.cfg", "assets/config_desktop.json",
        "assets/config_mobile.json", "assets/keyinject.exe",
        "assets/meltapp.exe", "assets/meltexploit.txt",
        "assets/meltexploit.docx", "assets/meltexploit.ppsx"
    ]

    if kind == "exploit_web":
        filestocopy.append("assets/avtest.swf")
        filestocopy.append("assets/owned.docm")
        filestocopy.append("assets/PMIEFuck-WinWord.dll")

    if kind == "mobile" or kind == "silent":
        filestocopy.append("assets/codec")
        filestocopy.append("assets/codec_mod")
        filestocopy.append("assets/sqlite")
        filestocopy.append("assets/sqlite_mod")

    res = "%s, %s, ERROR GENERAL" % (vm_name, kind)

    vm = VMachine(vm_conf_file, vm_name)
    job_log(vm.name, "DISPATCH %s" % kind)

    #   STARTUP VM

    if tries <= 0:
        vm.revert_last_snapshot()
        job_log(vm.name, "REVERTED")
        sleep(random.randint(30, delay * 30))
    elif tries == 10:
        return "%s, %s, ERROR not started after 10 tries." % (vm_name, kind)
    else:
        vm.shutdown()
        while vm.is_powered_off() is False:
            sleep(5)

    vm.startup()
    job_log(vm.name, "STARTUP")

    #   OPEN CHANNEL

    if kind == "silent" or kind == "melt":
        max_minute = 45
    elif kind == "exploit":
        max_minute = 20
    elif kind == "mobile" or "exploit_" in kind:
        max_minute = 5

    r = StrictRedis(socket_timeout=max_minute * 60)
    p = r.pubsub()
    p.subscribe(vm.name)

    started = False
    results = []
    log = ""
    res = ""

    try:
        for m in p.listen():
            print "DBG %s: %s" % (m['channel'], m['data'])
            try:
                if started is False:
                    if "STARTED" in m['data']:  # and started is False:
                        started = True

                        # PREPARE ENVIRONMENT

                        if r_id is None:
                            result_id = add_record_result(
                                vm_name, kind, test_id, status, "STARTED")
                        else:
                            result_id = r_id
                        print "DBG %s added result with id %s" % (vm_name,
                                                                  result_id)

                        job_log(vm_name, "LOGGED")
                        test_dir = test_dir_7
                        copy_to_guest(vm, test_dir, filestocopy)
                        job_log(vm_name, "ENVIRONMENT")

                        # EXECUTE

                        vmman.executeCmd(vm,
                                         "%s\\%s" % (test_dir, buildbat),
                                         interactive=True,
                                         bg=True)

                        # CHECK FOR ERROR IN EXECUTION

                        sleep(3)
                        out = vmman.listProcesses(vm)
                        found = False
                        tick = 0
                        script_name = "build_%s_minotauro.bat" % kind
                        print "DBG script to find is %s" % script_name

                        while tick <= 5:
                            if "python.exe" in out or script_name in out or "cmd.exe" in out:
                                found = True
                                print "DBG process found for %s!" % vm_name
                            if found == True:
                                break
                            print "DBG Python.EXE not found for %s. sleeping 5 secs (retry %d)" % (
                                vm_name, tick)
                            print "DBG processes:\n%s" % out
                            tick += 1
                            sleep(5)

                        if found == False:
                            tries += 1
                            print "%s STARTED but not EXECUTED. Retry %d setup" % (
                                vm_name, tries)
                            return dispatch_kind(vm_name, kind, args,
                                                 result_id, tries)

                        job_log(vm_name, "EXECUTED %s" % kind)

                else:  # started is True

                    if "ENDED" not in m['data']:  # and started is True:

                        #   SAVING LOGS

                        if log is "":
                            log = str(m['data'])
                            save_logs(result_id, log)
                        else:
                            log += ", %s" % str(m['data'])
                            save_logs(result_id, log)

                        # SAVING CURRENT RESULT

                        if "+" in m['data']:
                            results.append(str(m['data']))
                            if "STARTED" not in res:  # or res is not "":
                                res += ", %s" % str(m['data'])
                            else:
                                res += "%s" % str(m['data'])
                            upd_record_result(result_id,
                                              result=res.replace("+ ",
                                                                 "").strip())

                        if "FAILED SCOUT BUILD" in m[
                                'data'] or "FAILED SCOUT EXECUTE" in m['data']:

                            # SAVING SAMPLE

                            test_dir = "C:\\Users\\avtest\\Desktop\\AVTEST\\build"
                            platform = m['data'].split(" ")[-1].split("\\")[-2]
                            build_zip_src = "%s\\%s\\build.zip" % (test_dir,
                                                                   platform)
                            build_zip_dst = "tmp/detected_%s.zip" % vm
                            print "DBG copying %s to %s" % (build_zip_src,
                                                            build_zip_dst)
                            vm.get_file(build_zip_src, build_zip_dst)
                            #vmman.copyFileFromGuest(vm, build_zip_src, build_zip_dst)
                            print "DBG adding record sample"
                            a = add_record_sample(result_id, build_zip_dst)
                            if a:
                                print "sample SAVED on db"
                                #os.system('sudo rm -fr %s') % build_zip_dst
                            else:
                                print "sample NOT SAVED on db"
                    else:
                        print "DBG [%s] passing debug files txt from host" % vm.name
                        res_txt_dst = "%s/results_%s_%s.txt" % (logdir, vm,
                                                                kind)
                        res_txt_src = "C:\\Users\\avtest\\Desktop\\AVTEST\\results.txt"
                        vm.get_file(res_txt_src, res_txt_dst)

                        print "DBG results are %s" % results

                        job_log(vm_name, "SAVED %s" % kind)

                        #execute(vm, test_id, result_id, "%s\\%s" % (test_dir, buildbat), kind)

                        #timestamp = time.strftime("%Y%m%d_%H%M", time.gmtime())
                        if save_screenshot(vm, result_id) is True:
                            job_log(vm_name, "SCREENSHOT ok")

                        # suspend & refresh snapshot
                        # vm.suspend()
                        vm.shutdown()
                        job_log(vm_name, "SUSPENDED %s" % kind)

                        # return results # should be: vm_name, kind, results
                        return "%s, %s, %s" % (vm_name, kind,
                                               res.split(",")[-1].replace(
                                                   "+ ", ""))
            except TypeError:
                pass
    except ConnectionError:
        if started is False:
            tries += 1
            print "DBG %s: not STARTED. Timeout occurred." % vm
            return dispatch_kind(vm_name, kind, args, None, tries)
        else:
            tries += 1
            print "DBG %s: Timeout occurred during execution" % vm
            return dispatch_kind(vm_name, kind, args, result_id, tries)