From 3228034bfbad4c3e005803a49eb30f450e8a2a24 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Thu, 18 Dec 2025 15:56:24 +0700 Subject: [PATCH 01/50] feat: customize.sh: handle hosts with bindhost Signed-off-by: Cuynu --- module_new/zdefend-fix/custom.txt | 12 ++++++++++++ module_new/zdefend-fix/customize.sh | 15 +++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 module_new/zdefend-fix/custom.txt diff --git a/module_new/zdefend-fix/custom.txt b/module_new/zdefend-fix/custom.txt new file mode 100644 index 0000000..dbd1089 --- /dev/null +++ b/module_new/zdefend-fix/custom.txt @@ -0,0 +1,12 @@ +# custom rules +# WARNING! custom rules are loaded on both run and reset! +# +# add custom redirects here +# ip hostname +# +# example: +# 1.1.1.1 one.one.one.one +# 93.184.215.14 example.com +127.0.0.1 zimperium.com +127.0.0.1 cdn.zimperium.com +127.0.0.1 gts.zimperium.com diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 6e745e6..0dd158c 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -10,6 +10,21 @@ notmbcp() { exit 1 } +# Replacement for /system/etc/hosts +# Fixes module being disabled due to bindhosts module +nobindhosts() { + echo "[bindhosts] module not found" + echo "Please use normal MBZDefend-Fix module instead !" + exit 169 +} + +bindhosts() { + echo "bindhosts module found ! Copying custom.txt" + unzip -o "$ZIPFILE" 'custom.txt' -d '/data/adb/bindhosts/' +} + +[ -d /data/adb/bindhosts ] && bindhosts || nobindhosts + # Check if MB is installed or nope if [ -d /data/data/com.mbmobile ]; then echo "" From ecb8075007adef73f3bb5d667e96e576660cac99 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Thu, 18 Dec 2025 15:59:52 +0700 Subject: [PATCH 02/50] feat: bump v3.8-mb-bindhosts Signed-off-by: Cuynu --- createmodule.sh | 6 +- module_new/CHANGELOG.md | 129 ------------------------ module_new/remoteupdate.json | 6 -- module_new/zdefend-fix/module.prop | 8 +- module_new/zdefend-fix/system/etc/hosts | 6 -- 5 files changed, 7 insertions(+), 148 deletions(-) delete mode 100644 module_new/CHANGELOG.md delete mode 100644 module_new/remoteupdate.json delete mode 100644 module_new/zdefend-fix/system/etc/hosts diff --git a/createmodule.sh b/createmodule.sh index d44c090..71c4ca6 100755 --- a/createmodule.sh +++ b/createmodule.sh @@ -5,16 +5,16 @@ COMMIT="$(git rev-parse --short HEAD)" echo "Creating module (*.zip)..." cd module_new/zdefend-fix -zip -r mbzdefend_fix_$COMMIT.zip . >/dev/null 2>&1 +zip -r mbzdefend_fix_bindhosts_$COMMIT.zip . >/dev/null 2>&1 cd .. cd .. mv module_new/zdefend-fix/mbzdefend_fix_*.zip mbzdefend_fix_$COMMIT.zip if [ -f mbzdefend_fix_*.zip ]; then - echo "Module saved to [mbzdefend_fix_$COMMIT.zip], try to flash it :>" + echo "Module saved to [mbzdefend_fix_bindhosts_$COMMIT.zip], try to flash it :>" rm -rf module_new/zdefend-fix/*.zip else - echo "Where is [mbzdefend_fix_$COMMIT.zip] ?" + echo "Where is [mbzdefend_fix_bindhosts_$COMMIT.zip] ?" echo "Did module actually created yet... Try fetch repo and use command again!" echo "If your system doesn't have [zip], pls install it" fi diff --git a/module_new/CHANGELOG.md b/module_new/CHANGELOG.md deleted file mode 100644 index 25573e0..0000000 --- a/module_new/CHANGELOG.md +++ /dev/null @@ -1,129 +0,0 @@ -# MBZDefend-Fix by Cuynu -Bypass new stupid MB Bank zimperium root/hook detection (does not bypass VTAP root detection) - -## Changelogs : - -- v3.7-mb -``` -feat: bump v3.7-mb -feat: createmodule.sh: commit id after module name -feat: vtapstillfail.sh: open vtapfix after vtap failling to init -feat: customize.sh: handle denylist for magisk & depends on syslang to open proper vtapfix web -``` - -- v3.6-mb -``` -feat: misc changes -- remove old patching code (v6.4.55 or older please use older version) -- new auto granting app permission -- improve code logic -- support english & vietnamese language for MBZDefend-Fix notification -- other changes idk - -joke: im not (or is) a developer - -``` - -- v3.5-mb -``` -feat: redirect zimperium to localhost -``` - -- v3.4-mb -``` -feat: adapt with new detection point -``` - -- v3.3-mb -``` -fix: customize.sh: typo fix -feat: vtapstillfail.sh: notice for low-end devices that is failing to properly provision vtap -feat: implement MB & termux & magisk check -feat: check if vtap is provisioned or not -``` - -- v3.2-mb -``` -fix: installation failling on some devices -``` - -- v3.1-mb -``` -moved to new code structure, only works with patched MB app (MBCP) -``` - -- v3.0-mb -``` -added termux script for easier use -``` - -- v2.9-mb -``` -workaround for v6.4.56+, ugly but works :< -- it's now requires you to run "Action" on root app -> modules -> MB ZDefend Bypass everytime you need to use MB Bank app... -``` - -- v2.8-mb -``` -open url that guide users follow step to hide vtap detection -``` - -- v2.6-mb -``` -module name changed to "MB ZDefend Bypass" -delete fake "libZDefend.so" for both MB Bank & BizMB Flutter -add support for Biz MB Bank v2.0 (Flutter) -``` - -- v2.5-mb -``` -fix module description. -``` - -- v2.4-mb -``` -disable provider silently -``` - -- v2.3-mb -``` -disable provider before patching -``` - -- v2.2-mb -``` -patching [com.mbmobile] only and minor other changes -``` - -- v2.1-mb -``` -adapt with v6.4.48+ -``` - -- v2.0-mb -``` -deleting /data/magisk to prevent eKYC failling -deleting /data/magisk for startup script and actions -``` -- v1.9-mb -``` -- change patch arguments -- check for sed version before patching -``` -- v1.8-mb -``` -- fix patching failure on startup for Magisk -``` -- v1.7-mb -``` -- fix patching failure on Magisk by don't use busybox -``` -- v1.6-mb -``` -- Test fix installation issue on Magisk/Kitsune Mask -``` - -- v1.5-mb -``` -- Initial release -``` diff --git a/module_new/remoteupdate.json b/module_new/remoteupdate.json deleted file mode 100644 index 7cfd83c..0000000 --- a/module_new/remoteupdate.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "version": "v3.7-mb", - "versionCode": "37", - "zipUrl": "https://git.disroot.org/mbcp/mbzdefend-fix/releases/download/v3.7-mb/mbzdefend_fix_7e94380.zip", - "changelog": "https://git.disroot.org/cuynu/mbzdefend-fix/raw/branch/main/module_new/CHANGELOG.md" -} diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index 1409cea..269e4df 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 +name=MB ZDefend Bypass (bindhosts) +version=v3.8-mb-bindhosts +versionCode=38 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. -updateJson=https://git.disroot.org/cuynu/mbzdefend-fix/raw/branch/main/module_new/remoteupdate.json +updateJson= diff --git a/module_new/zdefend-fix/system/etc/hosts b/module_new/zdefend-fix/system/etc/hosts deleted file mode 100644 index e48fe8b..0000000 --- a/module_new/zdefend-fix/system/etc/hosts +++ /dev/null @@ -1,6 +0,0 @@ -127.0.0.1 localhost -::1 localhost -127.0.0.1 zimperium.com -127.0.0.1 cdn.zimperium.com -127.0.0.1 gts.zimperium.com - From f5d799674a43477f0003c07c2500c7863b473e62 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Thu, 18 Dec 2025 16:14:18 +0700 Subject: [PATCH 03/50] fix: createmodule.sh: wrong name Signed-off-by: Cuynu --- createmodule.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/createmodule.sh b/createmodule.sh index 71c4ca6..a4e877d 100755 --- a/createmodule.sh +++ b/createmodule.sh @@ -8,7 +8,7 @@ cd module_new/zdefend-fix zip -r mbzdefend_fix_bindhosts_$COMMIT.zip . >/dev/null 2>&1 cd .. cd .. -mv module_new/zdefend-fix/mbzdefend_fix_*.zip mbzdefend_fix_$COMMIT.zip +mv module_new/zdefend-fix/mbzdefend_fix_*.zip mbzdefend_fix_bindhosts_$COMMIT.zip if [ -f mbzdefend_fix_*.zip ]; then echo "Module saved to [mbzdefend_fix_bindhosts_$COMMIT.zip], try to flash it :>" From 5011e9d0407f8f6eb376a0efb00bfd65960beca4 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 19 Dec 2025 16:36:51 +0700 Subject: [PATCH 04/50] feat: action.sh: also check vtap provision status for action script Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index a0254f4..77f9b39 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -12,6 +12,13 @@ notmbcp() { # Check for original MB Bank app for library in $(find /data/app -name libvvb2060.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 "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 + + # 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 From be93f4280aa050811560463bb56af5b860c24f61 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 19 Dec 2025 16:40:20 +0700 Subject: [PATCH 05/50] feat: bump v3.9-mb-bindhosts Signed-off-by: Cuynu --- module_new/zdefend-fix/module.prop | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index 269e4df..bc4d666 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 (bindhosts) -version=v3.8-mb-bindhosts -versionCode=38 +version=v3.9-mb-bindhosts +versionCode=39 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. updateJson= From 5b6c13d4ed14c9c39db1dde6b43f91626f48005d Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 19 Dec 2025 16:56:55 +0700 Subject: [PATCH 06/50] readme: remove current module version i forgotten to change this version when bumping new module version many times, its need to be removed for good so i don't need to worry about it anymore Signed-off-by: Cuynu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 70dde06..9e98f0f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # 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](https://git.disroot.org/cuynu/mbzdefend-fix/releases) - Author : [Cuynu](https://git.disroot.org/cuynu) and [backslashxx](https://github.com/backslashxx) for sed script From 26154efc717c01759bfa3b47148c3e0bc7358343 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Sat, 10 Jan 2026 21:26:47 +0700 Subject: [PATCH 07/50] feat: customize.sh: depends on syslang to open right mbcpinstall page also only display deleting /data/magisk if it's actually found Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 0dd158c..595291e 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -3,10 +3,13 @@ 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" + 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 } @@ -30,7 +33,7 @@ if [ -d /data/data/com.mbmobile ]; then echo "" 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 exit 1 fi @@ -79,8 +82,7 @@ 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 echo --------------------------- if [ -d /data/adb/magisk ]; then From 37514d63ecfd242adbb1c0d6e1c014b8a3362641 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Sat, 10 Jan 2026 21:36:20 +0700 Subject: [PATCH 08/50] fix: customize.sh: unzip shortcut after termux bootstrap is found prevent copy error for users who don't use termux more effective Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 595291e..6ff7fb4 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -42,6 +42,7 @@ 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 @@ -105,8 +106,6 @@ am force-stop com.mbmobile # 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* From 1f60b0467b225093ba89c05cccdd37158c3c575e Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 13 Jan 2026 23:56:12 +0700 Subject: [PATCH 09/50] feat: redirect to fake IP instead also reference code Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 18 +++++++++--------- module_new/zdefend-fix/customize.sh | 11 +++++++---- module_new/zdefend-fix/script/MB_Bank.sh | 11 +++++++---- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index 77f9b39..7e1ed5d 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -22,12 +22,9 @@ cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is prov # 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 +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 !" rm -rf /data/data/com.mbmobile/files/0* rm -rf /data/data/com.mbmobile/files/1* rm -rf /data/data/com.mbmobile/files/2* @@ -41,14 +38,17 @@ echo "Press [Try again] after got 1005/1007 error on MB, so it's can bypass devi rm -rf /data/data/com.mbmobile/files/KNOV3PN* rm -rf /data/data/com.mbmobile/files/zxpolicyme* rm -rf /data/data/com.mbmobile/files/policyme* - -iptables -t nat -A OUTPUT -p tcp -d 0/0 -j DNAT --to-destination 162.159.153.4:443 - +echo "ATTENTION : Network traffic will be redirected to fake IP 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 122.122.0.122 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 +# 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 diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 6ff7fb4..6f023eb 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -84,6 +84,7 @@ chmod +x 'vtapnotinit.sh' # Delete /data/magisk if it exists so MB doesnt failling when eKYC with error code EKYC3002-MS6998 for Magisk users [ -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 @@ -120,13 +121,15 @@ sleep 2 rm -rf /data/data/com.mbmobile/files/zxpolicyme* rm -rf /data/data/com.mbmobile/files/policyme* 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 +echo "ATTENTION : Network traffic will be redirected to fake IP 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 122.122.0.122 am start -n com.mbmobile/io.flutter.plugins.MainActivity sleep 20 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 diff --git a/module_new/zdefend-fix/script/MB_Bank.sh b/module_new/zdefend-fix/script/MB_Bank.sh index e230a96..cee4f2d 100755 --- a/module_new/zdefend-fix/script/MB_Bank.sh +++ b/module_new/zdefend-fix/script/MB_Bank.sh @@ -3,7 +3,7 @@ SYSLANGVI="$(getprop persist.sys.locale | grep vi-VN)" su -c am force-stop com.mbmobile echo "Starting flutter activity..." -echo "Network traffic will be redirected to [medium.com] for 20 seconds !!!" +echo "Network traffic will be redirected to fake IP for 20 seconds !!!" echo "Press [Try again] after got 1005/1007 error on MB, so it's can bypass device not secure dialog !" su -c rm -rf /data/data/com.mbmobile/files/0* su -c rm -rf /data/data/com.mbmobile/files/1* @@ -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 122.122.0.122 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 From 3a07e37513747b065bac8265a42f76db09d1cc46 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Wed, 14 Jan 2026 00:17:59 +0700 Subject: [PATCH 10/50] fix: wrong ip 122.122.0.122 worked from rooted shell, but not with module installation:( i'm going to use medium.com again Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 4 ++-- module_new/zdefend-fix/customize.sh | 7 +++++-- module_new/zdefend-fix/script/MB_Bank.sh | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index 7e1ed5d..c492965 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -38,10 +38,10 @@ am force-stop com.mbmobile rm -rf /data/data/com.mbmobile/files/KNOV3PN* rm -rf /data/data/com.mbmobile/files/zxpolicyme* rm -rf /data/data/com.mbmobile/files/policyme* -echo "ATTENTION : Network traffic will be redirected to fake IP for 20 seconds !!!" +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 122.122.0.122 +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 echo "Restoring network traffic" diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 6f023eb..6abee49 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -6,6 +6,9 @@ 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" +# Clear old iptables +iptables -t nat -F + 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 !" @@ -121,10 +124,10 @@ sleep 2 rm -rf /data/data/com.mbmobile/files/zxpolicyme* rm -rf /data/data/com.mbmobile/files/policyme* echo Starting Flutter activity... -echo "ATTENTION : Network traffic will be redirected to fake IP for 20 seconds !!!" +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 122.122.0.122 +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 echo "Restoring network traffic" diff --git a/module_new/zdefend-fix/script/MB_Bank.sh b/module_new/zdefend-fix/script/MB_Bank.sh index cee4f2d..9c08e2b 100755 --- a/module_new/zdefend-fix/script/MB_Bank.sh +++ b/module_new/zdefend-fix/script/MB_Bank.sh @@ -3,7 +3,7 @@ SYSLANGVI="$(getprop persist.sys.locale | grep vi-VN)" su -c am force-stop com.mbmobile echo "Starting flutter activity..." -echo "Network traffic will be redirected to fake IP for 20 seconds !!!" +echo "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 !" su -c rm -rf /data/data/com.mbmobile/files/0* su -c rm -rf /data/data/com.mbmobile/files/1* @@ -20,7 +20,7 @@ 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/policyme* # Reference : https://superuser.com/questions/1248670/redirect-ip-to-another-ip-using-iptables -iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination 122.122.0.122 +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 echo "Restoring network traffic" From f5dcf2ac53b44dea9dbd523011ce6967087f793b Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 00:51:50 +0700 Subject: [PATCH 11/50] feat: customize.sh: enforce foss kitsune mask there's new proprietary magisk based on the original kitsune mask, named as kitsune mask revived this one is shit because it doesn't have source code and it's UI looks like vibe coded with liquid glass style im not going to allow use of this root impl, this commit should work and prevent proprietary kitsune mask users from install this module, as long as the app is not hidden with randomized packageName. Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 6abee49..ebfae3c 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -9,6 +9,13 @@ INSTALLEN="https://git.disroot.org/mbcp/info_en/wiki/mbcpinstall" # Clear old iptables iptables -t nat -F +nonfosskitsune() { + echo "Kitsune Mask v30.4+ is proprietary and is not compatible with this module!" + echo "Please install older FOSS Kitsune Mask!" + am start -a android.intent.action.VIEW -d https://github.com/1q23lyc45/KitsuneMagisk/releases + exit 1 +} + 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 !" @@ -18,12 +25,6 @@ notmbcp() { # Replacement for /system/etc/hosts # Fixes module being disabled due to bindhosts module -nobindhosts() { - echo "[bindhosts] module not found" - echo "Please use normal MBZDefend-Fix module instead !" - exit 169 -} - bindhosts() { echo "bindhosts module found ! Copying custom.txt" unzip -o "$ZIPFILE" 'custom.txt' -d '/data/adb/bindhosts/' @@ -31,6 +32,9 @@ bindhosts() { [ -d /data/adb/bindhosts ] && bindhosts || nobindhosts +[[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune + + # Check if MB is installed or nope if [ -d /data/data/com.mbmobile ]; then echo "" @@ -61,8 +65,6 @@ fi for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done # Grant permission for MB/MBCP app - - if [ $ANDROIDSDK -gt 33 ]; then echo "Granting MB/MBCP app permission..." pm grant com.mbmobile android.permission.CAMERA From 0243bbccbabb045de7d8127565a6df9a13b3bb87 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 01:36:17 +0700 Subject: [PATCH 12/50] fix: customize.sh: missing nobindhosts function Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index ebfae3c..203255c 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -25,6 +25,13 @@ notmbcp() { # Replacement for /system/etc/hosts # Fixes module being disabled due to bindhosts module + +nobindhosts() { + echo "[bindhosts] module not found" + echo "Please use normal MBZDefend-Fix module instead !" + exit 169 +} + bindhosts() { echo "bindhosts module found ! Copying custom.txt" unzip -o "$ZIPFILE" 'custom.txt' -d '/data/adb/bindhosts/' From c5db7e02bcd54226560fb066257a5b4644a31920 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 01:46:22 +0700 Subject: [PATCH 13/50] feat: customize.sh: hide `com.tsng.hidemyapplist` package during module installation vtap is flagging this application as runtime tampering since this app is now outdated, there another fork for it like HMA-OSS or HMAL-OSS which is way lots better than the original one Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 203255c..d828898 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -23,9 +23,9 @@ notmbcp() { exit 1 } + # Replacement for /system/etc/hosts # Fixes module being disabled due to bindhosts module - nobindhosts() { echo "[bindhosts] module not found" echo "Please use normal MBZDefend-Fix module instead !" @@ -39,6 +39,14 @@ bindhosts() { [ -d /data/adb/bindhosts ] && bindhosts || nobindhosts +tsnghma() { + echo "Dr-TSNG HideMyAppList detected!" + echo "Hiding app..." + pm hide com.tsng.hidemyapplist +} + +[[ -d /data/data/com.tsng.hidemyapplist ]] && tsnghma + [[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune From 0ca9aca8eabc64f6330099965262df614d44a4fe Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 16:31:10 +0700 Subject: [PATCH 14/50] feat: service.sh: delete module itself if proprietary kitsune mask is found Signed-off-by: Cuynu --- module_new/zdefend-fix/service.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/service.sh b/module_new/zdefend-fix/service.sh index ae57631..9ae5820 100644 --- a/module_new/zdefend-fix/service.sh +++ b/module_new/zdefend-fix/service.sh @@ -6,7 +6,8 @@ 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* +[[ -d /data/data/io.github.x0eg0.magisk ]] && rm -r /data/adb/modules/zdefend-fix + 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* From b2081c907ad05e85963a4c045f77f323e5604216 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 16:42:44 +0700 Subject: [PATCH 15/50] feat: bump v4.0-mb-bindhosts Signed-off-by: Cuynu --- module_new/zdefend-fix/module.prop | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index bc4d666..5ca34e9 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 (bindhosts) -version=v3.9-mb-bindhosts -versionCode=39 +version=v4.0-mb-bindhosts +versionCode=40 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. updateJson= From 7b27652a8137ab72e5d6125ca983b02415e2b8e0 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 16:36:48 +0700 Subject: [PATCH 16/50] readme: build guide & link changes Signed-off-by: Cuynu --- README.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9e98f0f..def078c 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # MB ZDefend Bypass Module for MB/MBCP -- 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). From 7fa871e24b55d87be48ad8a5984bfcc9d612ec1e Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 16:38:09 +0700 Subject: [PATCH 17/50] readme: link fixes brain issues Signed-off-by: Cuynu --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index def078c..67ad54c 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # MB ZDefend Bypass Module for MB/MBCP -- Download from [releases tab](mbcp/mbzdefend-fix/releases) +- Download from [releases tab](/releases) - Author : [Cuynu](/cuynu) and [backslashxx](https://github.com/backslashxx) for sed script From 05d4015c546e0a2f7bcc2e9844d874325b59d877 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 17:16:24 +0700 Subject: [PATCH 18/50] feat: customize.sh: service.sh: detect and uninstall unknown magisk there's new proprietary nirtal magisk, which is found from Telegram, this Magisk is unknown and the developer is anonymous. it might malicious, and takes user data im not going to allow use of this root impl, this commit will uninstall that proprietary nirtal magisk, as long as the app is not hidden with randomized packageName. Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 9 +++++++++ module_new/zdefend-fix/service.sh | 1 + 2 files changed, 10 insertions(+) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index d828898..32d83b9 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -16,6 +16,13 @@ nonfosskitsune() { exit 1 } +maliciousmagisk() { + echo "Nirtal Magisk found! it's not compatible with this module..." + su -lp 2000 -c "cmd notification post -S bigtext -t 'WARNING' tag 'You ARE USING UNKNOWN MAGISK! Please reinstall official Magisk from topjohnwu for your safety!" >/dev/null 2>&1 + pm uninstall io.github.Nirtal0.magisk +} + + 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 !" @@ -47,6 +54,8 @@ tsnghma() { [[ -d /data/data/com.tsng.hidemyapplist ]] && tsnghma +[[ -d /data/data/io.github.Nirtal0.magisk ]] && maliciousmagisk + [[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune diff --git a/module_new/zdefend-fix/service.sh b/module_new/zdefend-fix/service.sh index 9ae5820..5ed6433 100644 --- a/module_new/zdefend-fix/service.sh +++ b/module_new/zdefend-fix/service.sh @@ -7,6 +7,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 [[ -d /data/data/io.github.x0eg0.magisk ]] && rm -r /data/adb/modules/zdefend-fix +[[ -d /data/data/io.github.Nirtal0.magisk ]] && rm -r /data/adb/modules/zdefend-fix rm -rf /data/data/com.mbmobile/files/0* rm -rf /data/data/com.mbmobile/files/1* rm -rf /data/data/com.mbmobile/files/2* From 995df7c018b55c8be5965bbdbc07d8b74cf8c432 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 17:44:25 +0700 Subject: [PATCH 19/50] feat: customize.sh: timer before uninstallation Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 32d83b9..3c7080e 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -17,8 +17,19 @@ nonfosskitsune() { } maliciousmagisk() { - echo "Nirtal Magisk found! it's not compatible with this module..." - su -lp 2000 -c "cmd notification post -S bigtext -t 'WARNING' tag 'You ARE USING UNKNOWN MAGISK! Please reinstall official Magisk from topjohnwu for your safety!" >/dev/null 2>&1 + echo "Nirtal Magisk found! it's not compatible with this module..."\ + echo "Uninstalling app in 5 seconds..." + sleep 1 + echo "Uninstalling app in 4 seconds..." + sleep 1 + echo "Uninstalling app in 3 seconds..." + sleep 1 + echo "Uninstalling app in 2 seconds..." + sleep 1 + echo "Uninstalling app in 1 seconds..." + sleep 1 + am start -a android.intent.action.VIEW -d https://github.com/topjohnwu/Magisk/releases + sleep 1 pm uninstall io.github.Nirtal0.magisk } From c045f59ce3786aaf8a2937558ba8c420c1533d35 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 16 Jan 2026 18:05:30 +0700 Subject: [PATCH 20/50] fix: customize.sh: reduce to just exit instead of uninstalling malicious magisk app Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 3c7080e..b39b90e 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -17,23 +17,12 @@ nonfosskitsune() { } maliciousmagisk() { - echo "Nirtal Magisk found! it's not compatible with this module..."\ - echo "Uninstalling app in 5 seconds..." - sleep 1 - echo "Uninstalling app in 4 seconds..." - sleep 1 - echo "Uninstalling app in 3 seconds..." - sleep 1 - echo "Uninstalling app in 2 seconds..." - sleep 1 - echo "Uninstalling app in 1 seconds..." - sleep 1 + echo "Nirtal Magisk found! it's not compatible with this module..." + echo "Please install official Magisk, or older Kitsune Mask!" am start -a android.intent.action.VIEW -d https://github.com/topjohnwu/Magisk/releases - sleep 1 - pm uninstall io.github.Nirtal0.magisk + exit 1 } - - + 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 !" From b342a54841ec6cddfdf2f74c54c17e225ff5780b Mon Sep 17 00:00:00 2001 From: Cuynu Date: Sat, 24 Jan 2026 17:27:39 +0700 Subject: [PATCH 21/50] feat: do not block installation for kitsune 30.6 & nirtal magisk users with warning about data risk and 15 seconds delay someone created the another fork of mbzdefend-fix and push it to guthib and bullying me Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index b39b90e..a3c14a6 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -10,17 +10,16 @@ INSTALLEN="https://git.disroot.org/mbcp/info_en/wiki/mbcpinstall" iptables -t nat -F nonfosskitsune() { - echo "Kitsune Mask v30.4+ is proprietary and is not compatible with this module!" - echo "Please install older FOSS Kitsune Mask!" - am start -a android.intent.action.VIEW -d https://github.com/1q23lyc45/KitsuneMagisk/releases - exit 1 + 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 10 seconds then module will continue to install" + sleep 15 } - maliciousmagisk() { - echo "Nirtal Magisk found! it's not compatible with this module..." - echo "Please install official Magisk, or older Kitsune Mask!" - am start -a android.intent.action.VIEW -d https://github.com/topjohnwu/Magisk/releases - exit 1 + 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() { @@ -30,7 +29,6 @@ notmbcp() { exit 1 } - # Replacement for /system/etc/hosts # Fixes module being disabled due to bindhosts module nobindhosts() { @@ -46,6 +44,7 @@ bindhosts() { [ -d /data/adb/bindhosts ] && bindhosts || nobindhosts + tsnghma() { echo "Dr-TSNG HideMyAppList detected!" echo "Hiding app..." @@ -60,6 +59,7 @@ tsnghma() { # 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 "" else @@ -69,6 +69,7 @@ else fi # 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!" @@ -86,6 +87,7 @@ else 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. for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done # Grant permission for MB/MBCP app From f30a77966bb1199c993cd2438af6e9375a2e0028 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Sat, 24 Jan 2026 17:30:57 +0700 Subject: [PATCH 22/50] fix: customize.sh: wrong second Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index a3c14a6..1aba68f 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -12,7 +12,7 @@ iptables -t nat -F 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 10 seconds then module will continue to install" + echo "If you agree with the risk, wait 15 seconds then module will continue to install" sleep 15 } maliciousmagisk() { From e1de578d258a51a8a156e591afd1b92cf1fbce2f Mon Sep 17 00:00:00 2001 From: Cuynu Date: Mon, 26 Jan 2026 20:10:47 +0700 Subject: [PATCH 23/50] feat: new VTAP fail ~check method & vtapfail/vtapstillfail as a function using logcat for finding VTAP activity, if it exists then open vtapfix site can handle some specific cases such as VTAP is provisioned, but the app not work and crashing or opens VTAP activity it might happens with KernelSU (original packageName) , the app is triggering but VTAP still got provisioned Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 35 ++++++++++++++++++++-- module_new/zdefend-fix/customize.sh | 40 ++++++++++++++++++++----- module_new/zdefend-fix/service.sh | 2 -- module_new/zdefend-fix/vtapnotinit.sh | 7 ----- module_new/zdefend-fix/vtapstillfail.sh | 16 ---------- 5 files changed, 65 insertions(+), 35 deletions(-) delete mode 100644 module_new/zdefend-fix/vtapnotinit.sh delete mode 100644 module_new/zdefend-fix/vtapstillfail.sh diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index c492965..2032fcc 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -2,21 +2,48 @@ 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/vtapfix + exit 169 +else + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/vtapfix + exit 169 +fi +} + # Check for original MB Bank app for library in $(find /data/app -name libvvb2060.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 "true" && echo "VTAP is provisioned!" || sh 'vtapnotinit.sh' +echo "VTAP status : " && cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || vtapfail || exit 169 echo "Checking VTAP status again..." -cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || sh 'vtapstillfail.sh' || exit 169 +cat '/data/data/com.mbmobile/databases/vtap' | grep "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 @@ -25,6 +52,7 @@ echo "Deleting /data/magisk if it exists..." find /data -name 'magisk_backup*' -delete echo Forcing stop MB Bank... am force-stop com.mbmobile +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* @@ -44,6 +72,7 @@ echo "Press [Try again] after got 1005/1007/VPN error on MB, so it's can bypass 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 diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 1aba68f..11346d6 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -51,6 +51,30 @@ tsnghma() { pm hide com.tsng.hidemyapplist } +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/vtapfix + exit 169 +else + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/vtapfix + exit 169 +fi +} + [[ -d /data/data/com.tsng.hidemyapplist ]] && tsnghma [[ -d /data/data/io.github.Nirtal0.magisk ]] && maliciousmagisk @@ -108,11 +132,6 @@ 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 [ -d /data/magisk ] && echo "Magisk folder found! deleting..." && rm -r /data/magisk find /data -name 'magisk_backup*' -delete @@ -128,13 +147,16 @@ 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 "VTAP status : " && cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || vtapfail || exit 169 echo "Checking VTAP status again..." -cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || sh 'vtapstillfail.sh' || exit 169 +cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || vtapstillfail || exit 169 echo Force closing MBBank app... am force-stop com.mbmobile +# 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 @@ -158,6 +180,10 @@ echo "Press [Try again] after got 1005/1007/VPN error on MB, so it's can bypass 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 + +# Look for VTAP activity from logcat +logcat -d | grep VGFullScreenDialog && vtapstillfail + echo "Restoring network traffic" # Reference : https://gist.github.com/jstrosch/3190568 (Line 7) iptables -t nat -F diff --git a/module_new/zdefend-fix/service.sh b/module_new/zdefend-fix/service.sh index 5ed6433..019eec3 100644 --- a/module_new/zdefend-fix/service.sh +++ b/module_new/zdefend-fix/service.sh @@ -6,8 +6,6 @@ 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 -[[ -d /data/data/io.github.x0eg0.magisk ]] && rm -r /data/adb/modules/zdefend-fix -[[ -d /data/data/io.github.Nirtal0.magisk ]] && rm -r /data/adb/modules/zdefend-fix rm -rf /data/data/com.mbmobile/files/0* rm -rf /data/data/com.mbmobile/files/1* rm -rf /data/data/com.mbmobile/files/2* 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 - From d15ba6a8c4960e0c2d5601825c9a4e2b2ce7c557 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Wed, 28 Jan 2026 17:17:38 +0700 Subject: [PATCH 24/50] feat: customize.sh: check vtap status again by call from vtapfail function & misc changes added -q flag to not print all vtap status anymore also check crash for old VTAP activity no longer rely on root manager `packageName` to open vtapfix since it can be be randomized added restore network after vtap fails multiple times for `vtapstillfail`: notice that the fix is needed new vtap phase and start app phase Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 53 +++++++++++++++++------------ 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 11346d6..b303500 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -25,7 +25,7 @@ maliciousmagisk() { 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 !" - [[ $SYSLANGVI ]] && am start -a android.intent.action.VIEW -d $INSTALLVI || am start -a android.intent.action.VIEW -d $INSTALLEN + [[ $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 } @@ -48,33 +48,45 @@ bindhosts() { tsnghma() { echo "Dr-TSNG HideMyAppList detected!" echo "Hiding app..." - pm hide com.tsng.hidemyapplist + pm hide com.tsng.hidemyapplist >/dev/null 2>&1 } vtapfail() { echo "VTAP is not provisioned!" echo "App first normal launch required!" - iptables -t nat -F OUTPUT + 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 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 "If you have low-end device (eg : Vsmart Joy 2+)" + echo "Please follow vtapfix 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/vtapfix + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_vi/wiki/vtapfix >/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/vtapfix + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/vtapfix >/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 + +} + [[ -d /data/data/com.tsng.hidemyapplist ]] && tsnghma [[ -d /data/data/io.github.Nirtal0.magisk ]] && maliciousmagisk @@ -85,10 +97,10 @@ fi # 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!" - [[ $SYSLANGVI ]] && am start -a android.intent.action.VIEW -d $INSTALLVI || am start -a android.intent.action.VIEW -d $INSTALLEN + [[ $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 @@ -146,13 +158,12 @@ else fi # Check VTAP status to ensure that it must be provisioned +echo "------VTAP phase------" echo "Checking VTAP status..." -echo "VTAP status : " && cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || vtapfail || exit 169 -echo "Checking VTAP status again..." -cat '/data/data/com.mbmobile/databases/vtap' | grep "true" && echo "VTAP is provisioned!" || vtapstillfail || exit 169 - -echo Force closing MBBank app... +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 @@ -173,16 +184,19 @@ sleep 2 rm -rf /data/data/com.mbmobile/files/KNOV3PN* rm -rf /data/data/com.mbmobile/files/zxpolicyme* rm -rf /data/data/com.mbmobile/files/policyme* +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/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 +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 VGFullScreenDialog && vtapstillfail +logcat -d | grep -q VGFullScreenDialog && vtapstillfail +logcat -d | grep -q com.vtap.MaintenanceActivity && vtapstillfail echo "Restoring network traffic" # Reference : https://gist.github.com/jstrosch/3190568 (Line 7) @@ -190,13 +204,8 @@ 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 From 4f7aefcf165a7a62387d182bcbc3981bdd55b6e5 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Sun, 1 Feb 2026 11:37:13 +0700 Subject: [PATCH 25/50] feat: customize.sh: check for already bypassed app app comes with zimperium bypass patches does not need to install this module since it is useless anyway for prebulit users, it's called FullTest variant. Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index b303500..ee578f8 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -6,9 +6,25 @@ 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" +# Get base.apk path +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 "If you want to install this module, do not apply Zimperium bypass patch or use Minimal variant." + rm -rf /data/local/tmp/path.txt + exit 1 +} + nonfosskitsune() { echo "Proprietary Kitsune found! Your data might be at risk!" echo "Consider install older FOSS Kitsune Mask to protect your data!" @@ -126,7 +142,11 @@ fi # The module does NOT work with original unpatched app. It's pointless to remove the check. You think it works with original app? Nah. for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done -# Grant permission for MB/MBCP app +# Check for bypassed app +unzip -l $APKPATH | grep remove_new_zimperium_check* && alreadybypassed + +# Grant permission for MB/MBCP app + if [ $ANDROIDSDK -gt 33 ]; then echo "Granting MB/MBCP app permission..." pm grant com.mbmobile android.permission.CAMERA From 0692b9f69b08a71d0783b5023e0f83021136c32e Mon Sep 17 00:00:00 2001 From: Cuynu Date: Thu, 5 Feb 2026 20:48:49 +0700 Subject: [PATCH 26/50] fix: customize.sh: wrong `ANDROIDSDK` version must be 32 instead, the flag is greeter than, not equal to 33, so it need to be 32. Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index ee578f8..5e05c46 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -147,7 +147,7 @@ unzip -l $APKPATH | grep 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 From f18036134d157cd7d9823eda54d2b7485a632181 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Thu, 5 Feb 2026 21:43:00 +0700 Subject: [PATCH 27/50] feat: customize.sh: set selinux to enforcing helpful for some roms with permissive by default, fixes 40202 vtap fail for v6.4.80+ with new vtap check Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 5e05c46..0340578 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -109,6 +109,8 @@ checkvtapagain() { [[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune +# v6.4.80+ requires enforcing SELinux in order to prevent 40202 VTAP fail (Runtime Tampering) error +setenforce enforcing # Check if MB is installed or nope # Remove this one can cause the module does not work properly! From 20cc01436a2a07ca0fae663dbfa04a1a2ed65c29 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 1 May 2026 17:28:17 +0700 Subject: [PATCH 28/50] feat: zdefend-fix(customize.sh): handle selinux permissive & move from vtapfix to afterinstall reinstalling app itself when selinux is permissive, so the app can work without vtap 40202 error check selinux status before get apk path, so it wont show duplicate apk path vtapfix is deprecated, it is now afterinstall page. Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 38 ++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 0340578..aacfdef 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -6,13 +6,21 @@ 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" -# Get base.apk path -dumpsys package com.mbmobile | grep path: > /data/local/tmp/path.txt -sed -i 's| path: ||g' /data/local/tmp/path.txt +SELINUXSTATUS="$(getenforce)" -APKPATH="$(cat /data/local/tmp/path.txt)" +echo "SELinux status : $SELINUXSTATUS" -echo "APK Path: $APKPATH" +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" +} + +# 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 # Clear old iptables iptables -t nat -F @@ -83,16 +91,16 @@ vtapfail() { vtapstillfail() { iptables -t nat -F echo "VTAP provision failed or triggering! Cannot continue!" - echo "Please follow vtapfix for fix steps." + 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/vtapfix >/dev/null 2>&1 + 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/vtapfix >/dev/null 2>&1 + am start -a android.intent.action.VIEW -d https://git.disroot.org/mbcp/info_en/wiki/afterinstall >/dev/null 2>&1 exit 169 fi } @@ -103,6 +111,17 @@ checkvtapagain() { } +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 + echo "Getting new APK path..." + getapkpath +} + [[ -d /data/data/com.tsng.hidemyapplist ]] && tsnghma [[ -d /data/data/io.github.Nirtal0.magisk ]] && maliciousmagisk @@ -110,7 +129,8 @@ checkvtapagain() { [[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune # v6.4.80+ requires enforcing SELinux in order to prevent 40202 VTAP fail (Runtime Tampering) error -setenforce enforcing +[ $(getenforce | grep Permissive) ] && selinuxhandle + # Check if MB is installed or nope # Remove this one can cause the module does not work properly! From 13e88242b93cd1189b6625cd44cd80116e511d8c Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 1 May 2026 17:51:37 +0700 Subject: [PATCH 29/50] feat: bump v4.2-mb-bindhosts Signed-off-by: Cuynu --- README.md | 119 ----------------------------- module_new/zdefend-fix/module.prop | 4 +- 2 files changed, 2 insertions(+), 121 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index 67ad54c..0000000 --- a/README.md +++ /dev/null @@ -1,119 +0,0 @@ -# MB ZDefend Bypass Module for MB/MBCP - - -- Download from [releases tab](/releases) - -- Author : [Cuynu](/cuynu) and [backslashxx](https://github.com/backslashxx) for sed script - -- Status : Working with MBCP! - -- Required app version : MBCP `v6.4.67` and up for `v3.2-mb+` | MB `v6.4.15` up to `v6.4.58` for `v3.0-mb` or lower - -- Required Biz MBBank v2.0 app version : `v1.0.85` and newer :> - -## 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). - -- For module : Located on [module_new](https://git.disroot.org/cuynu/mbzdefend-fix/src/branch/main/module_new/zdefend-fix) - -- For patched lib (Deprecated) : There is no source code for that as it belong to MB Bank development team and Zimperium. You can make your own patched lib with old method below if you don't want to use my pre-patched lib :) - -## Usage (Module) -- Ensure that old root detection (vtap) is bypassed by hiding MB Bank or Biz MBBank v2.0 App from root with any old ways, like Denylist as the module does not handle this old root detection method (For Magisk : [Here](https://www.youtube.com/watch?v=OfFoRltRlME) | For Magisk Delta/Kitsune : [Here](https://www.youtube.com/watch?v=tToyWfJQ-yw) -- Download mbzdefend-fix module from [releases](https://git.disroot.org/cuynu/mbzdefend-fix/releases) or clone the repo, then `./createmodule.sh` -- Flash with your root app (Magisk, KernelSU, KernelSU Next, APatch, etc) -- It should automatically patches `libZDefend.so` and `libapp.so` then open MB/MBCP or Biz MB Bank v2.0 app once it finished. -- NOTE : Every time you need to use MB Bank, you MUST run "Action" on root app -> Modules -> MB ZDefend Bypass instead of open app directly from app drawer (Applies for v6.4.56+ due to server-side MB changes) -- NOTE : App will open with 1005/1007 error or stuck on MB logo, DON'T PANIC and wait for error popup appears, then press "Try again" until app enter login screen !!! - - -# Tested app version (Outdated) -- Checked mark is the version that already tested and working~ - -- [x] [MB Bank v6.4.58](https://t.me/embeeapks/48) (MBShield) (need workaround) - -- [x] [MB Bank v6.4.57](https://t.me/embeeapks/47) (MBShield) (need workaround) - -- [x] [MB Bank v6.4.56](https://t.me/embeeapks/46) (MBShield) (need workaround) - -- [x] [MB Bank v6.4.55](https://t.me/embeeapks/45) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.54](https://t.me/embeeapks/43) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.53](https://t.me/embeeapks/42) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.52](https://t.me/embeeapks/41) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.51](https://t.me/embeeapks/36) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.50](https://t.me/embeeapks/35) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.49](https://t.me/embeeapks/32) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.48](https://t.me/embeeapks/30) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.47](https://t.me/embeeapks/29) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.46](https://t.me/embeeapks/28) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.45](https://t.me/embeeapks/25) (no crashes) - -- [x] [MB Bank v6.4.44](https://t.me/embeeapks/24) - No Zimperium found. (MBShield) - -- [x] [MB Bank v6.4.43](https://t.me/embeeapks/23) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.42](https://t.me/embeeapks/22) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.41](https://t.me/embeeapks/21) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.40](https://t.me/embeeapks/20) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.39](https://t.me/embeeapks/19) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.38](https://t.me/embeeapks/18) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.37](https://t.me/embeeapks/17) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.36](https://t.me/embeeapks/16) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.35](https://t.me/embeeapks/14) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.34](https://t.me/embeeapks/13) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.33](https://t.me/embeeapks/11) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.32](https://t.me/embeeapks/9) (MBShield) (no crashes) - -- [x] [MB Bank v6.4.31](https://t.me/embeeapks/6) (MBShield) - -- [x] [MB Bank v6.4.30](https://t.me/mbmobileold/198) (MBShield) - -- [x] [MB Bank v6.4.29](https://t.me/mbmobileold/197) (MBShield) - -- [x] [MB Bank v6.4.28](https://t.me/mbmobileold/196) (MBShield) - -- [x] [MB Bank v6.4.27](https://t.me/mbmobileold/195) (MBShield) - - - -## How this was done (Pre-patched binary only) (OUTDATED) -- Use HxD Hex Editor (can be run on Linux env with wine) -- Get `libZDefend.so` from MB Bank app, APKs can be get from Google Play or Aurora Store -- For `libvvb2060.so`, create a empty file and name it as `libvvb2060.so` -- Open `libZDefend.so` with HxD Hex Editor, use Replace feature (Ctrl + R) -- In search for field, type `zimperium` -- In replace with field, fill 9 empty blank space characters or any random words that has 9 characters -> Replace all (Be careful, if something went wrong then modified `libZDefend.so` file will not work at all) -- After HxD replaced zimperium with 9 empty black space characters or empty, save it with (Ctrl + S) -- Copy that`libZDefend.so` you just modified to MB Bank lib folder -- Force close MB Bank app if its not completely stopped, then open MB Bank app again, from now its should load new library and the root & hook detection from Zimperium should be bypassed diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index 5ca34e9..ce7959c 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 (bindhosts) -version=v4.0-mb-bindhosts -versionCode=40 +version=v4.2-mb-bindhosts +versionCode=42 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. updateJson= From 89129e9819382d9f8e84215352dee9528e4df036 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 1 May 2026 20:34:31 +0700 Subject: [PATCH 30/50] feat: zdefend-fix(customize.sh): handle reinstall app after MBCP app check move selinux check to after app check also handle app installation failure too some other changes idk Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index aacfdef..af8512f 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -17,11 +17,6 @@ getapkpath() { echo "APK Path: $APKPATH" } -# 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 - # Clear old iptables iptables -t nat -F @@ -117,7 +112,7 @@ selinuxhandle() { echo "Forcing SELinux state to Enforcing..." setenforce enforcing echo "Reinstalling app..." - pm install $APKPATH + [ $(pm install $APKPATH | grep Success) ] && echo "Successful reinstall app!" || echo "App not getting installed, please check if CorePatch / Disable App Verification is working or not!" || exit 1 echo "Getting new APK path..." getapkpath } @@ -128,10 +123,6 @@ selinuxhandle() { [[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune -# v6.4.80+ requires enforcing SELinux in order to prevent 40202 VTAP fail (Runtime Tampering) error -[ $(getenforce | grep Permissive) ] && selinuxhandle - - # 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 @@ -142,6 +133,18 @@ else 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. +for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done + +# 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 + # Check if Termux and it's bootstrap is initialized or not # Remove this code broke Termux support if [ -d /data/data/com.termux ]; then @@ -160,10 +163,6 @@ else echo "Termux not installed! skipping" 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. -for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done - # Check for bypassed app unzip -l $APKPATH | grep remove_new_zimperium_check* && alreadybypassed From 90d98d5cf1e286b3b6499d78d7bbb2861e08a252 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 1 May 2026 21:07:43 +0700 Subject: [PATCH 31/50] fix: zdefend-fix(customize.sh): app installation failure does not exit Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index af8512f..798e29c 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -112,8 +112,7 @@ selinuxhandle() { echo "Forcing SELinux state to Enforcing..." setenforce enforcing echo "Reinstalling app..." - [ $(pm install $APKPATH | grep Success) ] && echo "Successful reinstall app!" || echo "App not getting installed, please check if CorePatch / Disable App Verification is working or not!" || exit 1 - echo "Getting new APK path..." + [ $(pm install $APKPATH | grep Success) ] && echo "Successful reinstall app!" || echo "App not getting installed, please check if CorePatch / Disable App Verification is working or not!" && exit 1 getapkpath } From 946a687c588927c787d9a3d187c8098c8067e1fb Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 1 May 2026 21:52:01 +0700 Subject: [PATCH 32/50] feat: zdefend-fix(customize.sh): handle app reinstallation fail in selinux permissive case also cleanup after module installation Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 798e29c..1857d5a 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -10,6 +10,10 @@ 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 @@ -106,14 +110,20 @@ checkvtapagain() { } +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!" || echo "App not getting installed, please check if CorePatch / Disable App Verification is working or not!" && exit 1 - getapkpath + [ $(pm install $APKPATH | grep Success) ] && echo "Successful reinstall app!" || installfail + rm -rf /data/local/tmp/lastappfail } [[ -d /data/data/com.tsng.hidemyapplist ]] && tsnghma @@ -136,13 +146,16 @@ fi # The module does NOT work with original unpatched app. It's pointless to remove the check. You think it works with original app? Nah. for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done +# 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 +[ $(getenforce | grep Permissive) ] && selinuxhandle && getapkpath # Check if Termux and it's bootstrap is initialized or not # Remove this code broke Termux support @@ -249,5 +262,6 @@ else fi sleep 3 - +# cleanup +rm -f /data/local/tmp/path.txt From b57a5427c5138ae8a2280f469c20ce0029add194 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 1 May 2026 21:56:29 +0700 Subject: [PATCH 33/50] fix: zdefend-fix(customize.sh): missing flags Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 1857d5a..ccf1c5f 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -263,5 +263,5 @@ fi sleep 3 # cleanup -rm -f /data/local/tmp/path.txt +rm -rf /data/local/tmp/path.txt From e1d26126902eca4b67ee7dce274c5dea81c72fb2 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 1 May 2026 22:06:56 +0700 Subject: [PATCH 34/50] feat: bump v4.3-mb-bindhosts Signed-off-by: Cuynu --- module_new/zdefend-fix/module.prop | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index ce7959c..695eec7 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 (bindhosts) -version=v4.2-mb-bindhosts -versionCode=42 +version=v4.3-mb-bindhosts +versionCode=43 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. updateJson= From c0afcd6745eb6adabf74de972ec8947c2ad2f9bd Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 5 May 2026 16:33:48 +0700 Subject: [PATCH 35/50] feat: zdefend-fix(customize.sh): check for older LSPosed and open link to install Vector other LSPosed can be used aswell, as long as it newer than 7199+ older LSPosed causes [Device is not compatible] dialog in app with VTAP 40202 error [Runtime Tampering] Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index ccf1c5f..697988d 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -74,6 +74,20 @@ tsnghma() { 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 +} + vtapfail() { echo "VTAP is not provisioned!" echo "App first normal launch required!" @@ -132,6 +146,8 @@ selinuxhandle() { [[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune +[[ $(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 From a1958e7deb9f642e4a60a9ef9d277029687482c6 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 9 Jun 2026 12:30:38 +0700 Subject: [PATCH 36/50] feat: zdefend-fix(customize.sh): remove vtap firmware from app data folder & misc changes current firmware in app data folder only get removed if `fix_vtap_cert` patch is found in app helpful for restoring old detection behavior added grep check for magisk.db to check if `com.mbmobile` is in Denylist or not, some devices does not put the app to denylist even though the command is executed remove restriction for bypassed app Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 697988d..a3afd7e 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -27,9 +27,7 @@ iptables -t nat -F alreadybypassed() { echo "Current MBCP app comes with Zimperium bypass patches" echo "There is no need to install this module." - echo "If you want to install this module, do not apply Zimperium bypass patch or use Minimal variant." - rm -rf /data/local/tmp/path.txt - exit 1 + echo "Continue anyway then." } nonfosskitsune() { @@ -46,7 +44,7 @@ maliciousmagisk() { } 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 !" [[ $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 @@ -88,6 +86,12 @@ oldlsposed() { 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!" @@ -104,7 +108,7 @@ vtapfail() { vtapstillfail() { iptables -t nat -F echo "VTAP provision failed or triggering! Cannot continue!" - echo "Please follow afterinstall for fix steps." + 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 @@ -191,6 +195,10 @@ else echo "Termux not installed! skipping" fi +# 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 fix_vtap_cert* && removeoldfw + # Check for bypassed app unzip -l $APKPATH | grep remove_new_zimperium_check* && alreadybypassed @@ -222,17 +230,18 @@ 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 "------VTAP phase------" -echo "Checking VTAP status..." +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 "----------------------" +echo "------------------------------" # Clear device logcat to ensure that no previous VTAP activity exists logcat -c @@ -280,4 +289,4 @@ fi # cleanup rm -rf /data/local/tmp/path.txt - +rm -rf /data/local/tmp/lastappfail From 917b5949455e6954ab07ca40797136b58ea4736f Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 16 Jun 2026 19:23:10 +0700 Subject: [PATCH 37/50] fix: zdefend-fix(customize.sh): missing folder condition checks -q flag for some grep operations Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index a3afd7e..1e5af17 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -150,7 +150,7 @@ selinuxhandle() { [[ -d /data/data/io.github.x0eg0.magisk ]] && nonfosskitsune -[[ $(cat /data/adb/modules/zygisk_lsposed/module.prop | grep versionCode=7024) ]] && oldlsposed +[ -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! @@ -197,10 +197,10 @@ fi # 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 fix_vtap_cert* && removeoldfw +unzip -l $APKPATH | grep -q fix_vtap_cert* && removeoldfw # Check for bypassed app -unzip -l $APKPATH | grep remove_new_zimperium_check* && alreadybypassed +unzip -l $APKPATH | grep -q remove_new_zimperium_check* && alreadybypassed # Grant permission for MB/MBCP app From 50106f4753738160da1912bcc2dbcab3192297a1 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Mon, 29 Jun 2026 02:10:19 +0700 Subject: [PATCH 38/50] feat: zdefend-fix(customize.sh): use new method to detect original app libvvb2060.so` is blacklisted by MB since v6.5.7+ if it's getting deleted, the app will refuse to login with checksum error dialog (GW934) i switch to check for mbcp* instead, not found = original app Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 1e5af17..4e5a58e 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -164,7 +164,7 @@ 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. -for library in $(find /data/app -name libvvb2060.so | grep com.mbmobile) ; do notmbcp ; done +unzip -l "$APKPATH" | grep -q mbcp* || notmbcp # last app reinstallation fail with selinux permissive [ -f /data/local/tmp/lastappfail ] && selinuxhandle From 6b11163666ea1d8ef03519e1ec957e900f65c18c Mon Sep 17 00:00:00 2001 From: Cuynu Date: Mon, 6 Jul 2026 17:46:02 +0700 Subject: [PATCH 39/50] feat: zdefend-fix(customize.sh): check for v6.5.7+ and use notify to use new method while keep old method in codebase for who still use older app, with condition to check app version. Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 4e5a58e..81cd22b 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -262,6 +262,8 @@ sleep 2 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 !!!" @@ -286,6 +288,18 @@ 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 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 From 7a5cad0ccea1db5b04ef1c5009b06373c6716554 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 10 Jul 2026 01:50:04 +0700 Subject: [PATCH 40/50] feat: zdefend-fix(customize.sh): check for built-in magisk systemless hosts and disable it it conflict with this module and need to be disabled Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 81cd22b..87ff27f 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -144,6 +144,14 @@ selinuxhandle() { 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/data/com.tsng.hidemyapplist ]] && tsnghma [[ -d /data/data/io.github.Nirtal0.magisk ]] && maliciousmagisk From 13abad4768f33fa71e410ee13c0c96b5f84e7a7f Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 10 Jul 2026 03:39:26 +0700 Subject: [PATCH 41/50] fix: zdefend-fix(customize.sh): module failing to install due to incorrect app detection method APKPATH is not present yet but still using it to check, cause false positive using find instead Signed-off-by: Cuynu --- module_new/zdefend-fix/customize.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/customize.sh b/module_new/zdefend-fix/customize.sh index 87ff27f..5a5b685 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -172,7 +172,7 @@ 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. -unzip -l "$APKPATH" | grep -q mbcp* || notmbcp +find /data/app -name libtoolChecker.so | grep -q com.mbmobile && notmbcp # last app reinstallation fail with selinux permissive [ -f /data/local/tmp/lastappfail ] && selinuxhandle From 83fe7efd02d584a92ec76ebb60e9409a76d805ce Mon Sep 17 00:00:00 2001 From: Cuynu Date: Fri, 10 Jul 2026 03:58:29 +0700 Subject: [PATCH 42/50] feat: zdefend-fix(action.sh): new implementation for v6.5.7+ Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 77 +++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 20 deletions(-) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index 2032fcc..c767c6d 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -19,7 +19,7 @@ vtapfail() { am start -n com.mbmobile/io.flutter.plugins.MainActivity logcat -c sleep 20 - logcat -d | grep VGFullScreenDialog && vtapstillfail + logcat -d | grep VGFullScreenDialog && vtapstillfail am force-stop com.mbmobile } @@ -28,22 +28,22 @@ vtapstillfail() { 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 + 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/vtapfix + 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 "true" && echo "VTAP is provisioned!" || vtapfail || exit 169 +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 "true" && echo "VTAP is provisioned!" || vtapstillfail || exit 169 +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 @@ -66,22 +66,59 @@ logcat -c rm -rf /data/data/com.mbmobile/files/KNOV3PN* rm -rf /data/data/com.mbmobile/files/zxpolicyme* rm -rf /data/data/com.mbmobile/files/policyme* -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 +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 +} + + +zimperiumpresent() { + echo "Zimperium still present! Cannot continue :(" + [ -f /data/adb/ksud ] && cat /data/adb/ksud | grep -q ksud::metamodule && checkmetamodule + [ -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 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 From f28f6c4107a334d63de78c92616fd2e786e18804 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Sun, 12 Jul 2026 22:22:19 +0700 Subject: [PATCH 43/50] fix: zdefend-fix(module.prop): typo & correct vtap meaning Signed-off-by: Cuynu --- module_new/zdefend-fix/module.prop | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index 695eec7..2febd4e 100644 --- a/module_new/zdefend-fix/module.prop +++ b/module_new/zdefend-fix/module.prop @@ -3,5 +3,5 @@ name=MB ZDefend Bypass (bindhosts) version=v4.3-mb-bindhosts versionCode=43 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= From ab238866650059fc736166cdbb1302185c2b8506 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 14 Jul 2026 02:19:43 +0700 Subject: [PATCH 44/50] feat: zdefend-fix(action.sh): check for network before zimperium test also detect for /data/adb/magisk before deleting /data/magisk and magisk backup Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index c767c6d..fbd947c 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -47,9 +47,9 @@ cat '/data/data/com.mbmobile/databases/vtap' | grep -q "true" && echo "VTAP is p # 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 -find /data -name 'magisk_backup*' -delete +[[ -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 logcat -c @@ -111,6 +111,8 @@ zimperiumpresent() { } strongerzimperium() { + echo "Testing network..." + curl -s 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..." From 4b015c136a5fa10b7f50db14fc3eb1fba127bdb4 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 14 Jul 2026 02:27:11 +0700 Subject: [PATCH 45/50] fix: zdefend-fix(action.sh): missing timeout check & wrong exit condition Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index fbd947c..4f7954f 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -112,7 +112,7 @@ zimperiumpresent() { strongerzimperium() { echo "Testing network..." - curl -s google.com | grep -q html* || echo "No network available, Cannot continue:(" && exit 1 + 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..." From bc24902f8ff66727d378eccfa7192c3bf751b245 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 14 Jul 2026 02:39:10 +0700 Subject: [PATCH 46/50] feat: zdefend-fix(action.sh): check for mountify & handle disabled metamodule Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index 4f7954f..81d2f75 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -104,6 +104,9 @@ checkmetamodule() { 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 [ -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!" From f8ebb721d4921eb87dd1a33a3d5d4f05d60a99ef Mon Sep 17 00:00:00 2001 From: Cuynu Date: Tue, 14 Jul 2026 03:29:36 +0700 Subject: [PATCH 47/50] feat: zdefend-fix(action.sh): delete all files with size larger than 2000kb only zimperium has such size should not affect any other components like vkey vtap or ekyc Signed-off-by: Cuynu --- module_new/zdefend-fix/action.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/module_new/zdefend-fix/action.sh b/module_new/zdefend-fix/action.sh index 81d2f75..402fd8a 100644 --- a/module_new/zdefend-fix/action.sh +++ b/module_new/zdefend-fix/action.sh @@ -64,8 +64,9 @@ logcat -c 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 oldzimperium() { From 806bf439c759baff30120e0eca06a308dc3ed561 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Wed, 22 Jul 2026 09:42:58 +0700 Subject: [PATCH 48/50] feat: zdefend-fix(custom.txt): new zimperium eu host Signed-off-by: Cuynu --- module_new/zdefend-fix/custom.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/module_new/zdefend-fix/custom.txt b/module_new/zdefend-fix/custom.txt index dbd1089..446cc4c 100644 --- a/module_new/zdefend-fix/custom.txt +++ b/module_new/zdefend-fix/custom.txt @@ -10,3 +10,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 From 59f22590f1fe5430c08de6aab7dda7a5a068762a Mon Sep 17 00:00:00 2001 From: Cuynu Date: Wed, 22 Jul 2026 09:59:47 +0700 Subject: [PATCH 49/50] feat: bump v4.4-mb-bindhosts Signed-off-by: Cuynu --- module_new/zdefend-fix/module.prop | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/module_new/zdefend-fix/module.prop b/module_new/zdefend-fix/module.prop index 2febd4e..b930166 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 (bindhosts) -version=v4.3-mb-bindhosts -versionCode=43 +version=v4.4-mb-bindhosts +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 V-Key (VTAP) screen, you have to fix it if you are using Magisk (or original KernelSU). updateJson= From 41470f29194956c356ff2dcd489ffe4d6dfcd117 Mon Sep 17 00:00:00 2001 From: Cuynu Date: Sun, 26 Jul 2026 17:17:56 +0700 Subject: [PATCH 50/50] feat: zdefend-fix(customize.sh): handle zimperium instead of replacing `custom.txt` prevent overriding `custom.txt` test fix zimperium still present tested on vsmart joy 2+ with android 12 Signed-off-by: Cuynu --- module_new/zdefend-fix/custom.txt | 13 ------------- module_new/zdefend-fix/customize.sh | 4 ++-- 2 files changed, 2 insertions(+), 15 deletions(-) delete mode 100644 module_new/zdefend-fix/custom.txt diff --git a/module_new/zdefend-fix/custom.txt b/module_new/zdefend-fix/custom.txt deleted file mode 100644 index 446cc4c..0000000 --- a/module_new/zdefend-fix/custom.txt +++ /dev/null @@ -1,13 +0,0 @@ -# custom rules -# WARNING! custom rules are loaded on both run and reset! -# -# add custom redirects here -# ip hostname -# -# example: -# 1.1.1.1 one.one.one.one -# 93.184.215.14 example.com -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/customize.sh b/module_new/zdefend-fix/customize.sh index 5a5b685..f304968 100644 --- a/module_new/zdefend-fix/customize.sh +++ b/module_new/zdefend-fix/customize.sh @@ -59,8 +59,8 @@ nobindhosts() { } bindhosts() { - echo "bindhosts module found ! Copying custom.txt" - unzip -o "$ZIPFILE" 'custom.txt' -d '/data/adb/bindhosts/' + echo "bindhosts module found ! Applying blacklist rules" + [ $(cat /data/adb/bindhosts/blacklist.txt | grep zimperium*) ] || echo "*.zimperium.com" >> /data/adb/bindhosts/blacklist.txt } [ -d /data/adb/bindhosts ] && bindhosts || nobindhosts