321 lines
No EOL
15 KiB
Shell
Executable file
321 lines
No EOL
15 KiB
Shell
Executable file
#!/bin/bash
|
|
|
|
if [[ $(grep -i Microsoft /proc/version) ]]; then
|
|
echo "You are trying to run on WSL, please use real Linux environment !"
|
|
exit
|
|
fi
|
|
|
|
if [[ $(grep -i Linux /proc/version) ]]; then
|
|
echo "INFO : You have Linux environment :)"
|
|
fi
|
|
|
|
if [ -x /usr/bin/figlet ]
|
|
then
|
|
FIGLET=/usr/bin/figlet
|
|
else
|
|
echo "WARN : figlet not found, ignoring banner !"
|
|
FIGLET=:
|
|
fi
|
|
|
|
$FIGLET "MBCPApp Flutter Patcher"
|
|
echo -------------------------------------------------------------
|
|
echo Auto patching-tool for MB Bank, mainly for MB Flutter
|
|
echo Original APK path must be inside [mbapk] folder !
|
|
echo -------------------------------------------------------------
|
|
PS3='Please select options to continue : '
|
|
select opt in 'Unpack APK' 'Repack APK' 'Autopatch strings' 'Change app logo' 'Modify app theme' 'Inject bypass class' 'Extract assets [ROOT]' 'Bypass signature check' 'Launch MBCPApp/MBBank' 'Force close MBCPApp/MBBank' 'Clear MBCPApp/MBBank app data' 'Clean patched app' 'Download apktool' 'Exit'
|
|
do
|
|
if [ "$opt" == 'Download apktool' ]; then
|
|
echo Downloading apktool_2.11.1.jar
|
|
wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.11.1.jar
|
|
mv apktool_2.11.1.jar tools/
|
|
|
|
|
|
elif [ "$opt" == 'Unpack APK' ]; then
|
|
if [ -f ~/mbbpatch/MBCPApp/mbapk/*.apk ]
|
|
then
|
|
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked ]
|
|
then
|
|
echo APK already unpacked, no need to unpack again !
|
|
else
|
|
java -jar tools/apktool_2.11.1.jar d mbapk/*.apk -o mbapk/mbapk_unpacked
|
|
fi
|
|
else
|
|
echo "Where is *.apk file?"
|
|
fi
|
|
|
|
elif [ "$opt" == 'Repack APK' ]; then
|
|
echo Repacking APK...
|
|
java -jar tools/apktool_2.11.1.jar b mbapk/mbapk_unpacked -o mbcpapp_apk/MBCP_Flutter.zip
|
|
echo App repacked to [mbcpapp_apk/MBCP_Flutter.zip] !!!
|
|
echo ------------------------------------------
|
|
echo ------------------------------------------
|
|
echo You MUST use MT Manager on Android, and copy ALL FILE and FOLDERS on [MBCP_Flutter.zip] to [mbsig.apk]
|
|
echo So patched MBBank [MBCPApp] can pass MBShield signature check [if have] and works.
|
|
echo "!!! MT Manager are required because Apktool can't handle and keep APK signature scheme v2 and v3 !!!"
|
|
echo -----------------------------------------------------
|
|
echo -----------------------------------------------------
|
|
echo Both file will be copied to [/sdcard] !!!
|
|
adb push mbcpapp_apk/MBCP_Flutter.zip /sdcard
|
|
adb push mbsig/mbsig.apk /sdcard
|
|
|
|
|
|
|
|
elif [ "$opt" == 'Autopatch strings' ]; then
|
|
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib ]
|
|
then
|
|
echo Patching strings in libapp.so...
|
|
sed -i -e 's/online OTP/DigitalOTP/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/arm64-v8a/libapp.so
|
|
sed -i -e 's/online OTP/DigitalOTP/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/armeabi-v7a/libapp.so
|
|
echo INFO : [online OTP] strings are modified to [DigitalOTP] !
|
|
sed -i -e 's/Online OTP/DigitalOTP/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/arm64-v8a/libapp.so
|
|
sed -i -e 's/Online OTP/DigitalOTP/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/armeabi-v7a/libapp.so
|
|
echo INFO : [Online OTP] strings are modified to [DigitalOTP] !
|
|
sed -i -e 's/MB Bank/MBCPApp/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/arm64-v8a/libapp.so
|
|
sed -i -e 's/MB Bank/MBCPApp/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/armeabi-v7a/libapp.so
|
|
echo INFO : [MB Bank] strings are modified to [MBCPApp] !
|
|
sed -i -e 's/The lastest version/No new version !!!/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/arm64-v8a/libapp.so
|
|
sed -i -e 's/The lastest version/No new version !!!/g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/armeabi-v7a/libapp.so
|
|
echo INFO : [The lastest version] strings are modified to [Patched as MBCPApp] !
|
|
echo Patching link strings....
|
|
sed -i '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' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/arm64-v8a/libapp.so
|
|
sed -i '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' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/armeabi-v7a/libapp.so
|
|
sed -i 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_thumbnailClassic.png|https://gitlab.com/-/project/56341767/uploads/ba4f0923a4956ba379868e01c55e9cfb/thumb.png?aaaaaaa|g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/arm64-v8a/libapp.so
|
|
sed -i 's|https://filestatic.mbbank.com.vn/mbapp-images/rs/prime/ThemeImage/theme_img_thumbnailClassic.png|https://gitlab.com/-/project/56341767/uploads/ba4f0923a4956ba379868e01c55e9cfb/thumb.png?aaaaaaa|g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/armeabi-v7a/libapp.so
|
|
sed -i 's|market://details?id=com.mbmobile|https://t.me/mbbpatch/ |g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/arm64-v8a/libapp.so
|
|
sed -i 's|market://details?id=com.mbmobile|https://t.me/mbbpatch/ |g' ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/lib/armeabi-v7a/libapp.so
|
|
else
|
|
echo "ERROR : [mbapk_unpacked] folder not found, please unpack APK first !"
|
|
echo "ERROR : Auto patch strings requires [mbapk_unpacked] in order to continue !"
|
|
fi
|
|
|
|
|
|
elif [ "$opt" == 'Modify app theme' ]; then
|
|
echo In order to modify app theme, you must extract assets first !
|
|
|
|
elif [ "$opt" == 'Inject bypass class' ]; then
|
|
echo placeholder
|
|
|
|
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 flutter_assets...
|
|
adb shell su -c cp -r -f /data/user/0/com.mbmobile/files/flutter_assets /sdcard/flutter_assets
|
|
echo Copying assets...
|
|
adb pull /sdcard/flutter_assets mbapk/mbapk_unpacked/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
|
|
sh mbcpapp.sh
|
|
break
|
|
fi
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif [ "$opt" == 'Change app logo' ]; then
|
|
echo -------------------------------------------
|
|
echo -------------------------------------------
|
|
PS3='Select app icon variant to continue, or [5] to quit : '
|
|
select opt in '30/4-1/5' 'MB Classic' 'Tet' 'Noel' 'Exit'
|
|
do
|
|
if [ "$opt" == '30/4-1/5' ]; then
|
|
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/ ]
|
|
then
|
|
echo Removing old logos...
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-hdpi
|
|
echo INFO : tries removed [mipmap-hdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-mdpi
|
|
echo INFO : tries removed [mipmap-mdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xhdpi
|
|
echo INFO : tries removed [mipmap-xhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxhdpi
|
|
echo INFO : tries removed [mipmap-xxhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxxhdpi
|
|
echo INFO : tries removed [mipmap-xxxhdpi] on [mbapk_unpacked/res] !
|
|
echo Copying new logos to [mbapk_unpacked/res] !!!
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/thongnhatVN/mipmap-hdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/thongnhatVN/mipmap-mdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/thongnhatVN/mipmap-xhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/thongnhatVN/mipmap-xxhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/thongnhatVN/mipmap-xxxhdpi mbapk/mbapk_unpacked/res
|
|
echo Done !
|
|
else
|
|
echo "[mbapk_unpacked] not found ! Please unpack APK first !"
|
|
fi
|
|
|
|
elif [ "$opt" == 'MB Classic' ]; then
|
|
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/ ]
|
|
then
|
|
echo Removing old logos...
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-hdpi
|
|
echo INFO : tries removed [mipmap-hdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-mdpi
|
|
echo INFO : tries removed [mipmap-mdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xhdpi
|
|
echo INFO : tries removed [mipmap-xhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxhdpi
|
|
echo INFO : tries removed [mipmap-xxhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxxhdpi
|
|
echo INFO : tries removed [mipmap-xxxhdpi] on [mbapk_unpacked/res] !
|
|
echo Copying new logos to [mbapk_unpacked/res] !!!
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/normal/mipmap-hdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/normal/mipmap-mdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/normal/mipmap-xhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/normal/mipmap-xxhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/normal/mipmap-xxxhdpi mbapk/mbapk_unpacked/res
|
|
echo Done !
|
|
else
|
|
echo "[mbapk_unpacked] not found ! Please unpack APK first !"
|
|
fi
|
|
|
|
elif [ "$opt" == 'Tet' ]; then
|
|
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/ ]
|
|
then
|
|
echo Removing old logos...
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-hdpi
|
|
echo INFO : tries removed [mipmap-hdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-mdpi
|
|
echo INFO : tries removed [mipmap-mdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xhdpi
|
|
echo INFO : tries removed [mipmap-xhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxhdpi
|
|
echo INFO : tries removed [mipmap-xxhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxxhdpi
|
|
echo INFO : tries removed [mipmap-xxxhdpi] on [mbapk_unpacked/res] !
|
|
echo Copying new logos to [mbapk_unpacked/res] !!!
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/tet/mipmap-hdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/tet/mipmap-mdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/tet/mipmap-xhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/tet/mipmap-xxhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/tet/mipmap-xxxhdpi mbapk/mbapk_unpacked/res
|
|
echo Done !
|
|
else
|
|
echo "[mbapk_unpacked] not found ! Please unpack APK first !"
|
|
fi
|
|
|
|
elif [ "$opt" == 'Noel' ]; then
|
|
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/ ]
|
|
then
|
|
echo Removing old logos...
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-hdpi
|
|
echo INFO : tries removed [mipmap-hdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-mdpi
|
|
echo INFO : tries removed [mipmap-mdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xhdpi
|
|
echo INFO : tries removed [mipmap-xhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxhdpi
|
|
echo INFO : tries removed [mipmap-xxhdpi] on [mbapk_unpacked/res] !
|
|
rm -rf ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/res/mipmap-xxxhdpi
|
|
echo INFO : tries removed [mipmap-xxxhdpi] on [mbapk_unpacked/res] !
|
|
echo Copying new logos to [mbapk_unpacked/res] !!!
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/noel/mipmap-hdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/noel/mipmap-mdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/noel/mipmap-xhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/noel/mipmap-xxhdpi mbapk/mbapk_unpacked/res
|
|
cp -r -f ~/mbbpatch/MBCPApp/mbcpicons/noel/mipmap-xxxhdpi mbapk/mbapk_unpacked/res
|
|
echo Done !
|
|
else
|
|
echo "[mbapk_unpacked] not found ! Please unpack APK first !"
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif [ "$opt" == 'Exit' ]; then
|
|
clear
|
|
sh mbcpapp.sh
|
|
|
|
break
|
|
fi
|
|
done
|
|
|
|
elif [ "$opt" == 'Bypass signature check' ]; then
|
|
if [ -d ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked ]
|
|
then
|
|
echo "Checking for MBShield !!"
|
|
if [ -f ~/mbbpatch/MBCPApp/mbapk/mbapk_unpacked/assets/mbshield.szip ]
|
|
then
|
|
echo "INFO : MBShield found ! Bypass signature checks won't be possible if MBShield is present on current unpacked APK !"
|
|
echo "INFO : Please use supported version !!!"
|
|
echo For React Native : MBBank/MB Lite v1.0 up to v6.3.11
|
|
echo For Flutter : MBBank v6.4.0 up to v6.4.21
|
|
echo Some specific version has no MBShield can also be used :
|
|
echo MBBank v6.4.24 [versionCode : 624]
|
|
echo MBBank v6.4.26 [versionCode : 626]
|
|
echo MBBank v6.4.45 [versionCode : 658]
|
|
else
|
|
echo "INFO : MBShield not found ! Continuing !!! "
|
|
echo "Placeholder function! "
|
|
|
|
fi
|
|
else
|
|
echo APK are not unpacked ! Please unpack APK first !
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
elif [ "$opt" == 'Clear MBCPApp/MBBank app data' ]; then
|
|
adb shell pm clear com.mbmobile
|
|
echo "INFO : Current logged in account will remain present, even if app data is cleared !"
|
|
|
|
|
|
|
|
|
|
|
|
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
|
|
rm mbcpapp_apk/*.apk
|
|
rm mbcpapp_apk/*.zip
|
|
rm mbapk/*.apk
|
|
rm mbapk/*.apks
|
|
rm -rf mbapk/mbapk_unpacked
|
|
|
|
elif [ "$opt" == 'Exit' ]; then
|
|
exit
|
|
break
|
|
fi
|
|
done |