From a0f711249d9cc3875bf5b99fb36d559a26f14d52 Mon Sep 17 00:00:00 2001 From: NekoInverter <42698724+NekoInverter@users.noreply.github.com> Date: Fri, 27 Nov 2020 12:27:36 +0800 Subject: [PATCH] Verify files during installation --- edxp-core/build.gradle | 17 +++++ edxp-core/template_override/customize.sh | 83 ++++++++++++++++-------- edxp-core/template_override/verify.sh | 39 +++++++++++ 3 files changed, 112 insertions(+), 27 deletions(-) create mode 100644 edxp-core/template_override/verify.sh diff --git a/edxp-core/build.gradle b/edxp-core/build.gradle index 8caa5704..6c79ecc9 100644 --- a/edxp-core/build.gradle +++ b/edxp-core/build.gradle @@ -1,8 +1,18 @@ import org.apache.tools.ant.filters.FixCrLfFilter import org.gradle.internal.os.OperatingSystem +import java.security.MessageDigest + apply plugin: 'com.android.library' +static def calcSha256(file) { + def md = MessageDigest.getInstance("SHA-256") + file.eachByte 4096, { bytes, size -> + md.update(bytes, 0, size); + } + return md.digest().encodeHex() +} + // Values set here will be overriden by AppVeyor, feel free to modify during development. def buildVersionName = 'v0.5.0.8' def buildVersionCode = 233 @@ -178,6 +188,13 @@ afterEvaluate { from "$libPathRelease/x86_64" into "$zipPathMagiskRelease/system_x86/lib64" } + // generate sha1sum + fileTree(zipPathMagiskRelease).matching { + exclude "README.md", "META-INF" + }.visit { f -> + if (f.directory) return + file(f.file.path + ".sha256sum").text = calcSha256(f.file) + } } } diff --git a/edxp-core/template_override/customize.sh b/edxp-core/template_override/customize.sh index 93083d52..4de47bcf 100644 --- a/edxp-core/template_override/customize.sh +++ b/edxp-core/template_override/customize.sh @@ -45,9 +45,9 @@ JAR_EDDALVIKDX="$(getRandomNameExist 8 "" ".dex" " JAR_EDDEXMAKER="$(getRandomNameExist 8 "" ".dex" " /system/framework ").dex" -#JAR_EDCONFIG="$(getRandomNameExist 8 "" ".jar" " -#/system/framework -#").jar" +JAR_EDCONFIG="$(getRandomNameExist 8 "" ".jar" " +/system/framework +").jar" LIB_RIRU_EDXP="libriru_${RIRU_EDXP}.so" LIB_SANDHOOK_EDXP="lib$(getRandomNameExist 13 "lib" ".so" " /system/lib @@ -207,12 +207,23 @@ check_android_version() { # fi #} -# extract riru.sh -unzip -o "$ZIPFILE" riru.sh -d "$MODPATH" >&2 -. $MODPATH/riru.sh - ui_print "- EdXposed Version ${VERSION}" +# extract verify.sh +ui_print "- Extracting verify.sh" +unzip -o "$ZIPFILE" 'verify.sh' -d "$TMPDIR" >&2 +if [ ! -f "$TMPDIR/verify.sh" ]; then + ui_print "*********************************************************" + ui_print "! Unable to extract verify.sh!" + ui_print "! This zip may be corrupted, please try downloading again" + abort "*********************************************************" +fi +. $TMPDIR/verify.sh + +# extract riru.sh +extract "$ZIPFILE" riru.sh "$MODPATH" +. $MODPATH/riru.sh + #check_persist check_android_version check_magisk_version @@ -220,21 +231,42 @@ check_riru_version edxp_check_architecture ui_print "- Extracting module files" -unzip -o "${ZIPFILE}" EdXposed.apk module.prop post-fs-data.sh sepolicy.rule system.prop uninstall.sh 'system/*' -d "${MODPATH}" >&2 +extract "${ZIPFILE}" 'EdXposed.apk' "${MODPATH}" +extract "${ZIPFILE}" 'module.prop' "${MODPATH}" +extract "${ZIPFILE}" 'system.prop' "${MODPATH}" +extract "${ZIPFILE}" 'sepolicy.rule' "${MODPATH}" +extract "${ZIPFILE}" 'post-fs-data.sh' "${MODPATH}" +extract "${ZIPFILE}" 'uninstall.sh' "${MODPATH}" -if [[ "${ARCH}" == "x86" || "${ARCH}" == "x64" ]]; then - ui_print "- Replacing x86 and x86_64 libraries" - unzip -o "${ZIPFILE}" 'system_x86/*' -d "${MODPATH}" >&2 - rm -rf "${MODPATH}/system/lib" - rm -rf "${MODPATH}/system/lib64" - mv "${MODPATH}/system_x86/lib" "${MODPATH}/system/lib" - mv "${MODPATH}/system_x86/lib64" "${MODPATH}/system/lib64" - rm -rf "${MODPATH}/system_x86" -fi +extract "${ZIPFILE}" 'system/framework/edconfig.jar' "${MODPATH}" +extract "${ZIPFILE}" 'system/framework/eddalvikdx.dex' "${MODPATH}" +extract "${ZIPFILE}" 'system/framework/eddexmaker.dex' "${MODPATH}" +extract "${ZIPFILE}" 'system/framework/edxp.dex' "${MODPATH}" -if [[ "${IS64BIT}" == false ]]; then - ui_print "- Removing 64-bit libraries" - rm -rf "${MODPATH}/system/lib64" +if [ "$ARCH" = "x86" ] || [ "$ARCH" = "x64" ]; then + ui_print "- Extracting x86 libraries" + extract "$ZIPFILE" 'system_x86/lib/libriru_edxp.so' "$MODPATH" + mv "$MODPATH/system_x86/" "$MODPATH/system/" + + if [ "$IS64BIT" = true ]; then + ui_print "- Extracting x64 libraries" + extract "$ZIPFILE" 'system_x86/lib64/libriru_edxp.so' "$MODPATH" + mv "$MODPATH/system_x86/lib64" "$MODPATH/system/lib64" + fi +else + ui_print "- Extracting arm libraries" + extract "$ZIPFILE" 'system/lib/libriru_edxp.so' "$MODPATH" + if [[ "${VARIANTS}" == "SandHook" ]]; then + extract "$ZIPFILE" 'system/lib/libsandhook-native.so' "$MODPATH" + fi + + if [ "$IS64BIT" = true ]; then + ui_print "- Extracting arm64 libraries" + extract "$ZIPFILE" 'system/lib64/libriru_edxp.so' "$MODPATH" + if [[ "${VARIANTS}" == "SandHook" ]]; then + extract "$ZIPFILE" 'system/lib/libsandhook-native.so' "$MODPATH" + fi + fi fi if [[ "$(pm path org.meowcat.edxposed.manager)" == "" && "$(pm path de.robv.android.xposed.installer)" == "" ]]; then @@ -266,13 +298,11 @@ ui_print "- Copying framework libraries" mv "${MODPATH}/system/framework/eddalvikdx.dex" "${MODPATH}/system/framework/${JAR_EDDALVIKDX}" mv "${MODPATH}/system/framework/edxp.dex" "${MODPATH}/system/framework/${JAR_EDXP}" mv "${MODPATH}/system/framework/eddexmaker.dex" "${MODPATH}/system/framework/${JAR_EDDEXMAKER}" -#mv "${MODPATH}/system/framework/edconfig.jar" "${MODPATH}/system/framework/${JAR_EDCONFIG}" +mv "${MODPATH}/system/framework/edconfig.jar" "${MODPATH}/system/framework/${JAR_EDCONFIG}" mv "${MODPATH}/system/lib/libriru_edxp.so" "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" -mv "${MODPATH}/system/lib/libsandhook-native.so" "${MODPATH}/system/lib/libsandhook-native.so" if [[ "${IS64BIT}" == true ]]; then mv "${MODPATH}/system/lib64/libriru_edxp.so" "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" - mv "${MODPATH}/system/lib64/libsandhook-native.so" "${MODPATH}/system/lib64/libsandhook-native.so" fi if [[ "${VARIANTS}" == "SandHook" ]]; then @@ -285,13 +315,13 @@ fi ui_print "- Resetting libraries path" sed -i 's:/system/framework/edxp.dex\:/system/framework/eddalvikdx.dex\:/system/framework/eddexmaker.dex:/system/framework/'"${JAR_EDXP}"'\:/system/framework/'"${JAR_EDDALVIKDX}"'\:/system/framework/'"${JAR_EDDEXMAKER}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" -#sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" +sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" sed -i 's:libriru_edxp.so:'"${LIB_RIRU_EDXP}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" sed -i 's:libsandhook.edxp.so:'"${LIB_SANDHOOK_EDXP}"':g' "${MODPATH}/system/lib/${LIB_RIRU_EDXP}" if [[ "${IS64BIT}" == true ]]; then sed -i 's:/system/framework/edxp.dex\:/system/framework/eddalvikdx.dex\:/system/framework/eddexmaker.dex:/system/framework/'"${JAR_EDXP}"'\:/system/framework/'"${JAR_EDDALVIKDX}"'\:/system/framework/'"${JAR_EDDEXMAKER}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" -# sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" + sed -i 's:/system/framework/edconfig.jar:/system/framework/'"${JAR_EDCONFIG}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" sed -i 's:libriru_edxp.so:'"${LIB_RIRU_EDXP}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" sed -i 's:libsandhook.edxp.so:'"${LIB_SANDHOOK_EDXP}"':g' "${MODPATH}/system/lib64/${LIB_RIRU_EDXP}" fi @@ -309,11 +339,10 @@ fi # extract Riru files ui_print "- Extracting Riru files" -ui_print $RIRU_TARGET [ -d "$RIRU_TARGET" ] || mkdir -p "$RIRU_TARGET" || abort "! Can't create $RIRU_TARGET" rm -f "$RIRU_TARGET/module.prop.new" -unzip -o "$ZIPFILE" 'riru/module.prop.new' -d "$RIRU_TARGET" >&2 +extract "$ZIPFILE" 'riru/module.prop.new' "$RIRU_TARGET" mv "$RIRU_TARGET/riru/module.prop.new" "$RIRU_TARGET/module.prop" rm -rf "$RIRU_TARGET/riru/" set_perm "$RIRU_TARGET/module.prop" 0 0 0600 $RIRU_SECONTEXT diff --git a/edxp-core/template_override/verify.sh b/edxp-core/template_override/verify.sh new file mode 100644 index 00000000..b04a9ea3 --- /dev/null +++ b/edxp-core/template_override/verify.sh @@ -0,0 +1,39 @@ +TMPDIR_FOR_VERIFY="$TMPDIR/.vunzip" +mkdir "$TMPDIR_FOR_VERIFY" + +abort_verify() { + ui_print "*********************************************************" + ui_print "! $1" + ui_print "! This zip may be corrupted, please try downloading again" + abort "*********************************************************" +} + +# extract +extract() { + zip=$1 + file=$2 + dir=$3 + junk_paths=$4 + [ -z "$junk_paths" ] && junk_paths=false + opts="-o" + [ $junk_paths = true ] && opts="-oj" + + file_path="" + hash_path="" + if [ $junk_paths = true ]; then + file_path="$dir/$(basename "$file")" + hash_path="$TMPDIR_FOR_VERIFY/$(basename "$file").sha256sum" + else + file_path="$dir/$file" + hash_path="$TMPDIR_FOR_VERIFY/$file.sha256sum" + fi + + unzip $opts "$zip" "$file" -d "$dir" >&2 + [ -f "$file_path" ] || abort_verify "$file not exists" + + unzip $opts "$zip" "$file.sha256sum" -d "$TMPDIR_FOR_VERIFY" >&2 + [ -f "$hash_path" ] || abort_verify "$file.sha256sum not exists" + + (echo "$(cat "$hash_path") $file_path" | sha256sum -c -s -) || abort_verify "Failed to verify $file" + ui_print "- Verified $file" >&1 +} \ No newline at end of file