Browse Source

Added parcel parser and fixed shell functionality

master
Raphael Roberts 8 years ago
parent
commit
caab7cc4d6
  1. 49
      adb.py

49
adb.py

@ -15,6 +15,29 @@ exe = defaults['exe']
for key,value in defaults['local'].items(): for key,value in defaults['local'].items():
defaults['local'][key] = os.path.expandvars(value) defaults['local'][key] = os.path.expandvars(value)
def decode_parcel(s):
bytes_pat = re.compile(r'(?<!0x)[a-f0-9]{8}')
res = ''
bytes_str = ''.join(match.group(0) for match in bytes_pat.finditer(s))
for p in range(0,len(bytes_str),2):
c= chr(int(bytes_str[p:p+2],16))
res += c
if '$' in res:
res = re.search(r'(?<=\$).+',res).group(0)
fres = ''
for c in range(0,len(res),4):
a = res[c:c+2]
b = res[c+2:c+4]
fres += b+a
return fres
else:
try:
return int(bytes_str,16)
except:
print(bytes_str,s)
def merge(src, dst,log = False): def merge(src, dst,log = False):
if not os.path.exists(dst): if not os.path.exists(dst):
return False return False
@ -86,14 +109,15 @@ class device:
def adb(self,*args,out = False): def adb(self,*args,out = False):
args = ['-s',self.serial]+ list(args) args = ['-s',self.serial]+ list(args)
return _adb(*args,out = out) return _adb(*args,out = out)
def sudo(self,*args,out = False,pie=True):
if self.mode == 'recovery':
args.insert(0,"shell")
def shell(self,*args,out=False):
args = ('shell',)+args
return self.adb(*args,out=out) return self.adb(*args,out=out)
def sudo(self,*args,out = False):
if self.mode == 'recovery':
return self.shell(*args,out=out)
else: else:
args = '"{}"'.format(' '.join(args).replace('"','\\"')) args = '"{}"'.format(' '.join(args).replace('"','\\"'))
return self.adb('shell','su','-c',args,out = out)
return self.shell('su','-c',args,out = out)
#end of cammand interface #end of cammand interface
#file operations #file operations
@ -163,7 +187,7 @@ fi'''
if mode: if mode:
if mode == "soft": if mode == "soft":
if self.mode != 'recovery': if self.mode != 'recovery':
pid = self.adb("shell","pidof","zygote",out = True)
pid = self.shell("pidof","zygote",out = True)
return self.sudo("kill",pid,out=False) return self.sudo("kill",pid,out=False)
else: else:
return self.reboot() return self.reboot()
@ -184,12 +208,15 @@ fi'''
keycode = keycodes[code] keycode = keycodes[code]
except KeyError: except KeyError:
keycode = str(code) keycode = str(code)
self.adb("shell","input","keyevent",keycode)
self.shell("input","keyevent",keycode)
def unlock_phone(self,pin): def unlock_phone(self,pin):
if self.mode != 'recovery':
if not decode_parcel(self.shell('service','call', 'power','12',out=True)):
self.send_keycode('power') self.send_keycode('power')
if decode_parcel(self.shell('service','call','trust','7',out=True)):
self.send_keycode('space') self.send_keycode('space')
self.adb("shell","input","text",str(pin))
self.shell("input","text",str(pin))
self.send_keycode('enter') self.send_keycode('enter')
#end of convenience #end of convenience
@ -213,12 +240,12 @@ fi'''
name = "backup_"+datetime.datetime.today().strftime(defaults['date_format']) name = "backup_"+datetime.datetime.today().strftime(defaults['date_format'])
filename = os.path.join(backupdir,name) filename = os.path.join(backupdir,name)
self.adb("shell","twrp","backup",options,name)
self.shell("twrp","backup",options,name)
phone_dir = "/data/media/0/TWRP/BACKUPS/{serial}/{name}".format(serial = self.serial,name = name) phone_dir = "/data/media/0/TWRP/BACKUPS/{serial}/{name}".format(serial = self.serial,name = name)
self.move(phone_dir,filename) self.move(phone_dir,filename)
def wipe(self,partition): def wipe(self,partition):
self.adb("shell","twrp","wipe",partition)
self.shell("twrp","wipe",partition)
@ -232,7 +259,7 @@ fi'''
else: else:
update_path = '{}/{}'.format(defaults['remote']['updates'],name) update_path = '{}/{}'.format(defaults['remote']['updates'],name)
self.adb("shell","twrp","install",update_path)
self.shell("twrp","install",update_path)
#end of twrp #end of twrp
if __name__ == "__main__" and debug: if __name__ == "__main__" and debug:

Loading…
Cancel
Save