diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml
new file mode 100644
index 0000000..f113bf7
--- /dev/null
+++ b/.github/workflows/android.yml
@@ -0,0 +1,43 @@
+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
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..de8ad77
--- /dev/null
+++ b/README.md
@@ -0,0 +1,49 @@
+# CorePatch
+
+```
+A Module For Xposed Framework
+Disable signature verification For Android
+ ```
+  
+
+### Description
+```
+branch master -> support android 4.4-7.x
+Android8.x -> maybe you need find the commit what change version name to 2.1,then compile by you self
+branch Q -> support android 9.0-10.0
+branch main -> support android 10-15
+```
+
+## Features
+```
+ allows to downgrade application, suppresses [INSTALL_FAILED_VERSION_DOWNGRADE]
+
+ allows to directly install apps after modifing APK file [ignore invalid digest error etc..]
+
+ allows overlay install apps with inconsistent signatures
+```
+
+### History
+You can download history version from https://soft.shouji.com.cn/down/32512.html
+
+### Thanks
+```
+weishu: Reference some code
+LSPosed Hook Framework for ART
+lovesykun: Technical support
+```
+### License
+CorePatch is released under the GPL V2 license. See LICENSE for details.
+
+### CI
+You can download dev build from github actions
+https://github.com/coderstory/CorePatch/actions
+
+### Community
+[TG Chat](https://t.me/core_patch_chat)
+
+
+### Donate
+[paypal](http://paypal.me/code620)
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 2afd0b8..86ef909 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -10,14 +10,14 @@ val releaseKeyAlias: String? by rootProject
val releaseKeyPassword: String? by rootProject
android {
- compileSdk = 36
- buildToolsVersion = "36.0.0"
+ compileSdk = 35
+ buildToolsVersion = "35.0.0"
defaultConfig {
applicationId = "com.mbcp.helper"
- minSdk = 28
- targetSdk = 36
- versionCode = 2031
- versionName = "1.5-mbcp"
+ minSdk = 31
+ targetSdk = 35
+ versionCode = 2030
+ versionName = "1.1-mbcp"
}
signingConfigs {
diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
deleted file mode 100644
index 586b6ee..0000000
Binary files a/app/src/main/ic_launcher-playstore.png and /dev/null differ
diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForQ.java b/app/src/main/java/toolkit/coderstory/CorePatchForQ.java
index 72b05fc..861bd9e 100644
--- a/app/src/main/java/toolkit/coderstory/CorePatchForQ.java
+++ b/app/src/main/java/toolkit/coderstory/CorePatchForQ.java
@@ -48,7 +48,7 @@ public class CorePatchForQ extends XposedHelper implements IXposedHookLoadPackag
hookAllMethods("java.security.MessageDigest", loadPackageParam.classLoader, "isEqual",
new ReturnConstant(prefs, "authcreak", true));
hookAllMethods("com.android.server.pm.PackageManagerServiceUtils", loadPackageParam.classLoader, "verifySignatures",
- new ReturnConstant(prefs, "authcreak", false));
+ new ReturnConstant(prefs, "authcreak", true));
Class> signingDetails = XposedHelpers.findClass("android.content.pm.PackageParser.SigningDetails", loadPackageParam.classLoader);
Constructor> findConstructorExact = XposedHelpers.findConstructorExact(signingDetails, Signature[].class, Integer.TYPE);
@@ -62,7 +62,7 @@ public class CorePatchForQ extends XposedHelper implements IXposedHookLoadPackag
final Object newInstance = findConstructorExact.newInstance(signingDetailsArgs);
hookAllMethods("android.util.apk.ApkSignatureVerifier", loadPackageParam.classLoader, "verifyV1Signature", new XC_MethodHook() {
public void afterHookedMethod(MethodHookParam methodHookParam) throws Throwable {
- if (prefs.getBoolean("authcreak", false)) {
+ if (prefs.getBoolean("authcreak", true)) {
Throwable throwable = methodHookParam.getThrowable();
if (throwable != null) {
Throwable cause = throwable.getCause();
@@ -149,14 +149,5 @@ 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 4dd238f..f6268e7 100644
--- a/app/src/main/java/toolkit/coderstory/CorePatchForR.java
+++ b/app/src/main/java/toolkit/coderstory/CorePatchForR.java
@@ -63,9 +63,8 @@ public class CorePatchForR extends XposedHelper implements IXposedHookLoadPackag
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws IllegalAccessException, InvocationTargetException, InstantiationException {
if (BuildConfig.DEBUG) {
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 + " authcreak=" + prefs.getBoolean("authcreak", true));
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));
@@ -263,19 +262,7 @@ public class CorePatchForR extends XposedHelper implements IXposedHookLoadPackag
hookAllMethods(keySetManagerClass, "shouldCheckUpgradeKeySetLocked", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) {
- // 检查权限定义的签名的时候,如果定义包名相同,会使用 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")
- )
- ) {
+ if (prefs.getBoolean("digestCreak", true) && Arrays.stream(Thread.currentThread().getStackTrace()).anyMatch((o) -> "preparePackageLI".equals(o.getMethodName()))) {
shouldBypass.set(true);
param.setResult(true);
} else {
@@ -407,15 +394,6 @@ 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/java/toolkit/coderstory/CorePatchForT.java b/app/src/main/java/toolkit/coderstory/CorePatchForT.java
index 5059359..d8bf510 100644
--- a/app/src/main/java/toolkit/coderstory/CorePatchForT.java
+++ b/app/src/main/java/toolkit/coderstory/CorePatchForT.java
@@ -65,7 +65,7 @@ public class CorePatchForT extends CorePatchForS {
XposedBridge.hookMethod(assertMinSignatureSchemeIsValid, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) {
- if (prefs.getBoolean("authcreak", false)) {
+ if (prefs.getBoolean("authcreak", true)) {
param.setResult(null);
}
}
diff --git a/app/src/main/java/toolkit/coderstory/CorePatchForU.java b/app/src/main/java/toolkit/coderstory/CorePatchForU.java
index 1a3dd66..d6fd608 100644
--- a/app/src/main/java/toolkit/coderstory/CorePatchForU.java
+++ b/app/src/main/java/toolkit/coderstory/CorePatchForU.java
@@ -21,12 +21,6 @@ public class CorePatchForU extends CorePatchForT {
XposedBridge.log("E/" + MainHook.TAG + " deoptimizing failed" + Log.getStackTraceString(e));
}
}
-
- // https://cs.android.com/android/platform/superproject/+/android-14.0.0_r60:frameworks/base/services/core/java/com/android/server/pm/ReconcilePackageUtils.java;l=61;bpv=1;bpt=0
- if (prefs.getBoolean("digestCreak", true) && prefs.getBoolean("sharedUser", false)) {
- setStaticBooleanField(utilClass, "ALLOW_NON_PRELOADS_SYSTEM_SHAREDUIDS", true);
- }
-
// ee11a9c (Rename AndroidPackageApi to AndroidPackage)
findAndHookMethod("com.android.server.pm.PackageManagerServiceUtils", loadPackageParam.classLoader,
"checkDowngrade",
@@ -39,7 +33,7 @@ public class CorePatchForU extends CorePatchForT {
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) {
- if (prefs.getBoolean("authcreak", false)) {
+ if (prefs.getBoolean("authcreak", true)) {
param.setResult(null);
}
}
@@ -56,12 +50,6 @@ public class CorePatchForU extends CorePatchForT {
}
}
- @Override
- Class> getParsedPackage(ClassLoader classLoader) {
- var clazz = XposedHelpers.findClassIfExists("com.android.internal.pm.parsing.pkg.ParsedPackage", classLoader);
- return clazz != null ? clazz : XposedHelpers.findClassIfExists("com.android.server.pm.parsing.pkg.ParsedPackage", classLoader);
- }
-
@Override
Class> getIsVerificationEnabledClass(ClassLoader classLoader) {
return XposedHelpers.findClass("com.android.server.pm.VerifyingSession", classLoader);
diff --git a/app/src/main/java/toolkit/coderstory/MainHook.java b/app/src/main/java/toolkit/coderstory/MainHook.java
index d24259b..c903e33 100644
--- a/app/src/main/java/toolkit/coderstory/MainHook.java
+++ b/app/src/main/java/toolkit/coderstory/MainHook.java
@@ -17,7 +17,6 @@ public class MainHook implements IXposedHookLoadPackage {
if (BuildConfig.DEBUG)
XposedBridge.log("D/" + TAG + " handleLoadPackage");
switch (Build.VERSION.SDK_INT) {
- case Build.VERSION_CODES.BAKLAVA: // 36
case Build.VERSION_CODES.VANILLA_ICE_CREAM: // 35
new CorePatchForV().handleLoadPackage(lpparam);
break;
@@ -40,8 +39,6 @@ public class MainHook implements IXposedHookLoadPackage {
break;
default:
XposedBridge.log("W/" + TAG + " Unsupported Version of Android " + Build.VERSION.SDK_INT);
- XposedBridge.log("I/" + TAG + " Falling back to latest SDK");
- new CorePatchForV().handleLoadPackage(lpparam);
break;
}
}
diff --git a/app/src/main/java/toolkit/coderstory/XposedHelper.java b/app/src/main/java/toolkit/coderstory/XposedHelper.java
index b63adcd..dd64893 100644
--- a/app/src/main/java/toolkit/coderstory/XposedHelper.java
+++ b/app/src/main/java/toolkit/coderstory/XposedHelper.java
@@ -52,15 +52,6 @@ public class XposedHelper {
}
}
- public static void setStaticBooleanField(Class> hookClass, String fieldName, boolean value) {
- try {
- XposedHelpers.setStaticBooleanField(hookClass, fieldName, value);
- } catch (Throwable e) {
- if (BuildConfig.DEBUG)
- XposedBridge.log("E/" + MainHook.TAG + " " + Log.getStackTraceString(e));
- }
- }
-
public static Class> findClass(String className, ClassLoader classLoader) {
try {
return Class.forName(className, false, classLoader);
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 7a8aae9..2937f69 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
index 7244b1f..8ec4f50 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
index 520c6af..da5bc6e 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index a0c5635..55d28e0 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
index 49193a8..c71b949 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
index 79db825..d8234c3 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 557ca48..fdd614b 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
index 37c0ba9..4b0d19c 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
index 1a5b46f..4389a9e 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 0377390..660fa96 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
index 2fb9108..e656c88 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
index 7e061d9..4b21512 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index 5863d07..d25a9e4 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
index 1dfd158..cf8e422 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
index 6dea43a..232c09b 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/values-vi/string.xml b/app/src/main/res/values-vi/string.xml
index a56ee10..c1b4ac6 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 khả dụng cho Android 9 ~ 16 trở lên.\nMBCP Helper được dựa trên CorePatch.
+ 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.
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,8 +20,4 @@
!! 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 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.
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 9c646b8..746beb5 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 are available for Android 9 and newer.\nIts based on CorePatch.
+ MBCP and Helper only available for Android 12 and newer.\nIts based on CorePatch.
Allow downgrade
Allow downgrade MBCP and other applications to older version.
Disable digest verify
@@ -21,8 +21,4 @@
!! 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 !!!
- 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 b6b0c0a..137bb8d 100644
--- a/app/src/main/res/xml/prefs.xml
+++ b/app/src/main/res/xml/prefs.xml
@@ -8,52 +8,47 @@
android:summary="@string/dlmbcp_summary">
+ android:data="https://t.me/mbbpatch"/>
+ android:data="https://gitlab.com/cuynu/mbcp-helper"/>
+
-
-
-
-
-
-
-
-
diff --git a/build.gradle.kts b/build.gradle.kts
index 0ee713f..8bc2b2b 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -6,7 +6,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath("com.android.tools.build:gradle:8.7.3")
+ classpath("com.android.tools.build:gradle:8.7.2")
}
}