mbbpatch_oldest/MBCPApp/mbcpapp.sh
Cuynu e22e5b9ff1 fix: mbcpapp.sh: wrong APKEditor download link
Signed-off-by: Cuynu <cuynu@proton.me>
2026-03-14 23:09:48 +07:00

349 lines
16 KiB
Shell
Executable file

#!/bin/bash
# Fun fact is this project made with
# A tinkerer, not developer xD
# You might see this line but ignore it then continues calling me a developer, but after all, i just a loser :D
# Initial startup
mkdir -p ~/mbbpatch/MBCPApp/mbapk
mkdir -p ~/mbbpatch/MBCPApp/mbcpapp_apk
mkdir -p ~/mbbpatch/MBCPApp/tools
clear
# Check if user runs on actual Linux environment
if uname -a | grep -i Linux ; then
echo "INFO : You have Linux environment :)"
fi
# Check if user trying to run under HyperV (Windows Subsystem For Linux)
# Remove this detection part to bypass WSL detection might lead project development to be STOPPED, You've warned !
if [ -f /proc/sys/fs/binfmt_misc/WSLInterop ]; then
echo "Detected WSL (Windows Subsystem for Linux) in current Linux environment !!"
echo "Warn : You won't be supported for any issues under WSL environment !!"
fi
# Check if figlet exists or not
if command -v figlet ; then
FIGLET=figlet
else
echo "WARN : figlet not found, ignoring banner !"
FIGLET=:
fi
COMMIT="$(git rev-parse --short HEAD)"
# Check if java exists on /usr/bin/java
echo 'Checking if Java exists...'
if ! java -version ; then
echo "ERROR : Java not found !!!"
echo "INFO : Please install Java for your Linux distribution ! "
exit 127
fi
clear
# Banner
$FIGLET "MBCPApp Patcher"
echo -------------------------------------------------------------
echo "Patching-tool for MB Bank app with Flutter engine (v6.4.0+)"
echo "Original APK path must be inside [mbapk] folder !"
echo "IMPORTANT : Script must be run on [~/mbbpatch/MBCPApp] !"
echo -------------------------------------------------------------
echo "Current commit : $COMMIT (dev)"
echo "Source code : https://gitlab.com/mbcp/mbbpatch"
echo "Made possible by Cuynu with love <3"
echo -------------------------------------------------------------
# Main functions
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 tools' 'Exit'
do
if [ "$opt" == 'Download tools' ]; then
cd tools && rm -rf *.jar
echo "Downloading apktool_2.12.0.jar..."
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.12.0.jar -q --show-progress
echo "Downloading APKEditor-1.4.3.jar..."
wget https://github.com/REAndroid/APKEditor/releases/download/V1.4.3/APKEditor-1.4.3.jar -q --show-progress
echo "Downloading APKEditor-1.4.4.jar..."
wget https://github.com/REAndroid/APKEditor/releases/download/V1.4.4/APKEditor-1.4.4.jar -q --show-progress
mv *.jar tools/
cd ..
echo "You can now continue with other operations"
elif [ "$opt" == 'Unpack APK' ]; then
# Check if *.apk exists
if ls ~/mbbpatch/MBCPApp/mbapk/*.apk >/dev/null 2>&1
then
# Check if apk is unpacked or not
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked ]
then
echo 'APK already unpacked, no need to unpack again !'
else
# Check if apktool exists or not
if [ -f ~/mbbpatch/MBCPApp/tools/apktool_2.12.0.jar ]
then
java -jar tools/apktool_2.12.0.jar d mbapk/*.apk -o mbapk/mbapk_unpacked
echo "Cleaning useless files..."
rm -rf 'mbapk/mbapk_unpacked/assets/_4A9w8flncUrhDOG8dyqLi_azBTYT3PlSXz0hiCzRQA_'
rm -rf 'mbapk/mbapk_unpacked/assets/0QDl12M5S2hKxoKF4cNI4kEX1qDQRMiOd34TXjSjy4M_'
rm -rf 'mbapk/mbapk_unpacked/assets/2GcdAWdkXGgxPfHSIhzLkrkf2LU6Z_cuZfUWnczoEHw_'
rm -rf 'mbapk/mbapk_unpacked/assets/BiLlLhV4LAy_y_rvwmD82q_4yN_liwgN1X0mfwfqTeE_'
rm -rf 'mbapk/mbapk_unpacked/assets/c7uFHgsHzlQ_T524_4N3h9neXvtcUg0m1ERhEjFpPI8_'
rm -rf 'mbapk/mbapk_unpacked/assets/ccBu4aSM_mSaMBpFvr14pizu6EGMvwRiZltU_zVJMz0_'
rm -rf 'mbapk/mbapk_unpacked/assets/DcM3z3tolULDhbn8YrUE7hxOlxZx2oFC5yNQFG1SX9k_'
rm -rf 'mbapk/mbapk_unpacked/assets/fPGzhQFvISia1NiVGU8vQx9IpRm63E4_1Xv0Z2ypWUE_'
rm -rf 'mbapk/mbapk_unpacked/assets/g9x205p_On9_RR4kI_GdsoQ2pfSrV_OQXSopshyhYVk_'
rm -rf 'mbapk/mbapk_unpacked/assets/GXNv8xc5IcVF6TyUgjJpyYFeyHGqUqN7ZS0X_2WRbEE_'
rm -rf 'mbapk/mbapk_unpacked/assets/H8leCCp85eX0YRvo4WCzqF5MEuj2_9ix6zL2bjnj6hk_'
rm -rf 'mbapk/mbapk_unpacked/assets/Hput_BfAb8ftOt8hvazec24Eqk0gC5DDY6qALJMLtcI_'
rm -rf 'mbapk/mbapk_unpacked/assets/MZuOOtdhO6pcGnZ5_kqMPh56hL3LqawBZd05vfIivww_'
rm -rf 'mbapk/mbapk_unpacked/assets/noNmNoHJ0EUpV0TiKtyRPIVWI0im6K1RPIq3N_q0ho0_'
rm -rf 'mbapk/mbapk_unpacked/assets/oOot9yCPD3GFqBix7JXjoz4Uui3k3NrwI8wHRlOpn4s_'
rm -rf 'mbapk/mbapk_unpacked/assets/rqfr7ucXEZM4vIIYYPHXlo6IG1iEad_H61Z4bbEMR3s_'
rm -rf 'mbapk/mbapk_unpacked/assets/Sje9R7eg_A4wlgbLNHwXS5xNFmS5qaoPnJ6Vg0RnIQ8_'
rm -rf 'mbapk/mbapk_unpacked/assets/t8_bY_8ibDPQ9rngMwnd7WFI_uqoPlht9nBi26_llbw_'
rm -rf 'mbapk/mbapk_unpacked/assets/VipqZ50mSUd28eIlPS_2t31IZ6tY24fl8sSl5YsQrbI_'
rm -rf 'mbapk/mbapk_unpacked/assets/vLpH08bnGzkpsq_MmUdHqkh3bjrVN5tutp6s4jscm3w_'
rm -rf 'mbapk/mbapk_unpacked/assets/WZ7CC4mxgoVWzgm8AO7rbOneE6TkqXwT2YV3htdswEQ_'
rm -rf 'mbapk/mbapk_unpacked/assets/x_uYtCXdh_oYw_XLfZQkX10Bcqq2HFK3q7v1dJVw3zM_'
rm -rf 'mbapk/mbapk_unpacked/assets/Y83jllvBi79vZIh2_UNtyo3_Lvd94lqie_q1dc5O3j0_'
rm -rf 'mbapk/mbapk_unpacked/assets/ZN6CRAqtR7CKp7LFoivhHDbCS6iAtrEW6_sLvrfWgEM_'
rm -rf 'mbapk/mbapk_unpacked/assets/ZOKOK1a6XCiqYb_a8bYPE9c0rjUf7_n7k77YxX5Ypdw_'
rm -rf 'mbapk/mbapk_unpacked/assets/zxHdhL4_ZEQLQeo8R2DzSYl9PGss_cKSCQTcZGBtVmU_'
rm -rf 'mbapk/mbapk_unpacked/assets/jNMI79raTvV7VHN5Vrzw4Xs66YP_a1ftP9SmUB24DYg_'
echo "Creating [mbcp_info] folder..."
mkdir 'mbapk/mbapk_unpacked/assets/mbcp_info/'
else
echo "Please download apktool first !"
fi
fi
else
echo "Where is *.apk file?"
# APK not found ?
echo "*.apk not found on [mbapk] folder, please copy apk to [mbapk] folder !"
echo "If you got apks from eMBee APKs, use [Convert apks to apk] option !"
fi
elif [ "$opt" == 'Repack APK' ]; then
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked ]
then
echo "Repacking APK..."
echo "Compiled by MBCPApp Patcher on $(uname -s -r) with commit $COMMIT at $(date). That's all xD" > 'mbapk/mbapk_unpacked/assets/mbcp_info/mbcpinfo.txt'
java -jar tools/apktool_2.12.0.jar b mbapk/mbapk_unpacked -o mbcpapp_apk/MBCP_Flutter_TMP.apk
echo "Processing APK signature scheme v2/v3..."
rm -rf 'mbcpapp_apk/MBCP_Flutter_TMP_decompile_xml'
java -jar tools/APKEditor-1.4.4.jar d -i 'mbcpapp_apk/MBCP_Flutter_TMP.apk'
cp -r 'mbsig/signatures' 'mbcpapp_apk/MBCP_Flutter_TMP_decompile_xml/'
java -jar tools/APKEditor-1.4.4.jar b -i 'mbcpapp_apk/MBCP_Flutter_TMP_decompile_xml'
mv 'mbcpapp_apk/MBCP_Flutter_TMP_decompile_xml_out.apk' 'mbcpapp_apk/MBCP_Flutter_SelfPatched.apk'
rm -rf 'mbcpapp_apk/MBCP_Flutter_TMP_decompile_xml'
rm 'mbcpapp_apk/MBCP_Flutter_TMP.apk'
echo "Completed! Repacked APK are saved as [mbcpapp_apk/MBCP_Flutter_SelfPatched.apk] !!!"
echo "Install and trying to open it when ಠ‿ಠ"
echo "If you are facing issues, report it on Telegram [@mbbpatch] or GitLab : mbbpatch !!"
else
echo "[mbapk_unpacked] folder not found ! Please unpack APK first !"
fi
elif [ "$opt" == 'MBShield Check' ]; then
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/ ]
then
if [ -f ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/assets/mbshield.szip ]
then
echo "MBShield found on [mbapk_unpacked/assets/mbshield.szip]" !!!
echo "Patching operation is limited due to MBShield :("
echo "You need to extract assets from Android device for some patching operation to works properly !!!"
else
echo "MBShield NOT found on [mbapk_unpacked/assets/]"
echo "Patching operation are all not limited at all !"
echo "Asset extraction is not needed :)"
fi
else
echo "[mbapk_unpacked] not found ! Please unpack APK first !"
fi
elif [ "$opt" == 'Convert apks to apk' ]; then
if ls ~/mbbpatch/MBCPApp/mbapk/*.apks >/dev/null 2>&1
then
echo "Converting apks to apk..."
java -jar tools/APKEditor-1.4.4.jar m -i mbapk/*.apks
mv mbapk/*.apk mbapk/MBOriginal.apk
echo 'Cleaning left over [apks] files...'
rm -f mbapk/*.apks
echo "You probably can continue to unpack APK!"
else
echo "APKs missing, cannot continue !"
fi
elif [ "$opt" == 'Patch App' ]; then
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib ]
then
bash ./patch.sh
else
echo "[mbapk_unpacked] folder not found ! Please unpack APK first !"
fi
elif [ "$opt" == 'Legacy patches' ]; then
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib ]
then
bash ./legacy_patch.sh
else
echo "[mbapk_unpacked] folder not found ! Please unpack APK first !"
fi
elif [ "$opt" == 'Extract assets [ROOT]' ]; then
echo 'To extract encrypted assets [if current app has MBShield protection] you need rooted device'
echo 'And trigger a bulit-in app assets extraction !'
echo -------------------------------------------
echo -------------------------------------------
PS3='Select options continue, or [3] to quit : '
select opt in 'Launch MBCPApp/MBBank' 'Extract assets' 'Exit'
do
if [ "$opt" == 'Launch MBCPApp/MBBank' ]; then
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
echo 'After app started, you MUST need to trigger assets extraction'
echo 'By trigger eKYC authetication with reset account password option or register DigitalOTP'
echo 'After you got into eKYC screen, close the app, then use Extract assets option to extract assets.'
elif [ "$opt" == 'Extract assets' ]; then
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/ ]
then
if [ -f ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/assets/mbshield.szip ]
then
echo "INFO : MBShield found ! Continuing !!!"
echo 'You MUST grant root access to [com.android.shell] in order to extract assets !'
echo 'Trying to extract assets...'
adb shell am force-stop com.mbmobile
adb shell rm -rf /sdcard/assets
adb shell mkdir /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/flutter_assets /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/dexopt /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/font /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/mbshield /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/media_init_data /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/mlkit_barcode_models /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/models_bundled /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/mwebview /sdcard/assets
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/zfiles /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/crashlytics-build.properties /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/firmware /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/insider.ttf /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/dlangV5.dat /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/dlangV5.en.dat /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy0 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy1 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy2 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy3 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy4 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy5 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy6 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy8 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policy9 /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/policym /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/profile /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/rulesV5.dat /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/sgprofile /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/signature /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/smart_ekyc_finall.zip /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/version.json /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/vkeylicensepack /sdcard/assets
adb shell su -c cp -f /data/user/0/com.mbmobile/files/voscodesign.vky /sdcard/assets
echo 'Copying assets...'
sleep 2
adb pull /sdcard/assets mbapk/mbapk_unpacked/
sleep 5
adb shell rm -rf /sdcard/assets
else
echo "INFO : MBShield not found ! No need to extract assets !"
fi
else
echo "ERROR : Can't find [mbapk/mbapk_unpacked] folder, cannot continue ! "
echo "Please unpack APK first !"
fi
elif [ "$opt" == 'Exit' ]; then
clear
bash mbcpapp.sh
break
fi
done
elif [ "$opt" == 'Clear MBCPApp/MBBank app data' ]; then
echo "Clearing [com.mbmobile] data..."
adb shell pm clear com.mbmobile
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
echo "INFO : Current logged in account will remain present, even if app data is cleared !"
elif [ "$opt" == 'Pull latest commit' ]; then
git pull origin dev
echo "Please run patcher again !"
exit
elif [ "$opt" == 'Launch MBCPApp/MBBank' ]; then
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
elif [ "$opt" == 'Force close MBCPApp/MBBank' ]; then
adb shell am force-stop com.mbmobile
elif [ "$opt" == 'Clean patched app' ]; then
echo "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
echo "Cleared !"
elif [ "$opt" == 'Install patched app' ]; then
echo 'Select your patched version to continue'
PS3='Select patched version to continue, or [3] to quit : '
select opt in 'App patched with newer version [v6.4.56 or higher]' 'App patched with older version [v6.4.55 or lower]' 'Exit'
do
if [ "$opt" == 'App patched with newer version [v6.4.56 or higher]' ]; then
if [ -f ~/mbbpatch/MBCPApp/mbcpapp_apk/MBCP_Flutter_SelfPatched.apk ]
then
echo "MBCP Helper / CorePatch must be installed with disable digest verify on !!!"
echo "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.apk'
echo "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
echo "Restoring network traffic"
adb shell su -c iptables -t nat -F OUTPUT
echo "Press [Try again] after got 1005/1007 error on MB, so it's can skip device not secure dialog !"
else
echo "[MBCP_Flutter_SelfPatched.apk] not found, cannot continue !"
fi
elif [ "$opt" == 'App patched with older version [v6.4.55 or lower]' ]; then
if [ -f ~/mbbpatch/MBCPApp/mbcpapp_apk/MBCP_Flutter_SelfPatched.apk ]
then
echo "MBCP Helper / CorePatch must be installed with disable digest verify on !!!"
echo "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.apk'
adb shell am start -n com.mbmobile/io.flutter.plugins.MainActivity
else
echo "[MBCP_Flutter_SelfPatched.apk] not found, cannot continue !"
fi
elif [ "$opt" == 'Exit' ]; then
clear
bash mbcpapp.sh
break
fi
done
elif [ "$opt" == 'Exit' ]; then
exit
break
fi
done