Initial Commit
This commit is contained in:
commit
d3706c129c
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
*.pyc
|
||||||
|
twrp.img
|
||||||
|
*.ab
|
||||||
|
*.tar.gz
|
31
helpers/adb/adb.py
Normal file
31
helpers/adb/adb.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
import os, time
|
||||||
|
from ppadb.client import Client as AdbClient
|
||||||
|
|
||||||
|
def connect_device():
|
||||||
|
os.system('adb start-server')
|
||||||
|
client = AdbClient(host="127.0.0.1", port=5037)
|
||||||
|
devices = client.devices()
|
||||||
|
if len(devices) == 1:
|
||||||
|
device = client.device(devices[0].serial)
|
||||||
|
return device
|
||||||
|
elif len(devices) == 0:
|
||||||
|
raise ConnectionError
|
||||||
|
else:
|
||||||
|
n = 1
|
||||||
|
for device in devices:
|
||||||
|
print(f'[{n}] {device.serial}')
|
||||||
|
n += 1
|
||||||
|
choice = input('Please enter the number of the device you would like\
|
||||||
|
to connect to: ')
|
||||||
|
device = client.device(devices[choice-1].serial)
|
||||||
|
return device
|
||||||
|
|
||||||
|
def shell(device, command):
|
||||||
|
return device.shell(command)
|
||||||
|
|
||||||
|
def reboot_bootloader():
|
||||||
|
print("Rebooting to Bootloader...")
|
||||||
|
os.system('adb reboot-bootloader')
|
||||||
|
|
||||||
|
def backup():
|
||||||
|
os.system('adb backup -all')
|
20
helpers/fastboot/fastboot.py
Normal file
20
helpers/fastboot/fastboot.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
import os, sys
|
||||||
|
def devices():
|
||||||
|
os.system('fastboot devices')
|
||||||
|
|
||||||
|
def unlock():
|
||||||
|
unlock = os.popen('fastboot getvar unlocked 2>&1').read()
|
||||||
|
if "yes" not in unlock:
|
||||||
|
check_unlock = os.popen('fastboot flashing get_unlock_ability 2>&1').read()
|
||||||
|
if check_unlock == "(bootloader) get_unlock_ability: 1":
|
||||||
|
input('Please note: Unlocking the bootloader will wipe any data on the device. If you need to pull data from a locked device please exit the program and use a different method!!')
|
||||||
|
os.system('fastboot flashing unlock')
|
||||||
|
input('Ensure that unlocking is complete on the device before pressing enter.')
|
||||||
|
else:
|
||||||
|
print("OEM Unlocking not supported on this device.")
|
||||||
|
sys.exit()
|
||||||
|
else:
|
||||||
|
print("Device already unlocked.")
|
||||||
|
|
||||||
|
def boot(img):
|
||||||
|
os.system('fastboot boot ' + img)
|
BIN
helpers/platform-tools/Linux/adb
Normal file
BIN
helpers/platform-tools/Linux/adb
Normal file
Binary file not shown.
BIN
helpers/platform-tools/Linux/fastboot
Normal file
BIN
helpers/platform-tools/Linux/fastboot
Normal file
Binary file not shown.
BIN
helpers/platform-tools/Linux/lib64/libc++.so
Normal file
BIN
helpers/platform-tools/Linux/lib64/libc++.so
Normal file
Binary file not shown.
BIN
helpers/platform-tools/Windows/AdbWinApi.dll
Normal file
BIN
helpers/platform-tools/Windows/AdbWinApi.dll
Normal file
Binary file not shown.
BIN
helpers/platform-tools/Windows/AdbWinUsbApi.dll
Normal file
BIN
helpers/platform-tools/Windows/AdbWinUsbApi.dll
Normal file
Binary file not shown.
BIN
helpers/platform-tools/Windows/adb.exe
Normal file
BIN
helpers/platform-tools/Windows/adb.exe
Normal file
Binary file not shown.
BIN
helpers/platform-tools/Windows/fastboot.exe
Normal file
BIN
helpers/platform-tools/Windows/fastboot.exe
Normal file
Binary file not shown.
BIN
helpers/platform-tools/Windows/libwinpthread-1.dll
Normal file
BIN
helpers/platform-tools/Windows/libwinpthread-1.dll
Normal file
Binary file not shown.
116
helpers/unpackBackup.py
Normal file
116
helpers/unpackBackup.py
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
# ABtoTar.py
|
||||||
|
# Change the Android Backup file (*.ab) into a tar for fun and profit.
|
||||||
|
# Basically; remove the first 24 bytes and replace them with a tar header.
|
||||||
|
# Ed Greybeard 2021
|
||||||
|
|
||||||
|
from tarfile import is_tarfile
|
||||||
|
import os.path
|
||||||
|
import logging
|
||||||
|
import argparse
|
||||||
|
from sys import exit
|
||||||
|
|
||||||
|
AB_HEADER = b"ANDROID BACKUP"
|
||||||
|
TAR_HEADER = b"\x1f\x8b\x08\x00\x00\x00\x00\x00"
|
||||||
|
IGNORE_OFFSET = 24
|
||||||
|
|
||||||
|
|
||||||
|
logging.basicConfig(format='%(asctime)s | %(levelname)s | %(message)s', level='DEBUG')
|
||||||
|
|
||||||
|
def extract_tar_from_ab(path_to_ab, output_dir=None):
|
||||||
|
"""
|
||||||
|
An AB file is a tar with 8 bytes added to the start.
|
||||||
|
This will extract the tar to the same directory as the AB file unless output_dir is specified.
|
||||||
|
:param path_to_ab:
|
||||||
|
:param output_dir:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
if output_dir is None:
|
||||||
|
output_dir = os.path.dirname(path_to_ab)
|
||||||
|
|
||||||
|
# Check we can open the file
|
||||||
|
try:
|
||||||
|
ab_data = open(path_to_ab, 'rb')
|
||||||
|
except:
|
||||||
|
logging.critical(f"Unable to open AB file at {path_to_ab}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Check the AB file header is intact
|
||||||
|
ab_bytes_to_remove = ab_data.read(24)
|
||||||
|
|
||||||
|
if ab_bytes_to_remove[:14] == AB_HEADER:
|
||||||
|
logging.info("AB Header checked and intact")
|
||||||
|
else:
|
||||||
|
logging.error("AB Header not found; is it definitely the right file?")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# Open the target tar file
|
||||||
|
output_path = build_tar_filepath(input_path, output_dir)
|
||||||
|
|
||||||
|
try:
|
||||||
|
output_file = open(output_path, 'wb')
|
||||||
|
except:
|
||||||
|
logging.error("Unable to open file at {output_path}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
logging.info("Writing tar header..")
|
||||||
|
output_file.write(TAR_HEADER)
|
||||||
|
|
||||||
|
logging.info("Writing rest of AB file..")
|
||||||
|
output_file.write(ab_data.read())
|
||||||
|
|
||||||
|
logging.info("..done.")
|
||||||
|
logging.info("Closing files..")
|
||||||
|
|
||||||
|
output_file.close()
|
||||||
|
ab_data.close()
|
||||||
|
|
||||||
|
# quick verify
|
||||||
|
try:
|
||||||
|
test_val = is_tarfile(output_path)
|
||||||
|
logging.info("Output verified OK")
|
||||||
|
return True
|
||||||
|
except:
|
||||||
|
logging.error("Verification failed; maybe it's encrypted?")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def build_tar_filepath(input_path, output_dir):
|
||||||
|
input_filename = os.path.splitext(os.path.basename(input_path))[0]
|
||||||
|
output_filename = f"{input_filename}.tar.gz"
|
||||||
|
logging.info(f"Output filename: {output_filename}")
|
||||||
|
output_filepath = os.path.join(output_dir, output_filename)
|
||||||
|
return output_filepath
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
logging.info("-------------------")
|
||||||
|
logging.info("AB to Tar")
|
||||||
|
logging.info("By Greybeard")
|
||||||
|
logging.info("-------------------")
|
||||||
|
logging.info("Global variables:")
|
||||||
|
logging.info(f"AB_HEADER: {AB_HEADER}")
|
||||||
|
logging.info(f"TAR_HEADER: {TAR_HEADER}")
|
||||||
|
logging.info(f"BYTES TO IGNORE: {IGNORE_OFFSET}")
|
||||||
|
|
||||||
|
parser = argparse.ArgumentParser(description="Convert an Android Backup (AB) file to a tar")
|
||||||
|
parser.add_argument('-i', '--input', dest='input_path', type=str, required=True, action='store',
|
||||||
|
help='AB file')
|
||||||
|
parser.add_argument('-o', '--output', dest='output_dir', type=str, default=None,
|
||||||
|
help='Output directory (default: same as AB file)')
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
input_path = args.input_path
|
||||||
|
output_dir = args.output_dir
|
||||||
|
|
||||||
|
if os.path.exists(input_path) is not True:
|
||||||
|
logging.critical(f"{input_path} not found. Exiting..")
|
||||||
|
exit(1)
|
||||||
|
|
||||||
|
logging.info(f"Input file: {input_path}")
|
||||||
|
|
||||||
|
if extract_tar_from_ab(input_path, output_dir) is True:
|
||||||
|
logging.info("Processing complete.")
|
||||||
|
else:
|
||||||
|
logging.info("Error with processing. Exiting..")
|
||||||
|
|
BIN
helpers/usb_driver/amd64/WUDFUpdate_01009.dll
Normal file
BIN
helpers/usb_driver/amd64/WUDFUpdate_01009.dll
Normal file
Binary file not shown.
BIN
helpers/usb_driver/amd64/WdfCoInstaller01009.dll
Normal file
BIN
helpers/usb_driver/amd64/WdfCoInstaller01009.dll
Normal file
Binary file not shown.
BIN
helpers/usb_driver/amd64/winusbcoinstaller2.dll
Normal file
BIN
helpers/usb_driver/amd64/winusbcoinstaller2.dll
Normal file
Binary file not shown.
195
helpers/usb_driver/android_winusb.inf
Normal file
195
helpers/usb_driver/android_winusb.inf
Normal file
@ -0,0 +1,195 @@
|
|||||||
|
;
|
||||||
|
; Android WinUsb driver installation.
|
||||||
|
;
|
||||||
|
[Version]
|
||||||
|
Signature = "$Windows NT$"
|
||||||
|
Class = AndroidUsbDeviceClass
|
||||||
|
ClassGuid = {3F966BD9-FA04-4ec5-991C-D326973B5128}
|
||||||
|
Provider = %ProviderName%
|
||||||
|
DriverVer = 08/28/2014,11.0.0000.00000
|
||||||
|
CatalogFile.NTx86 = androidwinusb86.cat
|
||||||
|
CatalogFile.NTamd64 = androidwinusba64.cat
|
||||||
|
|
||||||
|
[ClassInstall32]
|
||||||
|
Addreg = AndroidWinUsbClassReg
|
||||||
|
|
||||||
|
[AndroidWinUsbClassReg]
|
||||||
|
HKR,,,0,%ClassName%
|
||||||
|
HKR,,Icon,,-1
|
||||||
|
|
||||||
|
|
||||||
|
[Manufacturer]
|
||||||
|
%ProviderName% = Google, NTx86, NTamd64
|
||||||
|
|
||||||
|
|
||||||
|
[Google.NTx86]
|
||||||
|
|
||||||
|
;Google Nexus One
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
|
||||||
|
|
||||||
|
;Google Nexus S
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
|
||||||
|
|
||||||
|
;Google Nexus 7
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
|
||||||
|
|
||||||
|
;Google Nexus Q
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
|
||||||
|
|
||||||
|
;Google Nexus (generic)
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE7
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_D001
|
||||||
|
|
||||||
|
;Google Glass
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9001
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9001&MI_01
|
||||||
|
|
||||||
|
;Google Glass EE1
|
||||||
|
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9003
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9003&MI_01
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9004
|
||||||
|
|
||||||
|
;Google Glass EE2
|
||||||
|
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9005
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9005&MI_00
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9006
|
||||||
|
|
||||||
|
;Project Tango (generic)
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4D00
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D02&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D04&MI_02
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D06&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D07
|
||||||
|
|
||||||
|
|
||||||
|
[Google.NTamd64]
|
||||||
|
|
||||||
|
;Google Nexus One
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_0D02&MI_01
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E11
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E12&MI_01
|
||||||
|
|
||||||
|
;Google Nexus S
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E21
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E22&MI_01
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_4E23
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E24&MI_01
|
||||||
|
|
||||||
|
;Google Nexus 7
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4E40
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E42&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4E44&MI_01
|
||||||
|
|
||||||
|
;Google Nexus Q
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_2C10
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_2C11
|
||||||
|
|
||||||
|
;Google Nexus (generic)
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4EE0
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE2&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE4&MI_02
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE6&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4EE7
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_D001
|
||||||
|
|
||||||
|
;Google Glass
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9001
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9001&MI_01
|
||||||
|
|
||||||
|
;Google Glass EE1
|
||||||
|
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9003
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9003&MI_01
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9004
|
||||||
|
|
||||||
|
;Google Glass EE2
|
||||||
|
|
||||||
|
%SingleAdbInterface% = USB_Install, USB\VID_18D1&PID_9005
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_9005&MI_00
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_9006
|
||||||
|
|
||||||
|
;Project Tango (generic)
|
||||||
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_18D1&PID_4D00
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D02&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D04&MI_02
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D06&MI_01
|
||||||
|
%CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_4D07
|
||||||
|
|
||||||
|
|
||||||
|
[USB_Install]
|
||||||
|
Include = winusb.inf
|
||||||
|
Needs = WINUSB.NT
|
||||||
|
|
||||||
|
[USB_Install.Services]
|
||||||
|
Include = winusb.inf
|
||||||
|
AddService = WinUSB,0x00000002,WinUSB_ServiceInstall
|
||||||
|
|
||||||
|
[WinUSB_ServiceInstall]
|
||||||
|
DisplayName = %WinUSB_SvcDesc%
|
||||||
|
ServiceType = 1
|
||||||
|
StartType = 3
|
||||||
|
ErrorControl = 1
|
||||||
|
ServiceBinary = %12%\WinUSB.sys
|
||||||
|
|
||||||
|
[USB_Install.Wdf]
|
||||||
|
KmdfService = WINUSB, WinUSB_Install
|
||||||
|
|
||||||
|
[WinUSB_Install]
|
||||||
|
KmdfLibraryVersion = 1.9
|
||||||
|
|
||||||
|
[USB_Install.HW]
|
||||||
|
AddReg = Dev_AddReg
|
||||||
|
|
||||||
|
[Dev_AddReg]
|
||||||
|
HKR,,DeviceInterfaceGUIDs,0x10000,"{F72FE0D4-CBCB-407d-8814-9ED673D0DD6B}"
|
||||||
|
|
||||||
|
[USB_Install.CoInstallers]
|
||||||
|
AddReg = CoInstallers_AddReg
|
||||||
|
CopyFiles = CoInstallers_CopyFiles
|
||||||
|
|
||||||
|
[CoInstallers_AddReg]
|
||||||
|
HKR,,CoInstallers32,0x00010000,"WdfCoInstaller01009.dll,WdfCoInstaller","WinUSBCoInstaller2.dll"
|
||||||
|
|
||||||
|
[CoInstallers_CopyFiles]
|
||||||
|
WinUSBCoInstaller2.dll
|
||||||
|
WdfCoInstaller01009.dll
|
||||||
|
|
||||||
|
[DestinationDirs]
|
||||||
|
CoInstallers_CopyFiles=11
|
||||||
|
|
||||||
|
[SourceDisksNames]
|
||||||
|
1 = %DISK_NAME%,,,\i386
|
||||||
|
2 = %DISK_NAME%,,,\amd64
|
||||||
|
|
||||||
|
[SourceDisksFiles.x86]
|
||||||
|
WinUSBCoInstaller2.dll = 1
|
||||||
|
WdfCoInstaller01009.dll = 1
|
||||||
|
|
||||||
|
[SourceDisksFiles.amd64]
|
||||||
|
WinUSBCoInstaller2.dll = 2
|
||||||
|
WdfCoInstaller01009.dll = 2
|
||||||
|
|
||||||
|
[Strings]
|
||||||
|
ProviderName = "Google, Inc."
|
||||||
|
SingleAdbInterface = "Android ADB Interface"
|
||||||
|
CompositeAdbInterface = "Android Composite ADB Interface"
|
||||||
|
SingleBootLoaderInterface = "Android Bootloader Interface"
|
||||||
|
WinUSB_SvcDesc = "Android USB Driver"
|
||||||
|
DISK_NAME = "Android WinUsb installation disk"
|
||||||
|
ClassName = "Android Device"
|
BIN
helpers/usb_driver/androidwinusb86.cat
Normal file
BIN
helpers/usb_driver/androidwinusb86.cat
Normal file
Binary file not shown.
BIN
helpers/usb_driver/androidwinusba64.cat
Normal file
BIN
helpers/usb_driver/androidwinusba64.cat
Normal file
Binary file not shown.
BIN
helpers/usb_driver/i386/WUDFUpdate_01009.dll
Normal file
BIN
helpers/usb_driver/i386/WUDFUpdate_01009.dll
Normal file
Binary file not shown.
BIN
helpers/usb_driver/i386/WdfCoInstaller01009.dll
Normal file
BIN
helpers/usb_driver/i386/WdfCoInstaller01009.dll
Normal file
Binary file not shown.
BIN
helpers/usb_driver/i386/winusbcoinstaller2.dll
Normal file
BIN
helpers/usb_driver/i386/winusbcoinstaller2.dll
Normal file
Binary file not shown.
3
helpers/usb_driver/source.properties
Normal file
3
helpers/usb_driver/source.properties
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Pkg.Revision=13
|
||||||
|
Archive.HostOs=WINDOWS
|
||||||
|
Extra.Path=usb_driver
|
32
install.py
Normal file
32
install.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
from shutil import which
|
||||||
|
import os, sys, platform
|
||||||
|
|
||||||
|
|
||||||
|
def install_adb_fastboot_windows():
|
||||||
|
if which('adb') is None and which('fastboot') is None:
|
||||||
|
print('ADB/Fastboot not found. Temporarily adding to PATH...')
|
||||||
|
os.environ['PATH'] += ';'+os.getcwd()+'\\helpers\\platform-tools\\Windows'
|
||||||
|
os.system('C:\\Windows\\System32\\PNPUTIL.exe -i -a ' + os.getcwd(),
|
||||||
|
+ '\\helpers\\usb_driver\\android_winusb.inf')
|
||||||
|
else:
|
||||||
|
print('ADB/Fastboot are installed')
|
||||||
|
|
||||||
|
|
||||||
|
def install_adb_fastboot_linux():
|
||||||
|
if which('adb') is None and which('fastboot') is None:
|
||||||
|
print('ADB/Fastboot not found. Temporarily adding to PATH...')
|
||||||
|
os.environ['PATH'] += ';'+os.getcwd()+'\\helpers\\platform-tools\\Linux'
|
||||||
|
else:
|
||||||
|
print('ADB/Fastboot are installed')
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if platform.system() == 'Linux':
|
||||||
|
install_adb_fastboot_linux()
|
||||||
|
elif platform.system() == 'Windows':
|
||||||
|
install_adb_fastboot_windows()
|
||||||
|
else:
|
||||||
|
print('Unsupported OS')
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
69
main.py
Normal file
69
main.py
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
import helpers.adb.adb as adb, helpers.fastboot.fastboot as fastboot, install, time, os, requests, urllib.request, sys, helpers.unpackBackup as unpackBackup
|
||||||
|
from lxml import html
|
||||||
|
|
||||||
|
def download_twrp():
|
||||||
|
cpu = os.popen('adb shell getprop ro.product.board').read()
|
||||||
|
cpu = cpu.rstrip('\n')
|
||||||
|
r = urllib.request.urlopen('https://dl.twrp.me/'+str(cpu))
|
||||||
|
text = r.read().decode('utf-8')
|
||||||
|
tree = html.fromstring(text)
|
||||||
|
urls = tree.xpath('//a/@href')
|
||||||
|
downloads = []
|
||||||
|
for i in urls:
|
||||||
|
if "img" in i:
|
||||||
|
downloads.append(i)
|
||||||
|
url_to_download = "https://dl.twrp.me"+downloads[0]
|
||||||
|
url_to_download = url_to_download.replace('.html', '')
|
||||||
|
s = requests.Session()
|
||||||
|
s.headers.update({'referer': url_to_download})
|
||||||
|
img = s.get(url_to_download)
|
||||||
|
with open("twrp.img", 'wb') as f:
|
||||||
|
f.write(img.content)
|
||||||
|
|
||||||
|
def device_pull():
|
||||||
|
install.main()
|
||||||
|
print("connecting device...")
|
||||||
|
try:
|
||||||
|
device = adb.connect_device()
|
||||||
|
except:
|
||||||
|
print("Unable to connect to device. Ensure that Debug Mode is enabled and USB Debugging is allowed")
|
||||||
|
sys.exit()
|
||||||
|
print("getting twrp...")
|
||||||
|
download_twrp()
|
||||||
|
adb.reboot_bootloader()
|
||||||
|
fastboot.devices()
|
||||||
|
fastboot.unlock()
|
||||||
|
fastboot.boot('./twrp.img')
|
||||||
|
time.sleep(20)
|
||||||
|
try:
|
||||||
|
device = adb.connect_device()
|
||||||
|
except:
|
||||||
|
time.sleep(10)
|
||||||
|
device = adb.connect_device()
|
||||||
|
command = adb.shell(device, "whoami")
|
||||||
|
print(command)
|
||||||
|
|
||||||
|
def menu():
|
||||||
|
print('Acquisition Script for Mobile Resources')
|
||||||
|
print("---------------------------------------")
|
||||||
|
print("[1] Device Pull")
|
||||||
|
print("[2] Application Pull")
|
||||||
|
print("[3] ADB Backup")
|
||||||
|
print("[99] Exit")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
menu()
|
||||||
|
choice = int(input("Please select an option: "))
|
||||||
|
match choice:
|
||||||
|
case 1:
|
||||||
|
device_pull()
|
||||||
|
case 2:
|
||||||
|
pass
|
||||||
|
case 3:
|
||||||
|
adb.backup()
|
||||||
|
os.system("python helpers/unpackBackup.py -i ./backup.ab")
|
||||||
|
case 99:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
Loading…
x
Reference in New Issue
Block a user