示例#1
0
 def _schedule_re_analysis_task(self, uid, analysis_task, re_do):
     fw = convert_analysis_task_to_fw_obj(analysis_task)
     if re_do:
         with ConnectTo(AdminDbInterface, self._config) as sc:
             sc.delete_firmware(uid, delete_root_file=False)
     with ConnectTo(InterComFrontEndBinding, self._config) as sc:
         sc.add_re_analyze_task(fw)
示例#2
0
    def _app_upload(self):
        error = {}
        if request.method == 'POST':
            analysis_task = create_analysis_task(request)
            error = check_for_errors(analysis_task)
            if not error:
                fw = convert_analysis_task_to_fw_obj(analysis_task)
                with ConnectTo(InterComFrontEndBinding, self._config) as sc:
                    sc.add_analysis_task(fw)
                return render_template('upload/upload_successful.html',
                                       uid=analysis_task['uid'])

        with ConnectTo(FrontEndDbInterface, self._config) as sc:
            device_class_list = sc.get_device_class_list()
            vendor_list = sc.get_vendor_list()
            device_name_dict = sc.get_device_name_dict()
        with ConnectTo(InterComFrontEndBinding, self._config) as sc:
            analysis_plugins = sc.get_available_analysis_plugins()
        analysis_presets = [key for key in self._config['default_plugins']]
        return render_template('upload/upload.html',
                               device_classes=device_class_list,
                               vendors=vendor_list,
                               error=error,
                               analysis_presets=analysis_presets,
                               device_names=json.dumps(device_name_dict,
                                                       sort_keys=True),
                               analysis_plugin_dict=analysis_plugins)
示例#3
0
 def post_upload(self):
     analysis_task = create_analysis_task(request, self._config)
     error = check_for_errors(analysis_task)
     if error:
         return self.get_upload(error=error)
     fw = convert_analysis_task_to_fw_obj(analysis_task)
     with ConnectTo(InterComFrontEndBinding, self._config) as sc:
         sc.add_analysis_task(fw)
     return render_template('upload/upload_successful.html', uid=analysis_task['uid'])
示例#4
0
    def _process_data(self, data):
        try:
            data['binary'] = standard_b64decode(data['binary'])
        except binascii.Error:
            return dict(
                error_message='Could not parse binary (must be valid base64!)')
        firmware_object = convert_analysis_task_to_fw_obj(data)
        with ConnectTo(InterComFrontEndBinding, self.config) as intercom:
            intercom.add_analysis_task(firmware_object)
        data.pop('binary')

        return dict(uid=firmware_object.uid)
示例#5
0
 def _schedule_re_analysis_task(self, uid, analysis_task, re_do, force_reanalysis=False):
     if re_do:
         base_fw = None
         with ConnectTo(AdminDbInterface, self._config) as sc:
             sc.delete_firmware(uid, delete_root_file=False)
     else:
         with ConnectTo(FrontEndDbInterface, self._config) as db:
             base_fw = db.get_firmware(uid)
             base_fw.force_update = force_reanalysis
     fw = convert_analysis_task_to_fw_obj(analysis_task, base_fw=base_fw)
     with ConnectTo(InterComFrontEndBinding, self._config) as sc:
         sc.add_re_analyze_task(fw, unpack=re_do)
示例#6
0
    def _process_data(self, data):
        for field in ['device_name', 'device_class', 'device_part', 'file_name', 'version', 'vendor', 'release_date',
                      'requested_analysis_systems', 'binary']:
            if field not in data.keys():
                return dict(error_message='{} not found'.format(field))

        data['binary'] = standard_b64decode(data['binary'])
        firmware_object = convert_analysis_task_to_fw_obj(data)
        with ConnectTo(InterComFrontEndBinding, self.config) as intercom:
            intercom.add_analysis_task(firmware_object)
        data.pop('binary')

        return dict(uid=firmware_object.get_uid())
 def test_convert_analysis_task_to_firmware_object(self):
     fw_obj = convert_analysis_task_to_fw_obj(TEST_TASK)
     self.assertIsInstance(fw_obj, Firmware, 'return type not correct')
     self.assertEqual(fw_obj.uid, '2e99758548972a8e8822ad47fa1017ff72f06f3ff6a016851f45c398732bc50c_14', 'uid not correct -> binary not correct')
     self.assertEqual(fw_obj.file_name, 'test_file_name')
     self.assertEqual(fw_obj.device_name, 'test device')
     self.assertEqual(fw_obj.part, 'kernel')
     self.assertEqual(fw_obj.device_class, 'test class')
     self.assertEqual(fw_obj.version, '1.0')
     self.assertEqual(fw_obj.vendor, 'test vendor')
     self.assertEqual(fw_obj.release_date, '01.01.1970')
     self.assertEqual(len(fw_obj.scheduled_analysis), 2)
     self.assertIn('dummy', fw_obj.scheduled_analysis)
     self.assertIsInstance(fw_obj.tags, dict, 'tag type not correct')
示例#8
0
 def test_convert_fw_analysis_task_both_directions(self):
     fw = convert_analysis_task_to_fw_obj(TEST_TASK)
     result = convert_fw_obj_to_analysis_task(fw)
     self.assertEqual(result, TEST_TASK)