From 8931ec2300242bb91f8fcf85c6dd2727548d88a3 Mon Sep 17 00:00:00 2001 From: mpgn Date: Sun, 10 May 2020 20:06:08 +0200 Subject: [PATCH] Add Windows spec file to compile CME for Windows --- .gitignore | 1 + cme/connection.py | 1 - cme/crackmapexec.py | 3 +++ cme/first_run.py | 2 ++ cme/protocols/smb/mmcexec.py | 1 - crackmapexec.spec | 33 +++++++++++++++++++++++++++++++++ 6 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 crackmapexec.spec diff --git a/.gitignore b/.gitignore index d04ba9b2..40a45133 100755 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ var/ # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec +!crackmapexec.spec # Installer logs pip-log.txt diff --git a/cme/connection.py b/cme/connection.py index 62fe533c..30d98e8b 100755 --- a/cme/connection.py +++ b/cme/connection.py @@ -5,7 +5,6 @@ from gevent.lock import BoundedSemaphore from gevent.socket import gethostbyname from functools import wraps from cme.logger import CMEAdapter -from cme.context import Context sem = BoundedSemaphore(1) global_failed_logins = 0 diff --git a/cme/crackmapexec.py b/cme/crackmapexec.py index 73855b64..491af9af 100755 --- a/cme/crackmapexec.py +++ b/cme/crackmapexec.py @@ -212,3 +212,6 @@ def main(): if module_server: module_server.shutdown() + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/cme/first_run.py b/cme/first_run.py index 2567499d..a1cf099e 100755 --- a/cme/first_run.py +++ b/cme/first_run.py @@ -10,6 +10,8 @@ from sys import exit CME_PATH = os.path.expanduser('~/.cme') TMP_PATH = os.path.join('/tmp', 'cme_hosted') +if os.name == 'nt': + TMP_PATH = os.getenv('LOCALAPPDATA') + '\\Temp\\cme_hosted' WS_PATH = os.path.join(CME_PATH, 'workspaces') CERT_PATH = os.path.join(CME_PATH, 'cme.pem') CONFIG_PATH = os.path.join(CME_PATH, 'cme.conf') diff --git a/cme/protocols/smb/mmcexec.py b/cme/protocols/smb/mmcexec.py index 929c3532..237867ed 100644 --- a/cme/protocols/smb/mmcexec.py +++ b/cme/protocols/smb/mmcexec.py @@ -31,7 +31,6 @@ import os from gevent import sleep from cme.helpers.misc import gen_random_string -from impacket import version from impacket.dcerpc.v5.dcom.oaut import IID_IDispatch, string_to_bin, IDispatch, DISPPARAMS, DISPATCH_PROPERTYGET, \ VARIANT, VARENUM, DISPATCH_METHOD from impacket.dcerpc.v5.dcomrt import DCOMConnection diff --git a/crackmapexec.spec b/crackmapexec.spec new file mode 100644 index 00000000..16e0ed7b --- /dev/null +++ b/crackmapexec.spec @@ -0,0 +1,33 @@ +# -*- mode: python ; coding: utf-8 -*- + +block_cipher = None + + +a = Analysis(['.\\cme\\crackmapexec.py'], + pathex=['.\\cme','.\\cme\\thirdparty\\pywerview'], + binaries=[], + datas=[('.\\cme\\protocols', 'cme\\protocols'),('.\\cme\\thirdparty', 'cme\\thirdparty'),('.\\cme\\data', 'cme\\data')], + hiddenimports=['cme.protocols.mssql.mssqlexec', 'cme.connection', 'impacket.examples.secretsdump', 'impacket.dcerpc.v5.lsat', 'impacket.dcerpc.v5.transport', 'impacket.dcerpc.v5.lsad', 'cme.servers.smb', 'cme.protocols.smb.wmiexec', 'cme.protocols.smb.atexec', 'cme.protocols.smb.smbexec', 'cme.protocols.smb.mmcexec', 'cme.protocols.smb.smbspider', 'cme.protocols.smb.passpol', 'paramiko', 'pypsrp.client', 'pywerview.cli.helpers', 'impacket.tds', 'impacket.version'], + hookspath=[], + runtime_hooks=[], + excludes=[], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=block_cipher, + noarchive=False) +pyz = PYZ(a.pure, a.zipped_data, + cipher=block_cipher) +exe = EXE(pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + [], + name='crackmapexec', + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + upx_exclude=[], + runtime_tmpdir=None, + console=True )