Compare commits

...
Message SHA1
feat(func)!: remove github action workflow
i don't need this, as i build locally

Signed-off-by: Cuynu <cuynu@proton.me>

Cuynu   commited 2025-09-08 02:46:58 +07:00
40f150e343
fix: prefs.xml: wrong link
Signed-off-by: Cuynu <cuynu@proton.me>

Cuynu   commited 2025-09-08 02:44:58 +07:00
72326e5b16
feat: bump v1.5-mbcp
Signed-off-by: Cuynu <cuynu@proton.me>

Cuynu   commited 2025-09-08 02:41:09 +07:00
296dec622e
feat: modify links & minor changes
Signed-off-by: Cuynu <cuynu@proton.me>

Cuynu   commited 2025-09-08 02:40:29 +07:00
fbe6bd14cc
feat: strings.xml: new strings
Signed-off-by: Cuynu <cuynu@proton.me>

Cuynu   commited 2025-09-08 02:26:53 +07:00
2b62431bd7
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.

rushii   authored and   Cuynu   commited 2025-09-08 02:26:09 +07:00
2988c0f618
feat: strings.xml: new strings
Signed-off-by: Cuynu <cuynu@proton.me>

Cuynu   commited 2025-09-08 02:20:04 +07:00
977ae12af2
restore support for android 9 ~ 11 and minor changes
Cuynu   commited 2025-06-25 16:57:56 +07:00
29187942d8
fix permission signature check bypass on android 16 (#129)
5ec1cff   authored and   Cuynu   commited 2025-06-15 22:26:59 +07:00
a95e2bc7a3
Handle moved PM interface on 14 QPR3
Wang Han   authored and   Cuynu   commited 2025-06-04 21:52:25 +07:00
4e5f886888
Force enable ALLOW_NON_PRELOADS_SYSTEM_SHAREDUIDS on U+ (#126)
Wang Han   authored and   Cuynu   commited 2025-06-04 21:52:09 +07:00
4f366f78c0
Declare A16 support (LSPosed/CorePatch) "3301673
"

Cuynu   commited 2025-06-04 21:50:15 +07:00
a32884a708
update app icon
Cuynu   commited 2025-02-02 14:48:35 +07:00
87a69b73fc
remove AlertDialog
Cuynu   commited 2025-01-29 00:43:45 +07:00
8b9f818a9b
revert changes
Cuynu   commited 2025-01-29 00:41:56 +07:00
0dd0001f2c
allow toggle "disable digest verify"
Cuynu   commited 2025-01-29 00:39:49 +07:00
86cacb5f53
bump 1.2-mbcp
Cuynu   commited 2025-01-28 23:47:16 +07:00
275a3d564a
bump gradle 8.7.3
Cuynu   commited 2025-01-28 23:45:20 +07:00
ec8612b823
remove README.md
Cuynu   commited 2025-01-21 00:57:05 +07:00
2ad0612ac0
29 changed files with 100 additions and 124 deletions

View file

@ -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

View file

@ -1,49 +0,0 @@
# CorePatch
```
A Module For Xposed Framework
Disable signature verification For Android
```
![Android CI](https://github.com/coderstory/CorePatch/workflows/Android%20CI/badge.svg) ![GitHub release (latest by date)](https://img.shields.io/github/v/release/coderstory/CorePatch) ![CRAN/METACRAN](https://img.shields.io/cran/l/devtools)
### 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)

View file

@ -10,14 +10,14 @@ val releaseKeyAlias: String? by rootProject
val releaseKeyPassword: String? by rootProject
android {
compileSdk = 35
buildToolsVersion = "35.0.0"
compileSdk = 36
buildToolsVersion = "36.0.0"
defaultConfig {
applicationId = "com.mbcp.helper"
minSdk = 31
targetSdk = 35
versionCode = 2030
versionName = "1.1-mbcp"
minSdk = 28
targetSdk = 36
versionCode = 2031
versionName = "1.5-mbcp"
}
signingConfigs {

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 KiB

View file

@ -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", true));
new ReturnConstant(prefs, "authcreak", false));
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", true)) {
if (prefs.getBoolean("authcreak", false)) {
Throwable throwable = methodHookParam.getThrowable();
if (throwable != null) {
Throwable cause = throwable.getCause();
@ -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);
}
});
}
}

View file

@ -63,8 +63,9 @@ 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", 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));
@ -262,7 +263,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 {
@ -394,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);
}

View file

@ -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", true)) {
if (prefs.getBoolean("authcreak", false)) {
param.setResult(null);
}
}

View file

@ -21,6 +21,12 @@ 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",
@ -33,7 +39,7 @@ public class CorePatchForU extends CorePatchForT {
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) {
if (prefs.getBoolean("authcreak", true)) {
if (prefs.getBoolean("authcreak", false)) {
param.setResult(null);
}
}
@ -50,6 +56,12 @@ 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);

View file

@ -17,6 +17,7 @@ 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;
@ -39,6 +40,8 @@ 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;
}
}

View file

@ -52,6 +52,15 @@ 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);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.8 KiB

After

Width:  |  Height:  |  Size: 7.3 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Before After
Before After

Some files were not shown because too many files have changed in this diff Show more