Esempio n. 1
0
    def test_build_options(self):
        task = Task()
        id = task.add_path(__file__, options={"free": "yes"})
        task.load_from_db(id)
        a = abstracts.AnalysisManager(
            FakeMachine(), mock.MagicMock(), mock.MagicMock()
        )
        a.set_task(task)

        expected = {
            "clock": task.clock,
            "enforce_timeout": False,
            "id": task.id,
            "package": "",
            "target": None,
            "terminate_processes": False,
            "ip": "192.168.56.1",
            "port": 4242,
            "timeout": 120,
            "options": "free=yes"
        }

        assert a.options == {}
        a.build_options()
        assert a.options == expected
        a.build_options({
            "file_name": "doge.py",
            "options": {"doges": "many"},
            "category": "file"
        })
        assert a.options["options"] == "doges=many,free=yes"
        assert a.options["file_name"] == "doge.py"
        assert a.options["category"] == "file"
Esempio n. 2
0
    def test_stop_and_wait_dump_mem(self, msas, mrs):
        self.create_cwd()
        task = Task()
        id = task.add_path(__file__, memory=True)
        task.load_from_db(id)

        # Mock resultserver obj so we can check if del_task was called
        resulserver_obj = mock.MagicMock()
        mrs.return_value = resulserver_obj
        manager = self.get_manager(task)
        manager.init(self.db)
        manager.machinery = mock.MagicMock()
        manager.route = mock.MagicMock()
        manager.aux = mock.MagicMock()

        manager.stop_and_wait()

        # Check if all required methods were called successfully
        msas.assert_called_once_with("stopping")
        manager.aux.stop.assert_called_once()
        manager.machinery.dump_memory.assert_called_once_with(
            "machine1", cwd("storage", "analyses", str(task.id), "memory.dmp"))
        manager.machinery.stop.assert_called_once_with("machine1")

        resulserver_obj.del_task.assert_called_once_with(
            task.db_task, manager.machine)
        manager.route.unroute_network.assert_called_once()
Esempio n. 3
0
 def test_set_target(self):
     self.create_cwd()
     task = Task()
     id = task.add_path(__file__)
     task.load_from_db(id)
     manager = self.get_manager()
     manager.set_target(task.targets)
     assert manager.target == task.targets[0]
Esempio n. 4
0
 def test_set_target(self):
     task = Task()
     id = task.add_path(__file__)
     task.load_from_db(id)
     a = abstracts.AnalysisManager(
         FakeMachine(), mock.MagicMock(), mock.MagicMock()
     )
     with pytest.raises(NotImplementedError):
         a.set_target(task.targets)
Esempio n. 5
0
 def test_set_target_empty(self):
     self.create_cwd()
     task = Task()
     id = task.add_path(__file__)
     task.load_from_db(id)
     task.task_dict["targets"] = []
     manager = self.get_manager()
     manager.set_target(task.targets)
     assert isinstance(manager.target, Target)
Esempio n. 6
0
 def test_process_task_range_multi_db(self, mt, mp):
     task1, task2 = Task(), Task()
     id1, id2 = task1.add_path(__file__), task2.add_path(__file__)
     process_task_range("%s,%s" % (id1, id2))
     assert mp.call_count == 2
     mt.assert_has_calls([
         mock.call(),
         mock.call().set_task(mock.ANY),
         mock.call(),
         mock.call().set_task(mock.ANY)
     ])
Esempio n. 7
0
    def test_set_task(self):
        self.create_cwd()
        task = Task()
        id = task.add_path(__file__)
        task.load_from_db(id)
        manager = self.get_manager()
        manager.set_task(task)

        assert manager.task == task
        assert manager.analysis is not None
        assert manager.name == "task_%s_Regular" % task.id
Esempio n. 8
0
    def test_set_task(self):
        task = Task()
        id = task.add_path(__file__)
        task.load_from_db(id)
        a = abstracts.AnalysisManager(
            FakeMachine(), mock.MagicMock(), mock.MagicMock()
        )

        a.set_task(task)

        assert a.task == task
        assert isinstance(a.analysis, Analysis)
        assert a.name == "task_%s_AnalysisManager" % task.id
Esempio n. 9
0
    def get_manager(self, task=None):
        if task is None:
            task = Task()
            fd, fpath = tempfile.mkstemp()
            os.write(fd, b"\x00" * 32)
            os.close(fd)
            newname = os.path.join(os.path.dirname(fpath), "testanalysis.exe")
            os.rename(fpath, newname)
            id = task.add_path(newname)
            task.load_from_db(id)

        manager = Regular(FakeMachine(), mock.MagicMock(), mock.MagicMock())
        manager.set_task(task)
        manager.set_target(task.targets)
        return manager
Esempio n. 10
0
    def test_init_fail(self):
        self.create_cwd()
        task = Task()
        fd, tmpfile = tempfile.mkstemp()
        os.write(fd, os.urandom(64))
        os.close(fd)
        id = task.add_path(tmpfile)
        task.load_from_db(id)
        manager = self.get_manager(task)
        copy_path = cwd("storage", "binaries", File(tmpfile).get_sha256())

        # Remove both binaries to make init fail
        os.remove(copy_path)
        os.remove(tmpfile)
        result = manager.init(self.db)

        assert not result
Esempio n. 11
0
    def test_init_remov_original(self):
        self.create_cwd()
        task = Task()
        fd, tmpfile = tempfile.mkstemp()
        os.write(fd, os.urandom(64))
        os.close(fd)
        id = task.add_path(tmpfile)
        task.load_from_db(id)
        tmpfile_obj = File(tmpfile)
        tmpfile_obj.calc_hashes()
        manager = self.get_manager(task)

        # Remove so init fails to find the original target
        os.remove(tmpfile)

        result = manager.init(self.db)
        assert result
        assert manager.options["target"] == tmpfile
        assert manager.options["file_name"] == tmpfile_obj.get_name()
        assert isinstance(manager.guest_manager, GuestManager)
        assert isinstance(manager.aux, RunAuxiliary)
        assert os.path.isfile(os.path.join(task.path, "task.json"))