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
7 changed files with 67 additions and 65 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

@ -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"
versionCode = 2031
versionName = "1.5-mbcp"
}
signingConfigs {

View file

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

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

@ -7,7 +7,7 @@
<string name="src_summary">Xem mã nguồn của trình hỗ trợ MBCP - dựa trên CorePatch.</string>
<string name="options">Tùy chọn</string>
<string name="module_description">Vô hiệu hóa xác minh chữ ký và cho phép cài đặt MBCP.</string>
<string name="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.</string>
<string name="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.</string>
<string name="downgr">Cho phép hạ cấp</string>
<string name="downgr_summary">Cho phép hạ cấp MBCP và các ứng dụng khác về phiên bản cũ hơn.</string>
<string name="authcreak">Vô hiệu hóa xác minh tính toàn vẹn</string>
@ -20,4 +20,8 @@
<string name="usepresig_warn">!! Any apk can override the installed one !!\nBe carefully when installing unknown apk</string>
<string name="disable_verification_agent_title">Bỏ qua tác nhân xác minh APK</string>
<string name="disable_verification_agent_summary">ví dụ như trình bảo vệ app của Google Play.</string>
<string name="hyperos_title">Thông báo cho HyperOS</string>
<string name="hyperos_summary">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.</string>
<string name="exactSigCheck">Disable exact signature match</string>
<string name="exactSigCheck_summary">Disables exact signature match between apks, allowing installs with each apk split having a different signature.</string>
</resources>

View file

@ -8,7 +8,7 @@
<string name="options">Options</string>
<string name="module_description">Disable signature verification and allows install MBCP</string>
<string name="corepatch">MBCP and Helper only available for Android 12 and newer.\nIts based on CorePatch.</string>
<string name="corepatch">MBCP and Helper are available for Android 9 and newer.\nIts based on CorePatch.</string>
<string name="downgr">Allow downgrade</string>
<string name="downgr_summary">Allow downgrade MBCP and other applications to older version.</string>
<string name="authcreak">Disable digest verify</string>
@ -21,4 +21,8 @@
<string name="usepresig_warn">!! Any apk can override the installed one !!\nBe carefully when installing unknown apk</string>
<string name="disable_verification_agent_title">Disable Package Verification Agent</string>
<string name="disable_verification_agent_summary">e.g. Google Play Protection</string>
<string name="hyperos_title">HyperOS attention</string>
<string name="hyperos_summary">This helper cant be used for HyperOS 1+. If you have HyperOS 1+, downgrade to MIUI, or ask somewhere for manually patching service.jar !!!</string>
<string name="exactSigCheck">Disable exact signature match</string>
<string name="exactSigCheck_summary">Disables exact signature match between apks, allowing installs with each apk split having a different signature. Only enable when really needed!</string>
</resources>

View file

@ -8,46 +8,52 @@
android:summary="@string/dlmbcp_summary">
<intent
android:action="android.intent.action.VIEW"
android:data="https://t.me/mbbpatch"/>
android:data="https://t.me/mbbpatch_eng"/>
</Preference>
<Preference
android:title="@string/src"
android:summary="@string/src_summary">
<intent
android:action="android.intent.action.VIEW"
android:data="https://gitlab.com/cuynu/mbcp-helper"/>
android:data="https://git.disroot.org/mbcp/mbcp-helper"/>
</Preference>
</PreferenceCategory>
<PreferenceCategory android:title="@string/options">
<SwitchPreference
android:key="downgrade"
android:title="@string/downgr"
android:summary="@string/downgr_summary"
android:defaultValue="true" />
<SwitchPreference
android:key="authcreak"
android:title="@string/authcreak"
android:summary="@string/authcreak_summary"
android:defaultValue="false" />
<SwitchPreference
<Preference
android:title="@string/hyperos_title"
android:summary="@string/hyperos_summary">
<intent
android:action="android.intent.action.VIEW"
android:data="https://git.disroot.org/mbcp/info/wiki/mbcpinstall_hyperos" />
</Preference>
<Preference
android:key="downgrade"
android:enabled="false"
android:defaultValue="true" />
<Preference
android:key="digestCreak"
android:enabled="false"
android:title="@string/digestCreak"
android:summary="@string/digestCreak_summary"
android:defaultValue="true" />
<Preference
android:key="exactSigCheck"
android:enabled="false"
android:defaultValue="false"/>
<SwitchPreference
<Preference
android:key="bypassBlock"
android:title="@string/bypassBlock"
android:summary="@string/bypassBlock_summary"
android:enabled="false"
android:defaultValue="true" />
<SwitchPreference
<Preference
android:key="disableVerificationAgent"
android:title="@string/disable_verification_agent_title"
android:summary="@string/disable_verification_agent_summary"
android:enabled="false"
android:defaultValue="true" />
</PreferenceCategory>