Compare commits

..
Author SHA1 Message Date
Jörg Sommer 5f3fb8c48d README: Add description for using virtual environment
At least, Debian is a bit picky on running *pip* as root and it doesn't
provide a package for InquirerPy. So, the best way is to use a virtual
environment for Python.
2023-06-04 11:05:12 +02:00
Jörg Sommer ec979de9b6 README: Add requirements.txt and fix spelling 2023-06-04 10:08:08 +02:00
15 changed files with 109 additions and 260 deletions
-3
View File
@@ -105,7 +105,4 @@ venv.bak/
# mypy # mypy
.mypy_cache/ .mypy_cache/
# nix
result*
test.py test.py
+33 -35
View File
@@ -1,6 +1,5 @@
# Waydroid Extras Script # Waydroid Extras Script
Script to add gapps and other stuff to waydroid !
Script to add GApps and other stuff to Waydroid!
# Installation/Usage # Installation/Usage
@@ -9,9 +8,18 @@ Script to add GApps and other stuff to Waydroid!
``` ```
git clone https://github.com/casualsnek/waydroid_script git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script cd waydroid_script
python3 -m venv venv sudo python3 -m pip install -r requirements.txt
venv/bin/pip install -r requirements.txt sudo python main.py
sudo venv/bin/python3 main.py ```
or use a Python virtual environment:
```
git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script
python3 -m venv --upgrade-deps .venv
.venv/bin/pip install -r requirements.txt
sudo .venv/bin/python main.py
``` ```
![image-20230430013103883](assets/img/README/image-20230430013103883.png) ![image-20230430013103883](assets/img/README/image-20230430013103883.png)
@@ -24,20 +32,17 @@ sudo venv/bin/python3 main.py
## Command Line ## Command Line
```bash
git clone https://github.com/casualsnek/waydroid_script git clone https://github.com/casualsnek/waydroid_script
cd waydroid_script cd waydroid_script
python3 -m venv venv sudo python3 -m pip install -r requirements.txt
venv/bin/pip install -r requirements.txt
# install something # install something
sudo venv/bin/python3 main.py install {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg, mitm} sudo python3 main.py install {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg}
# uninstall something # uninstall something
sudo venv/bin/python3 main.py uninstall {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg} sudo python3 main.py uninstall {gapps, magisk, libndk, libhoudini, nodataperm, smartdock, microg}
# get Android device ID # get Android device ID
sudo venv/bin/python3 main.py certified sudo python main.py certified
# some hacks # some hacks
sudo venv/bin/python3 main.py hack {nodataperm, hidestatusbar} sudo python3 hack {nodataperm, hidestatusbar}
```
## Dependencies ## Dependencies
@@ -55,19 +60,18 @@ sudo venv/bin/python3 main.py hack {nodataperm, hidestatusbar}
![](assets/1.png) ![](assets/1.png)
Open terminal and switch to the directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install gapps sudo python3 main.py install gapps
Then launch waydroid with: Then launch waydroid with:
waydroid show-full-ui waydroid show-full-ui
After waydroid has finished booting, open terminal and switch to directory where "main.py" is located then run: After waydroid has finished booting open terminal and switch to directory where "main.py" is located then run:
sudo python3 main.py google sudo python3 main.py google
Copy the returned numeric ID, then open ["https://google.com/android/uncertified/?pli=1"](https://google.com/android/uncertified/?pli=1). Enter the ID and register it. Wait 10-20 minutes for device to get registered. Then clear Google Play Service's cache and try logging in! Copy the returned numeric ID open ["https://google.com/android/uncertified/?pli=1"](https://google.com/android/uncertified/?pli=1) enter the id and register it, you may need to wait upto 10-20 minutes for device to get registered, then clear Google Play Service's cache and try logging in !
## Install Magisk ## Install Magisk
@@ -75,7 +79,7 @@ Copy the returned numeric ID, then open ["https://google.com/android/uncertified
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install magisk sudo python3 main.py install magisk
Magisk will be installed on next boot ! Magisk will be installed on next boot !
@@ -93,7 +97,7 @@ libndk seems to have better performance than libhoudini on AMD.
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install libndk sudo python3 main.py install libndk
## Install libhoudini arm translation ## Install libhoudini arm translation
@@ -105,7 +109,7 @@ houdini64 version: 11.0.1b_z.38765.m
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install libhoudini sudo python3 main.py install libhoudini
## Integrate Widevine DRM (L3) ## Integrate Widevine DRM (L3)
@@ -113,7 +117,7 @@ Open terminal and switch to directory where "main.py" is located then run:
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install widevine sudo python3 main.py install widevine
## Install Smart Dock ## Install Smart Dock
@@ -122,13 +126,7 @@ Open terminal and switch to directory where "main.py" is located then run:
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install smartdock sudo python3 main.py install smartdock
## Install a self-signed CA certificate
Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py install mitm --ca-cert mycert.pem
## Granting full permission for apps data (HACK) ## Granting full permission for apps data (HACK)
@@ -142,9 +140,9 @@ Arknights, PUNISHING: GRAY RAVEN and other games won't freeze on the black scree
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
``` ```
sudo venv/bin/python3 main.py hack nodataperm sudo python3 main.py hack nodataperm
``` ```
**WARNING**: Tested on `lineage-18.1-20230128-VANILLA-waydroid_x86_64.img`. This script will replace `/system/framework/service.jar`, which may prevent WayDroid from booting. If so, run `sudo venv/bin/python3 main.py uninstall nodataperm` to remove it. **WARNING**: Tested on `lineage-18.1-20230128-VANILLA-waydroid_x86_64.img`. This script will replace `/system/framework/service.jar`, which may prevent WayDroid from booting. If so, run `sudo python3 main.py uninstall nodataperm` to remove it.
Or you can run the following commands directly in `sudo waydroid shell`. In this way, every time a new game is installed, you need to run it again, but it's much less risky. Or you can run the following commands directly in `sudo waydroid shell`. In this way, every time a new game is installed, you need to run it again, but it's much less risky.
@@ -177,18 +175,18 @@ After
![After](assets/9.png) ![After](assets/9.png)
``` ```
sudo venv/bin/python3 main.py hack hidestatusbar sudo python3 main.py hack hidestatusbar
``` ```
## Get Android ID for device registration ## Get Android ID for device registration
You need to register you device with its it before being able to use gapps, this will print out your Android ID which you can use for device registration required for Google apps: You need to register your device with its ID before being able to use gapps, this will print out your Android ID which you can use for device registration required for google apps:
Open terminal and switch to directory where "main.py" is located then run: Open terminal and switch to directory where "main.py" is located then run:
sudo venv/bin/python3 main.py certified sudo python3 main.py google
Star this repository if you find this useful, if you encounter problem create an issue on GitHub! Star this repository if you find this useful, if you encounter problem create a issue on github !
## Error handling ## Error handling
-22
View File
@@ -1,22 +0,0 @@
with (import <nixpkgs> {});
stdenv.mkDerivation {
name = "waydroid_script";
buildInputs = [
(python3.withPackages(ps: with ps; [ tqdm requests inquirerpy ]))
];
src = ./.;
postPatch = ''
patchShebangs main.py
'';
installPhase = ''
mkdir -p $out/libexec
cp -r . $out/libexec/waydroid_script
mkdir -p $out/bin
ln -s $out/libexec/waydroid_script/main.py $out/bin/waydroid_script
'';
}
+5 -20
View File
@@ -12,12 +12,10 @@ from stuff.hidestatusbar import HideStatusBar
from stuff.houdini import Houdini from stuff.houdini import Houdini
from stuff.magisk import Magisk from stuff.magisk import Magisk
from stuff.microg import MicroG from stuff.microg import MicroG
from stuff.mitm import Mitm
from stuff.ndk import Ndk from stuff.ndk import Ndk
from stuff.nodataperm import Nodataperm from stuff.nodataperm import Nodataperm
from stuff.smartdock import Smartdock from stuff.smartdock import Smartdock
from stuff.widevine import Widevine from stuff.widevine import Widevine
from stuff.fdroidpriv import FDroidPriv
import tools.helper as helper import tools.helper as helper
from tools import container from tools import container
from tools import images from tools import images
@@ -84,11 +82,7 @@ def install_app(args):
if "smartdock" in app: if "smartdock" in app:
install_list.append(Smartdock()) install_list.append(Smartdock())
if "microg" in app: if "microg" in app:
install_list.append(MicroG(args.android_version, args.microg_variant)) install_list.append(MicroG(args.android_version))
if "mitm" in app:
install_list.append(Mitm(args.ca_cert_file))
if "fdroidpriv" in app:
install_list.append(FDroidPriv(args.android_version))
if not container.use_overlayfs(): if not container.use_overlayfs():
copy_dir = "/tmp/waydroid" copy_dir = "/tmp/waydroid"
@@ -136,10 +130,6 @@ def remove_app(args):
remove_list.append(Smartdock()) remove_list.append(Smartdock())
if "microg" in app: if "microg" in app:
remove_list.append(MicroG(args.android_version, args.microg_variant)) remove_list.append(MicroG(args.android_version, args.microg_variant))
if "mitm" in app:
remove_list.append(Mitm())
if "fdroidpriv" in app:
remove_list.append(FDroidPriv(args.android_version))
if "nodataperm" in app: if "nodataperm" in app:
remove_list.append(Nodataperm(args.android_version)) remove_list.append(Nodataperm(args.android_version))
if "hidestatusbar" in app: if "hidestatusbar" in app:
@@ -229,7 +219,7 @@ def interact():
if not action: if not action:
exit() exit()
install_choices = ["gapps", "microg", "libndk", "magisk", "smartdock", "fdroidpriv",] install_choices = ["gapps", "microg", "libndk", "magisk", "smartdock",]
hack_choices = [] hack_choices = []
if android_version=="11": if android_version=="11":
install_choices.extend(["libhoudini", "widevine"]) install_choices.extend(["libhoudini", "widevine"])
@@ -245,7 +235,7 @@ def interact():
).execute() ).execute()
microg_variants = ["Standard", "NoGoolag", microg_variants = ["Standard", "NoGoolag",
"UNLP", "Minimal", "MinimalIAP"] "UNLP", "Minimal", "MinimalIAP"]
if "microg" in apps: if "MicroG" in apps:
microg_variant = inquirer.select( microg_variant = inquirer.select(
message="Select MicroG variant", message="Select MicroG variant",
choices=microg_variants, choices=microg_variants,
@@ -296,8 +286,8 @@ def main():
'certified', help='Get device ID to obtain Play Store certification') 'certified', help='Get device ID to obtain Play Store certification')
certified.set_defaults(func=get_certified) certified.set_defaults(func=get_certified)
install_choices = ["gapps", "microg", "libndk", "libhoudini", install_choices = ["gapps", "microg", "libndk",
"magisk", "mitm", "smartdock", "widevine"] "libhoudini", "magisk", "smartdock", "widevine"]
hack_choices = ["nodataperm", "hidestatusbar"] hack_choices = ["nodataperm", "hidestatusbar"]
micrg_variants = ["Standard", "NoGoolag", "UNLP", "Minimal", "MinimalIAP"] micrg_variants = ["Standard", "NoGoolag", "UNLP", "Minimal", "MinimalIAP"]
remove_choices = install_choices remove_choices = install_choices
@@ -315,7 +305,6 @@ microg: Add microG, Aurora Store and Aurora Droid to WayDriod
libndk: Add libndk arm translation, better for AMD CPUs libndk: Add libndk arm translation, better for AMD CPUs
libhoudini: Add libhoudini arm translation, better for Intel CPUs libhoudini: Add libhoudini arm translation, better for Intel CPUs
magisk: Install Magisk Delta to WayDroid magisk: Install Magisk Delta to WayDroid
mitm -c CA_CERT_FILE: Install root CA cert into system trust store
smartdock: A desktop mode launcher for Android smartdock: A desktop mode launcher for Android
widevine: Add support for widevine DRM L3 widevine: Add support for widevine DRM L3
""" """
@@ -324,10 +313,6 @@ widevine: Add support for widevine DRM L3
'install', formatter_class=argparse.RawTextHelpFormatter, help='Install an app') 'install', formatter_class=argparse.RawTextHelpFormatter, help='Install an app')
install_parser.add_argument( install_parser.add_argument(
**arg_template, choices=install_choices, help=install_help) **arg_template, choices=install_choices, help=install_help)
install_parser.add_argument('-c', '--ca-cert',
dest='ca_cert_file',
help='[for mitm only] The CA certificate file (*.pem) to install',
default=None)
install_parser.set_defaults(func=install_app) install_parser.set_defaults(func=install_app)
# remove and its aliases # remove and its aliases
+1 -1
View File
@@ -14,7 +14,7 @@ class AndroidId:
except: except:
return return
else: else:
Logger.error("Please make sure Waydroid is running and Gapps has been installed!") Logger.error("WayDroid isn't running !")
return return
print(queryout.replace("android_id|", "").strip()) print(queryout.replace("android_id|", "").strip())
print(" ^----- Open https://google.com/android/uncertified/?pli=1") print(" ^----- Open https://google.com/android/uncertified/?pli=1")
-40
View File
@@ -1,40 +0,0 @@
import os
import shutil
from stuff.general import General
class FDroidPriv(General):
id = "fdroid priv"
dl_links = {"11": ["https://f-droid.org/repo/org.fdroid.fdroid.privileged.ota_2130.zip",
"6242cab56d197d80c598593a46da62e4"]}
partition = "system"
dl_file_name = "org.fdroid.fdroid.privileged.ota_2130.zip"
dl_link = ...
act_md5 = ...
extract_to = "/tmp/fdroid_ota_2130"
files = [
"app/F-Droid.apk"
"app/F-Droid/F-Droid.apk"
"etc/permissions/permissions_org.fdroid.fdroid.privileged.xml"
"priv-app/F-DroidPrivilegedExtension.apk"
"priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk"
]
file_map = {
"permissions_org.fdroid.fdroid.privileged.xml": "etc/permissions/permissions_org.fdroid.fdroid.privileged.xml",
"F-Droid.apk": "app/F-Droid/F-Droid.apk",
"F-DroidPrivilegedExtension.apk": "priv-app/F-DroidPrivilegedExtension/F-DroidPrivilegedExtension.apk",
}
def __init__(self, android_version="11") -> None:
super().__init__()
self.dl_link = self.dl_links[android_version][0]
self.act_md5 = self.dl_links[android_version][1]
def copy(self):
for f, d in self.file_map.items():
rro_file = os.path.join(
self.copy_dir, self.partition, d)
rro_dir = os.path.dirname(rro_file)
if not os.path.exists(rro_dir):
os.makedirs(rro_dir)
shutil.copyfile(os.path.join(self.extract_to, f), rro_file)
+4 -4
View File
@@ -15,10 +15,10 @@ class Gapps(General):
"armeabi-v7a": ["https://sourceforge.net/projects/opengapps/files/arm/20220215/open_gapps-arm-11.0-pico-20220215.zip", "8719519fa32ae83a62621c6056d32814"] "armeabi-v7a": ["https://sourceforge.net/projects/opengapps/files/arm/20220215/open_gapps-arm-11.0-pico-20220215.zip", "8719519fa32ae83a62621c6056d32814"]
}, },
"13": { "13": {
"x86_64": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86_64-20231028.zip", "63ccebbf93d45c384f58d7c40049d398"], "x86_64": ["https://github.com/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-x86_64-20230323.zip", "aba427be1ddd0963121c87a4eda80299"],
"x86": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-x86-20231028.zip", "f12b6a8ed14eedbb4b5b3c932a865956"], "x86": ["https://github.com/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-x86-20230323.zip", "f02d2f1a3f0a084f13ab4c1b58ad7554"],
"arm64-v8a": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm64-20231028.zip", "11180da0a5d9f2ed2863882c30a8d556"], "arm64-v8a": ["https://github.com/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-arm64-20230323.zip", "18484a5622eeccffcea2b43205655d8a"],
"armeabi-v7a": ["https://github.com/s1204IT/MindTheGappsBuilder/releases/download/20231028/MindTheGapps-13.0.0-arm-20231028.zip", "d525c980bac427844aa4cb01628f8a8f"] "armeabi-v7a": ["https://github.com/Howard20181/MindTheGappsBuilder/releases/download/20230323/MindTheGapps-13.0.0-arm-20230323.zip", "e4c00a7eb1e4dfca0fc6a3e447710264"]
} }
} }
android_version = ... android_version = ...
+2 -2
View File
@@ -73,8 +73,8 @@ class General:
if not os.path.isfile(os.path.join(bin_dir, "resetprop")): if not os.path.isfile(os.path.join(bin_dir, "resetprop")):
if not os.path.exists(bin_dir): if not os.path.exists(bin_dir):
os.makedirs(bin_dir) os.makedirs(bin_dir)
shutil.copy(os.path.join(os.path.join(os.path.dirname(__file__), "..", "bin", shutil.copy(os.path.join(
self.arch[0], "resetprop")), bin_dir) "./bin", self.arch[0], "resetprop"), bin_dir)
os.chmod(os.path.join(bin_dir, "resetprop"), 0o755) os.chmod(os.path.join(bin_dir, "resetprop"), 0o755)
if not os.path.isfile(os.path.join(bin_dir, "resetprop.sh")): if not os.path.isfile(os.path.join(bin_dir, "resetprop.sh")):
with open(os.path.join(bin_dir, "resetprop.sh"), "w") as f: with open(os.path.join(bin_dir, "resetprop.sh"), "w") as f:
+2 -2
View File
@@ -5,8 +5,8 @@ from stuff.general import General
class HideStatusBar(General): class HideStatusBar(General):
id = "hide status bar" id = "hide status bar"
dl_links = {"11": ["https://github.com/ayasa520/hide-status-bar/releases/download/v0.0.2/app-release.apk", dl_links = {"11": ["https://github.com/ayasa520/hide-status-bar/releases/download/v0.0.1/app-release.apk",
"ff2fe63ddfb4b035e6720a1b195b2355"]} "ae6c4cc567d6f3de77068e54e43818e2"]}
partition = "system" partition = "system"
dl_file_name = "hidestatusbar.apk" dl_file_name = "hidestatusbar.apk"
dl_link = ... dl_link = ...
+1 -1
View File
@@ -18,7 +18,7 @@ class Houdini(General):
extract_to = "/tmp/houdiniunpack" extract_to = "/tmp/houdiniunpack"
init_rc_component = """ init_rc_component = """
on early-init on early-init
mount binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc mount -t binfmt_misc binfmt_misc /proc/sys/fs/binfmt_misc
on property:ro.enable.native.bridge.exec=1 on property:ro.enable.native.bridge.exec=1
exec -- /system/bin/sh -c "echo ':arm_exe:M::\\\\x7f\\\\x45\\\\x4c\\\\x46\\\\x01\\\\x01\\\\x01\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x02\\\\x00\\\\x28::/system/bin/houdini:P' > /proc/sys/fs/binfmt_misc/register" exec -- /system/bin/sh -c "echo ':arm_exe:M::\\\\x7f\\\\x45\\\\x4c\\\\x46\\\\x01\\\\x01\\\\x01\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x02\\\\x00\\\\x28::/system/bin/houdini:P' > /proc/sys/fs/binfmt_misc/register"
+17 -15
View File
@@ -10,7 +10,7 @@ from tools import container
class Magisk(General): class Magisk(General):
id = "magisk delta" id = "magisk delta"
partition = "system" partition = "system"
dl_link = "https://github.com/mistrmochov/magiskdeltaorig/raw/main/app-release.apk" dl_link = "https://huskydg.github.io/magisk-files/app-debug.apk"
dl_file_name = "magisk.apk" dl_file_name = "magisk.apk"
extract_to = "/tmp/magisk_unpack" extract_to = "/tmp/magisk_unpack"
magisk_dir = os.path.join(partition, "etc", "init", "magisk") magisk_dir = os.path.join(partition, "etc", "init", "magisk")
@@ -29,28 +29,30 @@ service bootanim /system/bin/bootanimation
bootanim_component = f""" bootanim_component = f"""
on post-fs-data on post-fs-data
start logd start logd
exec u:r:su:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk exec u:r:su:s0 root root -- /system/etc/init/magisk/magisk{host()[1]} --auto-selinux --setup-sbin /system/etc/init/magisk
exec u:r:magisk:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk exec u:r:su:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk "allow * magisk_file lnk_file *"
exec u:r:update_engine:s0 root root -- /system/etc/init/magisk/magiskpolicy --live --magisk mkdir /sbin/.magisk 700
mkdir /dev/magisk_iqeoVo2mDrO 700 mkdir /sbin/.magisk/mirror 700
exec u:r:su:s0 root root -- /system/etc/init/magisk/magisk64 --auto-selinux --setup-sbin /system/etc/init/magisk /dev/magisk_iqeoVo2mDrO mkdir /sbin/.magisk/block 700
exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --post-fs-data copy /system/etc/init/magisk/config /sbin/.magisk/config
rm /dev/.magisk_unblock
exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --post-fs-data
wait /dev/.magisk_unblock 40
rm /dev/.magisk_unblock
on nonencrypted on zygote-start
exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --service exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --service
on property:vold.decrypt=trigger_restart_framework
exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --service
on property:sys.boot_completed=1 on property:sys.boot_completed=1
mkdir /data/adb/magisk 755 mkdir /data/adb/magisk 755
exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --boot-complete exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --boot-complete
exec -- /system/bin/sh -c "if [ ! -e /data/data/io.github.huskydg.magisk ] ; then pm install /system/etc/init/magisk/magisk.apk ; fi"
on property:init.svc.zygote=restarting on property:init.svc.zygote=restarting
exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --zygote-restart exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --zygote-restart
on property:init.svc.zygote=stopped on property:init.svc.zygote=stopped
exec u:r:su:s0 root root -- /dev/magisk_iqeoVo2mDrO/magisk --auto-selinux --zygote-restart exec u:r:su:s0 root root -- /sbin/magisk --auto-selinux --zygote-restart
""" """
def download(self): def download(self):
-40
View File
@@ -1,40 +0,0 @@
import os
import shutil
from stuff.general import General
from tools.helper import run
from tools.logger import Logger
class Mitm(General):
id = "mitm"
partition = "system"
def __init__(self, ca_cert_file: str=None) -> None:
super().__init__()
self.ca_cert_file = ca_cert_file
def download(self):
pass
def skip_extract(self):
return True
def copy(self):
file_hash = run([
'openssl', 'x509', '-noout', '-subject_hash_old', '-in',
self.ca_cert_file,
]).stdout.decode("ascii").strip()
target_dir = os.path.join(
self.copy_dir, self.partition, "etc", "security", "cacerts")
Logger.info(f"Creating directory: {target_dir}")
os.makedirs(target_dir, exist_ok=True)
target_path = os.path.join(target_dir, f'{file_hash}.0')
Logger.info(f"Copying {self.ca_cert_file} to system trust store")
Logger.info(f"Target file: {target_path}")
shutil.copyfile(self.ca_cert_file, target_path)
os.chmod(target_path, 0o644)
def install(self):
if not self.ca_cert_file:
raise ValueError(
"This command requires the --ca-cert switch and a *.pem file")
super().install()
+17 -35
View File
@@ -1,8 +1,7 @@
import gzip
import os import os
import re
import shutil import shutil
from stuff.general import General from stuff.general import General
from tools.helper import backup, restore
from tools.logger import Logger from tools.logger import Logger
from tools import container from tools import container
@@ -10,14 +9,9 @@ from tools import container
class Nodataperm(General): class Nodataperm(General):
id = "nodataperm" id = "nodataperm"
dl_links = { dl_links = {
"11": "11": ["https://github.com/ayasa520/hack_full_data_permission/archive/refs/heads/main.zip",
{ "eafd7b0986f3edaebaf1dd89f19d49bf"],
"x86_64": [ "13": ["", ""]
"https://github.com/ayasa520/hack_full_data_permission/archive/d4beab7780eb792059d33e77d865579c9ee41546.zip",
"b0e3908ffcf5df8ea62f4929aa680f1a"
],
},
"13": {}
} }
dl_file_name = "nodataperm.zip" dl_file_name = "nodataperm.zip"
extract_to = "/tmp/nodataperm" extract_to = "/tmp/nodataperm"
@@ -27,34 +21,25 @@ class Nodataperm(General):
files = [ files = [
"etc/nodataperm.sh", "etc/nodataperm.sh",
"etc/init/nodataperm.rc", "etc/init/nodataperm.rc",
"framework/services.jar", "framework/services.jar"
"framework/services.jar.prof",
"framework/services.jar.bprof",
] ]
def __init__(self, android_version="11") -> None: def __init__(self, android_version="11") -> None:
super().__init__() super().__init__()
print("ok") self.dl_link = self.dl_links[android_version][0]
arch = self.arch[0] self.act_md5 = self.dl_links[android_version][1]
self.dl_link = self.dl_links[android_version][arch][0]
self.act_md5 = self.dl_links[android_version][arch][1]
def copy(self): def copy(self):
name = re.findall("([a-zA-Z0-9]+)\.zip", self.dl_link)[0]
extract_path = os.path.join( extract_path = os.path.join(
self.extract_to, f"hack_full_data_permission-{name}") self.extract_to, "hack_full_data_permission-main")
if not container.use_overlayfs(): if not container.use_overlayfs():
services_jar = os.path.join( services_jar = os.path.join(
self.copy_dir, self.partition, "framework", "services.jar") self.copy_dir, self.partition, "framework", "services.jar")
services_jar_prof = os.path.join( gz_filename = services_jar+".gz"
self.copy_dir, self.partition, "framework", "services.jar.prof") with gzip.open(gz_filename, 'wb') as f_gz:
services_jar_bprof = os.path.join( with open(services_jar, "rb") as f:
self.copy_dir, self.partition, "framework", "services.jar.bprof") f_gz.write(f.read())
backup(services_jar) Logger.info("Copying widevine library files ...")
backup(services_jar_prof)
backup(services_jar_bprof)
Logger.info(f"Copying {self.id} library files ...")
shutil.copytree(extract_path, os.path.join( shutil.copytree(extract_path, os.path.join(
self.copy_dir, self.partition), dirs_exist_ok=True) self.copy_dir, self.partition), dirs_exist_ok=True)
@@ -62,10 +47,7 @@ class Nodataperm(General):
if not container.use_overlayfs(): if not container.use_overlayfs():
services_jar = os.path.join( services_jar = os.path.join(
self.copy_dir, self.partition, "framework", "services.jar") self.copy_dir, self.partition, "framework", "services.jar")
services_jar_prof = os.path.join( gz_filename = services_jar+".gz"
self.copy_dir, self.partition, "framework", "services.jar.prof") with gzip.GzipFile(gz_filename) as f_gz:
services_jar_bprof = os.path.join( with open(services_jar, "wb") as f:
self.copy_dir, self.partition, "framework", "services.jar.bprof") f.writelines(f_gz)
restore(services_jar)
restore(services_jar_prof)
restore(services_jar_bprof)
+5 -5
View File
@@ -4,10 +4,10 @@ from stuff.general import General
class Smartdock(General): class Smartdock(General):
id = "smartdock" id = "smartdock"
dl_link = "https://f-droid.org/repo/cu.axel.smartdock_1121.apk" dl_link = "https://f-droid.org/repo/cu.axel.smartdock_198.apk"
partition = "system" partition = "system"
dl_file_name = "smartdock.apk" dl_file_name = "smartdock.apk"
act_md5 = "dde94e2babc5f78bf7279e60a98eef05" act_md5 = "a8ce0bca5e1772796404602e0fa250a4"
apply_props = { "qemu.hw.mainkeys" : "1" } apply_props = { "qemu.hw.mainkeys" : "1" }
skip_extract = True skip_extract = True
permissions = """<?xml version="1.0" encoding="utf-8"?> permissions = """<?xml version="1.0" encoding="utf-8"?>
@@ -16,20 +16,20 @@ class Smartdock(General):
<permission name="android.permission.SYSTEM_ALERT_WINDOW" /> <permission name="android.permission.SYSTEM_ALERT_WINDOW" />
<permission name="android.permission.GET_TASKS"/> <permission name="android.permission.GET_TASKS"/>
<permission name="android.permission.REORDER_TASKS"/> <permission name="android.permission.REORDER_TASKS"/>
<permission name="android.permission.REMOVE_TASKS" />
<permission name="android.permission.ACCESS_WIFI_STATE"/> <permission name="android.permission.ACCESS_WIFI_STATE"/>
<permission name="android.permission.CHANGE_WIFI_STATE"/> <permission name="android.permission.CHANGE_WIFI_STATE"/>
<permission name="android.permission.ACCESS_NETWORK_STATE"/> <permission name="android.permission.ACCESS_NETWORK_STATE"/>
<permission name="android.permission.ACCESS_FINE_LOCATION"/>
<permission name="android.permission.READ_EXTERNAL_STORAGE"/> <permission name="android.permission.READ_EXTERNAL_STORAGE"/>
<permission name="android.permission.MANAGE_USERS"/> <permission name="android.permission.MANAGE_USERS"/>
<permission name="android.permission.BLUETOOTH_ADMIN"/> <permission name="android.permission.BLUETOOTH_ADMIN"/>
<permission name="android.permission.BLUETOOTH" />
<permission name="android.permission.BLUETOOTH_CONNECT"/> <permission name="android.permission.BLUETOOTH_CONNECT"/>
<permission name="android.permission.BLUETOOTH"/>
<permission name="android.permission.REQUEST_DELETE_PACKAGES"/> <permission name="android.permission.REQUEST_DELETE_PACKAGES"/>
<permission name="android.permission.ACCESS_SUPERUSER"/> <permission name="android.permission.ACCESS_SUPERUSER"/>
<permission name="android.permission.PACKAGE_USAGE_STATS" /> <permission name="android.permission.PACKAGE_USAGE_STATS" />
<permission name="android.permission.QUERY_ALL_PACKAGES" /> <permission name="android.permission.QUERY_ALL_PACKAGES" />
<permission name="android.permission.WRITE_SECURE_SETTINGS" />
<permission name="android.permission.WRITE_SETTINGS" />
</privapp-permissions> </privapp-permissions>
</permissions> </permissions>
""" """
-13
View File
@@ -1,4 +1,3 @@
import gzip
import os import os
import re import re
import platform import platform
@@ -132,15 +131,3 @@ def check_root():
if os.geteuid() != 0: if os.geteuid() != 0:
Logger.error("This script must be run as root. Aborting.") Logger.error("This script must be run as root. Aborting.")
sys.exit(1) sys.exit(1)
def backup(path):
gz_filename = path+".gz"
with gzip.open(gz_filename, 'wb') as f_gz:
with open(path, "rb") as f:
f_gz.write(f.read())
def restore(path):
gz_filename = path+".gz"
with gzip.GzipFile(gz_filename) as f_gz:
with open(path, "wb") as f:
f.writelines(f_gz)