diff --git a/README.md b/README.md index 70dde06..9160944 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # MB ZDefend Bypass Module for MB/MBCP -- Current module version : `v3.6-mb` | Download from [releases tab](https://git.disroot.org/cuynu/mbzdefend-fix/releases) +- Download from [releases tab](/mbcp/mbzdefend-fix/releases) -- Author : [Cuynu](https://git.disroot.org/cuynu) and [backslashxx](https://github.com/backslashxx) for sed script +- Author : [Cuynu](/cuynu) and [backslashxx](https://github.com/backslashxx) for sed script - Status : Working with MBCP! @@ -14,6 +14,13 @@ ## Why this exists ? - Zimperium and MB Bank development team didn't respect our freedom and privacy by blocking rooted devices (KernelSU/KernelSU-Next/Magisk/APatch), device using LSPosed with a screen showing "THIẾT BỊ JAILBROKEN HOẶC ROOTED" or "JAILBROKEN DEVICE OR ROOTED" (in English) with only "Close app" option. +## Building +``` +git clone https://git.disroot.org/mbcp/mbzdefend-fix.git +cd mbzdefend-fix +./createmodule.sh +``` + ## Source code This project are licensed under [MIT License](https://git.disroot.org/cuynu/mbzdefend-fix). diff --git a/module_new/CHANGELOG.md b/module_new/CHANGELOG.md index 25573e0..9deea6f 100644 --- a/module_new/CHANGELOG.md +++ b/module_new/CHANGELOG.md @@ -1,8 +1,78 @@ # MBZDefend-Fix by Cuynu -Bypass new stupid MB Bank zimperium root/hook detection (does not bypass VTAP root detection) +Bypass MB Bank zimperium root/hook detection (does not bypass VTAP V-Key root detection) + +Main repository : [Disroot Forgejo](https://git.disroot.org/mbcp/mbzdefend-fix/) + +* As of v3.1-mb+, MBCP is required due to MB limitations from original app. ## Changelogs : +- v4.4-mb +``` +feat: zdefend-fix(hosts): new zimperium eu host +feat: zdefend-fix(action.sh): delete all files with size larger than 2000kb +feat: zdefend-fix(action.sh): check for mountify & handle disabled metamodule +fix: zdefend-fix(action.sh): missing timeout check & wrong exit condition +feat: zdefend-fix(action.sh): check for network before zimperium test +fix: zdefend-fix(module.prop): typo & correct vtap meaning +feat: zdefend-fix(action.sh): new implementation for v6.5.7+ +fix: zdefend-fix(customize.sh): module failing to install +feat: zdefend-fix(customize.sh): check for built-in magisk systemless hosts and disable it +feat: zdefend-fix(customize.sh): check for v6.5.7+ and use notify to use new method +feat: zdefend-fix(customize.sh): use new method to detect original app +fix: zdefend-fix(customize.sh): missing folder condition checks +feat: zdefend-fix(customize.sh): remove vtap firmware from app data folder & misc changes +feat: zdefend-fix(customize.sh): check for older LSPosed and open link to install Vector +``` + +- v4.3-mb +``` +fix: zdefend-fix(customize.sh): missing flags +feat: zdefend-fix(customize.sh): handle app reinstallation fail in selinux permissive case +fix: zdefend-fix(customize.sh): app installation failure does not exit +feat: zdefend-fix(customize.sh): handle reinstall app after MBCP app check +``` + +- v4.2-mb +``` +feat: zdefend-fix(customize.sh): handle selinux permissive & move from vtapfix to afterinstall +feat: customize.sh: check for bindhost & require user to install bindhost variant instead +feat: customize.sh: set selinux to enforcing +fix: customize.sh: wrong ANDROIDSDK version +``` + +- v4.1-mb +``` +feat: customize.sh: check for already bypassed app +feat: customize.sh: check vtap status again by call from vtapfail function & misc changes +feat: new VTAP fail check method & vtapfail/vtapstillfail as a function +fix: customize.sh: wrong second +feat: do not block installation for kitsune 30.6 & nirtal magisk users +fix: customize.sh: reduce to just exit instead of uninstalling malicious magisk app +feat: customize.sh: timer before uninstallation +feat: customize.sh: service.sh: detect and uninstall unknown magisk +``` + +- v4.0-mb +``` +feat: service.sh: delete module itself if proprietary kitsune mask is found +feat: customize.sh: hide com.tsng.hidemyapplist package during module installation +feat: customize.sh: enforce foss kitsune mask +fix: wrong ip +feat: redirect to fake IP instead +fix: customize.sh: unzip shortcut after termux bootstrap is found +feat: customize.sh: depends on syslang to open right mbcpinstall page +``` + +- v3.9-mb +``` +feat: action.sh: also check vtap provision status for action script +``` + +- v3.8-mb +``` +fix: customize.sh: execute denylist fix before vtap check +``` - v3.7-mb ``` feat: bump v3.7-mb @@ -20,8 +90,6 @@ feat: misc changes - support english & vietnamese language for MBZDefend-Fix notification - other changes idk -joke: im not (or is) a developer - ``` - v3.5-mb diff --git a/module_new/remoteupdate.json b/module_new/remoteupdate.json index 7cfd83c..a0120f9 100644 --- a/module_new/remoteupdate.json +++ b/module_new/remoteupdate.json @@ -1,6 +1,6 @@ { - "version": "v3.7-mb", - "versionCode": "37", - "zipUrl": "https://git.disroot.org/mbcp/mbzdefend-fix/releases/download/v3.7-mb/mbzdefend_fix_7e94380.zip", + "version": "v4.4-mb", + "versionCode": "44", + "zipUrl": "https://git.disroot.org/mbcp/mbzdefend-fix/releases/download/v4.4-mb/mbzdefend_fix_6a81cd4.zip", "changelog": "https://git.disroot.org/cuynu/mbzdefend-fix/raw/branch/main/module_new/CHANGELOG.md" } diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index a0254f4..514dc9b 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -2,25 +2,56 @@ SYSLANGVI="$(getprop persist.sys.locale | grep vi-VN)" +INSTALLEN="https://git.disroot.org/mbcp/info_en/wiki/mbcpinstall" +INSTALLVI="https://git.disroot.org/mbcp/info_vi/wiki/mbcpinstall" + notmbcp() { echo "MB Bank [com.mbmobile] is installed, but it seems like that the app is NOT MBCP" echo "Please install MBCP v6.4.60+ in order to use this module !" - am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info/wiki/mbcpinstall + [[ $SYSLANGVI ]] && am start -a android.intent.action.VIEW -d $INSTALLVI || am start -a android.intent.action.VIEW -d $INSTALLEN exit 1 } +vtapfail() { + echo "VTAP is not provisioned!" + echo "App first normal launch required!" + iptables -t nat -F OUTPUT + am start -n com.mbmobile/io.flutter.plugins.MainActivity + logcat -c + sleep 20 + logcat -d | grep VGFullScreenDialog && vtapstillfail + am force-stop com.mbmobile +} + +vtapstillfail() { + echo "VTAP provision failed or triggering! Cannot continue!" + echo "If you have low-end device (eg : Vsmart Joy 2+)" + echo "Try to reinstall module again 3 more times." + if [ $SYSLANGVI ]; then + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_vi/wiki/afterinstall + exit 169 +else + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/afterinstall + exit 169 +fi +} + # Check for original MB Bank app -for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done +for library in $(find /data/app -name libtoolChecker.so | grep com.mbmobile) ; do notmbcp ; done + +# Check VTAP status to ensure that it must be provisioned +echo "Checking VTAP status..." +echo "VTAP status : " && cat '/data/data/com.mbmobile/databases/vtap' | grep -q "true" && echo "VTAP is provisioned!" || vtapfail || exit 169 +echo "Checking VTAP status again..." +cat '/data/data/com.mbmobile/databases/vtap' | grep -q "true" && echo "VTAP is provisioned!" || vtapstillfail || exit 169 # Delete /data/magisk if it exists so MB doesnt failling when eKYC with error code EKYC3002-MS6998 for Magisk users -echo "Deleting /data/magisk if it exists..." -[[ -d /data/magisk ]] && rm -r /data/magisk +[[ -d /data/adb/magisk ]] && rm -r /data/magisk +[[ -d /data/adb/magisk ]] && find /data/. -name 'magisk_backup*' -delete + echo Forcing stop MB Bank... am force-stop com.mbmobile - -echo Starting Flutter activity... -echo "ATTENTION : Network traffic will be redirected to [medium.com] for 20 seconds !!!" -echo "Press [Try again] after got 1005/1007 error on MB, so it's can bypass device not secure dialog !" +logcat -c rm -rf /data/data/com.mbmobile/files/0* rm -rf /data/data/com.mbmobile/files/1* rm -rf /data/data/com.mbmobile/files/2* @@ -32,20 +63,80 @@ echo "Press [Try again] after got 1005/1007 error on MB, so it's can bypass devi rm -rf /data/data/com.mbmobile/files/8* rm -rf /data/data/com.mbmobile/files/9* rm -rf /data/data/com.mbmobile/files/KNOV3PN* - rm -rf /data/data/com.mbmobile/files/zxpolicyme* + rm -rf /data/data/com.mbmobile/files/zxpolicy* rm -rf /data/data/com.mbmobile/files/policyme* + find /data/data/com.mbmobile/files -size +2000k -delete -iptables -t nat -A OUTPUT -p tcp -d 0/0 -j DNAT --to-destination 162.159.153.4:443 -am start -n com.mbmobile/io.flutter.plugins.MainActivity -# VPN connection requires 20 seconds, while normal one only requires 10 seconds -sleep 20 -echo "Restoring network traffic" -iptables -t nat -F OUTPUT -if [ $SYSLANGVI ]; then +oldzimperium() { + echo "ATTENTION : Network traffic will be redirected to [medium.com] for 20 seconds !!!" + echo "Press [Try again] after got 1005/1007/VPN error on MB, so it's can bypass device not secure dialog !" + # Reference : https://superuser.com/questions/1248670/redirect-ip-to-another-ip-using-iptables + iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination 162.159.152.4 + am start -n com.mbmobile/io.flutter.plugins.MainActivity + sleep 20 + logcat -d | grep VGFullScreenDialog && vtapstillfail + echo "Restoring network traffic" + # Reference : https://gist.github.com/jstrosch/3190568 (Line 7) + iptables -t nat -F + + if [ $SYSLANGVI ]; then su -lp 2000 -c "cmd notification post -S bigtext -t 'MBZDefend-Fix' tag 'LƯU Ý : Vui lòng nhấn [Thử lại] tại màn hình báo lỗi 1005/1007/VPN để vào App MBCP.'" >/dev/null 2>&1 -else + else su -lp 2000 -c "cmd notification post -S bigtext -t 'MBZDefend-Fix' tag 'WARNING : Please click [Try again] on 1005/1007/VPN screen to continue entering MBCP App.'" >/dev/null 2>&1 -fi -sleep 3 + fi + sleep 3 +} +nometamodule() { + echo "No meta-module installed! Please install one and reboot then try again!!!!" + echo "We recommend Hybird Mount..." + echo "Opening release page in 5 seconds..." + am start -a android.intent.action.VIEW -d https://github.com/Hybrid-Mount/meta-hybrid_mount/releases + sleep 5 + exit 1 +} + +checkmetamodule() { + [ ! -d /data/adb/metamodule ] && nometamodule +} + +folkmetamodulecheck() { + [ ! -d /data/adb/metamodule ] && folkHandle +} + +folkHandle() { + # enable built-in meta magic mount folk mount api + touch /data/adb/.magic_mount_enable + echo "This module requires metamodule, but you don't have any installed" + echo "So we enabled built-in [Folk Mount API] instead. Please reboot and run action again." + exit 1 +} + +zimperiumpresent() { + echo "Zimperium still present! Cannot continue :(" + echo "Checking if your current root implementation has metamodule..." + [ -f /data/adb/modules/mountify ] && echo "You are using [Mountify] metamodule!" && echo "Please install [bindhosts] module and use MBZDefend-Fix bindhosts variant or use custom DNS with host blocking instead!" && exit 1 + [ -f /data/adb/metamodule/disable ] && echo "Current installed metamodule is disabled, enabling again!" && rm -f /data/adb/metamodule/disable && echo "Reboot and try again?" && exit 1 + [ -f /data/adb/ksud ] && cat /data/adb/ksud | grep -q ksud::metamodule && checkmetamodule + # check for folkpatch before apatch + [ -f /data/adb/apd ] && cat /data/adb/apd | grep -q FolkPatch && folkmetamodulecheck + [ -f /data/adb/apd ] && cat /data/adb/apd | grep -q apd::metamodule && checkmetamodule + echo "Please remove any module override hosts, or use alternative DNS with zimperium host blocking!" + exit 1 +} + +strongerzimperium() { + echo "Testing network..." + curl -s --max-time 5 google.com | grep -q html* || echo "No network available, Cannot continue:(" || exit 1 + echo "Testing zimperium..." + curl -s --max-time 10 gts.zimperium.com | grep -q html* && zimperiumpresent + echo "Enabling [com.mbmobile] app..." + pm enable com.mbmobile | grep -q enabled* && echo "[com.mbmobile] is now enabled!" + echo "Opening app..." + am start -n com.mbmobile/io.flutter.plugins.MainActivity + +} + +# check v6.5.7+ +find /data/app -name libcode.so | grep -q com.mbmobile && strongerzimperium || oldzimperium diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 6e745e6..bf2e932 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -3,27 +3,188 @@ SYSLANGVI="$(getprop persist.sys.locale | grep vi-VN)" ANDROIDSDK="$(getprop ro.build.version.sdk)" +INSTALLVI="https://git.disroot.org/mbcp/info_vi/wiki/mbcpinstall" +INSTALLEN="https://git.disroot.org/mbcp/info_en/wiki/mbcpinstall" + +SELINUXSTATUS="$(getenforce)" + +echo "SELinux status : $SELINUXSTATUS" + +[ -f /data/local/tmp/lastappfail ] && echo "Last app installation fail: YES" + +[ ! -f /data/local/tmp/lastappfail ] && echo "Last app installation fail : NO" + +getapkpath() { + dumpsys package com.mbmobile | grep path: > /data/local/tmp/path.txt + sed -i 's| path: ||g' /data/local/tmp/path.txt + APKPATH="$(cat /data/local/tmp/path.txt)" + echo "APK Path: $APKPATH" +} + +# Clear old iptables +iptables -t nat -F + +alreadybypassed() { + echo "Current MBCP app comes with Zimperium bypass patches" + echo "There is no need to install this module." + echo "Continue anyway then." +} + +nonfosskitsune() { + echo "Proprietary Kitsune found! Your data might be at risk!" + echo "Consider install older FOSS Kitsune Mask to protect your data!" + echo "If you agree with the risk, wait 15 seconds then module will continue to install" + sleep 15 +} +maliciousmagisk() { + echo "Nirtal Magisk found! Your data might be at risk!" + echo "Consider install official Magisk to protect your data !" + echo "If you agree with the risk, wait 15 seconds then module will continue to install" + sleep 15 +} + notmbcp() { - echo "MB Bank [com.mbmobile] is installed, but it seems like that the app is NOT MBCP" + echo "MB Bank [com.mbmobile] is installed, but the app is NOT MBCP :(" echo "Please install MBCP v6.4.60+ in order to use this module !" - am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info/wiki/mbcpinstall + [[ $SYSLANGVI ]] && am start -a android.intent.action.VIEW -d $INSTALLVI >/dev/null 2>&1 || am start -a android.intent.action.VIEW -d $INSTALLEN >/dev/null 2>&1 exit 1 } +bindhostfound() { + echo "Bindhost module found !!" + echo "Please install MBZDefend-Fix with [bindhost] variant instead!" + exit 1 +} + +# old HideMyAppList is triggering VTAP, that's why it's must be hidden +tsnghma() { + echo "Dr-TSNG HideMyAppList detected!" + echo "Hiding app..." + pm hide com.tsng.hidemyapplist >/dev/null 2>&1 +} + +oldlsposed() { + echo "--------INCOMPATIBLE LSPOSED DETECTED--------" + echo "You are using older version of LSPosed!" + echo "From MB v6.4.80+, you need to use LSPosed with 7199+" + echo "Please install newer LSPosed to continue." + echo "We recommend to use Vector, which is formly named as LSPosed." + echo "You can choose other LSPosed, as long as it newer than 7199+" + echo "---------------------------------------------" + am start -a android.intent.action.VIEW -d https://github.com/JingMatrix/Vector/releases >/dev/null 2>&1 + echo "Also remove old LSPosed module if you install Vector!" + echo "After installed, reboot your device, clear MBCP app data, then install this module again." + exit 1 +} + +removeoldfw() { + echo "Removing old VTAP (V-Key) firmware..." + [ -f /data/data/com.mbmobile/files/firmware ] && rm -rf /data/data/com.mbmobile/files/firmware + [ -f /data/data/com.mbmobile/files/profile ] rm -rf /data/data/com.mbmobile/files/profile +} + +vtapfail() { + echo "VTAP is not provisioned!" + echo "App first normal launch required!" + iptables -t nat -F + am start -n com.mbmobile/io.flutter.plugins.MainActivity + logcat -c + sleep 20 + logcat -d | grep VGFullScreenDialog && vtapstillfail + logcat -d | grep -q com.vtap.MaintenanceActivity && vtapstillfail + am force-stop com.mbmobile + checkvtapagain +} + +vtapstillfail() { + iptables -t nat -F + echo "VTAP provision failed or triggering! Cannot continue!" + echo "Please follow [afterinstall] for fix steps." + echo "In case if you already done :" + echo "Try to reinstall module again 3 more times." + sleep 3 + if [ $SYSLANGVI ]; then + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_vi/wiki/afterinstall >/dev/null 2>&1 + am force-stop com.mbmobile + exit 169 +else + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/afterinstall >/dev/null 2>&1 + exit 169 +fi +} + +checkvtapagain() { + echo "Checking VTAP status again..." + cat '/data/data/com.mbmobile/databases/vtap' | grep -q 'isProvisioningDone :true' && echo "VTAP is provisioned !" || vtapstillfail || exit 169 + +} + +installfail() { + echo "App reinstallation failed, please check if CorePatch / Disable App Verification is working or not!" + touch /data/local/tmp/lastappfail + exit 1 +} + +selinuxhandle() { + getapkpath > /dev/null 2&>1 + echo "SELinux is Permissive! Enforcing is required!" + echo "Forcing SELinux state to Enforcing..." + setenforce enforcing + echo "Reinstalling app..." + [ $(pm install $APKPATH | grep Success) ] && echo "Successful reinstall app!" || installfail + rm -rf /data/local/tmp/lastappfail +} + +magiskhosts() { + echo "Magisk systemless hosts detected!" + echo "This module should be disabled to work with this module!" + touch /data/adb/modules/hosts/disable && echo "Disabled systemless hosts module!" +} + +[[ -d /data/adb/modules/hosts ]] && magiskhosts + +[[ -d /data/adb/modules/bindhosts ]] && bindhostfound + +[[ -d /data/data/com.tsng.hidemyapplist ]] && tsnghma + +[[ -d /data/data/io.github.Nirtal0.magisk ]] && maliciousmagisk + +[[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune + +[ -d /data/adb/modules/zygisk_lsposed ] && cat /data/adb/modules/zygisk_lsposed/module.prop | grep versionCode=7024 && oldlsposed + # Check if MB is installed or nope +# Remove this one can cause the module does not work properly! if [ -d /data/data/com.mbmobile ]; then - echo "" + echo "MB/MBCP app found on device!" else echo "MB/MBCP not found! Please install it!" - am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info/wiki/mbcpinstall + [[ $SYSLANGVI ]] && am start -a android.intent.action.VIEW -d $INSTALLVI || am start -a android.intent.action.VIEW -d $INSTALLEN >/dev/null 2>&1 exit 1 fi +# Check for original MB Bank app +# The module does NOT work with original unpatched app. It's pointless to remove the check. You think it works with original app? Nah. +find /data/app -name libtoolChecker.so | grep -q com.mbmobile && notmbcp + +# last app reinstallation fail with selinux permissive +[ -f /data/local/tmp/lastappfail ] && selinuxhandle + +# get apk path first +# only get apkpath if selinux is enforcing +# if the selinux state is permissive, handle app installation first, then getapkpath after it +[ $(getenforce | grep Enforcing) ] && getapkpath + +# v6.4.80+ requires enforcing SELinux in order to prevent 40202 VTAP fail (Runtime Tampering) error +[ $(getenforce | grep Permissive) ] && selinuxhandle && getapkpath + # Check if Termux and it's bootstrap is initialized or not +# Remove this code broke Termux support if [ -d /data/data/com.termux ]; then if [[ -d /data/data/com.termux/files/home ]]; then echo "Termux bootstrap found!" appops set com.termux SYSTEM_ALERT_WINDOW allow + unzip -o "$ZIPFILE" 'script/MB_Bank.sh' -d '/data/user/0/com.termux/files/home/.shortcuts/' else echo "Termux bootstrap not found! Launching Termux..." am start -n com.termux/com.termux.app.TermuxActivity @@ -35,13 +196,16 @@ else echo "Termux not installed! skipping" fi -# Check for original MB Bank app -for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done +# Remove vtap (v-key) firmware from data folder (in case if fix vtap cert patch is applied) +# Helpful for older app version (v6.4.92+) or restore to older detection behavior in newer app +unzip -l $APKPATH | grep -q fix_vtap_cert* && removeoldfw -# Grant permission for MB/MBCP app +# Check for bypassed app +unzip -l $APKPATH | grep -q remove_new_zimperium_check* && alreadybypassed +# Grant permission for MB/MBCP app -if [ $ANDROIDSDK -gt 33 ]; then +if [ $ANDROIDSDK -gt 32 ]; then echo "Granting MB/MBCP app permission..." pm grant com.mbmobile android.permission.CAMERA pm grant com.mbmobile android.permission.RECORD_AUDIO @@ -58,38 +222,34 @@ else pm grant com.mbmobile android.permission.READ_PHONE_STATE fi -unzip -o "$ZIPFILE" 'vtapnotinit.sh' -unzip -o "$ZIPFILE" 'vtapstillfail.sh' -chmod +x 'vtapstillfail.sh' -chmod +x 'vtapnotinit.sh' - # Delete /data/magisk if it exists so MB doesnt failling when eKYC with error code EKYC3002-MS6998 for Magisk users -echo Deleting /data/magisk if it exists... -[ -d /data/magisk ] && rm -r /data/magisk +[ -d /data/magisk ] && echo "Magisk folder found! deleting..." && rm -r /data/magisk +find /data -name 'magisk_backup*' -delete echo --------------------------- if [ -d /data/adb/magisk ]; then echo "Enabling Denylist for [com.mbmobile]..." magisk --denylist enable magisk --denylist add com.mbmobile + cat /data/adb/magisk.db | grep mbmobile* > /dev/null 2>&1 && echo "[com.mbmobile] is in Denylist now, nice!" || echo "Failed to put [com.mbmobile] to Denylist! Please do it manually or follow afterinstall steps !!!" else echo "Magisk not detected! Skipping Denylist" fi # Check VTAP status to ensure that it must be provisioned -echo "Checking VTAP status..." -echo "VTAP status : " && cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || sh 'vtapnotinit.sh' -echo "Checking VTAP status again..." -cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || sh 'vtapstillfail.sh' || exit 169 - -echo Force closing MBBank app... +echo "------VTAP (V-Key) phase------" +echo "Checking VTAP (V-Key) status..." +cat '/data/data/com.mbmobile/databases/vtap' | grep -q 'isProvisioningDone :true' && echo "VTAP is provisioned !" || vtapfail || exit 169 +echo Force closing MBCP app... am force-stop com.mbmobile +echo "------------------------------" + +# Clear device logcat to ensure that no previous VTAP activity exists +logcat -c # Support for Biz MB Bank v2.0 (Flutter version) for library in $(find /data/app -name libholdingshadow.so | grep com.mbbank.biz.prod) ; do rm $library ; done sleep 2 - -unzip -o "$ZIPFILE" 'script/MB_Bank.sh' -d '/data/user/0/com.termux/files/home/.shortcuts/' rm -rf /data/data/com.mbmobile/files/0* rm -rf /data/data/com.mbmobile/files/1* rm -rf /data/data/com.mbmobile/files/2* @@ -103,26 +263,45 @@ unzip -o "$ZIPFILE" 'script/MB_Bank.sh' -d '/data/user/0/com.termux/files/home/. rm -rf /data/data/com.mbmobile/files/KNOV3PN* rm -rf /data/data/com.mbmobile/files/zxpolicyme* rm -rf /data/data/com.mbmobile/files/policyme* + +oldzimperium() { +echo "------Start app phase------" echo Starting Flutter activity... echo "ATTENTION : Network traffic will be redirected to [medium.com] for 20 seconds !!!" -echo "Press [Try again] after got 1005/1007 error on MB, so it's can bypass device not secure dialog !" -iptables -t nat -A OUTPUT -p tcp -d 0/0 -j DNAT --to-destination 162.159.153.4:443 -am start -n com.mbmobile/io.flutter.plugins.MainActivity +echo "Press [Try again] after got 1005/1007/VPN error on MB, so it's can bypass device not secure dialog !" +# Reference : https://superuser.com/questions/1248670/redirect-ip-to-another-ip-using-iptables +iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination 162.159.152.4 +am start -n com.mbmobile/io.flutter.plugins.MainActivity >/dev/null 2>&1 sleep 20 +echo "---------------------------" + +# Look for VTAP activity from logcat +logcat -d | grep -q VGFullScreenDialog && vtapstillfail +logcat -d | grep -q com.vtap.MaintenanceActivity && vtapstillfail + echo "Restoring network traffic" -iptables -t nat -F OUTPUT +# Reference : https://gist.github.com/jstrosch/3190568 (Line 7) +iptables -t nat -F if [ $SYSLANGVI ]; then su -lp 2000 -c "cmd notification post -S bigtext -t 'MBZDefend-Fix' tag 'LƯU Ý : Vui lòng nhấn [Thử lại] tại màn hình báo lỗi 1005/1007/VPN để vào App MBCP. Sau khi thao tác xong, nên khởi động lại thiết bị ngay.'" >/dev/null 2>&1 - [ -d /data/adb/magisk ] && am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_vi/wiki/vtapfix - [ -d /data/data/me.weishu.kernelsu ] && am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_vi/wiki/vtapfix else - su -lp 2000 -c "cmd notification post -S bigtext -t 'MBZDefend-Fix' tag 'WARNING : Please click [Try again] on 1005/1007/VPN screen to continue entering MBCP App, then reboot your device ASAP.'" >/dev/null 2>&1 - [ -d /data/adb/magisk ] && am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/vtapfix - [ -d /data/data/me.weishu.kernelsu ] && am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/vtapfix - + su -lp 2000 -c "cmd notification post -S bigtext -t 'MBZDefend-Fix' tag 'WARNING : Please click [Try again] on 1005/1007/VPN screen to continue entering MBCP App, then reboot your device ASAP.'" >/dev/null 2>&1 fi sleep 3 +} +strongerzimperium() { + echo "You are using v6.5.7+, old method no longer work." + echo "Using new method instead." + echo "Disabling [com.mbmobile] app (to prevent open before fix)" + pm disable com.mbmobile | grep -q disabled* && echo "Reboot your device, and run [Action] for this module from root manager to continue!" || echo "Do not open app, reboot your device, run [Action] from root manager for this module to continue!" +} +# check for v6.5.7+ and notify to use new method +unzip -l $APKPATH | grep -q libcode.so && strongerzimperium || oldzimperium + +# cleanup +rm -rf /data/local/tmp/path.txt +rm -rf /data/local/tmp/lastappfail diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index 1409cea..6382e85 100644 --- a/module_new/zdefend-fix/module.prop +++ b/module_new/zdefend-fix/module.prop @@ -1,7 +1,7 @@ id=zdefend-fix name=MB ZDefend Bypass -version=v3.7-mb -versionCode=37 +version=v4.4-mb +versionCode=44 author=cuynu, xfirstnamelastname -description=Bypass "Rooted device or JAILBROKEN" screen for MBCP App by trick the app detection libraries. \nNOTE : This does not bypass VTAP scrren, you have to fix it yourself is you are using Magisk. +description=Bypass "Rooted device or JAILBROKEN" screen for MBCP App by trick the app detection libraries. \nNOTE : This does not bypass V-Key (VTAP) screen, you have to fix it if you are using Magisk (or original KernelSU). updateJson=https://git.disroot.org/cuynu/mbzdefend-fix/raw/branch/main/module_new/remoteupdate.json diff --git a/module_new/zdefend-fix/script/MB_Bank.sh b/module_new/zdefend-fix/script/MB_Bank.sh index e230a96..9c08e2b 100755 --- a/module_new/zdefend-fix/script/MB_Bank.sh +++ b/module_new/zdefend-fix/script/MB_Bank.sh @@ -19,11 +19,14 @@ echo "Press [Try again] after got 1005/1007 error on MB, so it's can bypass devi su -c rm -rf /data/data/com.mbmobile/files/zxpolicyme* su -c rm -rf /data/data/com.mbmobile/files/policyme* -su -c iptables -t nat -A OUTPUT -p tcp -d 0/0 -j DNAT --to-destination 162.159.153.4:443 +# Reference : https://superuser.com/questions/1248670/redirect-ip-to-another-ip-using-iptables +iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination 162.159.152.4 am start -n com.mbmobile/io.flutter.plugins.MainActivity -# VPN connection requires 20 seconds, while normal one only requires 10 seconds sleep 20 -echo "Restoring network traffic..." +echo "Restoring network traffic" +# Reference : https://gist.github.com/jstrosch/3190568 (Line 7) +iptables -t nat -F + su -c iptables -t nat -F OUTPUT if [ $SYSLANGVI ]; then su -lp 2000 -c "cmd notification post -S bigtext -t 'MBZDefend-Fix' tag 'LƯU Ý : Vui lòng nhấn [Thử lại] tại màn hình báo lỗi 1005/1007/VPN để vào App MBCP.'" >/dev/null 2>&1 diff --git a/module_new/zdefend-fix/service.sh b/module_new/zdefend-fix/service.sh index ae57631..019eec3 100644 --- a/module_new/zdefend-fix/service.sh +++ b/module_new/zdefend-fix/service.sh @@ -6,7 +6,7 @@ done # Delete /data/magisk if it exists so MB doesnt failling when eKYC with error code EKYC3002-MS6998 for Magisk users [[ -d /data/magisk ]] && rm -r /data/magisk - rm -rf /data/data/com.mbmobile/files/0* + rm -rf /data/data/com.mbmobile/files/0* rm -rf /data/data/com.mbmobile/files/1* rm -rf /data/data/com.mbmobile/files/2* rm -rf /data/data/com.mbmobile/files/3* diff --git a/module_new/zdefend-fix/system/etc/hosts b/module_new/zdefend-fix/system/etc/hosts index e48fe8b..be6a23e 100644 --- a/module_new/zdefend-fix/system/etc/hosts +++ b/module_new/zdefend-fix/system/etc/hosts @@ -3,4 +3,4 @@ 127.0.0.1 zimperium.com 127.0.0.1 cdn.zimperium.com 127.0.0.1 gts.zimperium.com - +127.0.0.1 eu01.zimperium.com diff --git a/module_new/zdefend-fix/vtapnotinit.sh b/module_new/zdefend-fix/vtapnotinit.sh deleted file mode 100644 index f62c1bf..0000000 --- a/module_new/zdefend-fix/vtapnotinit.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/system/bin/sh -echo "VTAP is not provisioned!" -echo "App first normal launch required!" -iptables -t nat -F OUTPUT -am start -n com.mbmobile/io.flutter.plugins.MainActivity -sleep 10 -am force-stop com.mbmobile diff --git a/module_new/zdefend-fix/vtapstillfail.sh b/module_new/zdefend-fix/vtapstillfail.sh deleted file mode 100644 index bdbe85d..0000000 --- a/module_new/zdefend-fix/vtapstillfail.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/system/bin/sh - -SYSLANGVI="$(getprop persist.sys.locale | grep vi-VN)" - -echo "VTAP provision failed! Cannot continue!" -echo "If you have low-end device (eg : Vsmart Joy 2+)" -echo "Try to reinstall module again 3 more times." - -if [ $SYSLANGVI ]; then - am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_vi/wiki/vtapfix -else - am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/vtapfix -fi - -exit 100 -