From 3505a51bc3bac38e8df9adf6a4baf2da3af758d6 Mon Sep 17 00:00:00 2001 From: JoYo <> Date: Thu, 7 Mar 2019 02:17:42 +0000 Subject: [PATCH] export script so i can view in ghidra --- Dockerfile | 7 +++++++ docker-compose.yaml | 4 +--- setup.py | 1 + sins/__init__.py | 2 +- sins/run.py | 36 ++++++++++++++++++++++++++++++++---- 5 files changed, 42 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index f11d708..232bd1e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,4 +3,11 @@ ENV DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install -y \ python3-capstone \ + python3-setuptools \ python3-sqlalchemy + +RUN mkdir /app/ +ADD sins/ /app/sins/ +ADD setup.py /app/ +WORKDIR /app/ +RUN python3 setup.py install diff --git a/docker-compose.yaml b/docker-compose.yaml index c3ead83..250aa12 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -7,7 +7,5 @@ services: build: context: . volumes: - - ${PWD}:/app - scraps:/out - working_dir: /app - command: python3 -m sins -o /out/ + command: sins -o /out/ diff --git a/setup.py b/setup.py index d456fc3..43d5201 100644 --- a/setup.py +++ b/setup.py @@ -8,6 +8,7 @@ setup( entry_points={ 'console_scripts': [ 'sins = sins:sins', + 'sins_export = sins:export', ], }, ) diff --git a/sins/__init__.py b/sins/__init__.py index c6f79f5..9a708b5 100644 --- a/sins/__init__.py +++ b/sins/__init__.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -from .run import sins +from .run import sins, export from .mutation import generation, mutate from .orm import db_config, ScrapNode from .disassemble import disasm, objdump diff --git a/sins/run.py b/sins/run.py index 341d1d4..9619495 100755 --- a/sins/run.py +++ b/sins/run.py @@ -13,13 +13,40 @@ from .orm import db_config, ScrapNode from .disassemble import objdump +def export(): + now = '{0:%Y%m%dT%H%M%S}'.format(datetime.utcnow()) + parser = ArgumentParser( + description='export recent scrap shellcode.') + parser.add_argument('-v', '--verbose', action='count') + parser.add_argument('-db', '--database', default='/out/sins.sqlite', + help='path to scrap database.') + parser.add_argument('-o', '--out_path', + help='path to export scrap shellcode.') + args = parser.parse_args() + + level = logging.DEBUG if args.verbose else logging.INFO + logging.basicConfig(level=level, format='%(message)s') + logging.info(now) + + db_path = Path(args.database) + session = db_config(db_path) + logging.info(f'db_path: {db_path}') + recent = session.query(ScrapNode).order_by(desc('ctime')).first() + logging.info(f'recent: {recent}') + + out_path = Path(f'{args.out_path}/scrap-{recent.checksum[:8]}.bin') + + with out_path.open('wb') as file: + file.write(recent.image) + + def sins(): now = '{0:%Y%m%dT%H%M%S}'.format(datetime.utcnow()) parser = ArgumentParser( description='position independent code (PIC) mutation experiment.') parser.add_argument('-v', '--verbose', action='count') parser.add_argument('-s', '--seed', help='path to PIC image.') - parser.add_argument('-o', '--output', help='path to results directory.') + parser.add_argument('-o', '--out_path', help='path to results directory.') parser.add_argument('-l', '--lineage', default=10, help='max count of unsuccessful generation.') args = parser.parse_args() @@ -42,8 +69,8 @@ def sins(): logger.info(now) - if args.output: - db_path = Path(f'{args.output}/sins.sqlite') + if args.out_path: + db_path = Path(f'{args.out_path}/sins.sqlite') else: temp_dir = TemporaryDirectory() db_path = Path(f'{temp_dir.name}/sins.sqlite') @@ -67,7 +94,8 @@ def sins(): seed = ScrapNode(child=seed_shell) logger.debug(f'seed_shell:\n{seed}') - exists = session.query(ScrapNode).filter(ScrapNode.checksum == seed.checksum).all() + exists = session.query(ScrapNode).filter( + ScrapNode.checksum == seed.checksum).all() if exists: seed = exists[0]