From a95e2bc7a356f915b8b5bc66e4f9b82d7e439051 Mon Sep 17 00:00:00 2001 From: 5ec1cff <56485584+5ec1cff@users.noreply.github.com> Date: Sat, 14 Jun 2025 02:53:37 +0800 Subject: [PATCH 1/9] fix permission signature check bypass on android 16 (#129) --- .../java/toolkit/coderstory/CorePatchForR.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForR.java b/app/src/main/java/toolkit/coderstory/CorePatchForR.java index b9910ed..6726c10 100644 --- a/app/src/main/java/toolkit/coderstory/CorePatchForR.java +++ b/app/src/main/java/toolkit/coderstory/CorePatchForR.java @@ -262,7 +262,19 @@ public class CorePatchForR extends XposedHelper implements IXposedHookLoadPackag hookAllMethods(keySetManagerClass, "shouldCheckUpgradeKeySetLocked", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) { - if (prefs.getBoolean("digestCreak", true) && Arrays.stream(Thread.currentThread().getStackTrace()).anyMatch((o) -> "preparePackageLI".equals(o.getMethodName()))) { + // 检查权限定义的签名的时候,如果定义包名相同,会使用 KeySetManagerService , + // 我们利用这一点让它通过检查,也就是同包不同签名权限可覆盖 + // R-Sv2: PackageManagerService#preparePackageLI + // https://cs.android.com/android/platform/superproject/+/android-11.0.0_r21:frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java;l=17188;drc=960ffca13a519b0fb9e0942665577c62f97d0eea + // T-V: InstallPackageHelper#preparePackageLI + // https://cs.android.com/android/platform/superproject/+/android-14.0.0_r2:frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java;l=1097;drc=5ea7e53c3a787e25af86b0f31933ddd68ae3514e + // 16: InstallPackageHelper#preparePackage + // https://cs.android.com/android/platform/superproject/+/android-16.0.0_r2:frameworks/base/services/core/java/com/android/server/pm/InstallPackageHelper.java;l=1459;drc=d14620262929e39a409b55d11cb542c1d1c4d2f6 + if (prefs.getBoolean("digestCreak", true) && + Arrays.stream(Thread.currentThread().getStackTrace()) + .anyMatch((o) -> o.getMethodName().startsWith("preparePackage") + ) + ) { shouldBypass.set(true); param.setResult(true); } else { From 29187942d8887ebac00dd34b9934561360dd7083 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Wed, 25 Jun 2025 16:57:56 +0700 Subject: [PATCH 2/9] restore support for android 9 ~ 11 and minor changes --- app/build.gradle.kts | 4 ++-- app/src/main/res/values-vi/string.xml | 4 +++- app/src/main/res/values/strings.xml | 4 +++- app/src/main/res/xml/prefs.xml | 30 ++++++++++++++------------- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 844b97a..d343d91 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,10 +14,10 @@ android { buildToolsVersion = "36.0.0" defaultConfig { applicationId = "com.mbcp.helper" - minSdk = 31 + minSdk = 28 targetSdk = 36 versionCode = 2030 - versionName = "1.3-mbcp" + versionName = "1.4-mbcp" } signingConfigs { diff --git a/app/src/main/res/values-vi/string.xml b/app/src/main/res/values-vi/string.xml index c1b4ac6..a25935a 100644 --- a/app/src/main/res/values-vi/string.xml +++ b/app/src/main/res/values-vi/string.xml @@ -7,7 +7,7 @@ Xem mã nguồn của trình hỗ trợ MBCP - dựa trên CorePatch. Tùy chọn Vô hiệu hóa xác minh chữ ký và cho phép cài đặt MBCP. - MBCP và trình hỗ trợ hiện chỉ khả dụng cho Android 12 trở lên.\nMBCP Helper được dựa trên CorePatch. + MBCP và trình hỗ trợ hiện khả dụng cho Android 9 ~ 16 trở lên.\nMBCP Helper được dựa trên CorePatch. Cho phép hạ cấp Cho phép hạ cấp MBCP và các ứng dụng khác về phiên bản cũ hơn. Vô hiệu hóa xác minh tính toàn vẹn @@ -20,4 +20,6 @@ !! Any apk can override the installed one !!\nBe carefully when installing unknown apk Bỏ qua tác nhân xác minh APK ví dụ như trình bảo vệ app của Google Play. + Thông báo cho HyperOS + Trình hỗ trợ này không thể sử dụng nếu bạn có HyperOS 1+. Vui lòng tìm các cách riêng, gợi ý : Vá service.jar cho HyperOS để bỏ xác minh chữ ký APK. Chúng tôi không thể hỗ trợ thêm. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 746beb5..d976514 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,7 +8,7 @@ Options Disable signature verification and allows install MBCP - MBCP and Helper only available for Android 12 and newer.\nIts based on CorePatch. + MBCP and Helper are available for Android 9 and newer.\nIts based on CorePatch. Allow downgrade Allow downgrade MBCP and other applications to older version. Disable digest verify @@ -21,4 +21,6 @@ !! Any apk can override the installed one !!\nBe carefully when installing unknown apk Disable Package Verification Agent e.g. Google Play Protection + HyperOS attention + This helper cant be used for HyperOS 1+. If you have HyperOS 1+, downgrade to MIUI, or ask somewhere for manually patching service.jar !!! diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index 1bfaf66..fbd1d0c 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -21,33 +21,35 @@ - - + + + + - - From 977ae12af277e0778b7c71e31199dc979fc2d3ab Mon Sep 17 00:00:00 2001 From: Cuynu Date: Mon, 8 Sep 2025 02:20:04 +0700 Subject: [PATCH 3/9] feat: strings.xml: new strings Signed-off-by: Cuynu --- app/src/main/res/values/strings.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d976514..827e8a5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,5 +22,8 @@ Disable Package Verification Agent e.g. Google Play Protection HyperOS attention - This helper cant be used for HyperOS 1+. If you have HyperOS 1+, downgrade to MIUI, or ask somewhere for manually patching service.jar !!! + This helper cant be used for HyperOS 1+. If you have HyperOS 1+, downgrade to MIUI, or ask somewhere for manually patching service.jar !!! + + Disable exact signature match + Disables exact signature match between apks, allowing installs with each apk split having a different signature. Only enable when really needed! From 2988c0f618fcf072b8378873514347c81e1e322e Mon Sep 17 00:00:00 2001 From: rushii <33725716+rushiiMachine@users.noreply.github.com> Date: Sat, 2 Aug 2025 07:34:01 -0700 Subject: [PATCH 4/9] feat: add disabling exact signature check (#134) Typically, installing a split APK enforces that the same signature is present across all of the splits. This adds the option to disable that check to allow installing splits with differing signatures. --- .../main/java/toolkit/coderstory/CorePatchForQ.java | 9 +++++++++ .../main/java/toolkit/coderstory/CorePatchForR.java | 10 ++++++++++ app/src/main/res/values/strings.xml | 7 ++++--- app/src/main/res/xml/prefs.xml | 5 +++++ 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForQ.java b/app/src/main/java/toolkit/coderstory/CorePatchForQ.java index 7532c1a..72b05fc 100644 --- a/app/src/main/java/toolkit/coderstory/CorePatchForQ.java +++ b/app/src/main/java/toolkit/coderstory/CorePatchForQ.java @@ -149,5 +149,14 @@ public class CorePatchForQ extends XposedHelper implements IXposedHookLoadPackag "isVerificationEnabled", new ReturnConstant(prefs, "disableVerificationAgent", false) ); + + // Allow apk splits with different signatures to be installed together + hookAllMethods(signingDetails, "signaturesMatchExactly", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + if (prefs.getBoolean("exactSigCheck", false)) + param.setResult(true); + } + }); } } diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForR.java b/app/src/main/java/toolkit/coderstory/CorePatchForR.java index 6726c10..4dd238f 100644 --- a/app/src/main/java/toolkit/coderstory/CorePatchForR.java +++ b/app/src/main/java/toolkit/coderstory/CorePatchForR.java @@ -65,6 +65,7 @@ public class CorePatchForR extends XposedHelper implements IXposedHookLoadPackag XposedBridge.log("D/" + MainHook.TAG + " downgrade=" + prefs.getBoolean("downgrade", true)); XposedBridge.log("D/" + MainHook.TAG + " authcreak=" + prefs.getBoolean("authcreak", false)); XposedBridge.log("D/" + MainHook.TAG + " digestCreak=" + prefs.getBoolean("digestCreak", true)); + XposedBridge.log("D/" + MainHook.TAG + " exactSigCheck=" + prefs.getBoolean("exactSigCheck", false)); XposedBridge.log("D/" + MainHook.TAG + " UsePreSig=" + prefs.getBoolean("UsePreSig", false)); XposedBridge.log("D/" + MainHook.TAG + " bypassBlock=" + prefs.getBoolean("bypassBlock", true)); XposedBridge.log("D/" + MainHook.TAG + " sharedUser=" + prefs.getBoolean("sharedUser", false)); @@ -406,6 +407,15 @@ public class CorePatchForR extends XposedHelper implements IXposedHookLoadPackag hookAllMethods(getIsVerificationEnabledClass(loadPackageParam.classLoader), "isVerificationEnabled", new ReturnConstant(prefs, "disableVerificationAgent", false)); + // Allow apk splits with different signatures to be installed together + hookAllMethods(signingDetails, "signaturesMatchExactly", new XC_MethodHook() { + @Override + protected void beforeHookedMethod(MethodHookParam param) { + if (prefs.getBoolean("exactSigCheck", false)) + param.setResult(true); + } + }); + if (BuildConfig.DEBUG) initializeDebugHook(loadPackageParam); } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 827e8a5..46dd676 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -22,8 +22,9 @@ Disable Package Verification Agent e.g. Google Play Protection HyperOS attention - This helper cant be used for HyperOS 1+. If you have HyperOS 1+, downgrade to MIUI, or ask somewhere for manually patching service.jar !!! + This helper cant be used for HyperOS 1+. If you have HyperOS 1+, downgrade to MIUI, or ask somewhere for manually patching service.jar !!! + Disable exact signature match - Disable exact signature match - Disables exact signature match between apks, allowing installs with each apk split having a different signature. Only enable when really needed! + Disable exact signature match + Disables exact signature match between apks, allowing installs with each apk split having a different signature. Only enable when really needed! diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index fbd1d0c..c605c1a 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -41,6 +41,11 @@ android:key="digestCreak" android:enabled="false" android:defaultValue="true" /> + Date: Mon, 8 Sep 2025 02:26:53 +0700 Subject: [PATCH 5/9] feat: strings.xml: new strings Signed-off-by: Cuynu --- app/src/main/res/values-vi/string.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/res/values-vi/string.xml b/app/src/main/res/values-vi/string.xml index a25935a..ad6a199 100644 --- a/app/src/main/res/values-vi/string.xml +++ b/app/src/main/res/values-vi/string.xml @@ -22,4 +22,6 @@ ví dụ như trình bảo vệ app của Google Play. Thông báo cho HyperOS Trình hỗ trợ này không thể sử dụng nếu bạn có HyperOS 1+. Vui lòng tìm các cách riêng, gợi ý : Vá service.jar cho HyperOS để bỏ xác minh chữ ký APK. Chúng tôi không thể hỗ trợ thêm. + Disable exact signature match + Disables exact signature match between apks, allowing installs with each apk split having a different signature. From fbe6bd14cc85a0abe7052a6e9cd5f9530d629d2a Mon Sep 17 00:00:00 2001 From: Cuynu Date: Mon, 8 Sep 2025 02:40:29 +0700 Subject: [PATCH 6/9] feat: modify links & minor changes Signed-off-by: Cuynu --- app/src/main/res/values-vi/string.xml | 4 ++-- app/src/main/res/values/strings.xml | 2 -- app/src/main/res/xml/prefs.xml | 11 +++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/app/src/main/res/values-vi/string.xml b/app/src/main/res/values-vi/string.xml index ad6a199..a56ee10 100644 --- a/app/src/main/res/values-vi/string.xml +++ b/app/src/main/res/values-vi/string.xml @@ -21,7 +21,7 @@ Bỏ qua tác nhân xác minh APK ví dụ như trình bảo vệ app của Google Play. Thông báo cho HyperOS - Trình hỗ trợ này không thể sử dụng nếu bạn có HyperOS 1+. Vui lòng tìm các cách riêng, gợi ý : Vá service.jar cho HyperOS để bỏ xác minh chữ ký APK. Chúng tôi không thể hỗ trợ thêm. + Trình hỗ trợ này không thể sử dụng nếu bạn có HyperOS 1+. Vui lòng nhấn vào đây để xem cách cài app MBCP cho HyperOS. Disable exact signature match - Disables exact signature match between apks, allowing installs with each apk split having a different signature. + Disables exact signature match between apks, allowing installs with each apk split having a different signature. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 46dd676..9c646b8 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -23,8 +23,6 @@ e.g. Google Play Protection HyperOS attention This helper cant be used for HyperOS 1+. If you have HyperOS 1+, downgrade to MIUI, or ask somewhere for manually patching service.jar !!! - Disable exact signature match - Disable exact signature match Disables exact signature match between apks, allowing installs with each apk split having a different signature. Only enable when really needed! diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index c605c1a..3ce0570 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -8,14 +8,14 @@ android:summary="@string/dlmbcp_summary"> + android:data="https://t.me/mbbpatch_eng"/> + android:data="https://git.disroot.org/cuynu/mbcp-helper"/> @@ -31,7 +31,7 @@ android:summary="@string/hyperos_summary"> + android:data="https://git.disroot.org/mbcp/info/wiki/mbcpinstall_hyperos" /> - Date: Mon, 8 Sep 2025 02:41:09 +0700 Subject: [PATCH 7/9] feat: bump v1.5-mbcp Signed-off-by: Cuynu --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d343d91..2afd0b8 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,8 +16,8 @@ android { applicationId = "com.mbcp.helper" minSdk = 28 targetSdk = 36 - versionCode = 2030 - versionName = "1.4-mbcp" + versionCode = 2031 + versionName = "1.5-mbcp" } signingConfigs { From 72326e5b1677ea4e40be3c69102a93f8c56f274d Mon Sep 17 00:00:00 2001 From: Cuynu Date: Mon, 8 Sep 2025 02:44:58 +0700 Subject: [PATCH 8/9] fix: prefs.xml: wrong link Signed-off-by: Cuynu --- app/src/main/res/xml/prefs.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/xml/prefs.xml b/app/src/main/res/xml/prefs.xml index 3ce0570..b6b0c0a 100644 --- a/app/src/main/res/xml/prefs.xml +++ b/app/src/main/res/xml/prefs.xml @@ -15,7 +15,7 @@ android:summary="@string/src_summary"> + android:data="https://git.disroot.org/mbcp/mbcp-helper"/> From 40f150e343e386bc4c16815fd3ba0c6a52b213b5 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Mon, 8 Sep 2025 02:46:58 +0700 Subject: [PATCH 9/9] feat(func)!: remove github action workflow i don't need this, as i build locally Signed-off-by: Cuynu --- .github/workflows/android.yml | 43 ----------------------------------- 1 file changed, 43 deletions(-) delete mode 100644 .github/workflows/android.yml diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml deleted file mode 100644 index f113bf7..0000000 --- a/.github/workflows/android.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: Android CI - -on: - push: - branches: [ main ] - pull_request: - workflow_dispatch: - -jobs: - build: - - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Set up JDK 21 - uses: actions/setup-java@v3 - with: - java-version: 21 - distribution: 'temurin' - cache: 'gradle' - - - name: Write key - if: github.event_name != 'pull_request' && github.ref == 'refs/heads/main' - run: | - if [ ! -z "${{ secrets.SIGNING_KEY }}" ]; then - echo releaseStorePassword='${{ secrets.KEY_STORE_PASSWORD }}' >> gradle.properties - echo releaseKeyAlias='${{ secrets.ALIAS }}' >> gradle.properties - echo releaseKeyPassword='${{ secrets.KEY_PASSWORD }}' >> gradle.properties - echo releaseStoreFile='key.jks' >> gradle.properties - echo ${{ secrets.SIGNING_KEY }} | base64 --decode > key.jks - fi - - - name: Build with Gradle - run: ./gradlew assembleRelease assembleDebug - - - name: Upload artifact - uses: actions/upload-artifact@v3 - with: - name: Signed app bundle - path: app/build/outputs/apk