diff --git a/README.md b/README.md index 72a4441..fe95169 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ At the moment it supports the following fuzzing engines:

- [Documentation] + [Documentation]

@@ -30,7 +30,7 @@ At the moment it supports the following fuzzing engines: - +

--- @@ -99,7 +99,7 @@ pastis-aflpp online Or: ```commandline -pastis-triton online +pastis-tritondse online ``` Full documentation is available: [here](https://quarkslab.github.io/pastis/campaign.html) @@ -146,14 +146,14 @@ The PASTIS Docker image has already installed all the needed dependencies such a ## Papers and conference -* **Symbolic Execution the Swiss-Knife of the Reverse Engineer Toolbox** - **Venue**: KLEE Workshop, 2022 [[:books:]](https://srg.doc.ic.ac.uk/klee22/talks/David-Reverse-Engineering.pdf) [[:movie_camera:]](https://youtu.be/PNbNtTa5Sp4) - **Authors**: Robin David, Richard Abou Chaaya, Christian Heitman +* **Symbolic Execution the Swiss-Knife of the Reverse Engineer Toolbox** + **Venue**: KLEE Workshop, 2022 [[:books:]](https://srg.doc.ic.ac.uk/klee22/talks/David-Reverse-Engineering.pdf) [[:movie_camera:]](https://youtu.be/PNbNtTa5Sp4) + **Authors**: Robin David, Richard Abou Chaaya, Christian Heitman -* **From source code to crash test-case through software testing automation** - **Venue**: European Cyber Week, C&ESAR Workshop, 2021 [paper](https://ceur-ws.org/Vol-3056/paper-02.pdf) [slides](https://github.com/quarkslab/conf-presentations/blob/main-page/C%26ESAR-2021/CESAR-2021_slides_2-2.pdf) - **Authors**: Robin David, Jonathan Salwan, Justin Bourroux +* **From source code to crash test-case through software testing automation** + **Venue**: European Cyber Week, C&ESAR Workshop, 2021 [paper](https://ceur-ws.org/Vol-3056/paper-02.pdf) [slides](https://github.com/quarkslab/conf-presentations/blob/main-page/C%26ESAR-2021/CESAR-2021_slides_2-2.pdf) + **Authors**: Robin David, Jonathan Salwan, Justin Bourroux ## Cite Pastis diff --git a/bin/pastis-benchmark b/bin/pastis-benchmark index 49bbb28..7a0f59b 100755 --- a/bin/pastis-benchmark +++ b/bin/pastis-benchmark @@ -22,9 +22,9 @@ from pastisbroker.workspace import Workspace from libpastis.types import CheckMode, SeedInjectLoc # Engines imports -from pastishf import HonggfuzzDriver, spawn_online_honggfuzz +from pastishonggfuzz import HonggfuzzDriver, spawn_online_honggfuzz from pastisaflpp import spawn_online_aflpp, check_scaling_frequency -from pastisdse import spawn_online_triton +from pastistritondse import spawn_online_triton from pastisbenchmark.replayer import ReplayType, Replayer from pastisbenchmark.plotter import Plotter @@ -127,9 +127,9 @@ def clean(workspace: str): def showmap(bins: str): MAP = { - "Triton": "pastisttbroker", - "Honggfuzz": "hfbroker", - "AFL++": "aflppbroker" + "Triton": "pastistritondse.addon", + "Honggfuzz": "pastishonggfuzz.addon", + "AFL++": "pastisaflpp.addon" } mapping = {k: load_engine_descriptor(v) for k,v in MAP.items()} for file in iterate_file(bins): @@ -245,7 +245,7 @@ def run(workspace: str, bins: str, seeds: str, mode: str, injloc: str, aflpp: bo if not tt_confs.exists(): # if folder is empty logging.info(f"{tt_confs} not found fall back current workdir") tt_confs = Path("triton_confs") - broker.load_engine_addon("pastisttbroker") + broker.load_engine_addon("pastistritondse.addon") if tt_confs.exists(): for i, conf in enumerate(sorted(tt_confs.iterdir())): with open(conf, "r+") as fd: diff --git a/bin/pastisd b/bin/pastisd index 1e2f210..d00bb1d 100755 --- a/bin/pastisd +++ b/bin/pastisd @@ -18,12 +18,12 @@ except ImportError: hfwrapper, Honggfuzz = None, None HONGGFUZZ_AVAILABLE = False try: - import pastisdse - from pastisdse import PastisDSE - PASTISDSE_AVAILABLE = True + import pastistritondse + from pastistritondse import TritonDSEDriver + PASTISTRITONDSE_AVAILABLE = True except ImportError: - pastisdse, PastisDSE = None, None - PASTISDSE_AVAILABLE = False + pastistritondse, TritonDSEDriver = None, None + PASTISTRITONDSE_AVAILABLE = False PASTIS_MASTER = "pastis.lan" @@ -61,7 +61,7 @@ def start_received(*args): logging.critical("Can't find Honggfuzzz HFUZZ_DATA not set") elif engine == FuzzingEngine.TRITON: - engine = PastisDSE(agent) + engine = TritonDSEDriver(agent) configure_logging(logging.DEBUG, "%(asctime)s %(threadName)s [%(levelname)s] %(message)s") engine.start_received(*args) engine.start() @@ -80,8 +80,8 @@ def main(host=PASTIS_MASTER): engines.append((FuzzingEngine.HONGGFUZZ, hfwrapper.__version__)) else: logging.warning("Honggfuzz is not available (cannot import it)") - if PASTISDSE_AVAILABLE: - engines.append((FuzzingEngine.TRITON, pastisdse.__version__)) + if PASTISTRITONDSE_AVAILABLE: + engines.append((FuzzingEngine.TRITON, pastistritondse.__version__)) else: logging.warning("Triton is not available (cannot import it)") diff --git a/doc/adding-fuzzer.rst b/doc/adding-fuzzer.rst index fc974f7..976e33c 100644 --- a/doc/adding-fuzzer.rst +++ b/doc/adding-fuzzer.rst @@ -113,5 +113,5 @@ There is nothing like examples. Thus one can see existing drivers to see how the implemented and how they work. They can be used as a basis for other fuzzing engines. * tiny test clients: `test_client.py `_ -* Honggfuzz driver: `driver.py `_ -* TritonDSE driver: `pastisdse.py `_ +* Honggfuzz driver: `driver.py `_ +* TritonDSE driver: `driver.py `_ diff --git a/doc/campaign.rst b/doc/campaign.rst index f2e97fd..418015d 100644 --- a/doc/campaign.rst +++ b/doc/campaign.rst @@ -113,7 +113,7 @@ Engines can be launched with theirs appropriate binary: * AFL++: ``pastis-aflpp online [IP] [PORT]`` * Honggfuzz: ``pastis-honggfuzz online [IP] [PORT]`` -* TritonDSE: ``pastis-triton online [IP] [PORT]`` +* TritonDSE: ``pastis-tritondse online [IP] [PORT]`` If no IP or port is provided, they will automatically connect to *localhost:5555*. diff --git a/doc/engines/tritondse.rst b/doc/engines/tritondse.rst index 3286c9d..bf958a2 100644 --- a/doc/engines/tritondse.rst +++ b/doc/engines/tritondse.rst @@ -1,7 +1,7 @@ TritonDSE ========= -The utility ``pastis-triton`` enables launching a TritonDSE. It can be launched +The utility ``pastis-tritondse`` enables launching a TritonDSE. It can be launched in an alert driven manner in ``ALERT_ONLY`` or in independent manner with ``CHECK_ALL``. Also, it can be run in two modes, `online` to interact with a ``pastis-broker`` server or `offline` to run locally on its own. @@ -12,17 +12,17 @@ Online The online mode only requires an IP and a port to run as all subsequent parameters will be provided by the broker. The default IP and port are *localhost* on *5555*. -If the broker is running on the same machine ``pastis-triton`` can be launched with: +If the broker is running on the same machine ``pastis-tritondse`` can be launched with: :: - $ pastis-triton online + $ pastis-tritondse online If the broker runs on a different machine it can then be launched with: :: - $ pastis-triton online -h 8.8.8.8 -p 5555 + $ pastis-tritondse online -h 8.8.8.8 -p 5555 The utility will then automatically receive the parameters, the binary to test and @@ -39,7 +39,7 @@ on the commande line. The help message is the following: :: - Usage: pastis-triton offline [OPTIONS] PROGRAM [PARGVS]... + Usage: pastis-tritondse offline [OPTIONS] PROGRAM [PARGVS]... Options: -r, --sast-report FILE SAST report to use diff --git a/doc/index.rst b/doc/index.rst index 8aa8ebf..604096e 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -93,7 +93,7 @@ PASTIS in action .. pastis-aflpp pastis-honggfuzz - pastis-triton + pastis-tritondse diff --git a/doc/tutorials/demo-fsm.rst b/doc/tutorials/demo-fsm.rst index 9921f48..fab48cd 100644 --- a/doc/tutorials/demo-fsm.rst +++ b/doc/tutorials/demo-fsm.rst @@ -84,13 +84,13 @@ Once ready we can run TritonDSE on the target with: .. code-block:: bash - pastis-triton online + pastis-tritondse online It will connect the broker that will send it the *fsm.tt* target with the right configuration. .. note:: If you want to run TritonDSE with a specific configuration it has to be - be provided via the broker with ``-e pastisttbroker --tt-config conf.json``. + be provided via the broker with ``-e pastistritondse.addon --tt-config conf.json``. The ``-e`` preload the tritondse addon in order to be able to load the configuration file. diff --git a/engines/pastis-aflpp/pastisaflpp/__init__.py b/engines/pastisaflpp/__init__.py similarity index 100% rename from engines/pastis-aflpp/pastisaflpp/__init__.py rename to engines/pastisaflpp/__init__.py diff --git a/engines/pastis-aflpp/bin/pastis-aflpp b/engines/pastisaflpp/__main__.py similarity index 99% rename from engines/pastis-aflpp/bin/pastis-aflpp rename to engines/pastisaflpp/__main__.py index 015c6c7..35a0bb4 100644 --- a/engines/pastis-aflpp/bin/pastis-aflpp +++ b/engines/pastisaflpp/__main__.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # To run it offline # pastis-aflpp offline [OPTS] BINARY PARAMS # @@ -116,5 +114,9 @@ def offline(program: str, sast_report: Optional[str], seed: Tuple[str], exmode, aflpp.stop() -if __name__ == "__main__": +def main(): cli() + + +if __name__ == "__main__": + main() diff --git a/engines/pastis-aflpp/broker-addon/aflppbroker/__init__.py b/engines/pastisaflpp/addon.py similarity index 100% rename from engines/pastis-aflpp/broker-addon/aflppbroker/__init__.py rename to engines/pastisaflpp/addon.py diff --git a/engines/pastis-aflpp/pastisaflpp/aflpp.py b/engines/pastisaflpp/aflpp.py similarity index 100% rename from engines/pastis-aflpp/pastisaflpp/aflpp.py rename to engines/pastisaflpp/aflpp.py diff --git a/engines/pastis-aflpp/pastisaflpp/driver.py b/engines/pastisaflpp/driver.py similarity index 99% rename from engines/pastis-aflpp/pastisaflpp/driver.py rename to engines/pastisaflpp/driver.py index 9ead121..483a501 100644 --- a/engines/pastis-aflpp/pastisaflpp/driver.py +++ b/engines/pastisaflpp/driver.py @@ -120,7 +120,7 @@ def init_agent(self, remote: str = "localhost", port: int = 5555): self._agent.connect(remote, port) self._agent.start() # Send initial HELLO message, whick will make the Broker send the START message. - self._agent.send_hello([FuzzingEngineInfo("AFLPP", pastisaflpp.__version__, "aflppbroker")]) + self._agent.send_hello([FuzzingEngineInfo("AFLPP", pastisaflpp.__version__, "pastisaflpp.addon")]) def run(self): self.aflpp.wait() diff --git a/engines/pastis-aflpp/pastisaflpp/replay.py b/engines/pastisaflpp/replay.py similarity index 100% rename from engines/pastis-aflpp/pastisaflpp/replay.py rename to engines/pastisaflpp/replay.py diff --git a/engines/pastis-aflpp/pastisaflpp/workspace.py b/engines/pastisaflpp/workspace.py similarity index 100% rename from engines/pastis-aflpp/pastisaflpp/workspace.py rename to engines/pastisaflpp/workspace.py diff --git a/engines/pastis-honggfuzz/pastishf/__init__.py b/engines/pastishonggfuzz/__init__.py similarity index 100% rename from engines/pastis-honggfuzz/pastishf/__init__.py rename to engines/pastishonggfuzz/__init__.py diff --git a/engines/pastis-honggfuzz/bin/pastis-honggfuzz b/engines/pastishonggfuzz/__main__.py similarity index 98% rename from engines/pastis-honggfuzz/bin/pastis-honggfuzz rename to engines/pastishonggfuzz/__main__.py index 92060b3..62c04a9 100755 --- a/engines/pastis-honggfuzz/bin/pastis-honggfuzz +++ b/engines/pastishonggfuzz/__main__.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # To run it offline # pastis-honggfuzz offline [OPTS] BINARY PARAMS # @@ -19,7 +17,7 @@ from libpastis.types import ExecMode, CoverageMode, SeedInjectLoc, CheckMode, FuzzingEngineInfo, FuzzMode # Local imports -from pastishf import HonggfuzzDriver, __version__ +from pastishonggfuzz import HonggfuzzDriver, __version__ coloredlogs.install(level=logging.DEBUG, @@ -114,5 +112,9 @@ def offline(program: str, sast_report: Optional[str], seed: Tuple[str], exmode, honggfuzz.stop() -if __name__ == "__main__": +def main(): cli() + + +if __name__ == "__main__": + main() diff --git a/engines/pastis-honggfuzz/broker-addon/hfbroker/__init__.py b/engines/pastishonggfuzz/addon.py similarity index 100% rename from engines/pastis-honggfuzz/broker-addon/hfbroker/__init__.py rename to engines/pastishonggfuzz/addon.py diff --git a/engines/pastis-honggfuzz/pastishf/driver.py b/engines/pastishonggfuzz/driver.py similarity index 97% rename from engines/pastis-honggfuzz/pastishf/driver.py rename to engines/pastishonggfuzz/driver.py index 0209f9f..93df509 100644 --- a/engines/pastis-honggfuzz/pastishf/driver.py +++ b/engines/pastishonggfuzz/driver.py @@ -15,10 +15,10 @@ LogLevel, AlertData, FuzzMode # Local imports -import pastishf -from pastishf.replay import Replay -from pastishf.honggfuzz import HonggfuzzProcess -from pastishf.workspace import Workspace +import pastishonggfuzz +from pastishonggfuzz.replay import Replay +from pastishonggfuzz.honggfuzz import HonggfuzzProcess +from pastishonggfuzz.workspace import Workspace # Inotify logs are very talkative, set them to ERROR @@ -121,7 +121,7 @@ def init_agent(self, remote: str = "localhost", port: int = 5555): self._agent.connect(remote, port) self._agent.start() # Send initial HELLO message, whick will make the Broker send the START message. - self._agent.send_hello([FuzzingEngineInfo("HONGGFUZZ", pastishf.__version__, "hfbroker")]) + self._agent.send_hello([FuzzingEngineInfo("HONGGFUZZ", pastishonggfuzz.__version__, "pastishonggfuzz.addon")]) def run(self): self.honggfuzz.wait() @@ -238,7 +238,7 @@ def start_received(self, fname: str, binary: bytes, engine: FuzzingEngineInfo, e logging.error(f"Wrong fuzzing engine received {engine.name} while I am Honggfuzz") self._agent.send_log(LogLevel.ERROR, f"Invalid fuzzing engine received {engine.name} can't do anything") return - if engine.version != pastishf.__version__: + if engine.version != pastishonggfuzz.__version__: logging.error(f"Wrong fuzzing engine version {engine.version} received") self._agent.send_log(LogLevel.ERROR, f"Invalid fuzzing engine version {engine.version} do nothing") return diff --git a/engines/pastis-honggfuzz/pastishf/honggfuzz.py b/engines/pastishonggfuzz/honggfuzz.py similarity index 100% rename from engines/pastis-honggfuzz/pastishf/honggfuzz.py rename to engines/pastishonggfuzz/honggfuzz.py diff --git a/engines/pastis-honggfuzz/pastishf/replay.py b/engines/pastishonggfuzz/replay.py similarity index 100% rename from engines/pastis-honggfuzz/pastishf/replay.py rename to engines/pastishonggfuzz/replay.py diff --git a/engines/pastis-honggfuzz/pastishf/workspace.py b/engines/pastishonggfuzz/workspace.py similarity index 100% rename from engines/pastis-honggfuzz/pastishf/workspace.py rename to engines/pastishonggfuzz/workspace.py diff --git a/engines/pastis-triton/pastisdse/__init__.py b/engines/pastistritondse/__init__.py similarity index 79% rename from engines/pastis-triton/pastisdse/__init__.py rename to engines/pastistritondse/__init__.py index 1c0dcff..ffe9e06 100644 --- a/engines/pastis-triton/pastisdse/__init__.py +++ b/engines/pastistritondse/__init__.py @@ -1,7 +1,7 @@ from typing import Tuple import subprocess -from .pastisdse import PastisDSE +from .driver import TritonDSEDriver # Expose triton version import tritondse @@ -12,7 +12,7 @@ def spawn_online_triton(port: int = 5555, probe: Tuple[str] = ()): - tt = ["pastis-triton", "online", "-p", f"{port}"] + tt = ["pastis-tritondse", "online", "-p", f"{port}"] if len(probe) > 0: tt += ["--probe", f"{probe}"] subprocess.Popen(tt, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) diff --git a/engines/pastis-triton/bin/pastis-triton b/engines/pastistritondse/__main__.py similarity index 95% rename from engines/pastis-triton/bin/pastis-triton rename to engines/pastistritondse/__main__.py index e2976dc..88ae38c 100755 --- a/engines/pastis-triton/bin/pastis-triton +++ b/engines/pastistritondse/__main__.py @@ -1,5 +1,3 @@ -#!/usr/bin/env python3 - # PYTHONPATH=. ./bin/fuzz_cyclone.py offline -s out.frames micro_http_server_tt_fuzz_single_with_vuln wlp0s20f3 48:e2:44:f5:9b:01 10.0.13.86 255.255.255.0 10.0.13.254 @@ -18,7 +16,7 @@ from libpastis.types import ExecMode, CoverageMode, SeedInjectLoc, CheckMode, FuzzingEngineInfo, SeedType, FuzzMode # Local imports -from pastisdse import PastisDSE, __version__ +from pastistritondse import TritonDSEDriver, __version__ from tritondse import CoverageStrategy, ProbeInterface, Config, SmtSolver from tritondse.probes.basic_trace import BasicDebugTrace import tritondse.logging @@ -62,8 +60,8 @@ def cli(): @click.option('--probe', type=str, help="Probe to load as a python module (should contain a ProbeInterface)", multiple=True) def online(host: str, port: int, debug: bool, probe: Tuple[str]): """ - This is the online mode of the pastis-triton exploration. With this mode, - the client (pastis-triton) will try to connect to the broker. Then, the broker + This is the online mode of the pastis-tritondse exploration. With this mode, + the client (pastis-tritondse) will try to connect to the broker. Then, the broker will send us the binary to explore, the configuration and initiale seeds. :param host: The remote host to connect @@ -78,7 +76,7 @@ def online(host: str, port: int, debug: bool, probe: Tuple[str]): agent = ClientAgent() # Instanciate the pastis that will register the appropriate callbacks - pastis = PastisDSE(agent) + pastis = TritonDSEDriver(agent) for p in list(probe): probe = load_probe_module(p) @@ -129,8 +127,8 @@ def offline(program: str, debug_pp: bool, trace: bool): """ - This is the offline mode of the pastis-triton exploration. With this mode, - the client (pastis-triton) will be able to work without a remote broker. In + This is the offline mode of the pastis-tritondse exploration. With this mode, + the client (pastis-tritondse) will be able to work without a remote broker. In this mode, we have to provide all information about the configuration via the command line option. @@ -168,7 +166,7 @@ def offline(program: str, agent = FileAgent() # Instanciate the pastis that will register the appropriate callbacks - pastis = PastisDSE(agent) + pastis = TritonDSEDriver(agent) if config: config = Config.from_file(config) @@ -235,8 +233,9 @@ def offline(program: str, pastis.run(online=False, debug_pp=debug_pp) -if __name__ == "__main__": +def main(): cli() - +if __name__ == "__main__": + main() diff --git a/engines/pastis-triton/broker-addon/pastisttbroker/__init__.py b/engines/pastistritondse/addon.py similarity index 100% rename from engines/pastis-triton/broker-addon/pastisttbroker/__init__.py rename to engines/pastistritondse/addon.py diff --git a/engines/pastis-triton/pastisdse/pastisdse.py b/engines/pastistritondse/driver.py similarity index 99% rename from engines/pastis-triton/pastisdse/pastisdse.py rename to engines/pastistritondse/driver.py index 05e3798..5d340a4 100644 --- a/engines/pastis-triton/pastisdse/pastisdse.py +++ b/engines/pastistritondse/driver.py @@ -14,7 +14,7 @@ from triton import MemoryAccess, CPUSIZE # Pastis & triton imports -import pastisdse +import pastistritondse from tritondse import Config, Program, CleLoader, CoverageStrategy, SymbolicExplorator, \ SymbolicExecutor, ProcessState, ExplorationStatus, SeedStatus, ProbeInterface, \ Workspace, Seed, CompositeData, SeedFormat, QuokkaProgram @@ -27,8 +27,8 @@ def to_h(seed: Seed) -> str: if seed.is_composite(): - if PastisDSE.INPUT_FILE_NAME in seed.content.files: - return md5(seed.content.files[PastisDSE.INPUT_FILE_NAME]).hexdigest() + if TritonDSEDriver.INPUT_FILE_NAME in seed.content.files: + return md5(seed.content.files[TritonDSEDriver.INPUT_FILE_NAME]).hexdigest() elif "stdin" in seed.content.files: return md5(seed.content.files["stdin"]).hexdigest() else: @@ -37,7 +37,7 @@ def to_h(seed: Seed) -> str: return md5(seed.content).hexdigest() -class PastisDSE(object): +class TritonDSEDriver(object): INPUT_FILE_NAME = "input_file" STAT_FILE = "pastidse-stats.json" @@ -103,7 +103,7 @@ def init_agent(self, remote: str = "localhost", port: int = 5555): self.agent.register_start_callback(self.start_received) # register start because launched manually self.agent.connect(remote, port) self.agent.start() - self.agent.send_hello([FuzzingEngineInfo("TRITON", pastisdse.__version__, "pastisttbroker")]) + self.agent.send_hello([FuzzingEngineInfo("TRITON", pastistritondse.__version__, "pastistritondse.addon")]) def start(self): self._th = threading.Thread(target=self.run, daemon=True) @@ -315,8 +315,8 @@ def start_received(self, fname: str, binary: bytes, engine: FuzzingEngineInfo, e if self.dse is not None: logging.warning("DSE already instanciated (override it)") - if engine.version != pastisdse.__version__: - logging.error(f"Pastis-DSE mismatch with one from the server {engine.version} (local: {pastisdse.__version__})") + if engine.version != pastistritondse.__version__: + logging.error(f"Pastis-DSE mismatch with one from the server {engine.version} (local: {pastistritondse.__version__})") return self._seedloc = seed_inj diff --git a/engines/pastis-honggfuzz/patches/README.md b/engines/patches/README.md similarity index 100% rename from engines/pastis-honggfuzz/patches/README.md rename to engines/patches/README.md diff --git a/engines/pastis-honggfuzz/patches/honggfuzz-5a504b49-pastis.patch b/engines/patches/honggfuzz-5a504b49-pastis.patch similarity index 100% rename from engines/pastis-honggfuzz/patches/honggfuzz-5a504b49-pastis.patch rename to engines/patches/honggfuzz-5a504b49-pastis.patch diff --git a/engines/pastis-honggfuzz/patches/make_hf.sh b/engines/patches/make_hf.sh similarity index 100% rename from engines/pastis-honggfuzz/patches/make_hf.sh rename to engines/patches/make_hf.sh diff --git a/setup.py b/setup.py index 6f60bf0..9ab4ac7 100644 --- a/setup.py +++ b/setup.py @@ -22,22 +22,16 @@ "pastisbroker", "pastisbenchmark", "pastisaflpp", - "aflppbroker", - "pastishf", - "hfbroker", - "pastisdse", - "pastisttbroker" + "pastishonggfuzz", + "pastistritondse", ], package_dir={ # AFL++ - "pastisaflpp": "engines/pastis-aflpp/pastisaflpp", - "aflppbroker": "engines/pastis-aflpp/broker-addon/aflppbroker", + "pastisaflpp": "engines/pastisaflpp", # Honggfuzz - "pastishf": "engines/pastis-honggfuzz/pastishf", - "hfbroker": "engines/pastis-honggfuzz/broker-addon/hfbroker", + "pastishonggfuzz": "engines/pastishonggfuzz", # Triton - "pastisdse": "engines/pastis-triton/pastisdse", - "pastisttbroker": "engines/pastis-triton/broker-addon/pastisttbroker" + "pastistritondse": "engines/pastistritondse", }, url="https://github.com/quarkslab/pastis", project_urls={ @@ -72,12 +66,16 @@ 'Operating System :: OS Independent', ], test_suite="", + entry_points={ + "console_scripts": [ + "pastis-aflpp = pastisaflpp.__main__:main", + "pastis-honggfuzz = pastishonggfuzz.__main__:main", + "pastis-tritondse = pastistritondse.__main__:main" + ] + }, scripts=[ 'bin/pastis-broker', 'bin/pastis-benchmark', 'bin/pastisd', - 'engines/pastis-honggfuzz/bin/pastis-honggfuzz', - 'engines/pastis-triton/bin/pastis-triton', - 'engines/pastis-aflpp/bin/pastis-aflpp' ] )