Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

VMwareVMX

VMware VMX Crypto Module for Python

VMware VMX configuration files are encrypted when the virtual machine is encrypted, too. Making specific changes by hand to these files was not possible until the user fully decrypted the virtual machine (including all virtual disks) and, after the modification was done, re-encrypted the whole virtual machine again. Until this little module was written, which implements the methods to decrypt and encrypt the configuration data.

Prerequisites:

The pycryptodome Module is used, so it must be installed like this:

pip install pycryptodome

Installation:

Currently there's no installation procedure. All you have to do is to import the class VMwareVMX with a line like this:

from vmwarevmx import VMwareVMX

Available Modules, Commands and Tools

vmwarevmx.py implements the VMwareVMX class with methods decrypt and encrypt.

main.py is a command line interface to decrypt/encrypt VMware VMX configuration files and to add and/or remove lines. It also serves as an example on how to use the VMwareVMX class.

Examples:

List all options (usage):

./main.py -h

Usage: main.py [-cdefgGhinv] [-a file] [-D name] [-p password] [-r file] [-x value] in_file [out_file]
-a, --add decrypt, add line(s) from file and encrypt in_file
-c, --change change password
-d, --decrypt decrypt in_file (default)
-D, --displayname set the displayname for encrypted configuration
-e, --encrypt encrypt in_file
-f, --force force overwriting out_file
-g, --guestos set the guestOS parameter
-G, --guestinfo set the guestInfo parameter
-h, --help display this message
-i, --ignore ignore some errors preventing decryption of a corrupted in_file
-n, --new after decrypt, use new parameters for encrypt
-p, --password set the password (default: ask for it)
-r, --remove decrypt, remove line(s) found in file and encrypt in_file
-v, --version print the version string and exit
-x, --hashrounds used for the number of hash rounds of the encryption key (default: 10,000)
-1, --aes encrypt with old AES-256 algorithm
-2, --xts encrypt with new XTS-AES-256 algorithm

Decrypt an encrypted VMX config file:

./main.py old.vmx

Will ask for the password, decrypts the VMX file old.vmx and writes the result directly to stdout.

Encrypt a regular VMX config file:

./main.py -e -D "Windows 10" -p test1234 old.vmx new.vmx

Encrypts the VMX file old.vmx with password test1234, adds the display name "Windows 10" to the config file and writes the result to new.vmx. If new.vmx already exists, it's not overwritten. Add -f or --force to do so.

Decrypt a VMX config file, remove some lines, add lines and encrypt it:

./main.py -a add.txt -r remove.txt old.vmx new.vmx

Will ask for the password, decrypts the VMX file old.vmx, removes all the lines that can be found in remove.txt from the configuration, adds new lines from add.txt, encrypts the result and writes the configuration to new.vmx, overwriting an already existing new.vmx file. The keys and parameters used for encryption are identical to those used in the encrypted file old.vmx, which means that the encryption.keySafe line is the same in old.vmx and new.vmx. To use completely new keys and encryption parameters, add -n or --new to the options.

Change the password of a VMX config file:

./main.py -c old.vmx new.vmx

This asks for the old password if not already given with the -p option and then asks twice for the new password. If the new passwords match, the new password is used for new.vmx.

Changes

1.0.8:

  • Several strings were transfered into raw strings to avoid 'invalid escape sequence' warnings with Python 3.12+. Thanks to clouetb for the pull request to fix this.
  • Converting a XTS-AES-256 key into AES-256 is now supported by reusing the first 256 bits of the key.
  • Converting an AES-256 key into XTS-AES-256 reuses the existing key by adding 256 random bits for the longer 512 bit HMAC key.
  • First release of VMXEditor which is a simple text editor using the VMwareVMX module. Now you can open a VMX file, decrypt it, modify it, encrypt it again with the same password (or a different one) and save it. It even comes with undo/redo and a simple search function, but no search-and-replace. Cut, copy and paste is supported, so if you need to replace some text, just use a normal editor for that. The whole editor should be pretty self-explanatory, I hope, and it should run on any operating system supporting python.

1.0.7:

  • Fixed password bug in main.py (-p option didn't work anymore) which was introduced with 1.0.6. Thanks to RomanKrylov for noticing me.
  • Added two new options (-1, --aes and -2, --xts) for selecting the encryption algorithm. This allows both upgrading and downgrading.
  • Fixed an issue with the VMwareVMX class which forgot to reset the config key used to encrypt the configuration when the encryption algorithm was changed

1.0.6:

  • Added support for new XTS-AES-256 algorithm introduced with VMware Workstation 17.5 and VMware Fusion 13.5 (which is in fact not the real XTS-AES algorithm). Thanks to mroi for most of the work.
  • Python 2 support has been removed

1.0.5:

  • New option -G (or --guestinfo) defines the guestInfo parameter.
  • Added public attribute "hash_rounds" with the number of hash rounds used for the PBKDF2-HMAC-SHA-1 hashing algorithm.

1.0.4:

  • Fix: Added UTF-8 encoding on file encryption (thanks Knoxberg)
  • Added password change and guestos options:
    • New option -c (or --change) allows one to change the password of a VMX file without shutting down and restarting the client machine.
    • New option -g (or --guestos) defines the guestOS parameter.
  • Wrong password during decryption now results in a correct error message.

1.0.3:

  • Fix: Do not add "None" to output file if guestOSdetaileddata is empty (thanks jbl42)

1.0.2:

  • Added -i (--ignore) option to be able to open a corrupted .vmx file by ignoring some errors happening during decryption. Due to the nature of the AES encryption, this only works up to the point where the file got corrupted. If it's in the beginning, not much of it will be recovered.
  • Replaced pad() function with Crypto.Util.Padding.pad() and fixed the error of padding before encoding. Thanks to mroi.

Author

Written 2018-2024 by Robert Federle r.federle3@gmx.de

About

VMware VMX Crypto Module for Python

Resources

Stars

103 stars

Watchers

7 watching

Forks

Releases

Packages

Contributors

Languages