summarylogtreecommitdiffstats
path: root/unlocker.py
diff options
context:
space:
mode:
authorJean-Marc Lenoir2017-11-28 13:56:13 +0100
committerJean-Marc Lenoir2017-11-28 13:56:13 +0100
commit73a116f0432eca9813cccf6280e5b10c3d259b1d (patch)
treed984a9d0b7511f1b785f9424373a63573d13f6e5 /unlocker.py
parent0032b4ef43b89cef61a6e682e9d0aee7b24478f0 (diff)
downloadaur-73a116f0432eca9813cccf6280e5b10c3d259b1d.tar.gz
Update unlocker file
Diffstat (limited to 'unlocker.py')
-rwxr-xr-x[-rw-r--r--]unlocker.py57
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()