From 6c8b75712989e842fb8fd1ca22c68ae0a4cf1a4e Mon Sep 17 00:00:00 2001 From: Dave Parsons Date: Mon, 14 Sep 2015 13:51:31 +0100 Subject: [PATCH] Fixes for Workstation 12 on Linux --- lnx-install.sh | 6 +++++- lnx-uninstall.sh | 6 +++++- unlocker.py | 29 +++++++++++++++-------------- 3 files changed, 25 insertions(+), 16 deletions(-) diff --git a/lnx-install.sh b/lnx-install.sh index f42fddc..4407574 100755 --- a/lnx-install.sh +++ b/lnx-install.sh @@ -20,7 +20,11 @@ mkdir -p "./backup" cp -v /usr/lib/vmware/bin/vmware-vmx ./backup/ cp -v /usr/lib/vmware/bin/vmware-vmx-debug ./backup/ cp -v /usr/lib/vmware/bin/vmware-vmx-stats ./backup/ -cp -v /usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0 ./backup/ +if [ -d /usr/lib/vmware/lib/libvmwarebase.so.0/ ]; then + cp -v /usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0 ./backup/ +elif [ -d /usr/lib/vmware/lib/libvmwarebase.so/ ]; then + cp -v /usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so ./backup/ +fi echo Patching... python2 ./unlocker.py diff --git a/lnx-uninstall.sh b/lnx-uninstall.sh index 16aabaa..f5f5c3c 100755 --- a/lnx-uninstall.sh +++ b/lnx-uninstall.sh @@ -18,7 +18,11 @@ echo Restoring files... cp -v ./backup/vmware-vmx /usr/lib/vmware/bin/ cp -v ./backup/vmware-vmx-debug /usr/lib/vmware/bin/ cp -v ./backup/vmware-vmx-stats /usr/lib/vmware/bin/ -cp -v ./backup/libvmwarebase.so.0 /usr/lib/vmware/lib/libvmwarebase.so.0/ +if [ -d /usr/lib/vmware/lib/libvmwarebase.so.0/ ]; then + cp -v ./backup/libvmwarebase.so.0 /usr/lib/vmware/lib/libvmwarebase.so.0/ +elif [ -d /usr/lib/vmware/lib/libvmwarebase.so/ ]; then + cp -v ./backup/libvmwarebase.so /usr/lib/vmware/lib/libvmwarebase.so/ +fi echo Removing backup files... rm -rf ./backup diff --git a/unlocker.py b/unlocker.py index 8b25a80..aa1ff31 100755 --- a/unlocker.py +++ b/unlocker.py @@ -43,6 +43,7 @@ Offset Length struct Type Description import os import sys import struct +import subprocess if sys.version_info < (2, 7): sys.stderr.write('You need Python 2.7 or later\n') @@ -197,7 +198,7 @@ def patchkeys(f, vmx, key, osname): i += 1 return smc_old_memptr, smc_new_memptr -def patchsmc(name, osname): +def patchsmc(name, osname, so): with open(name, 'r+b') as f: # Read file into string variable @@ -259,7 +260,7 @@ def patchsmc(name, osname): # Find matching RELA record in .rela.dyn in ESXi ELF files # This is temporary code until proper ELF parsing written - if osname == 'vmkernel': + if so == True: print 'Modifying RELA records from: ' + hex(smc_old_memptr) + ' to ' + hex(smc_new_memptr) patchELF(f, smc_old_memptr, smc_new_memptr) @@ -333,6 +334,8 @@ def main(): else: osname = os.uname()[0].lower() + vmx_so = False + # Setup default paths if osname == 'darwin': vmx_path = '/Applications/VMware Fusion.app/Contents/Library/' @@ -346,13 +349,19 @@ def main(): vmx = vmx_path + 'vmware-vmx' vmx_debug = vmx_path + 'vmware-vmx-debug' vmx_stats = vmx_path + 'vmware-vmx-stats' - vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0' + vmx_version = subprocess.check_output(["vmware", "-v"]) + if vmx_version.startswith('VMware Workstation 12'): + vmx_so = True + vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so' + else: + vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so.0/libvmwarebase.so.0' elif osname == 'vmkernel': vmx_path = '/unlocker/' vmx = vmx_path + 'vmx' vmx_debug = vmx_path + 'vmx-debug' vmx_stats = vmx_path + 'vmx-stats' + vmx_so = True vmwarebase = '' libvmkctl = vmx_path + 'libvmkctl.so' @@ -370,19 +379,11 @@ def main(): print('Unknown Operating System: ' + osname) return - # Test - remove - # osname = 'vmkernel' - # vmx = 'D:\\vmware\\test\\patched\\vmx' - # vmx_debug = 'D:\\vmware\\test\\patched\\vmx-debug' - # vmx_stats = 'D:\\vmware\\test\\patched\\vmx-stats' - # vmwarebase = '' - # libvmkctl = 'D:\\vmware\\test\\patched\\libvmkctl.so' - # Patch the vmx executables skipping stats version for Player - patchsmc(vmx, osname) - patchsmc(vmx_debug, osname) + patchsmc(vmx, osname, vmx_so) + patchsmc(vmx_debug, osname, vmx_so) try: - patchsmc(vmx_stats, osname) + patchsmc(vmx_stats, osname, vmx_so) except IOError: pass