Compare commits

..
Message SHA1
chore: {parse.sh, common.sh}: get_mb_ver -> mb_ver
shorter, why not?

Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-08 01:29:02 +07:00
1e07a99f7b
just math it i cant logic smh retar
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-08 01:26:03 +07:00
0321f71fb0
brain_is_air
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-08 00:28:54 +07:00
aba48e35b2
Revert "logitech"
This reverts commit bd750e2097.

fukiame   commited 2026-02-08 00:24:12 +07:00
79538e4147
logitech
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-08 00:20:50 +07:00
bd750e2097
eioqkfigne
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 23:54:43 +07:00
ef92fda269
common_sc2152
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 23:50:24 +07:00
9d5c7acdcf
lmfao
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 23:40:38 +07:00
022a003941
bruh
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 23:39:59 +07:00
ab18d0ae1f
fix: common.sh: getvar: reset i
usually not a problem though?

Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 23:34:55 +07:00
37f1be740c
aejnfksosmx
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 23:22:13 +07:00
26047ba4de
brok
Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 23:17:41 +07:00
11fcfd98b5
[2/2] fix: patches: *.sh: adapt for y2k
sed -i 's/MAXVER: /MAXVER: 6.4./' *
sed -i 's/MINVER: /MINVER: 6.4./' *

Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 22:44:54 +07:00
4cd3357a68
fix: patches: *.sh: kill all trailing whitespaces
sed -i 's/[ \t]*$//' *

Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 22:42:23 +07:00
64f49764fe
[1/2] feat: {parse.sh, common.sh}: "y2k" support
parse whole version, avoid potential patches leak when, for example, 6.5.0 lands

get_mb_ver now must have an argument,
for any usage outside of what ive grep'd, to retain the previous behavior, pass '2'

Signed-off-by: fukiame <fukiame@proton.me>

fukiame   commited 2026-02-07 22:32:20 +07:00
a81ef58501
17 changed files with 483 additions and 795 deletions

View file

@ -47,7 +47,7 @@
android:visibility="visible" android:visibility="visible"
android:layout_width="fill_parent" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="TRONG TRƯỜNG HỢP ĐÃ LÀM ĐÚNG TẤT CẢ, CHỤP MÀN HÌNH NÀY VÀ BÁO LỖI QUA Telegram @cuynuchat hoặc YouTube @cuynu !!!" /> android:text="TRONG TRƯỜNG HỢP ĐÃ LÀM ĐÚNG TẤT CẢ, CHỤP MÀN HÌNH NÀY VÀ BÁO LỖI QUA Telegram @cuynuz hoặc YouTube @cuynu !!!" />
<Button <Button
android:tag="0" android:tag="0"
android:visibility="invisible" android:visibility="invisible"
@ -103,4 +103,4 @@
app:layout_constraintBottom_toTopOf="@id/llBottom" app:layout_constraintBottom_toTopOf="@id/llBottom"
app:layout_constraintTop_toTopOf="@id/llBottom" app:layout_constraintTop_toTopOf="@id/llBottom"
app:tabIndicatorColor="#ffffffff" /> app:tabIndicatorColor="#ffffffff" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -43,7 +43,7 @@
<string name="aiDemo_willSpeakLoudly">You will have to speak loudy these numbers on the screen</string> <string name="aiDemo_willSpeakLoudly">You will have to speak loudy these numbers on the screen</string>
<string name="aiFaceMessage_facePitchDown">Please look straight</string> <string name="aiFaceMessage_facePitchDown">Please look straight</string>
<string name="aiFaceMessage_facePitchUp">Please look straight</string> <string name="aiFaceMessage_facePitchUp">Please look straight</string>
<string name="aiFaceMessage_faceQualified">Your face is in the frame. Please hold your hand steady!</string> <string name="aiFaceMessage_faceQualified">Please hold your hand steady</string>
<string name="aiFaceMessage_faceRollAntiClockWise">Please keep your face upright</string> <string name="aiFaceMessage_faceRollAntiClockWise">Please keep your face upright</string>
<string name="aiFaceMessage_faceRollClockWise">Please keep your face upright</string> <string name="aiFaceMessage_faceRollClockWise">Please keep your face upright</string>
<string name="aiFaceMessage_faceTooBig">Please put the camera further away</string> <string name="aiFaceMessage_faceTooBig">Please put the camera further away</string>
@ -86,16 +86,17 @@
<string name="character_counter_pattern">%1$d/%2$d</string> <string name="character_counter_pattern">%1$d/%2$d</string>
<string name="chip_text">Chip text</string> <string name="chip_text">Chip text</string>
<string name="clear_text_end_icon_content_description">Clear text</string> <string name="clear_text_end_icon_content_description">Clear text</string>
<string name="click_setting_qr">Touch to setup QR</string> <string name="click_setting_qr">Chạm để cài đặt
<string name="click_setting_qr_big_qr">Touch to setup QR</string> QR</string>
<string name="click_setting_qr_big_qr">Chạm để cài đặt QR</string>
<string name="com.crashlytics.android.build_id">cca90e65-5805-4c06-bc2d-930595fb2cf4</string> <string name="com.crashlytics.android.build_id">cca90e65-5805-4c06-bc2d-930595fb2cf4</string>
<string name="com.google.firebase.crashlytics.mapping_file_id">a4f49867dfa64435bea0bafc1f437f34</string> <string name="com.google.firebase.crashlytics.mapping_file_id">a4f49867dfa64435bea0bafc1f437f34</string>
<string name="common_google_play_services_enable_button">Enable</string> <string name="common_google_play_services_enable_button">Enable</string>
<string name="common_google_play_services_enable_text">%1$s can't work properly unless you enable GMS/microG.</string> <string name="common_google_play_services_enable_text">%1$s won't work unless you enable Google Play services.</string>
<string name="common_google_play_services_enable_title">Enable GMS/microG</string> <string name="common_google_play_services_enable_title">Enable Google Play services</string>
<string name="common_google_play_services_install_button">Install</string> <string name="common_google_play_services_install_button">Install</string>
<string name="common_google_play_services_install_text">GMS/microG is missing from your device. %1$s still runs without it but some features will be broken.</string> <string name="common_google_play_services_install_text">%1$s won't run without Google Play services, which are missing from your device.</string>
<string name="common_google_play_services_install_title">GMS/microG missing</string> <string name="common_google_play_services_install_title">Get Google Play services</string>
<string name="common_google_play_services_notification_channel_name">Google Play services availability</string> <string name="common_google_play_services_notification_channel_name">Google Play services availability</string>
<string name="common_google_play_services_notification_ticker">Google Play services error</string> <string name="common_google_play_services_notification_ticker">Google Play services error</string>
<string name="common_google_play_services_unknown_issue">%1$s is having trouble with Google Play services. Please try again.</string> <string name="common_google_play_services_unknown_issue">%1$s is having trouble with Google Play services. Please try again.</string>

View file

@ -54,6 +54,39 @@ sed_libtian37() {
) && info "[sed_libtian37] [$target] -> [$replacement]" || warn "[sed_libtian37] replacing [$target] failed !" ) && info "[sed_libtian37] [$target] -> [$replacement]" || warn "[sed_libtian37] replacing [$target] failed !"
} }
prioritylogo() {
if [ -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/a_logo_img_addon.webp' ]
then
warn "App newer than v6.4.79+ ! Using enforced logo instead"
info "Copying [ic_logo_mb_text_enforced.svg]..."
cp -f 'blob_patches/semipriority/ic_logo_mb_text_enforced.svg' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/svgs/ic_logo_mb_text.svg'
else
info 'Copying [ic_logo_mb_text.svg]...'
cp -f 'blob_patches/semipriority/ic_logo_mb_text.svg' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/svgs/'
fi
}
enforcemb() {
if [ -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/customize_img_changeImageContent.webp' ]
then
info "App newer than v6.4.84 ! Using new search logo!"
# Replace MB AI search button with normal search button
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.webp'
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.private.webp'
# Adapt new changes with v6.4.75
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.webp'
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.private.webp'
else
info "App older than v6.4.83 ! Using old search logo!"
# Replace MB AI search button with normal search button
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.webp'
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.private.webp'
# Adapt new changes with v6.4.75
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.webp'
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.private.webp'
fi
}
# libdesignersactivists.so are former known as libZDefend.so # libdesignersactivists.so are former known as libZDefend.so
# MB moved it to libdesignersactivists.so since v6.4.48+ # MB moved it to libdesignersactivists.so since v6.4.48+
# this currently is placeholder, and will be implemented later # this currently is placeholder, and will be implemented later
@ -74,14 +107,6 @@ iszdefend() {
fi fi
} }
isvcm1() {
if [[ -f mbapk/mbapk_unpacked/root/lib/arm64-v8a/libvcm1.so ]]; then
warn "As of v6.4.86+, to extract assets, you need to clear app data and then open the app again!"
else
info "[libvcm1.so] not found! ignoring notice"
fi
}
manifest_remove() { manifest_remove() {
sed -i "/$1/d" "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml && \ sed -i "/$1/d" "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml && \
info "[manifest_remove] removing $1" || \ info "[manifest_remove] removing $1" || \

View file

@ -1,15 +1,16 @@
#!/usr/bin/env bash #!/usr/bin/env bash
echo "DO NOT use these patches with newer app!"
echo "Legacy patches list for MBCPApp :" echo "Legacy patches list for MBCPApp :"
PS3='Select patch options :' PS3='Select patch options :'
select opt in 'Bypass 1200 error [v6.4.45]' 'Bypass signature check' '[TEST] Remove v6.4.56 root detection' 'Exit' select opt in 'Bypass 1200 error [v6.4.45]' 'Bypass signature check' '[TEST] Remove v6.4.56 root detection' 'Exit'
do do
if [ "$opt" == 'Bypass 1200 error [v6.4.45]' ]; then if [ "$opt" == 'Bypass 1200 error [v6.4.45]' ]; then
[ ! -f 'bypass1200/*.apks' ] && echo "Download the [v6.4.47] app from Telegram [@embeeapks] or Google Play API with versionCode 661" && echo "Then copy it to [bypass1200] folder!" && exit 1
echo "Notice : v6.4.45 are now got [GW525 - Force update !] !!!" echo "Notice : v6.4.45 are now got [GW525 - Force update !] !!!"
echo "This patch will remain available but you cannot bypass GW525 error !" echo "This patch will remain available but you cannot bypass GW525 error !"
mkdir -p bypass1200 mkdir bypass1200
echo "Downloading v6.4.47 apks..."
wget https://github.com/ghclonenah1/mbbpatch_release/releases/download/a/embee_v6.4.47_arm64-v8a_armeabi-v7a.apks -q --show-progress
mv *.apks bypass1200/
echo "Unpacking..." echo "Unpacking..."
java -jar tools/apkeditor.jar m -i bypass1200/*.apks java -jar tools/apkeditor.jar m -i bypass1200/*.apks
java -jar tools/apktool.jar d bypass1200/*.apk -o bypass1200/unpacked -j$(nproc) java -jar tools/apktool.jar d bypass1200/*.apk -o bypass1200/unpacked -j$(nproc)
@ -20,17 +21,17 @@ do
echo "Cleaning..." echo "Cleaning..."
rm -rf bypass1200 rm -rf bypass1200
## MB Forced update to 658, it must be spoofed! ## MB Forced update to 658, it must be spoofed!
echo "Patching [AndroidManifest.xml]..." echo "Patching [apktool.yml]..."
sed -i 's|658|700|g' "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml sed -i 's|658|700|g' "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml
echo "This patch are applied by MBCPApp Patcher on $(uname -s -r) with commit :" $(git rev-parse --short HEAD) at $(git show -s --format=%cd HEAD). > 'mbapk/mbapk_unpacked/root/assets/mbcp_info/bypass_1200_error.inf' echo "This patch are applied by MBCPApp Patcher on $(uname -s -r) with commit :" $(git rev-parse --short HEAD) at $(git show -s --format=%cd HEAD). > 'mbapk/mbapk_unpacked/root/assets/mbcp_info/bypass_1200_error.inf'
# Use bypass gw934 checksum for this patch instead # Use bypass gw934 checksum for this patch instead
elif [ "$opt" == 'Bypass signature check' ]; then elif [ "$opt" == 'Bypass signature check' ]; then
echo "Applying patch [Bypass signature check]..." echo "Applying patch [Bypass signature check]..."
if [ -d "$DIRPATH"/mbapk/mbapk_unpacked ] if [ -d "$DIRPATH"/mbapk/mbapk_unpacked ]
then then
# Checks for MBShield, if exists then exit function # Checks for MBShield, if exists then exit function
if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/assets/mbshield.szip ] if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/assets/mbshield.szip ]
then then
info "MBShield found on unpacked APK ! Bypass signature checks won't be possible if MBShield is present on current unpacked APK !" info "MBShield found on unpacked APK ! Bypass signature checks won't be possible if MBShield is present on current unpacked APK !"
@ -51,6 +52,7 @@ fi
elif [ "$opt" == '[TEST] Remove v6.4.56 root detection' ]; then elif [ "$opt" == '[TEST] Remove v6.4.56 root detection' ]; then
if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/smali/androidx/UnderlyingVcl.smali ] if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/smali/androidx/UnderlyingVcl.smali ]
then then
echo "Applying patch..." echo "Applying patch..."
echo "Removing checksum from provider..." echo "Removing checksum from provider..."
sed -i 's|e1a14adc915d7ad159edf2668b0dfcb359cf86538642de0e425d027f66eb07b2||g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes/androidx/UnderlyingVcl.smali sed -i 's|e1a14adc915d7ad159edf2668b0dfcb359cf86538642de0e425d027f66eb07b2||g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes/androidx/UnderlyingVcl.smali
@ -85,10 +87,10 @@ fi
mv 'temp/libweneedfreedom.so' 'temp/libdesignersactivists.so' mv 'temp/libweneedfreedom.so' 'temp/libdesignersactivists.so'
cp -f 'temp/libdesignersactivists.so' 'mbapk/mbapk_unpacked/lib/armeabi-v7a/libdesignersactivists.so' cp -f 'temp/libdesignersactivists.so' 'mbapk/mbapk_unpacked/lib/armeabi-v7a/libdesignersactivists.so'
rm -rf temp rm -rf temp
echo "This patch is applied by MBCPApp Patcher on $(uname -s -r) with commit :" $(git rev-parse --short HEAD) at $(git show -s --format=%cd HEAD). > 'mbapk/mbapk_unpacked/assets/mbcp_info/remove_v6.4.56_root_detection.inf' echo "This patch are applied by MBCPApp Patcher on $(uname -s -r) with commit :" $(git rev-parse --short HEAD) at $(git show -s --format=%cd HEAD). > 'mbapk/mbapk_unpacked/assets/mbcp_info/remove_v6.4.56_root_detection.inf'
echo "Applied [Remove v6.4.56 root detection] patch !!!" echo "Applied [Remove v6.4.56 root detection] patch !!!"
else else
echo "[UnderlyingVcl.smali] not found!" echo "[UnderlyingVcl.smali] not found! Please clear patched app then unpack again!"
fi fi

View file

@ -15,12 +15,12 @@ clear
. "$DIRPATH/common.sh" . "$DIRPATH/common.sh"
# Check if user is running on an actual Linux environment # Check if user is running on an actual Linux environment
if uname -a | grep -i Linux; then if uname -a | grep -i Linux ; then
info "You have Linux environment :)" info "You have Linux environment :)"
fi fi
# Check if figlet exists or not # Check if figlet exists or not
if command -v figlet; then if command -v figlet ; then
FIGLET=figlet FIGLET=figlet
else else
warn "figlet not found, ignoring banner !" warn "figlet not found, ignoring banner !"
@ -28,25 +28,26 @@ else
fi fi
# Check if java exists # Check if java exists
if ! java -version; then if ! java -version ; then
err "Java not found !!!" err "Java not found !!!"
info "Please install Java for your system ! " info "Please install Java for your system ! "
exit 127 exit 127
fi fi
# Check if wget exists # Check if wget exists
if ! wget --version; then if ! wget --version ; then
err "wget not found !!!" err "wget not found !!!"
info "Please install wget for your system !" info "Please install wget for your system !"
exit 127 exit 127
fi fi
# Check if xmlstarlet exists # Check if xmlstarlet exists
if ! xmlstarlet --version; then if ! xmlstarlet --version ; then
err "xmlstarlet not found, please install it" err "xmlstarlet not found, please install it"
exit 127 exit 127
fi fi
COMMIT="$(git rev-parse --short HEAD)" COMMIT="$(git rev-parse --short HEAD)"
BRANCH="$(git rev-parse --abbrev-ref HEAD)" BRANCH="$(git rev-parse --abbrev-ref HEAD)"
clear clear
@ -60,7 +61,7 @@ Patching operation are all not limited at all !
Asset extraction are not needed :)' Asset extraction are not needed :)'
download_tools() { download_tools() {
apktool_link="https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_3.0.1.jar" apktool_link="https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.12.0.jar"
apkeditor_link="https://github.com/REAndroid/APKEditor/releases/download/V1.4.7/APKEditor-1.4.7.jar" apkeditor_link="https://github.com/REAndroid/APKEditor/releases/download/V1.4.7/APKEditor-1.4.7.jar"
cd tools && rm -rf ./*.jar cd tools && rm -rf ./*.jar
@ -77,7 +78,7 @@ darwin() {
[ $(brew list | grep gnu-sed) ] && echo "gnu-sed is installed!" && darwindeps || echo "gnu-sed is not installed. Please install it!" [ $(brew list | grep gnu-sed) ] && echo "gnu-sed is installed!" && darwindeps || echo "gnu-sed is not installed. Please install it!"
} }
if uname -a | grep -i Darwin; then if uname -a | grep -i Darwin ; then
info "You have macOS environment :)" info "You have macOS environment :)"
darwin darwin
clear clear
@ -89,27 +90,19 @@ copy_assets() {
is_unpacked() { is_unpacked() {
[ -d "$DIRPATH"/mbapk/mbapk_unpacked ] || { [ -d "$DIRPATH"/mbapk/mbapk_unpacked ] || {
err "[mbapk_unpacked] not found ! Please unpack APK first !" err "[mbapk_unpacked] not found ! Please unpack APK first !" ; return 127
return 127
} }
} }
is_unpacked_lib() { is_unpacked_lib() {
[ -d "$DIRPATH"/mbapk/mbapk_unpacked/root/lib ] || { [ -d "$DIRPATH"/mbapk/mbapk_unpacked/root/lib ] || {
err "[mbapk_unpacked/root/lib] folder not found ! Please unpack APK first !" err "[mbapk_unpacked/root/lib] folder not found ! Please unpack APK first !" ; return 127
return 127
} }
} }
apktool_exist() { apktool_exist() {
[ -f "$DIRPATH"/tools/apktool.jar ] || { [ -f "$DIRPATH"/tools/apktool.jar ] || { err "apktool not found" ; return 127 ; }
err "apktool not found"
return 127
}
} }
apkeditor_exist() { apkeditor_exist() {
[ -f "$DIRPATH"/tools/apkeditor.jar ] || { [ -f "$DIRPATH"/tools/apkeditor.jar ] || { err "apkeditor not found" ; return 127 ; }
err "apkeditor not found"
return 127
}
} }
mb_apk_exist() { mb_apk_exist() {
ls "$DIRPATH"/mbapk/*.apk >/dev/null 2>&1 || { ls "$DIRPATH"/mbapk/*.apk >/dev/null 2>&1 || {
@ -119,22 +112,13 @@ mb_apk_exist() {
} }
unpack_mbcp() { unpack_mbcp() {
[[ $(uname -a | grep Linux) ]] && local - [[ $(uname -a | grep Linux) ]] && local - ; set -e
set -e { apkeditor_exist && mb_apk_exist ; } || return 0
{ apkeditor_exist && mb_apk_exist; } || return 0
rm -rf 'mbapk/mbapk_unpacked' rm -rf 'mbapk/mbapk_unpacked'
rm -rf 'mbapk/*.apks' rm -rf 'mbapk/*.apks'
rm -rf 'mbapk/*merged.apk' rm -rf 'mbapk/*merged.apk'
java -jar tools/apkeditor.jar d -i mbapk/*.apk -o mbapk/mbapk_unpacked || { java -jar tools/apkeditor.jar d -i mbapk/*.apk -o mbapk/mbapk_unpacked || { err "Unpacking failed !" ; return 1 ; }
err "Unpacking failed !"
return 1
}
touch 'mbapk/mbapk_unpacked/isreal_unpacked' touch 'mbapk/mbapk_unpacked/isreal_unpacked'
unzip -l mbapk/MBOriginal.apk | grep -oH "ic-appmb.ttf" && good "Current converted app is MBBank! Continuing" || {
err "Current converted app is NOT MBBank! Deleting files"
rm -rf mbapk/*
return 1
}
info "Cleaning useless files..." info "Cleaning useless files..."
rm -rf 'mbapk/mbapk_unpacked/root/assets/_4A9w8flncUrhDOG8dyqLi_azBTYT3PlSXz0hiCzRQA_' rm -rf 'mbapk/mbapk_unpacked/root/assets/_4A9w8flncUrhDOG8dyqLi_azBTYT3PlSXz0hiCzRQA_'
rm -rf 'mbapk/mbapk_unpacked/root/assets/0QDl12M5S2hKxoKF4cNI4kEX1qDQRMiOd34TXjSjy4M_' rm -rf 'mbapk/mbapk_unpacked/root/assets/0QDl12M5S2hKxoKF4cNI4kEX1qDQRMiOd34TXjSjy4M_'
@ -213,20 +197,19 @@ unpack_mbcp() {
info "Reformatting AndroidManifest.xml with xmlstarlet..." info "Reformatting AndroidManifest.xml with xmlstarlet..."
mv "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml.orig mv "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml.orig
xmlstarlet fo "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml.orig >"$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml xmlstarlet fo "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml.orig > "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml
info "Changing minSdkVersion to 28..." info "Changing minSdkVersion to 28..."
sed -i 's|android:minSdkVersion="24"|android:minSdkVersion="28"|g' "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml sed -i 's|android:minSdkVersion="24"|android:minSdkVersion="28"|g' "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml
} }
repack_mbcp() { repack_mbcp() {
{ apktool_exist && is_unpacked; } || return 0 { apktool_exist && is_unpacked ; } || return 0
info "Repacking APK..." info "Repacking APK..."
echo "Compiled with MBCPApp Patcher by $(whoami) on $(uname -s -r) with commit $COMMIT at $(date). That's all xD" >'mbapk/mbapk_unpacked/root/assets/mbcp_info/mbcpinfo.txt' echo "Compiled with MBCPApp Patcher by $(whoami) on $(uname -s -r) with commit $COMMIT at $(date). That's all xD" > 'mbapk/mbapk_unpacked/root/assets/mbcp_info/mbcpinfo.txt'
( (
set -e set -e
java -jar tools/apkeditor.jar b -i 'mbapk/mbapk_unpacked' -o mbcpapp_apk/MBCP_Flutter_TMP.apk java -jar tools/apkeditor.jar b -i 'mbapk/mbapk_unpacked' -o mbcpapp_apk/MBCP_Flutter_TMP.apk
[ ! -f 'mbcpapp_apk/MBCP_Flutter_TMP.apk' ] && exit 1
info "Processing APK signature scheme v2/v3..." info "Processing APK signature scheme v2/v3..."
rm -rf mbcpapp_apk/MBCP_Flutter_SelfPatched* rm -rf mbcpapp_apk/MBCP_Flutter_SelfPatched*
java -jar tools/apkeditor.jar b -t sig -i 'mbcpapp_apk/MBCP_Flutter_TMP.apk' -sig 'mbsig/signatures' -o "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk" java -jar tools/apkeditor.jar b -t sig -i 'mbcpapp_apk/MBCP_Flutter_TMP.apk' -sig 'mbsig/signatures' -o "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk"
@ -240,17 +223,19 @@ repack_mbcp() {
} }
successunpack() { successunpack() {
if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/isreal_unpacked ]; then if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/isreal_unpacked ]
then
echo -e "\033[32m"Unpacked."$1\033[0m" echo -e "\033[32m"Unpacked."$1\033[0m"
else else
echo -e "\033[31m"Not yet unpacked or not found."$1\033[0m" echo -e "\033[31m"Not yet unpacked or not found."$1\033[0m"
fi fi
} }
check_mbshield() { check_mbshield() {
is_unpacked || return 1 is_unpacked || return 1
if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/mbshield.szip ]; then if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/mbshield.szip ]
then
info "$mbshield_found" info "$mbshield_found"
iszdefend iszdefend
else else
@ -259,8 +244,7 @@ check_mbshield() {
} }
convert_apks() { convert_apks() {
[[ $(uname -a | grep Linux) ]] && local - [[ $(uname -a | grep Linux) ]] && local - ; set -e
set -e
ls "$DIRPATH"/mbapk/*.apks >/dev/null 2>&1 || { ls "$DIRPATH"/mbapk/*.apks >/dev/null 2>&1 || {
err "APKs missing, cannot continue !" err "APKs missing, cannot continue !"
return 0 return 0
@ -271,11 +255,6 @@ convert_apks() {
mv mbapk/*.apk mbapk/MBOriginal.apk mv mbapk/*.apk mbapk/MBOriginal.apk
info 'Cleaning left over [apks] files...' info 'Cleaning left over [apks] files...'
rm -f mbapk/*.apks rm -f mbapk/*.apks
unzip -l mbapk/MBOriginal.apk | grep -oH "ic-appmb.ttf" && good "Current converted app is MBBank! Continuing" || {
err "Current converted app is NOT MBBank! Deleting files"
rm -rf mbapk/*
return 1
}
info "You probably can continue to unpack APK!" info "You probably can continue to unpack APK!"
} }
@ -295,192 +274,198 @@ echo "Original APK must be inside [mbapk] folder !"
echo ------------------------------------------------------------- echo -------------------------------------------------------------
echo "Current commit : $COMMIT ($BRANCH)" echo "Current commit : $COMMIT ($BRANCH)"
echo "Source code : https://git.disroot.org/mbcp/mbbpatch.git" echo "Source code : https://git.disroot.org/mbcp/mbbpatch.git"
echo "Documentation : see [docs] folder" echo "Made possible by Cuynu's brain with love <3"
echo "Written from scratch by Cuynu with love <3"
echo ------------------------------------------------------------- echo -------------------------------------------------------------
echo App status : $(successunpack) echo App status : $(successunpack)
echo ------------------------------------------------------------- echo -------------------------------------------------------------
# Main functions # Main functions
PS3='Please select options to continue : ' PS3='Please select options to continue : '
select opt in 'Pull latest commit' 'Unpack APK' 'Convert apks to apk' 'Repack APK' 'Install patched app' 'MBShield Check' 'Patch App' 'Legacy patches' 'Extract assets [ROOT]' 'Launch MBCPApp/MBBank' 'Force close MBCPApp/MBBank' 'Clear MBCPApp/MBBank app data' 'Clean patched app' 'Download/update tools' 'Restart script' 'Exit'; do select opt in 'Pull latest commit' 'Unpack APK' 'Convert apks to apk' 'Repack APK' 'Install patched app' 'MBShield Check' 'Patch App' 'Legacy patches' 'Extract assets [ROOT]' 'Launch MBCPApp/MBBank' 'Force close MBCPApp/MBBank' 'Clear MBCPApp/MBBank app data' 'Clean patched app' 'Download/update tools' 'Restart script' 'Exit'
do
case "$opt" in case "$opt" in
'Download/update tools') download_tools ;; 'Download/update tools' ) download_tools ;;
'Unpack APK') unpack_mbcp ;; 'Unpack APK' ) unpack_mbcp ;;
'Repack APK') repack_mbcp ;; 'Repack APK' ) repack_mbcp ;;
'Patch App') run_patcher ;; 'Patch App' ) run_patcher ;;
'Legacy patches') run_legacy_patcher ;; 'Legacy patches' ) run_legacy_patcher ;;
'MBShield Check') check_mbshield ;; 'MBShield Check' ) check_mbshield ;;
'Convert apks to apk') convert_apks ;; 'Convert apks to apk' ) convert_apks ;;
'Extract assets [ROOT]') 'Extract assets [ROOT]' )
is_unpacked || exit 1 iszdefend
isvcm1 info 'To extract encrypted assets [if current app has MBShield protection] you need rooted device'
iszdefend info 'And trigger a bulit-in app assets extraction !'
info 'To extract encrypted assets [if current app has MBShield protection] you need rooted device' echo -------------------------------------------
info 'And trigger a bulit-in app assets extraction !' PS3='Select options continue, or [3] to quit : '
echo ------------------------------------------- select opt in 'Launch MBCPApp/MBBank' 'Extract assets' 'Exit'
PS3='Select options continue, or [3] to quit : ' do
select opt in 'Launch MBCPApp/MBBank' 'Extract assets' 'Exit'; do if [ "$opt" == 'Launch MBCPApp/MBBank' ]; then
if [ "$opt" == 'Launch MBCPApp/MBBank' ]; then adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity info 'After app started, you MUST need to trigger assets extraction'
info 'After app started, you MUST need to trigger assets extraction' info 'By trigger eKYC authetication with reset account password option or register DigitalOTP'
info 'By trigger eKYC authetication with reset account password option or register DigitalOTP' info 'After you got into eKYC screen, close the app, then use Extract assets option to extract assets.'
info 'After you got into eKYC screen, close the app, then use Extract assets option to extract assets.' elif [ "$opt" == 'Extract assets' ]; then
elif [ "$opt" == 'Extract assets' ]; then if [ -d "$DIRPATH"/mbapk/mbapk_unpacked/ ]
if [ -d "$DIRPATH"/mbapk/mbapk_unpacked/ ]; then then
if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/mbshield.szip ]; then if [ -f "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/mbshield.szip ]
info "MBShield found ! Continuing !!!" then
warn 'You MUST grant root access to [com.android.shell] in order to extract assets !' info "MBShield found ! Continuing !!!"
info 'Trying to extract assets...' warn 'You MUST grant root access to [com.android.shell] in order to extract assets !'
adb shell am force-stop com.mbmobile info 'Trying to extract assets...'
adb shell rm -rf /sdcard/assets adb shell am force-stop com.mbmobile
adb shell mkdir /sdcard/assets adb shell rm -rf /sdcard/assets
copy_assets flutter_assets adb shell mkdir /sdcard/assets
copy_assets dexopt copy_assets flutter_assets
copy_assets font copy_assets dexopt
copy_assets mbshield copy_assets font
copy_assets media_init_data copy_assets mbshield
copy_assets mlkit_barcode_models copy_assets media_init_data
copy_assets models_bundled copy_assets mlkit_barcode_models
copy_assets mwebview copy_assets models_bundled
copy_assets zfiles copy_assets mwebview
copy_assets crashlytics-build.properties copy_assets zfiles
copy_assets firmware copy_assets crashlytics-build.properties
copy_assets insider.ttf copy_assets firmware
copy_assets dlangV5.dat copy_assets insider.ttf
copy_assets dlangV5.en.dat copy_assets dlangV5.dat
copy_assets policy0 copy_assets dlangV5.en.dat
copy_assets policy1 copy_assets policy0
copy_assets policy2 copy_assets policy1
copy_assets policy3 copy_assets policy2
copy_assets policy4 copy_assets policy3
copy_assets policy5 copy_assets policy4
copy_assets policy6 copy_assets policy5
copy_assets policy8 copy_assets policy6
copy_assets policy9 copy_assets policy8
copy_assets policym copy_assets policy9
copy_assets profile copy_assets policym
copy_assets rulesV5.dat copy_assets profile
copy_assets sgprofile copy_assets rulesV5.dat
copy_assets signature copy_assets sgprofile
copy_assets smart_ekyc_finall.zip copy_assets signature
copy_assets version.json copy_assets smart_ekyc_finall.zip
copy_assets vkeylicensepack copy_assets version.json
copy_assets voscodesign.vky copy_assets vkeylicensepack
info 'Copying assets...' copy_assets voscodesign.vky
adb pull /sdcard/assets mbapk/mbapk_unpacked/root/ && good "Assets copied to [mbapk_unpacked/root/] !" || err "Failed to copy assets ! Please try again." info 'Copying assets...'
info 'Removing leftover assets...' adb pull /sdcard/assets mbapk/mbapk_unpacked/root/ && good "Assets copied to [mbapk_unpacked/root/] !" || err "Failed to copy assets ! Please try again."
adb shell rm -rf /sdcard/assets && good "Removed leftover assets !" || err "Failed to remove leftover assets from device !" info 'Removing leftover assets...'
else adb shell rm -rf /sdcard/assets && good "Removed leftover assets !" || err "Failed to remove leftover assets from device !"
info "MBShield not found ! No need to extract assets !" else
fi info "MBShield not found ! No need to extract assets !"
else fi
err "Can't find [mbapk/mbapk_unpacked] folder, cannot continue ! " else
err "Please unpack APK first !" err "Can't find [mbapk/mbapk_unpacked] folder, cannot continue ! "
fi err "Please unpack APK first !"
fi
elif [ "$opt" == 'Exit' ]; then elif [ "$opt" == 'Exit' ]; then
clear clear
bash mbcpapp.sh bash mbcpapp.sh
break break
fi fi
done done
;; ;;
'Restart script') 'Restart script' )
bash mbcpapp.sh bash mbcpapp.sh
;; ;;
'Clear MBCPApp/MBBank app data') 'Clear MBCPApp/MBBank app data' )
info "Clearing [com.mbmobile] data..." info "Clearing [com.mbmobile] data..."
adb shell pm clear com.mbmobile adb shell pm clear com.mbmobile
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
info "Current logged in account will remain present, even if app data is cleared !"
;;
'Pull latest commit' )
git pull origin mbflutter
info "Please run patcher again !"
exit
;;
'Launch MBCPApp/MBBank' )
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
;;
'Force close MBCPApp/MBBank' )
adb shell am force-stop com.mbmobile
;;
'Clean patched app' )
info "Cleaning, please wait..."
rm -f mbcpapp_apk/*.apk
rm -f mbcpapp_apk/*.zip
rm -f mbapk/*.apk
rm -f mbapk/*.apks
rm -rf mbapk/mbapk_unpacked
info "Cleared !"
;;
'Install patched app' )
info 'Select your patched version to continue'
PS3='Select patched version to continue, or [4] to quit : '
select opt in 'App patched with newer version [v6.4.59+]' 'App patched with specific version' 'App patched with older version [v6.4.55 or lower]' 'Exit'
do
if [ "$opt" == 'App patched with newer version [v6.4.59+]' ]; then
if [ -f "$DIRPATH"/mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk ]
then
warn "MBCP Helper / CorePatch must be installed with disable digest verify on !!!"
warn "You must have connected Android device with USB debugging turned on in order to install !!!"
adb kill-server
adb start-server
adb install "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk"
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
info "Current logged in account will remain present, even if app data is cleared !" else
;; err "[MBCP_Flutter_SelfPatched_$COMMIT.apk] not found, cannot continue !"
'Pull latest commit') fi
git pull origin mbflutter
info "Please run patcher again !" elif [ "$opt" == 'App patched with specific version' ]; then
exit if [ -f "$DIRPATH"/mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk ]
;; then
'Launch MBCPApp/MBBank') warn "MBCP Helper / CorePatch must be installed with disable digest verify on !!!"
warn "You must have connected Android device with USB debugging turned on in order to install !!!"
adb kill-server
adb start-server
adb install "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk"
# Delete zimperium detection files
adb shell su -c rm -rf /data/data/com.mbmobile/files/0*
adb shell su -c rm -rf /data/data/com.mbmobile/files/1*
adb shell su -c rm -rf /data/data/com.mbmobile/files/2*
adb shell su -c rm -rf /data/data/com.mbmobile/files/3*
adb shell su -c rm -rf /data/data/com.mbmobile/files/4*
adb shell su -c rm -rf /data/data/com.mbmobile/files/5*
adb shell su -c rm -rf /data/data/com.mbmobile/files/6*
adb shell su -c rm -rf /data/data/com.mbmobile/files/7*
adb shell su -c rm -rf /data/data/com.mbmobile/files/8*
adb shell su -c rm -rf /data/data/com.mbmobile/files/9*
adb shell su -c rm -rf /data/data/com.mbmobile/files/KNOV3PN*
adb shell su -c rm -rf /data/data/com.mbmobile/files/zxpolicyme*
adb shell su -c rm -rf /data/data/com.mbmobile/files/policyme*
warn "ATTENTION : Network traffic will be redirected to [medium.com] for 20 seconds !!!"
adb shell su -c 'iptables -t nat -A OUTPUT -p tcp -d 0/0 -j DNAT --to-destination 162.159.153.4:443'
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
;; sleep 20
'Force close MBCPApp/MBBank') info "Restoring network traffic"
adb shell am force-stop com.mbmobile adb shell su -c 'iptables -t nat -F OUTPUT'
;; info "Press [Try again] after got 1005/1007 error on MB, so it's can skip device not secure dialog !"
'Clean patched app') else
info "Cleaning, please wait..." err "[MBCP_Flutter_SelfPatched_$COMMIT.apk] not found, cannot continue !"
rm -f mbcpapp_apk/*.apk fi
rm -f mbcpapp_apk/*.zip
rm -f mbapk/*.apk
rm -f mbapk/*.apks
rm -rf mbapk/mbapk_unpacked
info "Cleared !"
;;
'Install patched app')
info 'Select your patched version to continue'
PS3='Select patched version to continue, or [4] to quit : '
select opt in 'App patched with newer version [v6.4.59+]' 'App patched with specific version' 'App patched with older version [v6.4.55 or lower]' 'Exit'; do
if [ "$opt" == 'App patched with newer version [v6.4.59+]' ]; then elif [ "$opt" == 'App patched with older version [v6.4.55 or lower]' ]; then
if [ -f "$DIRPATH"/mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk ]; then if [ -f "$DIRPATH"/mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk ]
warn "MBCP Helper / CorePatch must be installed with disable digest verify on !!!" then
warn "You must have connected Android device with USB debugging turned on in order to install !!!" warn "MBCP Helper / CorePatch must be installed with disable digest verify on !!!"
adb kill-server warn "You must have connected Android device with USB debugging turned on in order to install !!!"
adb start-server adb kill-server
adb install "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk" adb start-server
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity adb install "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk"
else adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
err "[MBCP_Flutter_SelfPatched_$COMMIT.apk] not found, cannot continue !" else
fi err "[MBCP_Flutter_SelfPatched_$COMMIT.apk] not found, cannot continue !"
fi
elif [ "$opt" == 'App patched with specific version' ]; then
if [ -f "$DIRPATH"/mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk ]; then
warn "MBCP Helper / CorePatch must be installed with disable digest verify on !!!"
warn "You must have connected Android device with USB debugging turned on in order to install !!!"
adb kill-server
adb start-server
adb install "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk"
# Delete zimperium detection files
adb shell su -c rm -rf /data/data/com.mbmobile/files/0*
adb shell su -c rm -rf /data/data/com.mbmobile/files/1*
adb shell su -c rm -rf /data/data/com.mbmobile/files/2*
adb shell su -c rm -rf /data/data/com.mbmobile/files/3*
adb shell su -c rm -rf /data/data/com.mbmobile/files/4*
adb shell su -c rm -rf /data/data/com.mbmobile/files/5*
adb shell su -c rm -rf /data/data/com.mbmobile/files/6*
adb shell su -c rm -rf /data/data/com.mbmobile/files/7*
adb shell su -c rm -rf /data/data/com.mbmobile/files/8*
adb shell su -c rm -rf /data/data/com.mbmobile/files/9*
adb shell su -c rm -rf /data/data/com.mbmobile/files/KNOV3PN*
adb shell su -c rm -rf /data/data/com.mbmobile/files/zxpolicyme*
adb shell su -c rm -rf /data/data/com.mbmobile/files/policyme*
warn "ATTENTION : Network traffic will be redirected to [medium.com] for 20 seconds !!!"
adb shell su -c 'iptables -t nat -A OUTPUT -p tcp -d 0/0 -j DNAT --to-destination 162.159.153.4:443'
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
sleep 20
info "Restoring network traffic"
adb shell su -c 'iptables -t nat -F OUTPUT'
info "Press [Try again] after got 1005/1007 error on MB, so it's can skip device not secure dialog !"
else
err "[MBCP_Flutter_SelfPatched_$COMMIT.apk] not found, cannot continue !"
fi
elif [ "$opt" == 'App patched with older version [v6.4.55 or lower]' ]; then elif [ "$opt" == 'Exit' ]; then
if [ -f "$DIRPATH"/mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk ]; then PS3='Please select options to continue : '
warn "MBCP Helper / CorePatch must be installed with disable digest verify on !!!" break
warn "You must have connected Android device with USB debugging turned on in order to install !!!" fi
adb kill-server done
adb start-server
adb install "mbcpapp_apk/MBCP_Flutter_SelfPatched_$COMMIT.apk"
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
else
err "[MBCP_Flutter_SelfPatched_$COMMIT.apk] not found, cannot continue !"
fi
elif [ "$opt" == 'Exit' ]; then
PS3='Please select options to continue : '
break
fi
done
;; ;;
'Exit') exit ;; 'Exit' ) exit ;;
esac esac
done done

View file

@ -5,40 +5,37 @@
# shellcheck disable=SC1091,SC2016 # shellcheck disable=SC1091,SC2016
. "$DIRPATH"/common.sh . "$DIRPATH"/common.sh
if [[ -d mbapk/mbapk_unpacked/smali/classes4/com/vtap/ ]]; then
info "VTAP is found on [smali_classes4], Applying!"
# Adapt with v6.4.53+
sed -i 's|Lcom/vtap/MaintenanceActivity;|Lio/flutter/plugins/MainActivity;|g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes4/com/vtap/d.smali
sed -i 's|Lcom/vtap/MaintenanceActivity;|Lio/flutter/plugins/MainActivity;|g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes4/com/vtap/VTapSetupPlugin.smali
rm -f 'mbapk/mbapk_unpacked/smali/classes4/com/vtap/MaintenanceActivity.smali'
rm -f 'mbapk/mbapk_unpacked/smali/classes4/com/vtap/MaintenanceActivity$1.smali'
rm -f 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/vguard/VGDialogActivity.smali'
sed -i 's|Lcom/vkey/android/vguard/VGDialogActivity;|Lio/flutter/plugins/MainActivity;|g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/dy.smali
# Bypass VKey root check that throw VGFullScreenDialogActivity then exit :)
cp -f 'blob_patches/bypass_rootold/BasicThreatInfo.smali' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/internal/vguard/engine/'
cp -f 'blob_patches/bypass_rootold/VGThreatAppInfo.smali' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/vguard/model/'
cp -f 'blob_patches/bypass_rootold/VGThreatResponse.smali' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/vguard/model/'
# Zygisk detection workaround test
sed -i 's|zygisk|giskzy|g' "$DIRPATH"/mbapk/mbapk_unpacked/root/lib/arm64-v8a/libvosWrapperEx.so
sed -i 's|zygisk|giskzy|g' "$DIRPATH"/mbapk/mbapk_unpacked/root/lib/armeabi-v7a/libvosWrapperEx.so
# Test crash fixes for some Android 13 devices if [[ -d mbapk/mbapk_unpacked/smali/classes4/com/vtap/ ]]; then
sed -i 's|invoke-virtual {v5, v12}, Lcom/vkey/android/vguard/model/VGThreatResponse;->setUsingLegacyMessage(Z)V| |g' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/eg.smali' info "VTAP is found on [smali_classes4], Applying!"
# Adapt with v6.4.53+
sed -i 's|Lcom/vtap/MaintenanceActivity;|Lio/flutter/plugins/MainActivity;|g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes4/com/vtap/d.smali
sed -i 's|Lcom/vtap/MaintenanceActivity;|Lio/flutter/plugins/MainActivity;|g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes4/com/vtap/VTapSetupPlugin.smali
rm -f 'mbapk/mbapk_unpacked/smali/classes4/com/vtap/MaintenanceActivity.smali'
rm -f 'mbapk/mbapk_unpacked/smali/classes4/com/vtap/MaintenanceActivity$1.smali'
rm -f 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/vguard/VGDialogActivity.smali'
sed -i 's|Lcom/vkey/android/vguard/VGDialogActivity;|Lio/flutter/plugins/MainActivity;|g' "$DIRPATH"/mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/dy.smali
# Bypass VKey root check that throw VGFullScreenDialogActivity then exit :)
cp -f 'blob_patches/bypass_rootold/BasicThreatInfo.smali' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/internal/vguard/engine/'
cp -f 'blob_patches/bypass_rootold/VGThreatAppInfo.smali' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/vguard/model/'
cp -f 'blob_patches/bypass_rootold/VGThreatResponse.smali' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/vguard/model/'
# Test crash fixes for some Android 13 devices
sed -i 's|invoke-virtual {v5, v12}, Lcom/vkey/android/vguard/model/VGThreatResponse;->setUsingLegacyMessage(Z)V| |g' 'mbapk/mbapk_unpacked/smali/classes4/com/vkey/android/eg.smali'
else else
info "VTAP is not found on [smali_classes4], ignore copying!" info "VTAP is not found on [smali_classes4], ignore copying!"
fi fi
if [[ -d mbapk/mbapk_unpacked/smali/classes3/com/vtap ]]; then if [[ -d mbapk/mbapk_unpacked/smali/classes3/com/vtap ]]; then
info "VTAP is found on [smali_classes3], Applying!" info "VTAP is found on [smali_classes3], Applying!"
# Adapt with v6.4.62+ # Adapt with v6.4.62+
cp -f 'blob_patches/bypass_rootold/BasicThreatInfo.smali' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/internal/vguard/engine/' cp -f 'blob_patches/bypass_rootold/BasicThreatInfo.smali' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/internal/vguard/engine/'
cp -f 'blob_patches/bypass_rootold/VGThreatAppInfo.smali' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/vguard/model/' cp -f 'blob_patches/bypass_rootold/VGThreatAppInfo.smali' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/vguard/model/'
cp -f 'blob_patches/bypass_rootold/VGThreatResponse.smali' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/vguard/model/' cp -f 'blob_patches/bypass_rootold/VGThreatResponse.smali' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/vguard/model/'
# Test crash fixes for some Android 13 devices # Test crash fixes for some Android 13 devices
sed -i 's|invoke-virtual {v5, v12}, Lcom/vkey/android/vguard/model/VGThreatResponse;->setUsingLegacyMessage(Z)V| |g' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/eg.smali' sed -i 's|invoke-virtual {v5, v12}, Lcom/vkey/android/vguard/model/VGThreatResponse;->setUsingLegacyMessage(Z)V| |g' 'mbapk/mbapk_unpacked/smali/classes3/com/vkey/android/eg.smali'
else else
info "VTAP is not found on [smali_classes3], ignore copying!" info "VTAP is not found on [smali_classes3], ignore copying!"
warn "Something wrong here! [smali_classes3] should contains VTAP !!!" warn "Something wrong here! [smali_classes3] should contains VTAP !!!"
warn "Try to unpack app again !" warn "Try to unpack app again !"
exit 1 exit 1
fi fi

View file

@ -5,35 +5,25 @@
# shellcheck disable=SC1091 # shellcheck disable=SC1091
. "$DIRPATH"/common.sh . "$DIRPATH"/common.sh
prioritylogo() {
if [ -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/a_logo_img_addon.webp' ]
then
warn "App newer than v6.4.79+ ! Using enforced logo instead"
info "Copying [ic_logo_mb_text_enforced.svg]..."
cp -f 'blob_patches/semipriority/ic_logo_mb_text_enforced.svg' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/svgs/ic_logo_mb_text.svg'
else
info 'Copying [ic_logo_mb_text.svg]...'
cp -f 'blob_patches/semipriority/ic_logo_mb_text.svg' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/svgs/'
fi
}
iszdefend iszdefend
PS3='Select themes : ' PS3='Select themes : '
select opt in 'MBCP SemiPriority' 'MBCP MBClassic' 'Noel 2024' 'Tre trung' 'Mid-autumn festival' 'Viet Nam' 'Exit'; do select opt in 'MBCP SemiPriority' 'MBCP MBClassic' 'Noel 2024' 'Tre trung' 'Mid-autumn festival' 'Exit'
do
case "$opt" in case "$opt" in
'MBCP SemiPriority') 'MBCP SemiPriority')
info 'Moving [priority] folder...' info 'Moving [priority] folder...'
cp -r 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority' 'blob_patches/semipriority/' cp -r 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority' 'blob_patches/semipriority/'
info 'Modifying QR background...' info 'Modifying QR background...'
cp 'blob_patches/semipriority/priority/a_background_image.webp' 'blob_patches/semipriority/priority/qr_img_ThemeDefalut.webp' cp 'blob_patches/semipriority/priority/a_background_image.webp' 'blob_patches/semipriority/priority/qr_img_ThemeDefalut.webp'
info 'Copying to [flutter_assets/assets/images/dynamic/base]' info 'Copying to [flutter_assets/assets/images/dynamic/base]'
cp -r -f 'blob_patches/semipriority/priority/'* 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -r -f 'blob_patches/semipriority/priority/'* 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
prioritylogo prioritylogo
info 'Copying [welcom_img_eMbee.webp]...' info 'Copying [welcom_img_eMbee.webp]...'
cp -f 'blob_patches/semipriority/welcom_img_eMbee.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/semipriority/welcom_img_eMbee.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic >/dev/null 2>&1 && demopriority
demopriority() { cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic > /dev/null 2>&1 && demopriority
demopriority() {
# Modify the demo screen # Modify the demo screen
info 'Modifying demo screenshot...' info 'Modifying demo screenshot...'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage01.png|https://gitlab.com/-/project/56341767/uploads/1616c32f26051152de0ee7e60742c47b/priority1.png?ref=mbcpappgit|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage01.png|https://gitlab.com/-/project/56341767/uploads/1616c32f26051152de0ee7e60742c47b/priority1.png?ref=mbcpappgit|g'
@ -45,12 +35,12 @@ select opt in 'MBCP SemiPriority' 'MBCP MBClassic' 'Noel 2024' 'Tre trung' 'Mid-
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage04.png|https://gitlab.com/-/project/56341767/uploads/7bd2d759bb1f2430016e272e27ceb72c/priority4.png?ref=mbcpappgit|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage04.png|https://gitlab.com/-/project/56341767/uploads/7bd2d759bb1f2430016e272e27ceb72c/priority4.png?ref=mbcpappgit|g'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage05.png|https://gitlab.com/-/project/56341767/uploads/7f5a42716cc32b0f9db78076c15d1cfa/priority5.png?ref=mbcpappgit|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage05.png|https://gitlab.com/-/project/56341767/uploads/7f5a42716cc32b0f9db78076c15d1cfa/priority5.png?ref=mbcpappgit|g'
} }
info 'Cleaning...' info 'Cleaning...'
rm -rf 'blob_patches/semipriority/priority' rm -rf 'blob_patches/semipriority/priority'
echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." >"mbapk/mbapk_unpacked/root/assets/mbcp_info/semipriority_theme.inf" echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." > "mbapk/mbapk_unpacked/root/assets/mbcp_info/semipriority_theme.inf"
good "Applied [MBCP SemiPriority] theme." good "Applied [MBCP SemiPriority] theme."
;; ;;
'Mid-autumn festival') 'Mid-autumn festival')
@ -80,31 +70,31 @@ select opt in 'MBCP SemiPriority' 'MBCP MBClassic' 'Noel 2024' 'Tre trung' 'Mid-
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/onboarding/onboarding_img_a80Code.webp' rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/onboarding/onboarding_img_a80Code.webp'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/onboarding/onboarding_bg_a80Landing.webp' rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/onboarding/onboarding_bg_a80Landing.webp'
cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic >/dev/null 2>&1 && demotrungthu cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic > /dev/null 2>&1 && demotrungthu
demotrungthu() { demotrungthu() {
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_thumbnail_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/227ca0fc0dd1b5b3973690c3f9031c27/thumb.png?app=mbcp11|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_thumbnail_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/227ca0fc0dd1b5b3973690c3f9031c27/thumb.png?app=mbcp11|g'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenLoading_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/27f934ed3f55c3214185bc193cfdfe2b/preview1.png?app=mbcpapp|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenLoading_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/27f934ed3f55c3214185bc193cfdfe2b/preview1.png?app=mbcpapp|g'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenLogin_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/4f5f5398f57ce629b195f0fa6eb21f2a/preview2.png?ref=mbcp1|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenLogin_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/4f5f5398f57ce629b195f0fa6eb21f2a/preview2.png?ref=mbcp1|g'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenHome_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/b0b35d05a0752b6eec0dd19d50f15afd/preview3.png?ref=mbcp|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenHome_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/b0b35d05a0752b6eec0dd19d50f15afd/preview3.png?ref=mbcp|g'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenSuccess_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/c61050db4674a181978b6f868c100aa6/preview4.png?ref=mbcpapp|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenSuccess_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/c61050db4674a181978b6f868c100aa6/preview4.png?ref=mbcpapp|g'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenShare_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/2bd471b0b9ef7f96b05020bb4af304ed/preview5.png?ref=mbcp1|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenShare_quockhanh.png|https://gitlab.com/-/project/56341767/uploads/2bd471b0b9ef7f96b05020bb4af304ed/preview5.png?ref=mbcp1|g'
} }
echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." >"mbapk/mbapk_unpacked/root/assets/mbcp_info/midautumn_theme.inf" echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." > "mbapk/mbapk_unpacked/root/assets/mbcp_info/midautumn_theme.inf"
good "Applied [Mid-autumn festival] theme." good "Applied [Mid-autumn festival] theme."
;; ;;
'MBCP MBClassic') 'MBCP MBClassic')
info "Ensure that SemiPriority theme is not applied before this !" info "Ensure that SemiPriority theme is not applied before this !"
info "Otherwise it will have like mixed SemiPriority and MB Classic theme, You've been warned !!! " info "Otherwise it will have like mixed SemiPriority and MB Classic theme, You've been warned !!! "
cp -f 'blob_patches/mbclassic/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/mbclassic/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/mbclassic/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/mbclassic/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/mbclassic/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/mbclassic/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/mbclassic/loading_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/mbclassic/loading_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/mbclassic/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/mbclassic/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/mbclassic/qr_img_ThemeDefalut.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/mbclassic/qr_img_ThemeDefalut.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic >/dev/null 2>&1 && demombclassic cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic > /dev/null 2>&1 && demombclassic
demombclassic() { demombclassic() {
# Modify theme preview on settings # Modify theme preview on settings
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenLoginClassic.png|https://gitlab.com/-/project/56341767/uploads/f585b28f88876db211f116d1d622031d/mbcp_login.png?git1|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_screenLoginClassic.png|https://gitlab.com/-/project/56341767/uploads/f585b28f88876db211f116d1d622031d/mbcp_login.png?git1|g'
@ -133,49 +123,49 @@ select opt in 'MBCP SemiPriority' 'MBCP MBClassic' 'Noel 2024' 'Tre trung' 'Mid-
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage04.png|https://gitlab.com/-/project/56341767/uploads/76f1288713391966cfc750388f7f47b2/classic4.png?ref=mbcpappgit1|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage04.png|https://gitlab.com/-/project/56341767/uploads/76f1288713391966cfc750388f7f47b2/classic4.png?ref=mbcpappgit1|g'
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage05.png|https://gitlab.com/-/project/56341767/uploads/b9063205666549f28fc6c9c0c99e2336/classic5.png?ref=mbcpappgit1|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage05.png|https://gitlab.com/-/project/56341767/uploads/b9063205666549f28fc6c9c0c99e2336/classic5.png?ref=mbcpappgit1|g'
} }
echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." >"mbapk/mbapk_unpacked/root/assets/mbcp_info/mbclassic_theme.inf" echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." > "mbapk/mbapk_unpacked/root/assets/mbcp_info/mbclassic_theme.inf"
good 'Applied [MBCP MBClassic] theme.' good 'Applied [MBCP MBClassic] theme.'
;; ;;
'Noel 2024') 'Noel 2024')
info "Ensure that SemiPriority theme is not applied before this !" info "Ensure that SemiPriority theme is not applied before this !"
info "Otherwise it will have like mixed SemiPriority and MB Classic theme, You've been warned !!! " info "Otherwise it will have like mixed SemiPriority and MB Classic theme, You've been warned !!! "
cp -f 'blob_patches/noel/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/bill_background_gold.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/bill_background_gold.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/coreBanking_img_successBackground.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/coreBanking_img_successBackground.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/loading_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/loading_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/qr_img_ThemeDefalut.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/qr_img_ThemeDefalut.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
# New trungthu # New trungthu
cp -f 'blob_patches/noel/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/bill_background_gold.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/bill_background_gold.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/coreBanking_img_successBackground.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/coreBanking_img_successBackground.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/loading_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/loading_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
cp -f 'blob_patches/noel/qr_img_ThemeDefalut.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu' cp -f 'blob_patches/noel/qr_img_ThemeDefalut.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/trungthu'
############## ##############
cp -f 'blob_patches/noel/a_background_image.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/a_background_image.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/bill_background_gold.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/bill_background_gold.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/coreBanking_img_successBackground.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/coreBanking_img_successBackground.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/general_bg_screenshot.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/general_bg_screenshot.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/general_bg_success.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/general_bg_success.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/homeLanding_bg_main.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/homeLanding_bg_main.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/loading_bg_main.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/loading_bg_main.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/login_bg_main.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/login_bg_main.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/qr_img_ThemeDefalut.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/qr_img_ThemeDefalut.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
# Change theme preview # Change theme preview
cp -f 'blob_patches/noel/customUI_img_classicMode.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/customUI_img_classicMode.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cp -f 'blob_patches/noel/customUI_img_classicMode.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base' cp -f 'blob_patches/noel/customUI_img_classicMode.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base'
cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic >/dev/null 2>&1 && noel2024lib cat mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so | grep -a -oH filestatic > /dev/null 2>&1 && noel2024lib
noel2024lib() { noel2024lib() {
# Lockdown ability to change other theme, also force Noel 2024 theme # Lockdown ability to change other theme, also force Noel 2024 theme
sed_libapp 's|theme|Noel |g' sed_libapp 's|theme|Noel |g'
@ -195,44 +185,33 @@ select opt in 'MBCP SemiPriority' 'MBCP MBClassic' 'Noel 2024' 'Tre trung' 'Mid-
sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage05.png|https://gitlab.com/-/project/56341767/uploads/2d78975896a9f640d1f1e5af06fd1922/noel5.png?ref=mbcpappgit1234|g' sed_libapp 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/module/onboarding/welcome/welcom_img_demoImage05.png|https://gitlab.com/-/project/56341767/uploads/2d78975896a9f640d1f1e5af06fd1922/noel5.png?ref=mbcpappgit1234|g'
warn "You WON'T be able to use other theme than Noel 2024 on app !" warn "You WON'T be able to use other theme than Noel 2024 on app !"
} }
echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." >"mbapk/mbapk_unpacked/root/assets/mbcp_info/noel2024_theme.inf" echo "Patch applied by MBCPApp Patcher on $(uname -s -r) with commit : $(git rev-parse --short HEAD) at $(date)." > "mbapk/mbapk_unpacked/root/assets/mbcp_info/noel2024_theme.inf"
good "Applied [Noel 2024] theme." good "Applied [Noel 2024] theme."
;; ;;
'Tre trung') 'Tre trung')
info "Applying..." info "Applying..."
cp -f 'blob_patches/tretrung_theme/login_img_notification.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/' cp -f 'blob_patches/tretrung_theme/login_img_notification.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/'
cp -f 'blob_patches/tretrung_theme/login_img_highlightElement.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/login_img_highlightElement.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/loading_bg_main.webp' cp -f 'blob_patches/tretrung_theme/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/loading_bg_main.webp'
cp -f 'blob_patches/tretrung_theme/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/qr_img_ThemeDefalut.webp' cp -f 'blob_patches/tretrung_theme/login_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/qr_img_ThemeDefalut.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/customUI_img_noelMode.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/customUI_img_noelMode.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/a_logo_img_addon.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/a_logo_img_addon.webp'
cp -f 'blob_patches/tretrung_theme/homeLanding_img_PFM.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/homeLanding_img_PFM.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/homeLanding_img_assetsReport.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/homeLanding_img_assetsReport.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/homeLanding_bg_main.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/coreBanking_img_successBackground.webp' cp -f 'blob_patches/tretrung_theme/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/coreBanking_img_successBackground.webp'
cp -f 'blob_patches/tretrung_theme/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/bill_background_gold.webp' cp -f 'blob_patches/tretrung_theme/general_bg_success.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel/bill_background_gold.webp'
cp -f 'blob_patches/tretrung_theme/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/general_bg_screenshot.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/cardService_img_cardMKT.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/cardService_img_cardMKT.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/cardService_bg_cardMKT.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/cardService_bg_cardMKT.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
cp -f 'blob_patches/tretrung_theme/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel' cp -f 'blob_patches/tretrung_theme/a_background_image.webp' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/noel'
;; ;;
'Viet Nam') 'Exit') exit ;;
[ ! -d "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/tetbinhngo ] && err "This theme is only suitable for app with [tetbinhngo] theme. Current unpacked app does not have it!" && exit 1
info "Applying..."
rm -rf "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/tetbinhngo/*.webp
rm -rf "$DIRPATH"/tmpvn
mkdir "$DIRPATH"/tmpvn
git clone https://git.disroot.org/mbcp/mb-flutter-themes "$DIRPATH"/tmpvn
mv tmpvn/mbstore_theme_original/tuhaovietnam/e0050e73-fc22-4ca8-b1eb-6672ab948c01/images/*.png "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/tetbinhngo/
rm -rf tmpvn
rename png webp "$DIRPATH"/mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/tetbinhngo/*.png
;;
'Exit') exit ;;
esac esac
done done

View file

@ -27,7 +27,6 @@ rm -f 'mbapk/mbapk_unpacked/resources/package_1/res/font/bold.ttf'
rm -f 'mbapk/mbapk_unpacked/resources/package_1/res/font/medium.ttf' rm -f 'mbapk/mbapk_unpacked/resources/package_1/res/font/medium.ttf'
rm -f 'mbapk/mbapk_unpacked/resources/package_1/res/font/regular.ttf' rm -f 'mbapk/mbapk_unpacked/resources/package_1/res/font/regular.ttf'
rm -f 'mbapk/mbapk_unpacked/root/assets/insider.ttf' rm -f 'mbapk/mbapk_unpacked/root/assets/insider.ttf'
rm -rf 'mbapk/mbapk_unpacked/root/assets/font'
# Placeholder font to fix display issues when open details balance notifications # Placeholder font to fix display issues when open details balance notifications
info "Creating placeholder font..." info "Creating placeholder font..."
touch 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/fonts/AvertaStdCY-Regular.otf' touch 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/fonts/AvertaStdCY-Regular.otf'
@ -44,3 +43,8 @@ rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages/market_place/ass
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages/market_place/assets/fonts/AvertaStdCY-Regular.ttf' rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages/market_place/assets/fonts/AvertaStdCY-Regular.ttf'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages/market_place/assets/fonts/AvertaStdCy-Semibold.ttf' rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages/market_place/assets/fonts/AvertaStdCy-Semibold.ttf'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages/market_place/assets/fonts/Montserrat-Medium.ttf' rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages/market_place/assets/fonts/Montserrat-Medium.ttf'

View file

@ -8,30 +8,31 @@
warn "Currently only support remove invoke mbshield to [io.flutter.plugins.MainActivity] and [MBBHomeWidgetQR] !!!" warn "Currently only support remove invoke mbshield to [io.flutter.plugins.MainActivity] and [MBBHomeWidgetQR] !!!"
info "Copying..." info "Copying..."
if [[ -f mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins/MainActivity.smali ]]; then if [[ -f mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins/MainActivity.smali ]]; then
info "Flutter found on classes4 !!" info "Flutter found on classes4 !!"
rm -f 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins/MainAcitivity.smali' rm -f 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins/MainAcitivity.smali'
rm -f 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins/MBBHomeWidgetQR.smali' rm -f 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins/MBBHomeWidgetQR.smali'
cp -f 'blob_patches/noinvoke/MainActivity.smali' 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins' cp -f 'blob_patches/noinvoke/MainActivity.smali' 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins'
cp -f 'blob_patches/noinvoke/MBBHomeWidgetQR.smali' 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins' cp -f 'blob_patches/noinvoke/MBBHomeWidgetQR.smali' 'mbapk/mbapk_unpacked/smali/classes4/io/flutter/plugins'
for i in {0..83}; do for i in {0..83}; do
case $i in case $i in
*) rm -f "mbapk/mbapk_unpacked/smali/classes5/mbshield/EP$i.smali" ;; *) rm -f "mbapk/mbapk_unpacked/smali/classes5/mbshield/EP$i.smali" ;;
esac esac
done done
else else
warn "Flutter not found on classes4, ignoring..." warn "Flutter not found on classes4, ignoring..."
fi fi
# Newer dex location (found on v6.4.82+, might present since v6.4.70+) # Newer dex location (found on v6.4.82+, might present since v6.4.70+)
if [[ -f mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins/MainActivity.smali ]]; then if [[ -f mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins/MainActivity.smali ]]; then
info "Flutter found on classes3 !!" info "Flutter found on classes3 !!"
rm -f 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins/MainAcitivity.smali' rm -f 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins/MainAcitivity.smali'
rm -f 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins/MBBHomeWidgetQR.smali' rm -f 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins/MBBHomeWidgetQR.smali'
cp -f 'blob_patches/noinvoke/MainActivity.smali' 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins' cp -f 'blob_patches/noinvoke/MainActivity.smali' 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins'
cp -f 'blob_patches/noinvoke/MBBHomeWidgetQR.smali' 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins' cp -f 'blob_patches/noinvoke/MBBHomeWidgetQR.smali' 'mbapk/mbapk_unpacked/smali/classes3/io/flutter/plugins'
else else
warn "Couldn't find Flutter on both classes3 & classes4! Ignoring..." err "Couldn't find Flutter on both classes3 & classes4! Aborting..."
fi fi
info "Removing leftover files..." info "Removing leftover files..."
# This is moved to classes4 but EP*.smali no longer exist since v6.4.70+ # This is moved to classes4 but EP*.smali no longer exist since v6.4.70+

View file

@ -1,31 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# PATCHNAME: Remove MB AI Bullshit resources # PATCHNAME: Remove MB AI Bullsh*t resources
# MAXVER: # MAXVER:
# MINVER: 6.4.73 # MINVER: 6.4.73
# shellcheck disable=SC1091 # shellcheck disable=SC1091
. "$DIRPATH"/common.sh . "$DIRPATH"/common.sh
enforcemb() {
if [ -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/customize_img_changeImageContent.webp' ]
then
info "App newer than v6.4.84 ! Using new search logo!"
# Replace MB AI search button with normal search button
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.webp'
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.private.webp'
# Adapt new changes with v6.4.75
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.webp'
cp -f 'blob_patches/searchicon/search_718.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.private.webp'
else
info "App older than v6.4.83 ! Using old search logo!"
# Replace MB AI search button with normal search button
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.webp'
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textLogo.private.webp'
# Adapt new changes with v6.4.75
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.webp'
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.private.webp'
fi
}
# Currently not possible to completely remove and prevent users from use AI features in MB app. # Currently not possible to completely remove and prevent users from use AI features in MB app.
# So we remove it's resources instead, so the search icon won't show AI things # So we remove it's resources instead, so the search icon won't show AI things
# Need to implement more ASAP in the future # Need to implement more ASAP in the future
@ -45,29 +24,31 @@ rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/ba
# Tet binh ngo # Tet binh ngo
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/tetbinhngo/coreBanking_illus_p2p.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/tetbinhngo/coreBanking_illus_p2p.webp'
# Priority users # Priority users
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_paste.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_paste.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_paste2Pay.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_paste2Pay.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_search.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_search.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/coreBanking_illus_p2p.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/coreBanking_illus_p2p.webp'
# New resources
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_paste.priority.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_paste2Pay.priority.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/priority/mbai_img_search.priority.webp'
# New resources
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_paste.priority.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_paste2Pay.priority.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/mbai_img_search.priority.webp'
# Other stuff # Other stuff
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/base/partner/img_mbai_short.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/base/partner/img_mbai_short.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/base/partner/img_mbai_short_white.webp' rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/base/partner/img_mbai_short_white.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_mbai_textOnly_white.webp'
# Temp solution for forced MB AI assistant in v6.4.91+ (A/B testing from MB side, not yet in production)
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/ai_assistant'
# Call the enforcemb function
# Call the enforcemb function in common.sh
enforcemb enforcemb
# Adapt with new animated search AI logo (v6.4.77+) # Adapt with new animated search AI logo (v6.4.77+)
cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/search_ai.gif' cp -f 'blob_patches/searchicon/search.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/search_ai.gif'

View file

@ -1,24 +0,0 @@
#!/usr/bin/env bash
# PATCHNAME: Remove some static banners
# MAXVER:
# MINVER:
# shellcheck disable=SC1091
. "$DIRPATH"/common.sh
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/billing_img_defaultBanner.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/billing_img_defaultBanner.private.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/explore_img_defaultBanner.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/exploreLanding_img_background.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/homeLanding_img_defaultBanner.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/homeLanding_img_chatGPT.junior.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/homeLanding_img_banner.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/homeLanding_img_defaultBanner.private.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/homeLanding_img_Kosei.junior.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_thumbnail_hotdeal5.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/theme_bg_cuaHang.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/theme_bg_cuaHang.private.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/welcom_img_background.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/img_background_financial.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/static/background/sub_bg_hoiVien.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/moneyChat_img*.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/background_moneyChat_base.webp'

View file

@ -1,85 +1,15 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# PATCHNAME: Spoof app version # PATCHNAME: Spoof app version to 698
# MAXVER: # MAXVER: 6.4.67
# MINVER: 6.4.47 # MINVER:
# shellcheck disable=SC1091 # shellcheck disable=SC1091
. "$DIRPATH"/common.sh . "$DIRPATH"/common.sh
info "Spoofing app version..." info "Spoofing app version..."
# v6.5.x
sed -i 's|6.5.0|6.5.0.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
# v6.4.9x
sed -i 's|6.4.99|6.4.99.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.98|6.4.98.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.97|6.4.97.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.96|6.4.96.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.95|6.4.95.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.94|6.4.94.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.93|6.4.93.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.92|6.4.92.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.91|6.4.91.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.90|6.4.90.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
# v6.4.8x
sed -i 's|6.4.89|6.4.89.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.88|6.4.88.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.87|6.4.87.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.86|6.4.86.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.85|6.4.85.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.84|6.4.84.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.83|6.4.83.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.82|6.4.82.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.81|6.4.81.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.80|6.4.80.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
# v6.4.7x
sed -i 's|6.4.79|6.4.79.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.78|6.4.78.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.77|6.4.77.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.75|6.4.75.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.74|6.4.74.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.73|6.4.73.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.72|6.4.72.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.71|6.4.71.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.70|6.4.70.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
# v6.4.6x
sed -i 's|6.4.69|6.4.69.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.68|6.4.68.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.67|6.4.67.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.66|6.4.66.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.65|6.4.65.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.64|6.4.64.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.63|6.4.63.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.62|6.4.62.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.61|6.4.61.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.60|6.4.60.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
# v6.4.5x
sed -i 's|6.4.59|6.4.59.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.58|6.4.58.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.57|6.4.57.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.56|6.4.56.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.55|6.4.55.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.54|6.4.54.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.53|6.4.53.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.52|6.4.52.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.51|6.4.51.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.50|6.4.50.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
# v6.4.4x (no older than v6.4.47 due to the open source codebase started with v6.4.47)
sed -i 's|6.4.49|6.4.49.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.48|6.4.48.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|6.4.47|6.4.47.mbcp|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|727|2000|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|729|2000|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|v6.4.66|v6.4.68|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml' sed -i 's|v6.4.66|v6.4.68|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|v6.4.65|v6.4.68|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml' sed -i 's|v6.4.65|v6.4.68|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|v6.4.64|v6.4.68|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml' sed -i 's|v6.4.64|v6.4.68|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|692|698|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml' sed -i 's|692|698|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|691|698|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml' sed -i 's|691|698|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'
sed -i 's|689|698|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml' sed -i 's|689|698|g' 'mbapk/mbapk_unpacked/AndroidManifest.xml'

View file

@ -1,25 +1,17 @@
# MBCPApp Patcher for MB Bank (Android) # MBCPApp Patcher for MB Bank (Android)
Lightweight **AI-free, human-written** open source CLI tool for patching MB Bank (Android) app with Flutter framework (v6.4.0+) for rooted users (or ROMs with bulit-in CorePatch). primarily written in Bash, made possible by @cuynu and community in Vietnam. Lightweight **AI-free, human-written** open source tool for patching MB Bank (Android) app with Flutter framework (v6.4.0+) for rooted users (or ROMs with bulit-in CorePatch). primarily written in Bash, made possible by @cuynu and community in Vietnam.
<img alt="Gitea Release" src="https://img.shields.io/gitea/v/release/mbcp/mbbpatch?gitea_url=https%3A%2F%2Fgit.disroot.org&include_prereleases&display_name=tag&style=for-the-badge&logo=android&label=Latest%20Pre-bulit%20MBCP%20&color=%23CC6699"> <img alt="Gitea Release" src="https://img.shields.io/gitea/v/release/mbcp/mbbpatch?gitea_url=http%3A%2F%2Fcuynutt.ddns.net&include_prereleases&display_name=tag&style=for-the-badge&logo=android&label=Latest%20Pre-bulit%20MBCP%20&color=%23CC6699&link=http%3A%2F%2Fcuynutt.ddns.net%2Fmbcp%2Fmbbpatch%2Freleases">
<img alt="Gitea Issues" src="https://img.shields.io/gitea/issues/all/mbcp/mbbpatch?gitea_url=https%3A%2F%2Fgit.disroot.org&style=for-the-badge"> <img alt="Gitea Issues" src="https://img.shields.io/gitea/issues/all/mbcp/mbbpatch?gitea_url=http%3A%2F%2Fcuynutt.ddns.net&style=for-the-badge">
<img alt="Gitea language count" src="https://img.shields.io/gitea/languages/count/mbcp/mbbpatch?gitea_url=https%3A%2F%2Fgit.disroot.org&style=for-the-badge&color=%236750A4"> <img alt="Gitea language count" src="https://img.shields.io/gitea/languages/count/mbcp/mbbpatch?gitea_url=http%3A%2F%2Fcuynutt.ddns.net&style=for-the-badge&color=%236750A4">
- If you are looking pre-bulit app, here : [MBCP Releases](/mbcp/mbbpatch/releases) | [Install guide](/mbcp/info_en/wiki/mbcpinstall) - If you are looking pre-bulit app, here : [MBCP Releases](/mbcp/mbbpatch/releases) | [Install guide](/mbcp/info_en/wiki/mbcpinstall)
- Coming from GitLab? Go to the main location here to avoid link errors : [Disroot](https://git.disroot.org/mbcp/mbbpatch) | [Selfhost](http://cuynutt.ddns.net/mbcp/mbbpatch)
- Project FAQ : [Read here](/mbcp/info_en/wiki/faq) - Project FAQ : [Read here](/mbcp/info_en/wiki/faq)
- Licensed as MIT License. - Licensed as MIT License.
## Introduction
- Note : "MBCP" / "MBCPApp" = "MBBank CorePatch"
- MBCP is inspired from [CorePatch](https://github.com/LSPosed/CorePatch) project. Now it can works with [PMPatch](https://github.com/vova7878-modules/PMPatch) too
- This project was made to remove or limit annoying features & root detection & accessibility detection that is implemented by the development team of "MB Bank" Android app with additional features such as custom themes ability, device font, etc (see more in patches list). **It's not PoC (Proof of Concept) project at all.**
- [MBCP](https://t.me/mbcposs) are closed source before, and many people don't like it and concern with privacy & security issues
- In order to support community and allow other devs to improve the project, I spend days to rewritten `MBCP` patches in Bash and open source it so you can patch yourself from original app on Linux or Darwin (macOS) environment. All MBCP pre-bulit releases from v6.4.47+ are all bulit with this open source project with the commit ID at the end of the file name.
## Current situation ## Current situation
- Project is used to almost DEAD, due to MB's measure to modified dex & libraries from the server-side with GW934 error (`getSHFiles`) when logging in. Luckily, I have a way to bypass the [Zimperium check](/mbcp/mbzdefend-fix), that's why the project still alive till nowadays with other patches. - Project is used to almost DEAD, due to MB's measure to modified dex & libraries from the server-side with GW934 error (`getSHFiles`) when logging in. Luckily, I have a way to bypass the [Zimperium check](/mbcp/mbzdefend-fix), that's why the project still alive till nowadays with other patches.
@ -29,12 +21,18 @@ Lightweight **AI-free, human-written** open source CLI tool for patching MB Bank
- The GW934 error is known enabled from the server-side (v6.4.64 works since days 0, but return with GW934 error after 11 days), it requires client (MBCP/MBBank) app to sent the SHA256 hash of 3 app libraries `libapp.so` | `libmbshield.so` | `libclosestmadagascar.so` and all of 5 dex files (classes1->5.dex) to the server for comparing hash, and if it doesn't match, the server will prevent the app from logging in with GW934 error (MB has detected that your device is not secure for performing transactions. Please uninstall the App and reinstall it from the app store). The other function (eg: DigitalOTP) that works without logging in still works. - The GW934 error is known enabled from the server-side (v6.4.64 works since days 0, but return with GW934 error after 11 days), it requires client (MBCP/MBBank) app to sent the SHA256 hash of 3 app libraries `libapp.so` | `libmbshield.so` | `libclosestmadagascar.so` and all of 5 dex files (classes1->5.dex) to the server for comparing hash, and if it doesn't match, the server will prevent the app from logging in with GW934 error (MB has detected that your device is not secure for performing transactions. Please uninstall the App and reinstall it from the app store). The other function (eg: DigitalOTP) that works without logging in still works.
</details> </details>
## DISCLAIMER ## Introduction
- I'm not responsible if someone abuse this patch to do illegal things, since it's originally made for technical or well-known users only. - Note : "MBCP" / "MBCPApp" = "MBBank CorePatch"
- This project was made to remove or limit annoying features & root detection & accessibility detection that is implemented by the development team of "MB Bank" Android app with additional features such as custom themes ability, device font, etc (see more in patches list). **It's not PoC (Proof of Concept) project at all.**
- [MBCP](https://t.me/mbcposs) are closed source before, and many people don't like it and concern with privacy & security issues
- In order to support community and allow other devs to improve the project, I spend days to rewritten `MBCP` patches in Bash and open source it so you can patch yourself from original app on Linux or Darwin (macOS) environment. All MBCP pre-bulit releases from v6.4.47+ are all bulit with this open source project with the commit ID at the end of the file name.
## DISCLAIMER
I'm not responsible if someone abuse this patch to do illegal things, since it's originally made for technical or well-known users only.
## Documentation ## Documentation
- [MBCPApp Patcher Documentation](/mbcp/mbbpatch/src/branch/mbflutter/docs) - [MBCPApp Patcher Documentation](/mbcp/mbbpatch/wiki)
## Requirements & Usage & How-to use patcher ## Requirements & Usage & How-to use patcher
- Follow usage docs here : [Patcher Usage](/mbcp/mbbpatch/wiki/patcher-usage.-) - Follow usage docs here : [Patcher Usage](/mbcp/mbbpatch/wiki/patcher-usage.-)
@ -71,35 +69,35 @@ Lightweight **AI-free, human-written** open source CLI tool for patching MB Bank
| ⚙️ Patch | 📜 Description | 🏦 Suggested version | | ⚙️ Patch | 📜 Description | 🏦 Suggested version |
|:--------:|:--------------:|:-----------------:| |:--------:|:--------------:|:-----------------:|
| `Add verified badge` | Replaces the MIC protection shield with verified badge to make it looks more cute :3 | v6.4.0 ~ v6.4.91 | | `Add verified badge` | Replaces the MIC protection shield with verified badge to make it looks more cute :3 | v6.4.0 ~ v6.4.87 |
| `Adaptive launcher icon` | Adds the adaptive & themed icon support to the app. Thanks to @fukiame ! | v6.4.0 ~ v6.4.91 | | `Adaptive launcher icon` | Adds the adaptive & themed icon support to the app. Thanks to @fukiame ! | v6.4.0 ~ v6.4.87 |
| `Proper notification icon` | Temporary fixes for the app notification icon. Thanks to @fukiame ! | v6.4.0 ~ v6.4.91 | | `Proper notification icon` | Temporary fixes for the app notification icon. Thanks to @fukiame ! | v6.4.0 ~ v6.4.87 |
| `Block adjust volume on sEKYC` | Prevent the device volume from being adjusted when entering eKYC activity. | v6.4.0 ~ v6.4.91 | | `Block adjust volume on sEKYC` | Prevent the device volume from being adjusted when entering eKYC activity. | v6.4.0 ~ v6.4.87 |
| `Better custom background screen` | Replace the preview custom background from awful to useful. | v6.4.84 ~ v6.4.91 | | `Better custom background screen` | Replace the preview custom background from awful to useful. | v6.4.84 ~ v6.4.87 |
| `Change app logo` | Change the app logo with set of icons. | v6.4.0 ~ v6.4.91 | | `Change app logo` | Change the app logo with set of icons. | v6.4.0 ~ v6.4.87 |
| `Change widget background to dark ` | Change widget background to dark if you use MBBHomeWidget. | v6.4.0 ~ v6.4.91 | | `Change widget background to dark ` | Change widget background to dark if you use MBBHomeWidget. | v6.4.0 ~ v6.4.87 |
| `Custom VTAP screen` | Warn users about critical VTAP trigger error from app. | v6.4.53 ~ v6.4.91 | | `Custom VTAP screen` | Warn users about critical VTAP trigger error from app. | v6.4.53 ~ v6.4.87 |
| `Tian37 Fix` | Nuke detection points within Tian37 libraries. | v6.4.87 ~ v6.4.91 | | `Tian37 Fix` | Nuke detection points within Tian37 libraries. | v6.4.87 |
| `Force portrait screen` | Force the screen always portrait on app, espcially when launching. | v6.4.0 ~ v6.4.91 | | `Force portrait screen` | Force the screen always portrait on app, espcially when launching. | v6.4.0 ~ v6.4.87 |
| `Remove MB AI Bullsh*t resources` | Remove the bullsh*t MB AI resources from app. Need to implement more in the future. | v6.4.74 ~ v6.4.91 | | `Remove MB AI Bullsh*t resources` | Remove the bullsh*t MB AI resources from app. Need to implement more in the future. | v6.4.74 ~ v6.4.87 |
| `Remove MB Themes Store` | Remove the MB Themes Store banner from Themes list, preventing access to MB Theme Store. | v6.4.28 ~ v6.4.91 | | `Remove MB Themes Store` | Remove the MB Themes Store banner from Themes list, preventing access to MB Theme Store. | v6.4.28 ~ v6.4.87 |
| `Remove invoke to mbshield` | Make app don't invoke to mbshield when opening (MainActivity) and (MBBHomeWidgetQR) only | v6.4.22 ~ v6.4.91 | | `Remove invoke to mbshield` | Make app don't invoke to mbshield when opening (MainActivity) and (MBBHomeWidgetQR) only | v6.4.22 ~ v6.4.87 |
| `Remove new zimperium check` | Remove the new Zimperium (ZDefend) root detection from app. Picked up from Legacy Patch. | v6.4.60 ~ v6.4.91 | | `Remove new zimperium check` | Remove the new Zimperium (ZDefend) root detection from app. Picked up from Legacy Patch. | v6.4.60 ~ v6.4.87 |
| `Remove bulit-in fonts` | Remove app font and force to use device font for most app components. | v6.4.0 ~ v6.4.91 | | `Remove bulit-in fonts` | Remove app font and force to use device font for most app components. | v6.4.0 ~ v6.4.87 |
| `Modify app theme` | Modify the bulit-in app theme from original one to other themes. | v6.4.30 ~ v6.4.91 | | `Modify app theme` | Modify the bulit-in app theme from original one to other themes. | v6.4.30 ~ v6.4.87 |
| `Remove garbage permission and activities` | Removes tracking permission & activities from app. | v6.4.0 ~ v6.4.91 | | `Remove garbage permission and activities` | Removes tracking permission & activities from app. | v6.4.0 ~ v6.4.87 |
| `Revert old eMBee logo` | Revert old eMBee logo, especially on product consultation options. | v6.4.53 ~ v6.4.91 | | `Revert old eMBee logo` | Revert old eMBee logo, especially on product consultation options. | v6.4.53 ~ v6.4.87 |
| `Remove useless libraries` | Remove the useless libraries from app, only for v6.4.67+ | v6.4.67 ~ v6.4.91 | | `Remove useless libraries` | Remove the useless libraries from app, only for v6.4.67+ | v6.4.67 ~ v6.4.87 |
| `Remove animated QR background` | Remove the animated QR background from bottom navigation bar and replace with white background. | v6.4.43 ~ v6.4.91 | | `Remove animated QR background` | Remove the animated QR background from bottom navigation bar and replace with white background. | v6.4.43 ~ v6.4.87 |
| `Remove VNPAY VMB20` | Remove the VNPAY Airplane related activities. | v6.4.55 ~ v6.4.91 | | `Remove VNPAY VMB20` | Remove the VNPAY Airplane related activities. | v6.4.55 ~ v6.4.87 |
| `Restore old registration resources` | Restore old resources on `onboarding` page. | v6.4.48 ~ v6.4.91 | | `Restore old registration resources` | Restore old resources on `onboarding` page. | v6.4.48 ~ v6.4.87 |
| `Hide VTAP root detection activity & dialog` | Hide the old root detection screen and dialog showing "Device is rooted" (might have issues with some HyperOS ROMs). | v6.4.0 ~ v6.4.91 | | `Hide VTAP root detection activity & dialog` | Hide the old root detection screen and dialog showing "Device is rooted" (might have issues with some HyperOS ROMs). | v6.4.0 ~ v6.4.87 |
| `Legacy hide VTAP activity & dialog` | Hide the first root detection screen with dialog showing "Device is rooted" but not bypassing it. (GW908 will present, unlike standard `Hide VTAP root detection activity & dialog` patch). Only use for some ugly ROMs which is crashing with standard patch. | v6.4.53 ~ v6.4.91 | | `Legacy hide VTAP activity & dialog` | Hide the first root detection screen with dialog showing "Device is rooted" but not bypassing it. (GW908 will present, unlike standard `Hide VTAP root detection activity & dialog` patch). Only use for some ugly ROMs which is crashing with standard patch. | v6.4.53 ~ v6.4.87 |
| `Remove protection shield` | Remove the MIC protection shield on profile picture and login screen. (not app protection) | v6.4.0 ~ v6.4.91 | | `Remove protection shield` | Remove the MIC protection shield on profile picture and login screen. (not app protection) | v6.4.0 ~ v6.4.87 |
| `Remove app from launcher` | Remove the app icon from launcher, and start with `am start` or with MBZDefend-Fix Action/Termux. | v6.4.0 ~ v6.4.91 | | `Remove app from launcher` | Remove the app icon from launcher, and start with `am start` or with MBZDefend-Fix Action/Termux. | v6.4.0 ~ v6.4.87 |
| `Set targetSdkVersion to 34` | Set the `targetSdkVersion` to 34 (Android 14) to prevent UI issues on some activities. | v6.4.10 ~ v6.4.91 | | `Set targetSdkVersion to 34` | Set the `targetSdkVersion` to 34 (Android 14) to prevent UI issues on some activities. | v6.4.10 ~ v6.4.87 |
| `Add modified resources` | Adds the specific strings for MBCP on eKYC phases, and modify the DigiBank logo. | v6.4.0 ~ v6.4.91 | | `Add modified resources` | Adds the specific strings for MBCP on eKYC phases, and modify the DigiBank logo. | v6.4.0 ~ v6.4.87 |
| `Add anime resources` | Adds anime-related resources to some components inside app. | v6.4.45 ~ v6.4.91 | | `Add anime resources` | Adds anime-related resources to some components inside app. | v6.4.45 ~ v6.4.87 |
</details> </details>
@ -160,9 +158,9 @@ Lightweight **AI-free, human-written** open source CLI tool for patching MB Bank
## TODO ## TODO
- [ ] Bypass the new dex & libraries checksum for MB v6.4.67+ (hardcore challenge, would be extremely excited if this is achieved) - [ ] Bypass the new dex & libraries checksum for MB v6.4.67+ (hardcore challenge)
- [ ] Crash fixes for `Hide VTAP root detection activity & dialog` patch (OEM ROMs) - [ ] Crash fixes for `Hide VTAP root detection activity & dialog` patch (Android 16 >QPR1 / OEM ROMs)
- [ ] Proper display language under Singalarity eKYC phase - [ ] Proper display language under Singalarity eKYC phase
@ -188,9 +186,6 @@ Lightweight **AI-free, human-written** open source CLI tool for patching MB Bank
</details> </details>
## Project history ## Project history
- This project was made (and still maintained) by [@cuynu](/cuynu) with some help from other contributors, but in reality, I am not currently have enough skills with coding and project development yet and is still stupid. So some most of my commits is just minimal changes. **You can say me as a Developer/Dev and I'll embrace it because this project is not that easy to made, it's not what average person can even think as open source**. Maybe someday you'll see me ship more c/cpp code in this project :)
<details> <details>
- 05/2023 : MB Bank MOD APK ANDROID project created on Telegram (@mbbmod), providing modified MB Bank APKs since v5.8 with lots of features such as bypassing accessibility check and show a guide to hide root instead of show rooted screen then close the app. - 05/2023 : MB Bank MOD APK ANDROID project created on Telegram (@mbbmod), providing modified MB Bank APKs since v5.8 with lots of features such as bypassing accessibility check and show a guide to hide root instead of show rooted screen then close the app.
@ -215,8 +210,6 @@ Lightweight **AI-free, human-written** open source CLI tool for patching MB Bank
- 11/2025 (2) : MB released `v6.4.74` with AI-crap button that replaces legacy search button. I created a patch that force replace it back to old search icon. - 11/2025 (2) : MB released `v6.4.74` with AI-crap button that replaces legacy search button. I created a patch that force replace it back to old search icon.
- 02/2025 : MB released `v6.4.85` with enhanced Singalarity eKYC detection (detects `data/adb/modules` and `com.rifsxd.ksunext`), so I created a patch that nuked the check.
- ... - ...
</details> </details>

View file

@ -1,58 +0,0 @@
## Implementing patches
- patch template is implemented by @fukiame from this commit : aa4eb65992 so just need to follow their `TEMPLATE`
- they well documented it on the commit message :
```
adding new patches is now trivial:
cd patches
cp TEMPLATE patch_name_whatever.sh
# then just fill in patch name and ver clamp if desired
this gets rid of the need for excessive if-elses and not-so-pleasing indents
for logging, instead of using pure echo, 4 new "levels" can be utilized
- `info` : normal
- `good` : info but have green color?
- `warn` : warning
- `err` : error
```
- they even implemented the sed that patching libapp to one function, called `sed_libapp` so you just need to call them and define it a value
example :
```
sed_libapp 's|{old string}|{new string}|g'
```
- note that the old string and new string MUST be at the same character length in order to not breaking `libapp.so` ELF header
same thing with `AndroidManifest.xml` too, called `manifest_remove`
```
manifest_remove "android.manifest.YouWantedToRemove"
```
- `get_mb_ver` function is used to get MB app version by reading version code
- but that is not actually enough, you have to do smth that is patching the app, like `rm`, `sed`, `mv` operation. below is the example. you can literally do anything you wanted to mess up in the patches file :
```
#!/usr/bin/env bash
# PATCHNAME: Remove banners & MiniApp
# MAXVER: 67
# MINVER:
# shellcheck disable=SC1091
. "$DIRPATH"/common.sh
sed_libapp 's|banner|remove|g'
sed_libapp 's|marketplacehome|removemarketapp|g'
info 'Moving links...'
sed_libapp 's|https://miniappgw.mbbank.com.vn/homebox/webview/auth?|https://git.disroot.org/mbcp/info/wiki/MiniApp?ref=mb|g'
sed_libapp 's|https://miniappgw-uat.mbbank.com.vn/homebox-public/|https://git.disroot.org/mbcp/info/wiki/MiniApp?refs|g'
info 'Removing related resources...'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/packages'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/billing_img_defaultBanner.webp'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/billing_img_defaultBanner.private.webp'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/explore_img_defaultBanner.webp'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/coreBanking_img_successBanner.webp'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/homeLanding_img_defaultBanner.webp'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/homeLanding_img_defaultBanner.private.webp'
```

View file

@ -1,12 +0,0 @@
## MBCPApp Patcher are using those dependencies :
- GNU `sed` : https://www.gnu.org/software/sed/
- GNU `wget` : https://www.gnu.org/software/wget/
- GNU `bash` : https://www.gnu.org/software/bash/
- `figlet` : https://www.figlet.org/
- `xmlstarlet` : https://xmlstar.sourceforge.net/
- `openjdk` : https://openjdk.org/
- `git` : https://git-scm.com/
- `platform-tools` : https://developer.android.com/tools/releases/platform-tools
## Project Development :
- `nvim` : https://github.com/neovim/neovim

View file

@ -1,114 +0,0 @@
## Requirements
> [!warning]
> **AI-powered** forks are not suitable with this docs! USE ANOTHER FORK !
- Any actual Linux environment or macOS (Arch Linux based recommended)
- Little knowledge about terminal commands
- `android-tools` `wget` for Arch/Fedora based and `android-sdk-platform-tools` for Debian based
- `android-platform-tools` for macOS with brew
- `git` installed
- `java` or `jdk-openjdk` installed
- `figlet` for showing banner (optional)
- `xmlstarlet` for reformatting AndroidManifest after unpacking
## Install dependencies
for Arch Linux / EndeavourOS / CachyOS / any Arch-based distributions (except Manjaro as it's usually break system packages)
```
sudo pacman -Sy android-tools wget jdk-openjdk figlet xmlstarlet git
```
for Debian / Mint / Ubuntu / any debian-based distributions
```
sudo apt install android-sdk-platform-tools xmlstarlet figlet wget git default-jre
```
for Fedora / any fedora-based distributions
```
sudo dnf makecache --refresh
sudo dnf -y install wget xmlstarlet android-tools java-latest-openjdk.x86_64
git clone https://github.com/M0Rf30/android-udev-rules.git
cd android-udev-rules
sudo bash install.sh
```
for macOS (brew)
```
brew install xmlstarlet wget openjdk android-platform-tools figlet gnu-sed
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk
PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
```
## Clone repository
You can choose between 2 repository mirrors, one is the repository on Disroot, and the other one is the Selfhosted Forgejo instance, it has no difference as both are pushed at the same time.
DIsroot
```
cd ~
git clone https://git.disroot.org/mbcp/mbbpatch.git
cd mbbpatch/MBCPApp
```
Self-hosted Instance
```
cd ~
git clone http://cuynutt.ddns.net/mbcp/mbbpatch.git
cd mbbpatch/MBCPApp
```
## Run the Patcher
Ensure that you already in following folder to continue : `~/mbbpatch/MBCPApp`
```
./mbcpapp.sh
```
- Download tools with `14) Download tools` function first, it will download `apktool` and `apkeditor` to `tools` folder. This is required since `2) Unpack APK` function requires it.
## Patch the app
> [!IMPORTANT]
> If you are patching MB Bank with those version :
>
> MB Bank : v6.4.63 | v6.4.64 | v6.4.65 | v6.4.66
>
> Ensure that you applied `Bypass GW934 checksum` patch after applied all other patches, so the app can works without GW934 error when logging in.
- Grab MB Bank apks from [eMBee APKs](https://t.me/embeeapks) or [Lotus Chat](https://lotuschat.vn/w/+anSH1BbDbAYn54JC9nIC9A) (in case if you don't have access to Telegram) and copy it to `~/mbbpatch/MBCPApp/mbapk`
- Alternatively, if you don't have access to both Telegram & Lotus Chat, download from [Google Play](https://play.google.com/store/apps/details?id=com.mbmobile) then extract the MB Bank apks and copy it to `~/mbbpatch/MBCPApp/mbapk` or get it [from my instance](http://cuynutt.ddns.net/mbcp/mbmobile-apks)
- Convert apks to apk first using `3) Convert apks to apk` function
- Unpack apk with `2) Unpack apk` function
- Use `7) Patch App` function, it should show a list of patches, select the patch you wanted to and it will automatically patch the app at `mbapk/mbapk_original`
- Note that the patches list might different, depends on your current unpacked MB Bank app version, as there will be a patch that compatible with specific version, for example patch [Bypass accessibility & malicious apps check] is compatible with v6.4.54, but not with v6.4.55 or newer, so if you have v6.4.55 or newer, then that patch will be hidden from patches list.
- The patcher should show info to the log when use `7) Patch App` function if it found that the current unpacked app version is not compatible with one of implemented patches like this :
```
[INFO] [parser] skipping [Patch A] as current version is higher than patch version clamp
[INFO] [parser] skipping [Patch B] as current version is lower than patch version clamp
```
- View full patches list [here](/mbcp/mbbpatch#patches-list) for more info about compatible version, or view the `MAXVER` value and `MINVER` in patch files `~/mbbpatch/MBCPApp/patches/*.sh`
## Repack the app
- So you have applied all the patches you wanted to ?
- Exit patch app function with the exit option in the last patch list
- Use `4) Repack APK` to repack patched app
- What's next? wait :)
- Patcher will repack the app, and then [restore signature]() to make sure that app can load, the example of nice repack process :
```
00.000 I: [BUILD] Using: APKEditor version 1.4.5, ARSCLib version 1.3.8
-t = sig
-dex-lib = internal
-sig = mbsig/signatures
-i = mbcpapp_apk/MBCP_Flutter_TMP.apk
-o = mbcpapp_apk/MBCP_Flutter_SelfPatched.apk
_______________________________________________________
00.013 I: [BUILD] Restoring signatures ...
00.214 I: [BUILD] Writing apk...
00.217 I: [BUILD] Buffering compress changed files ...
00.226 I: [BUILD] Writing files: 3332
00.453 I: [BUILD] Writing signature block ...
00.909 I: [BUILD] Saved to: mbcpapp_apk/MBCP_Flutter_SelfPatched.apk
[19:45:55:70] [INFO] Completed! Repacked APK are saved as [mbcpapp_apk/MBCP_Flutter_SelfPatched.apk] !!!
[19:45:55:70] [INFO] Install and trying to open it when ಠ‿ಠ
[19:45:55:70] [INFO] If you are facing issues, report it on Telegram [@mbbpatch_eng] or Disroot Forgejo : mbbpatch !!
```
- Patched app will be `MBCP_Flutter_SelfPatched.apk` on `~/mbbpatch/MBCPApp/mbcpapp_apk/`
- As this is unsigned app, Android will refuse to install `MBCP_Flutter_SelfPatched.apk` by default. In order to install it, you MUST install [MBCP Helper](/mbcp/mbcp-helper/releases) or [CorePatch](https://github.com/LSPosed/CorePatch/releases) and enable the "Disable digest verify" option to bypass android package signature verification.
- If you don't know how to deal with MBCP Helper, follow this guide : [MBCP Installation](/mbcp/info_en/wiki/mbcpinstall)
- Copy this `MBCP_Flutter_SelfPatched.apk` then install to your device, or simply use `5) Install patched app` function, its will do the same thing with `adb`
- Profit :)

View file

@ -1,2 +0,0 @@
#!/bin/bash
bash MBCPApp/mbcpapp.sh