def async_fw_functions_list(request):
    # 从请求中取参数:文件 ID
    file_id = req_get_param(request, 'file_id')

    # 启动分析任务
    task = MyTask(_proc_fw_functions_list, (file_id, ))
    task_id = task.get_task_id()

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
Esempio n. 2
0
 def auto_cfg_task():
     cfg_analyze = CfgAnalyzeService('')
     extra_info = {
         'task_type': TaskType.CFG_ANALYZE,
         'task_name': '控制流分析',
         'task_desc': '进行控制流分析,保存 CFG graph 和函数列表。'
     }
     task = MyTask(cfg_analyze.analyze_cfg_proc_auto, extra_info=extra_info)
     # task = MyTask(cfg_analyze.analyze_cfg_proc_auto,)
     return task.get_task_id()
 def start_detect_task(file_id):
     detect = OverflowDetectService(file_id)
     extra_info = {
         'file_id': file_id,
         'task_type': TaskType.DETECT_OVERFLOW,
         'task_name': '检测漏洞溢出',
         'task_desc': '检测漏洞溢出,保存 缓冲区 整数 命令注入溢出输入数据。'
     }
     task = MyTask(detect.detect_overflow_proc, (file_id, ),
                   extra_info=extra_info)
     return task.get_task_id()
Esempio n. 4
0
 def start_cfg_task(file_id):
     cfg_analyze = CfgAnalyzeService(file_id)
     extra_info = {
         'file_id': file_id,
         'task_type': TaskType.CFG_ANALYZE,
         'task_name': '控制流分析',
         'task_desc': '进行控制流分析,保存 CFG graph 和函数列表。'
     }
     task = MyTask(cfg_analyze.analyze_cfg_proc, (file_id, ),
                   extra_info=extra_info)
     return task.get_task_id()
Esempio n. 5
0
 def start_remove_packs_task(pack_id):
     pack_proc_serv = PackProcessService()
     extra_info = {
         'pack_id': pack_id,
         'task_type': TaskType.REMOVE_FW_PACKS,
         'task_name': '清空固件包',
         'task_desc': '清空指定固件包(ID: {})下的所有文件项,并删除其文件内容。'.format(pack_id)
     }
     task = MyTask(pack_proc_serv.remove_pack_proc, (pack_id, ),
                   extra_info=extra_info)
     return task.get_task_id()
Esempio n. 6
0
def async_fwdownload(request):

    # 获取下载URL
    downloadurl = req_get_param(request, 'url')
    print(downloadurl)

    # 启动下载任务
    task = MyTask(_proc_func_download, (downloadurl, settings.FW_PATH, ))
    task_id = task.get_task_id()

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
    def start_exec_bin_cfg_analyze_task(pack_id, image_file_name):
        pack_files = PackFiles(pack_id)
        extra_info = {
            'pack_id': pack_id,
            'task_type': TaskType.CFG_ANALYZE,
            'task_name': '控制流分析',
            'task_desc': '进行控制流分析,保存 CFG graph 和函数列表。'
        }
        task = MyTask(pack_files.cfg_all_exec_bin_files, (pack_id, ),
                      extra_info=extra_info)

        MyTask.save_exec_info_name(task.get_task_id(), image_file_name)
        return task.get_task_id()
def async_function_call_graph(request):
    # 从请求中取参数:文件 ID,函数地址
    file_id, func_addr = _req_params(request)

    # 启动分析任务
    task = MyTask(_proc_func_call_graph, (
        file_id,
        func_addr,
    ))
    task_id = task.get_task_id()

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
    def start_fs_image_extract_task(pack_id):
        fs_image = FsImage(pack_id)
        # if fs_image.image is None:
        #     return

        extra_info = {
            'pack_id': pack_id,
            'task_type': TaskType.FS_EXTRACT,
            'task_name': '文件系统解析',
            'task_desc': '从文件系统镜像包中提取文件,判断文件类型,并保存文件内容到数据库中。'
        }
        task = MyTask(fs_image.fs_image_extract, (pack_id, ),
                      extra_info=extra_info)
        return task.get_task_id()
Esempio n. 10
0
def async_funcs_fetch(request):
    # 获取固件ID
    firmware_id = req_get_param(request, 'firmware_id')

    # 启动任务 存储桶读取固件内容
    task = MyTask(_proc_fetch, (firmware_id, settings.FW_PATH))
    task_id = task.get_task_id()

    # 保存操作日志
    LogRecords.save({'task_id': task_id, 'file_id': firmware_id}, category='fetch', action='下载固件',
                    desc='存储桶读取固件保存并进行文件抽取')

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
Esempio n. 11
0
def async_com_download(request):
    com_download_url = ReqParams.one(request, 'url', protocol='POST')
    # 启动下载任务
    extra_info = {'task_type': TaskType.REMOTE_DOWNLOAD,
                  'task_name': '组件源码下载',
                  'task_desc': '下载组件源码入库存储桶'}
    task = MyTask(_proc_component_tasks, (com_download_url, MyPath.component()), extra_info=extra_info)
    task_id = task.get_task_id()

    # 保存操作日志
    LogRecords.save({'task_id': task_id}, category='download', action='组件源码下载',
                    desc='下载组件源码入库存储桶')

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
    def start_exec_bin_verify_task(pack_id, image_file_name=None):
        pack_files = PackFiles(pack_id)
        extra_info = {
            'pack_id': pack_id,
            'task_type': TaskType.VERIFY_EXEC_BIN,
            'task_name': '验证二进制文件',
            'task_desc': '验证固件包中所有的可执行二进制文件,并检查CPU架构。'
        }
        task = MyTask(pack_files.verify_all_exec_bin_files, (
            pack_id,
            image_file_name,
        ),
                      extra_info=extra_info)

        # 任务关联文件名
        MyTask.save_exec_info_name(task.get_task_id(), image_file_name)
        return task.get_task_id()
Esempio n. 13
0
def async_fwdownload(request):
    # 获取下载URL
    fw_download_url, ftp_user, ftp_password = ReqParams.many(request, ['url', 'user', 'password'], protocol='POST')

    # 启动下载任务
    extra_info = {'task_type': TaskType.REMOTE_DOWNLOAD,
                  'task_name': '固件下载',
                  'task_desc': '下载固件入库存储桶并进行文件抽取操作'}
    task = MyTask(_proc_tasks, (fw_download_url, settings.FW_PATH, ftp_user, ftp_password), extra_info=extra_info)
    task_id = task.get_task_id()

    # 保存操作日志
    LogRecords.save({'task_id': task_id}, category='download', action='固件下载',
                    desc='下载固件入库存储桶并进行文件抽取操作')

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
def start_check_component_task(pack_id):

    # 检查组件关联是否运行,运行中则跳过
    isrun = MyRedis.get('running_check_com_flag')
    if isrun:
        return None

    # # 检查组件关联
    # check_component(pack_id, FileType.EXEC_FILE)
    # 修改为任务处理方式进行检查组件关联 关联组件标记,相似度匹配计算,标记漏洞(version/edbid)
    # 启动编译任务
    extra_info = {
        'task_type': TaskType.COMPONENT_CHECK,
        'task_name': '组件文件漏洞自动关联',
        'task_desc': '检查组件关联,相似度匹配计算,标记漏洞(version/edbid)'
    }

    task = MyTask(check_component, (pack_id, ), extra_info=extra_info)
    task_id = task.get_task_id()
    return task_id
def test(request):
    value = ReqParams.one(request, 'value', protocol='GET')
    # 启动下载任务
    extra_info = {
        'task_type': TaskType.REMOTE_DOWNLOAD,
        'task_name': 'test组件源码下载',
        'task_desc': 'test下载组件源码入库存储桶'
    }
    task = MyTask(_proc_inverted_tasks, (value, MyPath.component()),
                  extra_info=extra_info)
    task_id = task.get_task_id()

    # 保存操作日志
    LogRecords.save({'task_id': task_id},
                    category='download',
                    action='test组件源码下载',
                    desc='test下载组件源码入库存储桶')

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
def inverted(request):
    # 获取参数
    file_id = req_get_param(request, 'file_id')

    # 启动编译任务
    extra_info = {
        'task_type': TaskType.INVERTED,
        'task_name': '倒排索引',
        'task_desc': '建立倒排索引'
    }
    task = MyTask(_proc_inverted_tasks, (file_id, ), extra_info=extra_info)
    task_id = task.get_task_id()

    # 保存操作日志
    LogRecords.save({'task_id': task_id},
                    category='compile',
                    action='倒排索引',
                    desc='建立倒排索引')

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
def compile(request):
    # 获取编译参数
    arch, pack_id = ReqParams.many(request, ['arch', 'pack_id'])

    # 启动编译任务
    extra_info = {
        'pack_id': pack_id,
        'task_type': TaskType.COMPONENT_COMPILE,
        'task_name': '组件编译',
        'task_desc': '组件编译及入库操作'
    }
    task = MyTask(_proc_compile_tasks, (arch, pack_id), extra_info=extra_info)
    task_id = task.get_task_id()

    # 保存操作日志
    LogRecords.save({'task_id': task_id},
                    category='compile',
                    action='组件编译',
                    desc='组件编译及入库操作')

    # 返回响应:任务初始化的信息
    return sys_app_ok_p(MyTask.fetch_exec_info(task_id))
Esempio n. 18
0
def test_check_file(reuqest):
    task = MyTask(_check_file, )
    task_id = task.get_task_id()
    return sys_app_ok_p('ok')