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))
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()
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()
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()
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()
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))
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()
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))
def test_check_file(reuqest): task = MyTask(_check_file, ) task_id = task.get_task_id() return sys_app_ok_p('ok')