Compare commits

..
7 changed files with 65 additions and 67 deletions

43
.github/workflows/android.yml vendored Normal file
View file

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

View file

@ -14,10 +14,10 @@ android {
buildToolsVersion = "36.0.0"
defaultConfig {
applicationId = "com.mbcp.helper"
minSdk = 28
minSdk = 31
targetSdk = 36
versionCode = 2031
versionName = "1.5-mbcp"
versionCode = 2030
versionName = "1.3-mbcp"
}
signingConfigs {

View file

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

View file

@ -65,7 +65,6 @@ 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));
@ -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);
}

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 khả dụng cho Android 9 ~ 16 trở lên.\nMBCP Helper được dựa trên CorePatch.</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="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,8 +20,4 @@
<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 are available for Android 9 and newer.\nIts based on CorePatch.</string>
<string name="corepatch">MBCP and Helper only available for Android 12 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,8 +21,4 @@
<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,52 +8,46 @@
android:summary="@string/dlmbcp_summary">
<intent
android:action="android.intent.action.VIEW"
android:data="https://t.me/mbbpatch_eng"/>
android:data="https://t.me/mbbpatch"/>
</Preference>
<Preference
android:title="@string/src"
android:summary="@string/src_summary">
<intent
android:action="android.intent.action.VIEW"
android:data="https://git.disroot.org/mbcp/mbcp-helper"/>
android:data="https://gitlab.com/cuynu/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" />
<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
<SwitchPreference
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"/>
<Preference
<SwitchPreference
android:key="bypassBlock"
android:enabled="false"
android:title="@string/bypassBlock"
android:summary="@string/bypassBlock_summary"
android:defaultValue="true" />
<Preference
<SwitchPreference
android:key="disableVerificationAgent"
android:enabled="false"
android:title="@string/disable_verification_agent_title"
android:summary="@string/disable_verification_agent_summary"
android:defaultValue="true" />
</PreferenceCategory>