diff --git a/README.md b/README.md index 813f45d..2b87576 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ # Pyramid

- immagine + immagine

# What is it diff --git a/Server/Dependencies/bloodhound/ldap3.zip b/Server/Dependencies/bloodhound/ldap3.zip index 3946204..fd1d694 100644 Binary files a/Server/Dependencies/bloodhound/ldap3.zip and b/Server/Dependencies/bloodhound/ldap3.zip differ diff --git a/Server/Dependencies/bloodhound/winkerberos.zip b/Server/Dependencies/bloodhound/winkerberos.zip new file mode 100644 index 0000000..8dbf33f Binary files /dev/null and b/Server/Dependencies/bloodhound/winkerberos.zip differ diff --git a/Server/Modules/DonPAPI.py b/Server/Modules/DonPAPI.py index e62c0a8..5f59ad8 100644 --- a/Server/Modules/DonPAPI.py +++ b/Server/Modules/DonPAPI.py @@ -224,7 +224,7 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] @@ -235,26 +235,26 @@ def _get_info(self, repoName, fullname): for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -263,27 +263,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - def find_module(self, fullname, path=None): - + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) + + def create_module(self, spec): + return None - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): @@ -298,11 +294,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName): diff --git a/Server/Modules/LaZagne.py b/Server/Modules/LaZagne.py index 15a31de..b2e0a6a 100644 --- a/Server/Modules/LaZagne.py +++ b/Server/Modules/LaZagne.py @@ -229,7 +229,7 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] @@ -240,26 +240,26 @@ def _get_info(self, repoName, fullname): for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -268,27 +268,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - def find_module(self, fullname, path=None): - + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) + + def create_module(self, spec): + return None - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): @@ -303,11 +299,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName): diff --git a/Server/Modules/bh.py b/Server/Modules/bh.py index 19625d7..8b346ac 100644 --- a/Server/Modules/bh.py +++ b/Server/Modules/bh.py @@ -218,7 +218,7 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] @@ -229,26 +229,26 @@ def _get_info(self, repoName, fullname): for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -257,27 +257,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - def find_module(self, fullname, path=None): - + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) + + def create_module(self, spec): + return None - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): @@ -292,11 +288,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName): @@ -320,7 +316,7 @@ def hook_routine(fileName,zip_web): zip_list=['bloodhound---setuptools', 'bloodhound---pkg_resources', 'bloodhound---jaraco', 'bloodhound---_distutils_hack', 'bloodhound---bloodhound', 'bloodhound---distutils',\ 'bloodhound---configparser', 'bloodhound---future', 'bloodhound---chardet', 'bloodhound---flask', 'bloodhound---ldap3', 'bloodhound---ldapdomaindump', \ 'bloodhound---pyasn1', 'bloodhound---OpenSSL','bloodhound---pyreadline', 'bloodhound---six','bloodhound---markupsafe', 'bloodhound---werkzeug','bloodhound---jinja2',\ - 'bloodhound---click', 'bloodhound---itsdangerous', 'bloodhound---dns', 'bloodhound---cryptography', 'bloodhound---json', 'bloodhound---impacket' ] + 'bloodhound---click', 'bloodhound---itsdangerous', 'bloodhound---dns', 'bloodhound---cryptography', 'bloodhound---json', 'bloodhound---impacket', 'bloodhound---winkerberos' ] for zip_name in zip_list: try: diff --git a/Server/Modules/clr.py b/Server/Modules/clr.py index 432a04a..94d3b43 100644 --- a/Server/Modules/clr.py +++ b/Server/Modules/clr.py @@ -221,7 +221,7 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] @@ -232,26 +232,26 @@ def _get_info(self, repoName, fullname): for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -260,26 +260,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - def find_module(self, fullname, path=None): + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def create_module(self, spec): + return None + + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): prefix = os.path.join(self.repoName, '') @@ -293,11 +290,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName): diff --git a/Server/Modules/moduleshifting.py b/Server/Modules/moduleshifting.py index 7b618a8..bb47da0 100644 --- a/Server/Modules/moduleshifting.py +++ b/Server/Modules/moduleshifting.py @@ -189,7 +189,7 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] @@ -200,26 +200,26 @@ def _get_info(self, repoName, fullname): for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -228,27 +228,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - def find_module(self, fullname, path=None): - + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) + + def create_module(self, spec): + return None - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): @@ -263,11 +259,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName): diff --git a/Server/Modules/pythonmemorymodule.py b/Server/Modules/pythonmemorymodule.py index 940d54c..76ea6ac 100644 --- a/Server/Modules/pythonmemorymodule.py +++ b/Server/Modules/pythonmemorymodule.py @@ -196,7 +196,7 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] @@ -207,26 +207,26 @@ def _get_info(self, repoName, fullname): for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -235,27 +235,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - def find_module(self, fullname, path=None): - + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) + + def create_module(self, spec): + return None - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): @@ -270,11 +266,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName): @@ -310,7 +306,7 @@ def hook_routine(fileName,zip_web): gcontext.verify_mode = ssl.CERT_NONE request = urllib.request.Request(pyramid_http + '://'+ pyramid_server + ':' + pyramid_port + encode_encrypt_url + \ base64.b64encode((encrypt_wrapper((zip_name+'.zip').encode(), encryption))).decode('utf-8'), \ - headers={'User-Agent': user_agent}) + headers={'User-Agent': user_agent}) base64string = base64.b64encode(bytes('%s:%s' % (pyramid_user, pyramid_pass),'ascii')) request.add_header("Authorization", "Basic %s" % base64string.decode('utf-8')) with urllib.request.urlopen(request, context=gcontext) as response: @@ -327,8 +323,8 @@ def hook_routine(fileName,zip_web): cwd=os.getcwd() if not extraction_dir: - extraction_dir=cwd - + extraction_dir=cwd + sys.path.insert(1,extraction_dir) ### separator --- is used by Pyramid server to look into the specified folder diff --git a/Server/Modules/secretsdump.py b/Server/Modules/secretsdump.py index f2b3969..8210091 100644 --- a/Server/Modules/secretsdump.py +++ b/Server/Modules/secretsdump.py @@ -216,7 +216,7 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] @@ -227,26 +227,26 @@ def _get_info(self, repoName, fullname): for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -255,27 +255,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - def find_module(self, fullname, path=None): - + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) + + def create_module(self, spec): + return None - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): @@ -290,11 +286,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName): diff --git a/Server/Modules/tunnel-socks5.py b/Server/Modules/tunnel-socks5.py index 2d37f98..4f71309 100644 --- a/Server/Modules/tunnel-socks5.py +++ b/Server/Modules/tunnel-socks5.py @@ -224,37 +224,37 @@ def __init__(self, repoName): self.repoName = repoName self._source_cache = {} - def _get_info(self, repoName, fullname): + def _get_info(self, fullname): """Search for the respective package or module in the zipfile object""" parts = fullname.split('.') submodule = parts[-1] modulepath = '/'.join(parts) + #check to see if that specific module exists for suffix, is_package in _search_order: relpath = modulepath + suffix try: - moduleRepo[repoName].getinfo(relpath) + moduleRepo[self.repoName].getinfo(relpath) except KeyError: pass else: return submodule, is_package, relpath #Error out if we can find the module/package - msg = ('Unable to locate module %s in the %s repo' % (submodule, repoName)) + msg = ('Unable to locate module %s in the %s repo' % (submodule, self.repoName)) raise ZipImportError(msg) - - def _get_source(self, repoName, fullname): + def _get_source(self, fullname): """Get the source code for the requested module""" - submodule, is_package, relpath = self._get_info(repoName, fullname) - fullpath = '%s/%s' % (repoName, relpath) + submodule, is_package, relpath = self._get_info(fullname) + fullpath = '%s/%s' % (self.repoName, relpath) if relpath in self._source_cache: source = self._source_cache[relpath] return submodule, is_package, fullpath, source try: ### added .decode - source = moduleRepo[repoName].read(relpath).decode() + source = moduleRepo[self.repoName].read(relpath).decode() #print(source) source = source.replace('\r\n', '\n') source = source.replace('\r', '\n') @@ -263,28 +263,23 @@ def _get_source(self, repoName, fullname): except: raise ZipImportError("Unable to obtain source for module %s" % (fullpath)) - - - def find_module(self, fullname, path=None): + def find_spec(self, fullname, path=None, target=None): try: - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) except ImportError: return None else: - return self + return importlib.util.spec_from_loader(fullname, self) + + def create_module(self, spec): + return None - def load_module(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + def exec_module(self, module): + submodule, is_package, fullpath, source = self._get_source(module.__name__) code = compile(source, fullpath, 'exec') - spec = importlib.util.spec_from_loader(fullname, loader=None) - mod = sys.modules.setdefault(fullname, importlib.util.module_from_spec(spec)) - mod.__loader__ = self - mod.__file__ = fullpath - mod.__name__ = fullname if is_package: - mod.__path__ = [os.path.dirname(mod.__file__)] - exec(code,mod.__dict__) - return mod + module.__path__ = [os.path.dirname(fullpath)] + exec(code, module.__dict__) def get_data(self, fullpath): prefix = os.path.join(self.repoName, '') @@ -298,11 +293,11 @@ def get_data(self, fullpath): def is_package(self, fullname): """Return if the module is a package""" - submodule, is_package, relpath = self._get_info(self.repoName, fullname) + submodule, is_package, relpath = self._get_info(fullname) return is_package def get_code(self, fullname): - submodule, is_package, fullpath, source = self._get_source(self.repoName, fullname) + submodule, is_package, fullpath, source = self._get_source(fullname) return compile(source, fullpath, 'exec') def install_hook(repoName):