calebstewart / pwncat

Fancy reverse and bind shell handler
https://pwncat.readthedocs.io
MIT License
2.63k stars 258 forks source link

Added module reloading API and CLI interface #243

Open calebstewart opened 2 years ago

calebstewart commented 2 years ago

Description of Changes

This PR adds the ability to reload pwncat modules at runtime. This is facilitated through the addition of a new flag for the Manager.load_modules method, which now takes a force keyword argument, which forces reloading of previously loaded modules. Further, there is now a new Manager.reload_module method which accepts either a module instance or a module name to be reloaded specifically. Both load_modules and reload_module methods will also attempt to fix the current module context if a module is being reloaded, and reset any module configurations, which could fail if the module arguments have changed during reload. If a module-specific configuration fails to apply after reloading the module (likely because the module arguments changed on disk), a warning is printed and that configuration is lost.

Lastly, this PR adds new arguments to two pwncat commands: load and run. First, the load command now as either --force/-f or --reload/-r arguments. These are synonyms which force a reload of modules during loading (through the force argument of Manager.load_modules). Second, the run command now accepts a --reload/-r argument which forces the selected module to be reloaded via Manager.reload_module prior to execution, which should be useful when debugging a new module (or a misbehaving old module).

Fixes #241.

Please note any noqa: comments needed to appease flake8.

Major Changes Implemented:

Pre-Merge Tasks

For issues with pre-merge tasks, see CONTRIBUTING.md