예제 #1
0
    def is_valid(dev_name):
        util.notify('Validating device name...')

        drv_handle = util.create_drv_handle(dev_name)

        if drv_handle != -1:
            ctypes.windll.kernel32.CloseHandle(drv_handle)
            return True
        else:
            return False
예제 #2
0
def get_drv_handle(dev_name):
    global drv_handle_cache

    if dev_name in drv_handle_cache.keys():
        return drv_handle_cache[dev_name]
    else:
        drv_handle = util.create_drv_handle(dev_name)
        if drv_handle != -1:
            drv_handle_cache[dev_name] = drv_handle

        return drv_handle
예제 #3
0
def monitor_dos(pid):
    global drv_handle_cache

    while True:
        dev_name = random.choice(drv_handle_cache.keys())
        drv_handle = util.create_drv_handle(dev_name)
        if drv_handle == win32file.INVALID_HANDLE_VALUE:
            util.notify('Got DoS')
            os.kill(pid, signal.SIGTERM)
        else:
            ctypes.windll.kernel32.CloseHandle(drv_handle)
예제 #4
0
def reproduce(crash_name):
    crash_info = load_crash_info(crash_name)
    drv_handle = util.create_drv_handle(crash_info['dev_name'])

    ret_val = util.do_fuzz(drv_handle, crash_info)
    success = ret_val == 0

    if success:
        util.handle_err(None)
    else:
        print('Error: Failed to reproduce crash.')

    ctypes.windll.kernel32.CloseHandle(drv_handle)

    return success