Improved client; added recusrive fs functions
This commit is contained in:
parent
8d00509ab2
commit
531602a395
102
client.py
102
client.py
@ -1,29 +1,109 @@
|
||||
from adb import adb_commands
|
||||
from adb import sign_m2crypto
|
||||
import stat
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import json
|
||||
|
||||
queue = list()
|
||||
port = '/dev/ttyS3,115200'
|
||||
|
||||
# Connect to the device
|
||||
device = adb_commands.AdbCommands()
|
||||
# XCB over wifi
|
||||
#device.ConnectDevice(port_path=None, serial="192.168.43.168:5555")
|
||||
# XCB over serial port
|
||||
device.ConnectDevice(port_path=None, serial="/dev/ttyS11,115200")
|
||||
def init_device(addr):
|
||||
device = adb_commands.AdbCommands()
|
||||
device.ConnectDevice(port_path=None, serial=addr)
|
||||
#device.ConnectDevice(port_path=None, serial="192.168.43.168:5555")
|
||||
#device.ConnectDevice(port_path=None, serial="/dev/ttyS4,115200")
|
||||
return device
|
||||
|
||||
def scandir(path, device):
|
||||
files = []
|
||||
directories = []
|
||||
unknowns = []
|
||||
result = device.List(path)
|
||||
for i in result[2:]:
|
||||
if stat.S_ISDIR(i[1]):
|
||||
directories.append(i[0])
|
||||
if stat.S_ISREG(i[1]) and ((i[1] & stat.S_IRUSR) or (i[1] & stat.S_IRGRP) or (i[1] & stat.S_IROTH)):
|
||||
files.append(i[0])
|
||||
else:
|
||||
unknowns.append(i[0])
|
||||
return files, directories, unknowns
|
||||
|
||||
def tree(path, device):
|
||||
exclude = ["proc", "sys", "dev"]
|
||||
all_files = []
|
||||
all_directories = []
|
||||
all_unknowns = []
|
||||
queue = []
|
||||
current = path
|
||||
while True:
|
||||
files, directories, unknowns = scandir(current, device)
|
||||
for file in files:
|
||||
all_files.append(current + file.decode('utf-8'))
|
||||
for directory in directories:
|
||||
all_directories.append(current + directory.decode('utf-8') + '/')
|
||||
if directory.decode('utf-8') not in exclude:
|
||||
queue.append(current + directory.decode('utf-8') + '/')
|
||||
if not queue:
|
||||
break
|
||||
current = queue.pop()
|
||||
#print(current)
|
||||
|
||||
return all_files, all_directories, all_unknowns
|
||||
|
||||
device = init_device(port)
|
||||
if sys.argv[1] == 'ls':
|
||||
root = device.List(sys.argv[2])
|
||||
|
||||
for i in root:
|
||||
print(i[0].decode('utf-8') + ' Perm: ' + str(oct(i[1])) + ' Size: ' + str(i[2]))
|
||||
|
||||
if sys.argv[1] == 'download':
|
||||
if sys.argv[1] == 'pull':
|
||||
root = device.Pull(sys.argv[2], sys.argv[2].replace('/', '_'))
|
||||
print(root)
|
||||
|
||||
if sys.argv[1] == 'upload':
|
||||
if sys.argv[1] == 'push':
|
||||
root = device.Push(sys.argv[2], sys.argv[3])
|
||||
#root = device.Push(sys.argv[2], "/opt/testbin")
|
||||
|
||||
print(root)
|
||||
|
||||
if sys.argv[1] == 'logcat':
|
||||
logcat = device.Logcat()
|
||||
print(logcat)
|
||||
|
||||
if sys.argv[1] == 'forward':
|
||||
print("For port forwarding (ie: for gdbserver) use the original XCB client. xcb.exe connect com:COM12; xcb.exe forward tcp:2020 tcp:2020")
|
||||
print("The protocol for port forwarding should be ADB compatible. However python-adb doesn't support it as of now")
|
||||
|
||||
if sys.argv[1] == 'dump':
|
||||
name = sys.argv[2]
|
||||
print("[+] Listing everything")
|
||||
all_files, all_directories, all_unknowns = tree('/', device)
|
||||
print("[+] Creating local structure")
|
||||
target = "dumps/" + name + '/'
|
||||
if not os.path.isdir(target):
|
||||
os.mkdir(target)
|
||||
for dir in all_directories:
|
||||
if not os.path.isdir(target + dir):
|
||||
os.mkdir(target + dir)
|
||||
print("[+] Pulling all files")
|
||||
for file in all_files:
|
||||
if not os.path.isfile(target + file):
|
||||
time.sleep(1)
|
||||
try:
|
||||
device.Pull(file, target + file)
|
||||
print("[+] Downloading " + file)
|
||||
except:
|
||||
print("[-] Failed downloading " + file)
|
||||
os.remove(target + file)
|
||||
# This sucks but...
|
||||
device = None
|
||||
time.sleep(5)
|
||||
device = init_device(port)
|
||||
print("[+] Saving lists")
|
||||
with open(target + 'files.txt', 'w') as f:
|
||||
f.write(json.dumps(all_files))
|
||||
with open(target + 'directories.txt', 'w') as f:
|
||||
f.write(json.dumps(all_directories))
|
||||
with open(target + 'unknowns.txt', 'w') as f:
|
||||
f.write(json.dumps(all_unknowns))
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user