mirror of
https://github.com/kavishdevar/librepods.git
synced 2026-02-01 07:39:11 +00:00
Remove legacy patchers
This commit is contained in:
@@ -1,7 +0,0 @@
|
||||
# Patcher Server
|
||||
|
||||
This is the server side of the patcher. It is responsible for serving the patch files to the clients.
|
||||
|
||||
# License
|
||||
|
||||
Same as project license. Check [/LICENSE](/LICENSE) for more information.
|
||||
@@ -1,99 +0,0 @@
|
||||
from flask import Flask, request, jsonify, send_file
|
||||
import os
|
||||
import uuid
|
||||
import logging
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
# Configure logging
|
||||
class LogColors:
|
||||
HEADER = '\033[95m'
|
||||
OKBLUE = '\033[94m'
|
||||
OKCYAN = '\033[96m'
|
||||
OKGREEN = '\033[92m'
|
||||
WARNING = '\033[93m'
|
||||
FAIL = '\033[91m'
|
||||
ENDC = '\033[0m'
|
||||
BOLD = '\033[1m'
|
||||
UNDERLINE = '\033[4m'
|
||||
|
||||
class ColoredFormatter(logging.Formatter):
|
||||
def format(self, record):
|
||||
log_colors = {
|
||||
'DEBUG': LogColors.OKCYAN,
|
||||
'INFO': LogColors.OKGREEN,
|
||||
'WARNING': LogColors.WARNING,
|
||||
'ERROR': LogColors.FAIL,
|
||||
'CRITICAL': LogColors.FAIL + LogColors.BOLD
|
||||
}
|
||||
log_color = log_colors.get(record.levelname, LogColors.ENDC)
|
||||
record.msg = f"{log_color}{record.msg}{LogColors.ENDC}"
|
||||
return super().format(record)
|
||||
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
|
||||
logger = logging.getLogger()
|
||||
handler = logger.handlers[0]
|
||||
handler.setFormatter(ColoredFormatter('%(asctime)s - %(levelname)s - %(message)s'))
|
||||
|
||||
def run_command(command):
|
||||
logging.info(f"Running command: {command}")
|
||||
result = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||
if result.returncode != 0 and "Cannot determine entrypoint" not in result.stderr:
|
||||
logging.error(f"Command failed: {command}\n{result.stderr}")
|
||||
sys.exit(1)
|
||||
logging.info(f"Command output: {result.stdout}")
|
||||
return result.stdout
|
||||
|
||||
def get_symbol_address(file_path, symbol_name):
|
||||
logging.info(f"Getting address for symbol: {symbol_name}")
|
||||
output = run_command(f"radare2 -q -e bin.cache=true -c 'is~{symbol_name}' -z {file_path}")
|
||||
match = re.search(r'0x[0-9a-fA-F]+', output)
|
||||
if match:
|
||||
address = match.group(0)
|
||||
logging.info(f"Found address for {symbol_name}: {address}")
|
||||
return address
|
||||
else:
|
||||
logging.error(f"Symbol {symbol_name} not found in {file_path}")
|
||||
sys.exit(1)
|
||||
|
||||
def patch_address(file_path, address, patch_bytes):
|
||||
logging.info(f"Patching address {address} with bytes: {patch_bytes}")
|
||||
run_command(f"radare2 -q -e bin.cache=true -w -c 's {address}; wx {patch_bytes}; wci' {file_path}")
|
||||
logging.info(f"Successfully patched address {address}")
|
||||
|
||||
@app.route('/api', methods=['POST'])
|
||||
def api():
|
||||
if 'file' not in request.files:
|
||||
return jsonify({"error": "No file part"}), 400
|
||||
file = request.files['file']
|
||||
if file.filename == '':
|
||||
return jsonify({"error": "No selected file"}), 400
|
||||
if not file.filename.endswith('.so'):
|
||||
return jsonify({"error": "Invalid file type. Only .so files are allowed."}), 400
|
||||
|
||||
file_uuid = str(uuid.uuid4())
|
||||
file_path = os.path.join('uploads', f"{file_uuid}_{file.filename}")
|
||||
file.save(file_path)
|
||||
|
||||
try:
|
||||
l2c_fcr_chk_chan_modes_address = get_symbol_address(file_path, "l2c_fcr_chk_chan_modes")
|
||||
patch_address(file_path, l2c_fcr_chk_chan_modes_address, "20008052c0035fd6")
|
||||
l2cu_send_peer_info_req_address = get_symbol_address(file_path, "l2cu_send_peer_info_req")
|
||||
patch_address(file_path, l2cu_send_peer_info_req_address, "c0035fd6")
|
||||
except Exception as e:
|
||||
logger.error(f"Error patching file: {str(e)}")
|
||||
return jsonify({"error": f"Error patching file: {str(e)}"}), 500
|
||||
|
||||
try:
|
||||
return send_file(file_path, as_attachment=True, download_name=file.filename)
|
||||
except Exception as e:
|
||||
logger.error(f"Error sending file: {str(e)}")
|
||||
return jsonify({"error": f"Error sending file: {str(e)}"}), 500
|
||||
|
||||
if not os.path.exists('uploads'):
|
||||
os.makedirs('uploads')
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True, host='0.0.0.0', port=8080)
|
||||
@@ -1,33 +0,0 @@
|
||||
#!/sbin/sh
|
||||
|
||||
#################
|
||||
# Initialization
|
||||
#################
|
||||
|
||||
umask 022
|
||||
|
||||
# echo before loading util_functions
|
||||
ui_print() { echo "$1"; }
|
||||
|
||||
require_new_magisk() {
|
||||
ui_print "*******************************"
|
||||
ui_print " Please install Magisk v20.4+! "
|
||||
ui_print "*******************************"
|
||||
exit 1
|
||||
}
|
||||
|
||||
#########################
|
||||
# Load util_functions.sh
|
||||
#########################
|
||||
|
||||
OUTFD=$2
|
||||
ZIPFILE=$3
|
||||
|
||||
mount /data 2>/dev/null
|
||||
|
||||
[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk
|
||||
. /data/adb/magisk/util_functions.sh
|
||||
[ $MAGISK_VER_CODE -lt 20400 ] && require_new_magisk
|
||||
|
||||
install_module
|
||||
exit 0
|
||||
@@ -1 +0,0 @@
|
||||
#MAGISK
|
||||
@@ -1,6 +0,0 @@
|
||||
id=btl2capfix
|
||||
name=Bluetooth L2CAP workaround for AirPods
|
||||
version=v1
|
||||
versionCode=1
|
||||
author=kavishdevar
|
||||
description=Fixes the Bluetooth L2CAP connection issue with AirPods
|
||||
@@ -1,2 +0,0 @@
|
||||
#!/system/bin/sh
|
||||
mount -t overlay overlay -o lowerdir=/apex/com.android.btservices/lib64/,upperdir=/data/adb/modules/btl2capfix/apex/com.android.btservices/lib64,workdir=/data/adb/modules/btl2capfix/apex/com.android.btservices/work Zapex/com.android.btservices/lib64
|
||||
Reference in New Issue
Block a user