From ad202b870d855b2a63990ad07847b27c119287fa Mon Sep 17 00:00:00 2001 From: Jim Wu Date: Fri, 10 Jan 2020 21:20:42 +0800 Subject: [PATCH] Fix bootloop caused by multiple reasons --- edxp-core/template_override/post-fs-data.sh | 126 +++++++++++++------- edxp-core/template_override/sepolicy.sh | 15 --- 2 files changed, 81 insertions(+), 60 deletions(-) delete mode 100644 edxp-core/template_override/sepolicy.sh diff --git a/edxp-core/template_override/post-fs-data.sh b/edxp-core/template_override/post-fs-data.sh index 2fc71cb9..f7cc74b7 100644 --- a/edxp-core/template_override/post-fs-data.sh +++ b/edxp-core/template_override/post-fs-data.sh @@ -1,9 +1,44 @@ #!/system/bin/sh MODDIR=${0%/*} +RIRU_PATH="/data/misc/riru" +TARGET="${RIRU_PATH}/modules/edxp" +EDXP_VERSION=$(grep_prop version ${MODDIR}/module.prop) +ANDROID_SDK=$(getprop ro.build.version.sdk) +BUILD_DESC=$(getprop ro.build.description) +PRODUCT=$(getprop ro.build.product) +MODEL=$(getprop ro.product.model) +MANUFACTURER=$(getprop ro.product.manufacturer) +BRAND=$(getprop ro.product.brand) +FINGERPRINT=$(getprop ro.build.fingerprint) +ARCH=$(getprop ro.product.cpu.abi) +DEVICE=$(getprop ro.product.device) +ANDROID=$(getprop ro.build.version.release) +BUILD=$(getprop ro.build.id) +RIRU_VERSION=$(grep_prop version ${MODDIR}/../riru-core/module.prop) +RIRU_VERCODE=$(grep_prop versionCode ${MODDIR}/../riru-core/module.prop) +RIRU_APICODE=$(cat /data/misc/riru/api_version) +MAGISK_VERSION=$(su -v) +MAGISK_VERCODE=$(su -V) +EDXP_MANAGER="org.meowcat.edxposed.manager" +XP_INSTALLER="de.robv.android.xposed.installer" +PATH_PREFIX_PROT="/data/user_de/0/" +PATH_PREFIX_LEGACY="/data/user/0/" -if [[ -z "${MODDIR}/sepolicy.sh" ]]; then - . ${MODDIR}/sepolicy.sh -fi +sepolicy() { + # necessary for using mmap in system_server process + supolicy --live "allow system_server system_server process {execmem}" + supolicy --live "allow system_server system_server memprotect {mmap_zero}" + + # for built-in apps // TODO maybe narrow down the target classes + supolicy --live "allow coredomain coredomain process {execmem}" + + # read configs set in our app + supolicy --live "allow coredomain app_data_file * *" + supolicy --live "attradd {system_app platform_app} mlstrustedsubject" + + # read module apk file in zygote + supolicy --live "allow zygote apk_data_file * *" +} grep_prop() { local REGEX="s/^$1=//p" @@ -13,52 +48,29 @@ grep_prop() { sed -n "$REGEX" ${FILES} 2>/dev/null | head -n 1 } -EDXP_VERSION=`grep_prop version ${MODDIR}/module.prop` -ANDROID_SDK=`getprop ro.build.version.sdk` -BUILD_DESC=`getprop ro.build.description` -PRODUCT=`getprop ro.build.product` -MODEL=`getprop ro.product.model` -MANUFACTURER=`getprop ro.product.manufacturer` -BRAND=`getprop ro.product.brand` -FINGERPRINT=`getprop ro.build.fingerprint` -ARCH=`getprop ro.product.cpu.abi` -DEVICE=`getprop ro.product.device` -ANDROID=`getprop ro.build.version.release` -BUILD=`getprop ro.build.id` -RIRU_VERSION=`grep_prop version ${MODDIR}/../riru-core/module.prop` -RIRU_VERCODE=`grep_prop versionCode ${MODDIR}/../riru-core/module.prop` -RIRU_APICODE=`cat /data/misc/riru/api_version` -MAGISK_VERSION=`su -v` -MAGISK_VERCODE=`su -V` -EDXP_INSTALLER=com.solohsu.android.edxp.manager -EDXP_MANAGER=org.meowcat.edxposed.manager -XP_INSTALLER=de.robv.android.xposed.installer -PATH_PREFIX_PROT=/data/user_de/0/ -PATH_PREFIX_LEGACY=/data/user/0/ - if [[ ${ANDROID_SDK} -ge 24 ]]; then - PATH_PREFIX=${PATH_PREFIX_PROT} + PATH_PREFIX="${PATH_PREFIX_PROT}" else - PATH_PREFIX=${PATH_PREFIX_LEGACY} + PATH_PREFIX="${PATH_PREFIX_LEGACY}" fi -DEFAULT_BASE_PATH=${PATH_PREFIX}${EDXP_INSTALLER} -BASE_PATH=${DEFAULT_BASE_PATH} +DEFAULT_BASE_PATH="${PATH_PREFIX}${EDXP_MANAGER}" +BASE_PATH="${DEFAULT_BASE_PATH}" if [[ ! -d ${BASE_PATH} ]]; then - BASE_PATH=${PATH_PREFIX}${EDXP_MANAGER} + BASE_PATH="${PATH_PREFIX}${XP_INSTALLER}" if [[ ! -d ${BASE_PATH} ]]; then - BASE_PATH=${PATH_PREFIX}${XP_INSTALLER} - if [[ ! -d ${BASE_PATH} ]]; then - BASE_PATH=${DEFAULT_BASE_PATH} - fi + BASE_PATH="${DEFAULT_BASE_PATH}" fi fi -LOG_PATH=${BASE_PATH}/log -CONF_PATH=${BASE_PATH}/conf -DISABLE_VERBOSE_LOG_FILE=${CONF_PATH}/disable_verbose_log +LOG_PATH="${BASE_PATH}/log" +CONF_PATH="${BASE_PATH}/conf" +DISABLE_VERBOSE_LOG_FILE="${CONF_PATH}/disable_verbose_log" LOG_VERBOSE=true +PATH_INFO=$(ls -ldZ "${BASE_PATH}") +PATH_OWNER=$(echo "${PATH_INFO}" | awk -F " " '{print $3":"$4}') +PATH_CONTEXT=$(echo "${PATH_INFO}" | awk -F " " '{print $5}') if [[ -f ${DISABLE_VERBOSE_LOG_FILE} ]]; then LOG_VERBOSE=false @@ -69,22 +81,31 @@ start_log_cather () { LOG_TAG_FILTERS=$2 CLEAN_OLD=$3 START_NEW=$4 - LOG_FILE=${LOG_PATH}/${LOG_FILE_NAME} + LOG_FILE="${LOG_PATH}/${LOG_FILE_NAME}.log" + PID_FILE="${LOG_PATH}/${LOG_FILE_NAME}.pid" mkdir -p ${LOG_PATH} if [[ ${CLEAN_OLD} = true ]]; then - rm -rf ${LOG_FILE} + rm "${LOG_FILE}.old" + mv "${LOG_FILE}" "${LOG_FILE}.old" fi + rm "${LOG_PATH}/${LOG_FILE_NAME}.pid" if [[ ${START_NEW} = false ]]; then return fi - chmod touch ${LOG_FILE} - chmod 777 ${LOG_FILE} + chcon PATH_CONTEXT "${LOG_FILE}" + chown PATH_OWNER "${LOG_FILE}" + chmod 644 ${LOG_FILE} + touch ${PID_FILE} + chcon PATH_CONTEXT "${PID_FILE}" + chown PATH_OWNER "${PID_FILE}" + chmod 644 ${PID_FILE} echo "--------- beginning of head">>${LOG_FILE} echo "EdXposed Log">>${LOG_FILE} echo "Powered by Log Catcher">>${LOG_FILE} echo "QQ support group: 855219808">>${LOG_FILE} echo "Telegram support group: @Code_Of_MeowCat">>${LOG_FILE} + echo "Telegram channel: @EdXposed">>${LOG_FILE} echo "--------- beginning of information">>${LOG_FILE} echo "Manufacturer: ${MANUFACTURER}">>${LOG_FILE} echo "Brand: ${BRAND}">>${LOG_FILE} @@ -103,16 +124,31 @@ start_log_cather () { echo "Riru api: ${RIRU_APICODE}">>${LOG_FILE} echo "Magisk: ${MAGISK_VERSION} (${MAGISK_VERCODE})">>${LOG_FILE} logcat -f ${LOG_FILE} *:S ${LOG_TAG_FILTERS} & + LOG_PID=$! + echo "${LOG_PID}">"${LOG_PATH}/${LOG_FILE_NAME}.pid" } start_verbose_log_catcher () { - start_log_cather all.log "EdXposed:V XSharedPreferences:V EdXposed-Bridge:V EdXposedManager:V XposedInstaller:V" true ${LOG_VERBOSE} + start_log_cather all "EdXposed:V XSharedPreferences:V EdXposed-Bridge:V EdXposedManager:V XposedInstaller:V" true ${LOG_VERBOSE} } start_bridge_log_catcher () { - start_log_cather error.log "XSharedPreferences:V EdXposed-Bridge:V" true true + start_log_cather error "XSharedPreferences:V EdXposed-Bridge:V" true true } -start_verbose_log_catcher +chcon -R u:object_r:system_file:s0 "${MODDIR}" +# Backup app_process to avoid bootloop caused by original Xposed replacement +rm -rf "${MODDIR}/system/bin" +mkdir "${MODDIR}/system/bin" +cp -f "/system/bin/app_process32" "${MODDIR}/system/bin/app_process32" +[[ -f "/system/bin/app_process64" ]] && cp -f "/system/bin/app_process64" "${MODDIR}/system/bin/app_process64" + +start_verbose_log_catcher start_bridge_log_catcher + +[[ -d "${TARGET}" ]] || mkdir -p "${TARGET}" + +cp "${MODDIR}/module.prop" "${TARGET}/module.prop" + +[[ -f "${MODDIR}/sepolicy.rule" ]] || sepolicy \ No newline at end of file diff --git a/edxp-core/template_override/sepolicy.sh b/edxp-core/template_override/sepolicy.sh deleted file mode 100644 index 17cae54f..00000000 --- a/edxp-core/template_override/sepolicy.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/system/bin/sh - -# necessary for using mmap in system_server process -supolicy --live "allow system_server system_server process {execmem}" -supolicy --live "allow system_server system_server memprotect {mmap_zero}" - -# for built-in apps // TODO maybe narrow down the target classes -supolicy --live "allow coredomain coredomain process {execmem}" - -# read configs set in our app -supolicy --live "allow coredomain app_data_file * *" -supolicy --live "attradd {system_app platform_app} mlstrustedsubject" - -# read module apk file in zygote -supolicy --live "allow zygote apk_data_file * *" \ No newline at end of file