diff options
author | Jean-Marc Lenoir | 2017-11-28 13:56:13 +0100 |
---|---|---|
committer | Jean-Marc Lenoir | 2017-11-28 13:56:13 +0100 |
commit | 73a116f0432eca9813cccf6280e5b10c3d259b1d (patch) | |
tree | d984a9d0b7511f1b785f9424373a63573d13f6e5 /unlocker.py | |
parent | 0032b4ef43b89cef61a6e682e9d0aee7b24478f0 (diff) | |
download | aur-73a116f0432eca9813cccf6280e5b10c3d259b1d.tar.gz |
Update unlocker file
Diffstat (limited to 'unlocker.py')
-rwxr-xr-x[-rw-r--r--] | unlocker.py | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/unlocker.py b/unlocker.py index 90fc9e0446d8..e89fb9b997b0 100644..100755 --- a/unlocker.py +++ b/unlocker.py @@ -58,13 +58,6 @@ if sys.platform == 'win32' \ from _winreg import * -def rot13(s): - chars = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz' - trans = chars[26:] + chars[:26] - rotchar = lambda c: trans[chars.find(c)] if chars.find(c) > -1 else c - return ''.join(rotchar(c) for c in s) - - def bytetohex(data): if sys.version_info > (3, 0): # Python 3 code in this block @@ -74,8 +67,8 @@ def bytetohex(data): return "".join("{:02X} ".format(ord(c)) for c in data) -def joinpath(folder, file): - return os.path.join(folder, file) +def joinpath(folder, filename): + return os.path.join(folder, filename) def printkey(i, offset, smc_key, smc_data): @@ -89,6 +82,18 @@ def printkey(i, offset, smc_key, smc_data): + ' ' + bytetohex(smc_data)) +def set_bit(value, bit): + return value | (1 << bit) + + +def clear_bit(value, bit): + return value & ~(1 << bit) + + +def test_bit(value, bit): + return value & bit + + E_CLASS64 = 2 E_SHT_RELA = 4 @@ -116,7 +121,7 @@ def patchelf(f, oldoffset, newoffset): for i in range(0, e_shnum): f.seek(e_shoff + i * e_shentsize) e_sh = struct.unpack('=LLQQQQLLQQ', f.read(e_shentsize)) - e_sh_name = e_sh[0] + # e_sh_name = e_sh[0] e_sh_type = e_sh[1] e_sh_offset = e_sh[4] e_sh_size = e_sh[5] @@ -140,7 +145,7 @@ def patchelf(f, oldoffset, newoffset): def patchkeys(f, key): # Setup struct pack string key_pack = '=4sB4sB6xQ' - smc_old_memptr = 0 + # smc_old_memptr = 0 smc_new_memptr = 0 # Do Until OSK1 read @@ -166,7 +171,7 @@ def patchkeys(f, key): # Write new data routine pointer from +LKS print('OSK0 Key Before:') printkey(i, offset, smc_key, smc_data) - smc_old_memptr = smc_key[4] + # smc_old_memptr = smc_key[4] f.seek(offset) f.write(struct.pack(key_pack, smc_key[0], smc_key[1], smc_key[2], smc_key[3], smc_new_memptr)) f.flush() @@ -296,34 +301,33 @@ def patchbase(name): f = open(name, 'r+b') # Entry to search for in GOS table + # Should work for 12 & 14 of Workstation... darwin = ( '\x10\x00\x00\x00\x10\x00\x00\x00' '\x02\x00\x00\x00\x00\x00\x00\x00' '\x00\x00\x00\x00\x00\x00\x00\x00' '\x00\x00\x00\x00\x00\x00\x00\x00' - '\x3E' ) # Read file into string variable base = f.read() - # Loop thorugh each entry and set top bit - # 0x3E --> 0x3F + # Loop through each entry and set top bit + # 0xBE --> 0xBF (WKS 12) + # 0x3E --> 0x3F (WKS 14) offset = 0 while offset < len(base): offset = base.find(darwin, offset) if offset == -1: break f.seek(offset + 32) - flag = f.read(1) - if flag == '\x3E': - f.seek(offset + 32) - f.write('\x3F') - print('GOS Patched flag @: ' + hex(offset)) - else: - print('GOS Unknown flag @: ' + hex(offset) + '/' + hex(int(flag))) - - offset += 33 + flag = ord(f.read(1)) + flag = set_bit(flag, 0) + flag = chr(flag) + f.seek(offset + 32) + f.write(flag) + print('GOS Patched flag @: ' + hex(offset)) + offset += 40 # Tidy up f.flush() @@ -372,8 +376,7 @@ def main(): vmx = joinpath(vmx_path, 'vmware-vmx') vmx_debug = joinpath(vmx_path, 'vmware-vmx-debug') vmx_stats = joinpath(vmx_path, 'vmware-vmx-stats') - vmx_version = subprocess.check_output(["vmplayer", "-v"]) - if vmx_version.startswith('VMware Player 14'): + if os.path.isfile('/usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so'): vmx_so = True vmwarebase = '/usr/lib/vmware/lib/libvmwarebase.so/libvmwarebase.so' else: @@ -426,4 +429,4 @@ def main(): if __name__ == '__main__': - main()
\ No newline at end of file + main() |