def startVm(ctx, mach, type, f, sha): """ Start a virtual machien and run the analysis process """ mgr = ctx['mgr'] vb = ctx['vb'] session = mgr.perf = ctx['perf'] session = mgr.getSessionObject(vb) uuid = mach.id from datetime import datetime start_time = datetime.now() end_time = datetime.now() try: snap = mach.currentSnapshot if snap.name != "testing": raise Exception progress = vb.openRemoteSession(session, uuid, type, "") with open('/home/zozanh/sharedmal/target.exe', 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) clean_log() if progressBar(ctx, progress, 100) and int(progress.resultCode) == 0: execInGuest(ctx, session, ["C:\\WINDOWS\\system32\\PrototypeI.exe"], None, "zozanh", "12345", -1) pauseGuest(ctx, session) end_time = datetime.now() time.sleep(1) getlog( { "SHA1": sha, "End Time": end_time, "Start Time": start_time, "File Name": f.name, "File Size": f.size }, sha) do_job(sha) file = open( "/home/zozanh/env/djcode/thesis/static/data/" + sha + '/fin.log', "wr+") file.close() restoreSnapshot(ctx, session, uuid, "testing") time.sleep(1) session.close() else: pass except Exception: return False return True
def startVm(ctx, mach, type, f, sha): mgr = ctx['mgr'] vb = ctx['vb'] session = mgr.perf = ctx['perf'] session = mgr.getSessionObject(vb) uuid = mach.id from datetime import datetime start_time = datetime.now() end_time = datetime.now() try: snap = mach.currentSnapshot if snap.name != "testing": raise Exception progress = vb.openRemoteSession(session, uuid, type, "") with open('/home/zozanh/sharedmal/target.exe', 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) clean_log() if progressBar(ctx, progress, 100) and int(progress.resultCode) == 0: execInGuest(ctx, session, ["C:\\WINDOWS\\system32\\PrototypeI.exe"], None, "zozanh", "12345", -1) pauseGuest(ctx, session) end_time = datetime.now() time.sleep(1) getlog({"SHA1": sha, "End Time": end_time, "Start Time": start_time, "File Name": f.name, "File Size": f.size}, sha) do_job(sha) file = open("/home/zozanh/env/djcode/thesis/static/data/" + sha + '/fin.log', "wr+") file.close() restoreSnapshot(ctx, session, uuid, "testing") time.sleep(1) # we ignore exceptions to allow starting VM even if # perf collector cannot be started # if perf: # try: # perf.setup(['*'], [mach], 10, 15) # except Exception, e: # printErr(ctx, e) # if g_verbose: # traceback.print_exc() # if session not opened, close doesn't make sense session.close() else: pass # reportError(ctx, progress) except Exception: return False return True
def startVm(ctx, mach, type, f, sha): """ Start a virtual machien and run the analysis process """ mgr = ctx['mgr'] vb = ctx['vb'] session = mgr.perf = ctx['perf'] session = mgr.getSessionObject(vb) uuid = mach.id from datetime import datetime start_time = datetime.now() end_time = datetime.now() try: snap = mach.currentSnapshot if snap.name != "testing": raise Exception progress = vb.openRemoteSession(session, uuid, type, "") with open('/home/zozanh/sharedmal/target.exe', 'wb+') as destination: for chunk in f.chunks(): destination.write(chunk) clean_log() if progressBar(ctx, progress, 100) and int(progress.resultCode) == 0: execInGuest(ctx, session, ["C:\\WINDOWS\\system32\\PrototypeI.exe"], None, "zozanh", "12345", -1) pauseGuest(ctx, session) end_time = datetime.now() time.sleep(1) getlog({"SHA1": sha, "End Time": end_time, "Start Time": start_time, "File Name": f.name, "File Size": f.size}, sha) do_job(sha) file = open("/home/zozanh/env/djcode/thesis/static/data/" + sha + '/fin.log', "wr+") file.close() restoreSnapshot(ctx, session, uuid, "testing") time.sleep(1) session.close() else: pass except Exception: return False return True
def __init__(self): self.__info={} self.path=os.path.join('.',"pic") if not os.path.exists(self.path): os.mkdir(self.path) self.__info['logfile']="err.log" self.__info['loglevel']='info' self.logger = getlog(self.__info) self.db=dbhand(self.logger) dbfile='mm131.db' self.db.dbconnect(dbfile) self.db.init() pass
# -*- coding: utf-8 -*- import os import json import codecs import re from logger import getlog log = getlog() from appdata import Shortcut, ApplicationConfig from constants import DIR_CONTENT_GENERATED, VALID_OS_NAMES, OS_WINDOWS, OS_MAC class IntermediateShortcutData(object): """Intermediate shortcut data format for applications. This can be used as output from various shortcut document parsers and can be merged together at the end. A serialized IntermediateShortcutData document can then be hand-edited to ensure the data going exported to the web application is clean and clear. The data format for intermediate data (JSON) is as follows: { "name": "Application Name", "version": "v1.2.3", "default_context": "Global Context", "os": ["windows", "mac"], "contexts": { "CONTEXT NAME": { "SHORTCUT NAME": ["WINDOWS SHORTCUT KEYS", "MAC SHORTCUT KEYS"],
# -*- coding: utf-8 -*- import os.path from selenium import webdriver from logger import getlog logger = getlog("browser") def open_browser(browser, url): dir = os.path.split(os.path.realpath(__file__))[0] driver_path = dir + '/driver' logger.info("You had select %s browser." % browser) logger.info("The test server url is: %s" % url) if browser == "Firefox": # 判断浏览器类型 driver = webdriver.Firefox() logger.info("Starting firefox browser.") elif browser == "Chrome": driver = webdriver.Chrome() logger.info("Starting Chrome browser.") elif browser == "IE": driver = webdriver.Ie() logger.info("Starting IE browser.") driver.get(url) # 打开浏览器,输入URL logger.info("Open url: %s" % url) driver.maximize_window() # 窗口最大化 logger.info("Maximize the current window.") driver.implicitly_wait(10) # 隐式等待10秒 logger.info("Set implicitly wait 10 seconds.") return driver
# -*- coding: utf-8 -*- # makes all strings here unicode by default (u'') from __future__ import unicode_literals from logger import getlog log = getlog() class DataContainer(object): VALID_NAME_LOOKUP = { u'§' : ['SECTION'], u'!' : ['EXCLAMATION'], u'@' : ['AT'], u'£' : ['POUND'], u'$' : ['DOLLAR'], u'%' : ['PERCENT'], u'^' : ['CARET'], u'&' : ['AMPERSAND'], u'(' : ['LEFT_PARENTHESIS'], u')' : ['RIGHT_PARENTHESIS'], u'_' : ['UNDERSCORE'], u'[' : ['LEFT_BRACKET'], u']' : ['RIGHT_BRACKET'], u'{' : ['LEFT_BRACE'], u'}' : ['RIGHT_BRACE'], u';' : ['SEMICOLON'], u':' : ['COLON'], u'\'': ['SINGLE_QUOTE'], u'‘' : ['SINGLE_QUOTE'], u'"' : ['DOUBLE_QUOTE'], u'\\': ['BACKSLASH'],
# -*- coding: utf-8 -*- from login import * from browser import * import time from logger import getlog import argparse # create a logger logger = getlog("auto_click") # 等待页面加载 def loading(selector, driver): print(find_element(selector, driver).text) try: WebDriverWait(driver, 10).until( ec.visibility_of_element_located(locator(selector, driver))) logger.info("The loading begins") WebDriverWait(driver, 10).until( ec.invisibility_of_element_located(locator(selector, driver))) except Exception as e: logger.error("Failed to wait the element with %s" % e) # 强制等待 def sleep(seconds): time.sleep(seconds) logger.info("Sleep for %d seconds" % seconds) def auto_click(browser, url, username_selector, password_selector,
# -*- coding:utf-8 -*- import time from selenium.common.exceptions import NoSuchElementException import os.path from logger import getlog from selenium import webdriver from selenium.webdriver.common.by import By from selenium.common import exceptions as ex from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as ec # create a logger logger = getlog("login") # 定位元素方法 def find_element(selector, driver): """ 这个地方为什么是根据=>来切割字符串,请看页面里定位元素的方法 submit_btn = "id=>su" login_lnk = "xpath => //*[@id='u1']/a[7]" # 百度首页登录链接定位 如果采用等号,结果很多xpath表达式中包含一个=,这样会造成切割不准确,影响元素定位 :param selector: :return: element """ element = '' if '=>' not in selector: return driver.find_element_by_id(selector) selector_by = selector.split('=>')[0] selector_value = selector.split('=>')[1]