Пример #1
0
 def __init__(self):
     self.messages = Messages()
     self.monitor = Monitor()
     self.mouseController = MouseController(self)
     self.stateFactory = StateFactory()
     self.navigation = Navigation()
     self.popStateHandler = PopStateHandler()
     self.currentTask = None
     self.currentState = None
     self.handleStateChange()
Пример #2
0
 def __init__(self):
     # 初始化扫描功能
     # app  启动写在构造函数中
     self.judge_out_of_access = Judge_out_of_access()
     self.payloadlist_xss = Payloadlist_xss()
     self.check_sensitive_info = Check_sensitive_info()
     self.segment = Segment()
     self.monitor = Monitor()
     self.mysqlutil = mysqlutil()
     self.global_data = myData()
     self.proxyList = "test"
     self.requestdict = {}
     self.finishdict = {}
     self.origin_requestdict = {}  # 原始字典,包含id
Пример #3
0
def main():

    img = Monitor().takeScreenshot()
    width = img.size[0]
    data = list(img.getdata())
    target = {
        (483, 466): ((214, 97, 90), ),
        (547, 485): ((173, 186, 189), ),
        (561, 470): ((99, 69, 90), ),
        (615, 437): ((24, 28, 24), ),
    }
    minKey = min(key[1] * width + key[0] for key in target.keys())
    pattern = dict()
    for key, value in target.items():
        pattern[key[1] * width + key[0] - minKey] = value
    maxKey = max(pattern.keys())
    for i in range(len(data) - maxKey):
        if all(data[i + key] == value for key, value in pattern.items()):
            x = i % width
            y = i // width
            print(x, y)
Пример #4
0
def main():
    img = Monitor().takeScreenshot()
    filename = input("enter file name")
    img.save("./stateImages/" + filename + ".png")
Пример #5
0
from components.monitor import Monitor
from state.signals import Signals
from state.transitions import Transitions
from state.behaviors import Behaviors


def getnoxcolor(pos):
    x = pos[0] + 2
    y = pos[1] - 4
    color = data[y * width + x]
    print(f"({x}, {y}) : ({color},),")


target = StateKey.attendence
state = keyStateMap[target]()
screenshot = Monitor().takeScreenshot()
width = screenshot.size[0]
data = screenshot.getdata()
print("Signature:")
for pos in state.signature.keys():
    getnoxcolor(pos)
for signal in state.signal.keys():
    print(Signals(singal))
    for pos in signal:
        getnoxcolor(pos)
for transition, info in state.transition.items():
    print(Transitions(transition))
    pos = info[1]
    print(f"({pos[0]+2}, {pos[1]-4}, {pos[2]})")
for behavior, info in state.behavior.items():
    print(Behaviors(behavior))
Пример #6
0
class Vul_scan(object):
    def __init__(self):
        # 初始化扫描功能
        # app  启动写在构造函数中
        self.judge_out_of_access = Judge_out_of_access()
        self.payloadlist_xss = Payloadlist_xss()
        self.check_sensitive_info = Check_sensitive_info()
        self.segment = Segment()
        self.monitor = Monitor()
        self.mysqlutil = mysqlutil()
        self.global_data = myData()
        self.proxyList = "test"
        self.requestdict = {}
        self.finishdict = {}
        self.origin_requestdict = {}  # 原始字典,包含id

    def run_judge_out_of_access(self, requestdict):
        self.judge_out_of_access.run(requestdict)

    def run_payloadlist_xss(self, requestdict):
        self.payloadlist_xss.run(requestdict)

    def run_check_sensitive_info(self, requestdict):
        self.check_sensitive_info.run(requestdict)

    def run_segment(self, requestdict):
        self.segment.run(requestdict)

    def run_monitor(self, requestdict):
        self.monitor.run(requestdict)

    def work(self, requestdict):
        pool = Pool(processes=cpu_count() + 1)
        print("读取配置")  # requestdict中有id
        func = []

        out_of_access_dict = {}
        myresultlist = self.mysqlutil.get_config_from_projectid(requestdict)
        for line in myresultlist:
            temp_func = 'self.' + line["scan_type_run_name"]
            if temp_func not in func:
                func.append(eval(temp_func))
                if line["scan_type_name"] == "Judge_out_of_access":
                    out_of_access_dict = json.loads(line["content"])

        self.global_data.set_cookie_first(out_of_access_dict["token"])
        self.global_data.set_origin_userid(
            out_of_access_dict["越权uid配置"]["origin_userid"])
        self.global_data.set_userid_first(
            out_of_access_dict["越权uid配置"]["userid_first"])
        self.global_data.set_userid_second(
            out_of_access_dict["越权uid配置"]["userid_second"])
        # print("测试写入全局配置")
        # print(self.global_data.get_userid_first())
        # todo 初始化 全局变量
        self.requestdict = requestdict
        self.origin_requestdict = copy.deepcopy(self.requestdict)
        remove = requestdict.pop("id", "404")
        for fun in func:
            pool.apply_async(fun, args=(self.requestdict, ))

        pool.close()
        pool.join()

        self.finishdict["id"] = remove
        self.finishdict["status"] = "stop"
        self.mysqlutil.set_project_status(self.finishdict)
Пример #7
0
def run(args: Namespace) -> None:
    # give arguments
    directory = Path(args.dir)
    video = args.video
    name = args.name

    print(f'Replaying {directory} @ {video}')

    # default arguments
    port = 5000

    # find the logs
    files = [
        f for f in listdir(str(directory))
        if isfile(str(directory / f)) and "metrics" in f
    ]
    algo_to_log_dir = {f.split('_')[0]: str(directory / f) for f in files}
    algo_to_log = {}
    for algo, log_path in algo_to_log_dir.items():
        log = get_replay_log(algo, log_path)
        algo_to_log[algo] = log

    monitors = {}
    server = Server('experiment', port)
    for algo in algo_to_log.keys():
        # add post for each metrics
        monitors[algo] = Monitor(
            video=args.video,
            path=directory,
            name=algo,
            plot=True,
            request_port=port,
            port=port,
            training=False,
            log_to_file=False,
        )

    # attach plotter
    plots = attach_plot_components(
        video,
        server,
        trace=getattr(args, 'trace', None),
        no_plot=False,
    )
    server.add_post(
        '/complete',
        multiple_sync(OnComplete(directory, name, plots, video), on_complete))

    futures = []
    for algo, log in algo_to_log.items():
        futures.append(replay_async(algo, log, monitors[algo]))

    # run monitors
    def start():
        loop = asyncio.new_event_loop()
        asyncio.set_event_loop(loop)
        asyncio.ensure_future(complete_after(futures, port))
        loop.run_forever()

    multiprocessing.Process(target=start).start()
    server.run()
Пример #8
0
def run(args: Namespace) -> None:
    path = Path(args.path)
    name = args.name

    if getattr(args, 'headless', False):
        set_headless_plots()

    if not args.leader_port:
        shutil.rmtree(path, ignore_errors=True)
        os.system(f"mkdir -p {path}")

    if args.algo is not None:
        if args.dash is None:
            args.dash = []
        if args.algo in ABR_ALGORITHMS:
            args.dash.append(f'fe={args.algo}')

    server = Server('experiment', args.port)

    # Handle Abr requests
    if args.algo in PYTHON_ABR_ALGORITHMS:
        if args.algo in ['robustMpc', 'minerva', 'minervann']:
            from abr.robust_mpc import RobustMpc
            server.add_post('/decision', RobustMpc(args.video))
        elif args.algo == 'pensieve':
            from abr.pensieve import Pensieve
            server.add_post('/decision', Pensieve(args.video))

    traffic_generator = EmptyTrafficGenerator()
    if getattr(args, 'traffic', False):
        traffic_generator = TrafficGenerator(
            time_log_path=path,
            light=getattr(args, 'light', False),
            single_flow=getattr(args, 'single_flow', False),
        )

    # Add controller for launching the QUIC server and browser
    controller = Controller(
        name=name,
        site=args.site,
        cc=args.cc,
        abr=args.server_algo,
        network=Network(
            bandwidth=getattr(args, 'bandwidth', None),
            delay=getattr(args, 'delay', None),
            trace_path=getattr(args, 'trace', None),
            burst=getattr(args, 'burst', None),
            ports=[args.quic_port] + traffic_generator.ports,
        ),
        dash=args.dash,
        quic_port=args.quic_port,
        only_server=args.only_server,
        port=args.port,
        path=path,
        leader_port=args.leader_port,
        video=args.video,
        headless=getattr(args, 'headless', False),
    )

    # Handle controller communication and metrics
    request_port = args.leader_port if args.leader_port else args.port
    (server.add_extra_logger(controller).add_post(
        '/init', controller.on_init()).add_post(
            '/start',
            multiple_sync(
                controller.on_start(),
                traffic_generator.on_start(),
            )).add_post(
                '/metrics',
                Monitor(
                    video=args.video,
                    path=path,
                    name=name,
                    plot=args.plot or (args.leader_port != None),
                    request_port=request_port,
                    port=args.port,
                    training=args.training,
                )).add_post('/destroy', controller.on_destroy()))

    # Handle live plots
    plots = attach_plot_components(
        args.video,
        server,
        trace=getattr(args, 'trace', None),
        no_plot=not args.plot,
    )

    # Handle stream completion in the Browser
    server.add_post(
        '/complete',
        multiple_sync(
            OnComplete(path, name, plots, args.video),
            controller.on_complete(),
            traffic_generator.on_complete(),
        )).add_logger(name, str(Path(path) / f'sanic_{name}.log'))
    server.run()
Пример #9
0
class StateController:
    def __init__(self):
        self.messages = Messages()
        self.monitor = Monitor()
        self.mouseController = MouseController(self)
        self.stateFactory = StateFactory()
        self.navigation = Navigation()
        self.popStateHandler = PopStateHandler()
        self.currentTask = None
        self.currentState = None
        self.handleStateChange()

    def setCurrentTask(self, task):
        self.currentTask = task

    def handleStateChange(self):
        self.updateState()
        self.checkState()
        self.handlePopState()
        return self.currentState.key

    def updateState(self):
        screenshot = self.monitor.takeScreenshot()
        self.previousState = self.currentState
        self.currentState = self.stateFactory.makeStateByScreenshot(screenshot)
        log(str(self.currentState), Types.debug)

    def checkState(self):
        if (self.currentState.key == StateKey.gameClosed and self.previousState
                and self.previousState.key != StateKey.quitGame
                and self.previousState.key != StateKey.gameClosed):
            raise UnexpectedGameCloseError

    def handlePopState(self):
        if self.previousState and self.previousState.key != self.currentState.key:
            actions = self.popStateHandler.handlePopState(self.currentState)
            self.performActions(actions)

    def transit(self, key):
        if key not in self.currentState.transition:
            message = self.messages.invalidTransitionOrBehavior(key)
            log(message, Types.error)
            exit(1)
        resultStates, clickInfo = self.currentState.transition[key]
        self.mouseController.clickAndWaitUntilStateChange(
            clickInfo,
            self.currentState.key,
            resultStates,
        )

    def behave(self, key):
        if key not in self.currentState.behavior:
            message = self.messages.invalidTransitionOrBehavior(key)
            log(message, Types.error)
            exit(1)
        mouseInfo = self.currentState.behavior[key]
        if len(mouseInfo) == 3:
            self.mouseController.clickAndNoStageChange(mouseInfo)
        elif len(mouseInfo) == 2:
            self.mouseController.scrollAndNoStageChange(mouseInfo)
        self.handleStateChange()

    def performActions(self, keys):
        for key in keys:
            if isinstance(key, Behaviors):
                self.behave(key)
            elif isinstance(key, Transitions):
                self.transit(key)

    def direct(self, targetState):
        if self.currentState.key == targetState:
            return
        path = self.navigation.navigate(self.currentState.key, targetState)
        if not path:
            raise DirectFromUnknownStateError
        for transitionKey, nextStateKey in path:
            self.transit(transitionKey)
            if self.currentState.key != nextStateKey:
                self.direct(targetState)
                break
Пример #10
0
from os import path, getcwd
from io import BytesIO
from base64 import b64encode
from flask import Flask, Response, request, jsonify, current_app, send_from_directory
from jsonschema import validate, ValidationError
from simplejson import dumps
from server.schema import taskSchema
from task.taskFactory import TaskFactory
from task.keyTaskMap import keyTaskMap
from components.monitor import Monitor

app = Flask(__name__)
taskFactory = TaskFactory()
monitor =  Monitor()
taskQueue = None

def init(tq):
    global taskQueue
    taskQueue = tq

@app.route("/", methods = ["GET", ])
def serveIndex():
    root_dir = path.dirname(getcwd())
    folderPath = path.join(root_dir, "JRAuto", "frontend", "build")
    return send_from_directory(folderPath, "index.html")

@app.route("/static/<folder>/<file>", methods = ["GET", ])
def serveStatic(folder, file):
    root_dir = path.dirname(getcwd())
    folderPath = path.join(root_dir, "JRAuto", "frontend", "build", "static", folder)
    return send_from_directory(folderPath, file)