From 4b196c7d96398d8b28dda5b34226b6ce1148f341 Mon Sep 17 00:00:00 2001 From: Arusekk Date: Thu, 29 Apr 2021 11:23:09 +0200 Subject: [PATCH] Cleanup unconditional imports (#1753) * Cleanup unconditional imports This may aid #1725 * Import explicitly * Add good ol' SIGALRM-based debugs for tests * Fix py2 GDB tests somehow XXX: see why this matters * Update CHANGELOG.md --- CHANGELOG.md | 2 ++ docs/source/conf.py | 13 ++++++++++--- pwn/__init__.py | 1 - pwn/toplevel.py | 1 + pwnlib/__init__.py | 10 ++++------ pwnlib/commandline/asm.py | 2 +- pwnlib/commandline/constgrep.py | 2 +- pwnlib/commandline/cyclic.py | 2 +- pwnlib/commandline/disasm.py | 2 +- pwnlib/commandline/elfdiff.py | 2 +- pwnlib/commandline/elfpatch.py | 2 +- pwnlib/commandline/phd.py | 2 +- pwnlib/commandline/pwnstrip.py | 2 +- pwnlib/commandline/scramble.py | 2 +- pwnlib/commandline/shellcraft.py | 2 +- pwnlib/commandline/update.py | 2 +- pwnlib/commandline/version.py | 2 +- pwnlib/gdb.py | 5 ++--- pwnlib/util/__init__.py | 14 -------------- 19 files changed, 31 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3dad5b05f..6b04b2f9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -63,12 +63,14 @@ The table below shows which release corresponds to each branch, and what date th - [#1429][1429] Add a mechanism for ret2csu (originally #1138) - [#1739][1739] Add/fix shellcraft.linux.kill() / shellcraft.linux.killparent() - [#1746][1746] Prefer Python3 over Python2 for spawning remote processes over SSH +- [#1753][1753] major change: less unconditional imports in pwnlib - [#1776][1776] mips: do not use $t0 temporary variable in dupio - [#1846][1846] support launching GDB in more different terminals [1429]: https://github.com/Gallopsled/pwntools/pull/1429 [1739]: https://github.com/Gallopsled/pwntools/pull/1739 [1746]: https://github.com/Gallopsled/pwntools/pull/1746 +[1753]: https://github.com/Gallopsled/pwntools/pull/1753 [1776]: https://github.com/Gallopsled/pwntools/pull/1776 [1846]: https://github.com/Gallopsled/pwntools/pull/1846 diff --git a/docs/source/conf.py b/docs/source/conf.py index fa8fc27e0..1ff254ade 100755 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -25,7 +25,7 @@ # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('../..')) -import pwnlib +import pwnlib.update pwnlib.update.disabled = True # If your documentation needs a minimal Sphinx version, state it here. @@ -71,8 +71,9 @@ def filter(self, record): import sys, os os.environ['PWNLIB_NOTERM'] = '1' os.environ['PWNLIB_RANDOMIZE'] = '0' - -import pwnlib, logging +import pwnlib.update +import pwnlib.util.fiddling +import logging pwnlib.update.disabled = True pwnlib.context.context.reset_local() pwnlib.context.ContextType.defaults['log_level'] = logging.ERROR @@ -439,3 +440,9 @@ def setup(app): import binascii paramiko.client.hexlify = lambda x: binascii.hexlify(x).decode() paramiko.util.safe_string = lambda x: '' # function result never *actually used* + class EndlessLoop(Exception): pass + def alrm_handler(sig, frame): + signal.alarm(180) # three minutes + raise EndlessLoop() + signal.signal(signal.SIGALRM, alrm_handler) + signal.alarm(600) # ten minutes diff --git a/pwn/__init__.py b/pwn/__init__.py index c70759243..ee674c61f 100644 --- a/pwn/__init__.py +++ b/pwn/__init__.py @@ -7,7 +7,6 @@ pwnlib.log.install_default_handler() pwnlib.config.initialize() -log = pwnlib.log.getLogger('pwnlib.exploit') args = pwnlib.args.args if not platform.architecture()[0].startswith('64'): diff --git a/pwn/toplevel.py b/pwn/toplevel.py index 38de43b99..e9b0f3eb5 100644 --- a/pwn/toplevel.py +++ b/pwn/toplevel.py @@ -78,6 +78,7 @@ from six.moves import cPickle as pickle, cStringIO as StringIO from six import BytesIO +log = getLogger("pwnlib.exploit") error = log.error warning = log.warning warn = log.warning diff --git a/pwnlib/__init__.py b/pwnlib/__init__.py index 4f261d240..446907c04 100644 --- a/pwnlib/__init__.py +++ b/pwnlib/__init__.py @@ -1,12 +1,11 @@ from __future__ import absolute_import -import importlib - -from pwnlib.version import __version__ +from .version import __version__ version = __version__ __all__ = [ + 'adb', 'args', 'asm', 'atexception', @@ -35,9 +34,8 @@ 'ui', 'useragents', 'util', - 'adb', 'update', + 'version', ] -for module in __all__: - importlib.import_module('.%s' % module, 'pwnlib') +from . import args diff --git a/pwnlib/commandline/asm.py b/pwnlib/commandline/asm.py index 731e7ebb8..8f1c39884 100644 --- a/pwnlib/commandline/asm.py +++ b/pwnlib/commandline/asm.py @@ -5,7 +5,7 @@ import argparse import sys -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/constgrep.py b/pwnlib/commandline/constgrep.py index 0f8b521fd..5959b5155 100755 --- a/pwnlib/commandline/constgrep.py +++ b/pwnlib/commandline/constgrep.py @@ -6,7 +6,7 @@ import functools import re -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/cyclic.py b/pwnlib/commandline/cyclic.py index bbcc10d34..c0cb19002 100644 --- a/pwnlib/commandline/cyclic.py +++ b/pwnlib/commandline/cyclic.py @@ -7,7 +7,7 @@ import string import sys -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/disasm.py b/pwnlib/commandline/disasm.py index 1a7d42bc5..e4ab12e05 100644 --- a/pwnlib/commandline/disasm.py +++ b/pwnlib/commandline/disasm.py @@ -7,7 +7,7 @@ import string import sys -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/elfdiff.py b/pwnlib/commandline/elfdiff.py index 8dec7b961..60e5d8fbf 100644 --- a/pwnlib/commandline/elfdiff.py +++ b/pwnlib/commandline/elfdiff.py @@ -8,7 +8,7 @@ from subprocess import check_output from tempfile import NamedTemporaryFile -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/elfpatch.py b/pwnlib/commandline/elfpatch.py index ead6de9b9..7de0f2015 100644 --- a/pwnlib/commandline/elfpatch.py +++ b/pwnlib/commandline/elfpatch.py @@ -4,7 +4,7 @@ import sys -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/phd.py b/pwnlib/commandline/phd.py index 96556e115..c833c3780 100644 --- a/pwnlib/commandline/phd.py +++ b/pwnlib/commandline/phd.py @@ -7,7 +7,7 @@ import sys import io -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/pwnstrip.py b/pwnlib/commandline/pwnstrip.py index 7c613c8a3..fcc8df171 100644 --- a/pwnlib/commandline/pwnstrip.py +++ b/pwnlib/commandline/pwnstrip.py @@ -3,7 +3,7 @@ import argparse -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/scramble.py b/pwnlib/commandline/scramble.py index 1993da885..8b5043be4 100644 --- a/pwnlib/commandline/scramble.py +++ b/pwnlib/commandline/scramble.py @@ -4,7 +4,7 @@ import argparse import sys -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/shellcraft.py b/pwnlib/commandline/shellcraft.py index 5f4bf741c..9d49c5608 100644 --- a/pwnlib/commandline/shellcraft.py +++ b/pwnlib/commandline/shellcraft.py @@ -8,7 +8,7 @@ import sys import types -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/update.py b/pwnlib/commandline/update.py index d77a45215..38ef19a76 100644 --- a/pwnlib/commandline/update.py +++ b/pwnlib/commandline/update.py @@ -4,7 +4,7 @@ import subprocess -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/commandline/version.py b/pwnlib/commandline/version.py index 16b77ad2b..9b820160d 100644 --- a/pwnlib/commandline/version.py +++ b/pwnlib/commandline/version.py @@ -5,7 +5,7 @@ import os import subprocess -import pwnlib +import pwnlib.args pwnlib.args.free_form = False from pwn import * diff --git a/pwnlib/gdb.py b/pwnlib/gdb.py index 48487e084..8e17d936d 100644 --- a/pwnlib/gdb.py +++ b/pwnlib/gdb.py @@ -155,9 +155,6 @@ from threading import Event import time -from rpyc import BgServingThread -from rpyc.utils.factory import unix_connect - from pwnlib import adb from pwnlib import atexit from pwnlib import elf @@ -1055,6 +1052,8 @@ def preexec_fn(): return gdb_pid # connect to the GDB Python API bridge + from rpyc import BgServingThread + from rpyc.utils.factory import unix_connect if six.PY2: retriable = socket.error else: diff --git a/pwnlib/util/__init__.py b/pwnlib/util/__init__.py index 4b505baf1..fc4dbea4c 100644 --- a/pwnlib/util/__init__.py +++ b/pwnlib/util/__init__.py @@ -1,19 +1,5 @@ from __future__ import absolute_import -from pwnlib.util import crc -from pwnlib.util import cyclic -from pwnlib.util import fiddling -from pwnlib.util import hashes -from pwnlib.util import iters -from pwnlib.util import lists -from pwnlib.util import misc -from pwnlib.util import net -from pwnlib.util import packing -from pwnlib.util import proc -from pwnlib.util import safeeval -from pwnlib.util import sh_string -from pwnlib.util import web - __all__ = [ 'crc', 'cyclic', 'fiddling', 'hashes', 'iters', 'lists', 'misc', 'net', 'packing', 'proc', 'safeeval',