Compare commits

..
50 changed files with 589 additions and 1255 deletions

View file

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2026 Cuynu.
Copyright (c) 2025 MBCPApp Author.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

View file

@ -1,106 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_margin="@dimen/fab_margin"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:gravity="center"
android:orientation="vertical"
android:id="@id/llBottom"
android:paddingTop="2.0dip"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent">
<Button
android:textColor="#ffff0000"
android:tag="0"
android:visibility="visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="BẠN ĐANG GẶP LỖI NGHIÊM TRỌNG TRONG APP !!!" />
<Button
android:textColor="#ffff0000"
android:tag="0"
android:visibility="visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="APP MBCP sẽ KHÔNG THỂ HOẠT ĐỘNG CHO ĐẾN KHI FIX" />
<Button
android:textColor="#ffff0000"
android:tag="0"
android:visibility="visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="VUI LÒNG KIỂM TRA LẠI CÁC BƯỚC CÀI ĐẶT APP" />
<Button
android:textColor="#ff6698ff"
android:tag="0"
android:visibility="visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TRUY CẬP WEB SAU ĐỂ THỬ FIX : tinyurl.com/vtapfixvi" />
<Button
android:textColor="#ffff0000"
android:tag="0"
android:visibility="visible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="TRONG TRƯỜNG HỢP ĐÃ LÀM ĐÚNG TẤT CẢ, CHỤP MÀN HÌNH NÀY VÀ BÁO LỖI QUA Telegram @cuynuchat hoặc YouTube @cuynu !!!" />
<Button
android:tag="0"
android:visibility="invisible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<Button
android:tag="0"
android:visibility="invisible"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@id/btnSecond"
android:tag="0"
android:visibility="gone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@id/btnMain"
android:tag="1"
android:visibility="gone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
<ImageView
android:id="@id/imgAlert"
android:background="@color/cardview_shadow_end_color"
android:visibility="gone"
android:layout_width="100.0dip"
android:layout_height="100.0dip"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.viewpager2.widget.ViewPager2
android:id="@id/view_pager"
android:layout_width="0.0dip"
android:layout_height="0.0dip"
app:layout_constraintBottom_toTopOf="@id/tab_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/imgAlert"
app:layout_constraintVertical_bias="0.0" />
<com.google.android.material.tabs.TabLayout
android:id="@id/tab_layout"
android:layout_width="fill_parent"
android:layout_height="2.0dip"
android:layout_marginBottom="16.0dip"
app:layout_constraintBottom_toTopOf="@id/llBottom"
app:layout_constraintTop_toTopOf="@id/llBottom"
app:tabIndicatorColor="#ffffffff" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View file

@ -1,83 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="31"
height="16"
viewBox="0 0 31 16"
fill="none"
version="1.1"
id="svg1"
sodipodi:docname="ic_logo_mb_text_enforced.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="13.953125"
inkscape:cx="3.1175812"
inkscape:cy="17.092945"
inkscape:window-width="1716"
inkscape:window-height="976"
inkscape:window-x="6"
inkscape:window-y="52"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="M 12.016413,0.17250813 H 9.3384178 c -0.239992,0.510277 -1.908609,4.07433997 -2.672929,6.10775797 l -0.05232,0.139289 h -0.09028 l -0.05233,-0.139289 C 5.7061985,4.2468481 4.0376143,0.68278513 3.7976694,0.17250813 H 1.1196127 C 0.54086511,4.4816671 0.25398051,11.146342 0.21500551,12.100738 H 2.8813577 c 0.024919,-0.79883 0.1848645,-5.8268249 0.2955162,-6.9567549 l 0.027763,-0.284978 h 0.065583 l 0.1064666,0.251385 c 0.8894836,2.099042 2.0352852,4.9825459 2.224465,5.4597819 h 1.9337473 c 0.189179,-0.477236 1.334957,-3.3607399 2.22448,-5.4597819 l 0.1064626,-0.251385 h 0.06554 l 0.02782,0.284978 c 0.1108296,1.12993 0.2707276,6.1579249 0.2956386,6.9567549 h 2.666195 C 12.882019,11.146342 12.595194,4.4818571 12.016409,0.17250813 Z m 6.638114,2.16180397 c -0.250108,0 -0.906615,-0.0097 -1.296687,0.06452 v 2.339843 l 0.09889,0.0099 c 0.0052,5.08e-4 0.541225,0.04685 1.158946,0.04685 1.001893,0 1.582974,-0.07851 1.935335,-0.399096 0.354582,-0.322765 0.445336,-0.85416 0.225428,-1.310556 -0.347148,-0.7185 -1.430594,-0.751493 -2.1219,-0.751493 z m -1.29339,7.407009 c 0.579703,0.0373 1.205932,0.06345 1.835305,0.04048 0.488337,-0.01774 1.135263,-0.05701 1.594165,-0.54289 0.410614,-0.433946 0.484658,-1.084791 0.178596,-1.620675 -0.284219,-0.497713 -0.851046,-0.741326 -2.225839,-0.724345 -0.694372,0 -1.364751,0.07634 -1.388897,0.07979 z m 1.153504,2.4602479 c -1.44853,0 -2.805311,-0.03404 -3.863616,-0.09408 V 0.17927313 c 0.368226,-0.03267 1.508471,-0.05853 3.121491,-0.100132 1.011167,-0.02605 1.977799,0.015 2.734641,0.138786 1.713432,0.280102 2.337361,1.12680597 2.606556,1.59216897 0.258617,0.448662 0.431002,0.947664 0.389765,1.59603 -0.04829,0.760605 -0.286747,1.384681 -1.037992,1.99859 l -0.132452,0.10832 0.150769,0.07855 c 0.520531,0.271316 0.853422,0.702397 1.080842,1.12492 0.273257,0.510183 0.41184,1.091539 0.41184,1.727753 0,1.2863 -0.446332,2.2589669 -1.353255,2.9105699 -0.804057,0.578065 -1.925829,0.846742 -4.108589,0.84674 z"
fill="#ffffff"
id="path1"
style="stroke-width:0.762298" />
<g
style="fill:none"
id="g2"
transform="matrix(0.41273844,0,0,0.42784456,2.6367835,11.966405)">
<path
d="M 1.41777,0 H 0.93428 v 9.31654 h 0.48349 z"
fill="#6d83a7"
id="path1-3" />
<path
d="m 5.30474,4.76061 h 1.32031 c 0.52068,0 0.85541,-0.05579 1.00418,-0.18596 C 7.778,4.46307 7.83378,4.16554 7.83378,3.71924 7.83378,3.19856 7.77799,2.88243 7.64782,2.77085 7.53625,2.64068 7.22012,2.5849 6.73663,2.5849 H 5.30474 Z M 4.15179,7.69877 V 1.5993 h 2.45467 0.29753 c 0.81821,0 1.37609,0.14878 1.67363,0.42772 0.27893,0.27894 0.42771,0.83681 0.42771,1.65503 0,0.81822 -0.13017,1.3575 -0.40911,1.61784 C 8.31728,5.56024 7.77799,5.709 6.94118,5.709 H 6.68084 5.30474 V 7.68017 H 4.15179 Z"
fill="#6d83a7"
id="path2" />
<path
d="m 11.3666,4.66763 h 1.655 c 0.3906,0 0.6509,-0.07438 0.7811,-0.20455 0.1301,-0.14877 0.1859,-0.4277 0.1859,-0.85541 0,-0.42771 -0.0558,-0.70664 -0.1673,-0.83682 C 13.7097,2.64068 13.468,2.5849 13.096,2.5849 H 11.348 V 4.66763 Z M 10.1951,7.69877 V 1.5993 h 3.0125 c 0.7438,0 1.2645,0.13018 1.5435,0.39052 0.2789,0.26035 0.4277,0.72524 0.4277,1.41329 0,0.61366 -0.0744,1.04137 -0.2046,1.26452 -0.1488,0.22315 -0.4277,0.39051 -0.874,0.4649 v 0.03719 c 0.6695,0.03719 1.0042,0.42771 1.0042,1.19014 v 1.33891 h -1.153 V 6.58301 c 0,-0.63226 -0.3161,-0.94839 -0.9298,-0.94839 H 11.348 v 2.04555 h -1.1529 z"
fill="#6d83a7"
id="path3" />
<path
d="m 17.5409,1.5993 h -1.153 v 6.09947 h 1.153 z"
fill="#6d83a7"
id="path4" />
<path
d="m 21.4646,2.54761 c -0.781,0 -1.2273,0.09297 -1.3575,0.29753 -0.1301,0.20455 -0.2045,0.89261 -0.2045,2.06415 0,0.87401 0.0744,1.39469 0.2231,1.58065 0.1488,0.18596 0.6137,0.26034 1.3575,0.26034 0.7253,0 1.153,-0.09298 1.2832,-0.29753 0.1487,-0.20456 0.2045,-0.81822 0.2045,-1.8224 0,-1.02277 -0.0744,-1.61784 -0.2045,-1.8038 C 22.6548,2.64059 22.2085,2.54761 21.4646,2.54761 Z m 0.093,-1.00418 c 1.1158,0 1.8224,0.18596 2.1386,0.55787 0.3161,0.37192 0.4834,1.19014 0.4834,2.47326 0,1.39469 -0.1673,2.2687 -0.4834,2.64062 C 23.38,7.58709 22.599,7.75446 21.3717,7.75446 20.2559,7.75446 19.5493,7.5685 19.2145,7.21518 18.8984,6.86185 18.731,6.06223 18.731,4.85349 c 0,-1.45048 0.1674,-2.36167 0.4835,-2.73358 0.3162,-0.39052 1.0972,-0.57648 2.3431,-0.57648 z"
fill="#6d83a7"
id="path5" />
<path
d="m 26.5228,4.66763 h 1.655 c 0.3905,0 0.6509,-0.07438 0.781,-0.20455 0.1302,-0.14877 0.186,-0.4277 0.186,-0.85541 0,-0.42771 -0.0558,-0.70664 -0.1674,-0.83682 C 28.8659,2.64068 28.6241,2.5849 28.2522,2.5849 h -1.748 v 2.08273 z m -1.153,3.03114 V 1.5993 h 2.994 c 0.7438,0 1.2645,0.13018 1.5434,0.39052 0.279,0.26035 0.4277,0.72524 0.4277,1.41329 0,0.61366 -0.0743,1.04137 -0.2045,1.26452 -0.1488,0.22315 -0.4277,0.39051 -0.874,0.4649 v 0.03719 c 0.6694,0.03719 1.0228,0.42771 1.0228,1.19014 V 7.69877 H 29.1076 V 6.58301 c 0,-0.63226 -0.3161,-0.94839 -0.9298,-0.94839 h -1.6736 v 2.04555 h -1.1344 z"
fill="#6d83a7"
id="path6" />
<path
d="m 32.6778,1.5993 h -1.1529 v 6.09947 h 1.1529 z"
fill="#6d83a7"
id="path7" />
<path
d="m 36.7876,2.64068 v 5.05809 h -1.153 V 2.64068 H 33.868 V 1.5993 h 4.742 v 1.04138 z"
fill="#6d83a7"
id="path8" />
<path
d="M 45.2671,1.5993 43.017,5.37428 V 7.69877 H 41.864 V 5.37428 L 39.6697,1.5993 h 1.3389 l 0.9112,1.59926 c 0.0558,0.09298 0.1302,0.26034 0.2603,0.50209 l 0.1302,0.24174 0.1302,0.24175 h 0.0372 L 42.6078,3.94239 42.738,3.70065 C 42.8496,3.4775 42.9426,3.31013 42.9984,3.19856 L 43.9282,1.5993 Z"
fill="#6d83a7"
id="path9" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 6.7 KiB

View file

@ -3,7 +3,7 @@
# imported from https://github.com/dylanaraps/pure-bash-bible
bb_split() {
# Usage: split "string" "delimiter" "count"
# Usage: split "string" "delimiter"
IFS=$'\n' read -d "" -ra arr <<< "${1//$2/$'\n'}"
# printf '%s\n' "${arr[@]}"
printf '%s\n' "${arr[$3]}"
@ -29,7 +29,6 @@ strip_all() {
getvar() {
# Usage: getline "n" "pattern" "file"
i=0
while IFS= read -r line; do
i=$((i+1))
[ "$i" = "$1" ] && printf '%s\n' "${line##$2}" && return
@ -45,15 +44,6 @@ sed_libapp() {
) && info "[sed_libapp] [$target] -> [$replacement]" || warn "[sed_libapp] replacing [$target] failed !"
}
sed_libtian37() {
target=$(bb_split "$1" '|' '1')
replacement=$(bb_split "$1" '|' '2')
(
sed -i "$1" "$DIRPATH"/mbapk/mbapk_unpacked/root/lib/arm64-v8a/libanTian37.so \
"$DIRPATH"/mbapk/mbapk_unpacked/root/lib/armeabi-v7a/libanTian37.so
) && info "[sed_libtian37] [$target] -> [$replacement]" || warn "[sed_libtian37] replacing [$target] failed !"
}
# libdesignersactivists.so are former known as libZDefend.so
# MB moved it to libdesignersactivists.so since v6.4.48+
# this currently is placeholder, and will be implemented later
@ -74,14 +64,6 @@ iszdefend() {
fi
}
isvcm1() {
if [[ -f mbapk/mbapk_unpacked/root/lib/arm64-v8a/libvcm1.so ]]; then
warn "As of v6.4.86+, to extract assets, you need to clear app data and then open the app again!"
else
info "[libvcm1.so] not found! ignoring notice"
fi
}
manifest_remove() {
sed -i "/$1/d" "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml && \
info "[manifest_remove] removing $1" || \
@ -93,12 +75,11 @@ pblock() {
echo "$1" > "$blocker"
}
mb_ver() {
[ -z "$1" ] && return 42
get_mb_ver() {
a="$(grep -m1 'android:versionName' "$DIRPATH"/mbapk/mbapk_unpacked/AndroidManifest.xml | tr ' ' '\n' | grep -m1 'android:versionName')"
a="$(bb_split "$a" '=' '1')"
a="$(strip_all "$a" '"')"
bb_split "$a" '.' "$1"
bb_split "$a" '.' '2'
}
good() {

0
MBCPApp/cpp/.gitkeep Normal file
View file

View file

@ -0,0 +1,49 @@
#include <string>
#include <iostream>
using namespace std;
int main() {
/* This is placeholder strings. It may be used in the feature. I don't know when it need to be used
* maybe in 2026? no idea yet :> */
// MBCP Utilities (accessible from eMBee Helper icon in login screen)
string mbcpMain = "MBCP Utilities";
// MBCP Utilities features
string spoofGw934 = "GW934 login workaround";
string spoofGW934sum = "This feature will bypass the app integrity check and allow logging in with your MB account but may have some side effects. \nAre you sure you want to use this feature?";
string restartMbcpDialog = "Enable and restart";
string restartMbcp = "Restart app";
string enabledToast = "Restart MBCP app to take effects!";
string spoofPlatform = "Spoof platform info to iPhone 6";
string spoofPlatformsum = "This feature will spoof platform info to iPhone 6 in order to allow registering DigitalOTP via eKYC without unlinking. Whether to enable or not ???";
// SemiPriority exclusive
string enablePriority = "Enable Priority theme";
string enablePrioritysum = "This feature will download the AddonPriority theme, and redirect you to the [Chinh Phuc Dinh Cao] theme. \nAfter that, press [Apply] to complete. Are you sure to download?";
string noPriority = "This feature is not available for non-SemiPriority app variant.";
string mbcpRepo = "MBCP Project";
string mbcpRepoSum = "View MBCP project source code on Disroot";
// Forgotten DigitalOTP login PIN
string forgotDotp = "Forgot DigitalOTP PIN ?";
string noDotploginPin = "If you forgotten the DigitalOTP PIN code and unable to login to the app, please take your device and CC/CCCD and go to nearest MB's branch for helpiong with remove linked DigitalOTP devices in order to logging in to app again. \nNo one except MB's branch can help you with that.";
// Donatation
string authorDonate = "Donate me";
string authorDonatesum = "Donation are not required and is only used for supporting me getting around the day. It does not affect anything to project development. \nAre you sure you want to continue with donation? You'll be redirected to transfer money screen.";
// Dump MB log
string dumpMblog = "Dump app logs";
string dumpMblogsum = "Are you sure? app logs will be saved as [client.log.new] and [client.log.json.new] on [app_flutter].";
// URL
string mbcpRepoUrl = "https://git.disroot.org/mbcp/";
string tgUrl = "https://t.me/mbcposs";
string tgChaturl = "https://t.me/mbcposs_chat";
string lotusUrl = "https://lotuschat.vn/w/+2KBDmUY51UcOzxdMbU8fwI";
string lotusChatUrl = "https://lotuschat.vn/w/+PkJ40NlqqJZcUkFTcL3D5C";
string cuynuMbDonate = "https://mbbank.onelink.me/QPF5?af_dp=mbbank://&ad_dp=inhandao&account_no=12131213111111&bank_code=MB&amount=&description=MBCP%20Donate";
}

View file

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

View file

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

View file

@ -77,36 +77,12 @@ for f in patches/*.sh ; do
continue
}
[ -n "$minver" ] && {
chk="${minver//[^.]}"
[ "${#chk}" -ne 2 ] && {
warn "[parser] skipping [$pname] with malformed minver"
continue
}
minmajor="$(bb_split "$minver" '.' '0')"
minminor="$(bb_split "$minver" '.' '1')"
minpatch="$(bb_split "$minver" '.' '2')"
[ "$(( $(mb_ver 0) * 10000 + $(mb_ver 1) * 100 + $(mb_ver 2) ))" -lt \
"$(( minmajor * 10000 + minminor * 100 + minpatch ))" \
] && {
[ "$(get_mb_ver)" -gt "$minver" ] || {
info "[parser] skipping [$pname] as current version is lower than patch version clamp"
continue ; }
} || :
[ -n "$maxver" ] && {
chk="${maxver//[^.]}"
[ "${#chk}" -ne 2 ] && {
warn "[parser] skipping [$pname] with malformed maxver"
continue
}
maxmajor="$(bb_split "$maxver" '.' '0')"
maxminor="$(bb_split "$maxver" '.' '1')"
maxpatch="$(bb_split "$maxver" '.' '2')"
[ "$(( $(mb_ver 0) * 10000 + $(mb_ver 1) * 100 + $(mb_ver 2) ))" -gt \
"$(( maxmajor * 10000 + maxminor * 100 + maxpatch ))" \
] && {
[ "$(get_mb_ver)" -lt "$maxver" ] || {
info "[parser] skipping [$pname] as current version is higher than patch version clamp"
continue ; }
} || :

View file

@ -9,6 +9,3 @@ info "Copying modified resources..."
cp -r -f 'blob_patches/resources/raw' 'mbapk/mbapk_unpacked/resources/package_1/res/'
cp -f 'blob_patches/resources/strings-vi/strings.xml' 'mbapk/mbapk_unpacked/resources/package_1/res/values-vi/'
cp -f 'blob_patches/resources/strings/strings.xml' 'mbapk/mbapk_unpacked/resources/package_1/res/values/'
info "Copying bootleg_ekyc..."
cp -f 'blob_patches/bootleg_ekyc/dotp1_ekyc.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/digitalOtp_img_authenguide01.webp'
cp -f 'blob_patches/bootleg_ekyc/dotp2_ekyc.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/digitalOtp_img_authenguide02.webp'

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bash
# PATCHNAME: Add verified badge
# MAXVER:
# MINVER:
# MINVER:
# shellcheck disable=SC1091
. "$DIRPATH"/common.sh
@ -30,12 +30,3 @@ rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/ba
# Processing shield for private users
cp -f 'blob_patches/verified_badge/tick-mark.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/img_shield_processing.webp'
# MIC Protection shield banners
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/khien_img_hoadon.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/khien_img_muasam.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/khien_img_offline.webp'
# Private users
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/khien_img_hoadon.private.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/khien_img_muasam.private.webp'
rm -rf 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/khien_img_offline.private.webp'

View file

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# PATCHNAME: Autopatch strings
# MAXVER: 6.4.67
# MAXVER: 67
# MINVER:
# shellcheck disable=SC1091
. "$DIRPATH"/common.sh
@ -46,7 +46,7 @@ sed_libapp 's|To provide the best experience, the MBBank APP needs access to som
# QR on "Other"
sed_libapp 's|QR receive|My QR |g'
# Digital OTP related
# Digital OTP related
sed_libapp 's|To use transaction authentication feature with Online OTP, please signin APP MB Bank and implement Online OTP registration in the Installation item|DigitalOTP is not currently registered on your MBCP app. In order to use this feature, please login to MBCP and setup DigitalOTP, then try again. |'
sed_libapp 's|When transacting via Internet banking or registering Online OTP on other device|Used for transactions via eMB or when registering DigitalOTP on other device |'
sed_libapp 's|online OTP|DigitalOTP|g'
@ -101,18 +101,18 @@ sed_libapp 's|You want to send a gift for the occasion?|You want to send a gift
sed_libapp 's|Intruction|How-to |g'
sed_libapp 's|MBBank will send the withdrawal verification code to the APP instead of SMS on the phone.|MB Bank will send the withdrawal verification code to MBCPApp instead of SMS as before. |'
# Latest version check
# Latest version check
sed_libapp 's|The lastest version|TG/Disroot:mbbpatch|'
# Profile section
# Profile section
sed_libapp 's|User profile|View profile|g'
sed_libapp 's|MB Membership Package|MB Membership |'
sed_libapp 's|email information|Email information|g'
# Account related
# Account related
sed_libapp 's|Premium Account Number|Open new lucky account|'
# Cashback 150K badge (unused on v6.4.62+)
# Cashback 150K badge (unused on v6.4.62+)
sed_libapp 's|Cashback 150K| |'
# Forgot password screen
@ -120,7 +120,7 @@ sed_libapp 's|Request for supplying password|Request for new password |'
sed_libapp 's|ID card/ID card|Old/New ID card|g'
sed_libapp 's|Number of document|Number of ID card |g'
# Wrong password dialog
# Wrong password dialog
sed_libapp 's|Your device will be locked if you enter incorrectly more than 5 times. Please try again or select the "Forgot password" feature to be reissued.|Your account will be locked if you enter incorrect password more than 5 times. Please try again or use the "Forgot password" feature to reset. |'
# Others section on MB
@ -138,7 +138,7 @@ sed_libapp 's|Please come back later for more new themes!|Tips: Unofficial theme
sed_libapp 's|Change theme successfully|App theme changed :) |'
sed_libapp 's|Change theme|Store themes|'
# Balance fluctuations notifications (Configuration -> Balance fluctuations notifications)
# Balance fluctuations notifications (Configuration -> Balance fluctuations notifications)
sed_libapp 's|get notifications|Get notifications|g'
sed_libapp 's|Read the announcement|Notify with voice |'
@ -155,7 +155,7 @@ sed_libapp 's|Start journey|Alright ! |'
sed_libapp 's|Go here to install the app|MBCPApp settings are here |'
# EKYC error dialog
# EKYC error dialog
sed_libapp 's|Verification information is invalid, please contact hotline 1900545426 for support|EKYC failed, please go to Telegram group (@mbbpatch_eng) for details and help !!! |'
# XPE002/XPE003 dialog :
@ -190,7 +190,7 @@ sed_libapp 's|Zalo Pay|ZolaPay |'
sed_libapp 's|MB membership|MB Membership|g'
# Explore strings (homeLanding -> More -> Discovery)
sed_libapp 's|New release|Features |g'
sed_libapp 's|New release|Features |g'
sed_libapp 's|Challenge to receive gifts|Others |g'
# Close account hints (homeLanding -> Total balance VND -> See -> Close account)
@ -198,7 +198,7 @@ sed_libapp 's|MB will Autoally transfer the entire remaining balance to the acco
# Expired login session dialog
sed_libapp 's|The login session expired. Please login again|Login session are expired. Please login again|'
# Confirm button on dialog
# Confirm button on dialog
sed_libapp 's|I understand|OKAY |g'
# Exit application dialog
@ -239,7 +239,7 @@ sed_libapp 's|AI Suggestion|MB Suggestion|'
sed_libapp 's|Quick transfer using AI|Quick transfer |'
# Placeholder toolbox
# Placeholder toolbox
sed_libapp 's|Shopping, entertainment|MBCPApp Toolbox |'

View file

@ -1,12 +0,0 @@
#!/usr/bin/env bash
# PATCHNAME: Better custom background screen
# MAXVER:
# MINVER: 6.4.83
# shellcheck disable=SC1091
. "$DIRPATH"/common.sh
info "Copying..."
cp -f 'blob_patches/better_custombgscreen/customize_img_changeImageContent.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/customize_img_changeImageContent.webp'
cp -f 'blob_patches/better_custombgscreen/customize_img_changeImageContent.png' 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/customize_img_changeImageContent_2.webp'
rm -f 'mbapk/mbapk_unpacked/root/assets/flutter_assets/assets/images/dynamic/base/customize_img_changeImageBG.webp'

View file

@ -1,6 +1,6 @@
#!/usr/bin/env bash
# PATCHNAME: Bypass accessibility & malicious apps check
# MAXVER: 6.4.55
# MAXVER: 55
# MINVER:
# shellcheck disable=SC1091
. "$DIRPATH"/common.sh

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bash
# PATCHNAME: Bypass GW934 checksum
# MAXVER: 6.4.67
# MINVER: 6.4.63
# MAXVER: 67
# MINVER: 63
# shellcheck disable=SC1091
. "$DIRPATH"/common.sh
@ -18,11 +18,11 @@ fi
info "Extracting [app-debug.apk]..."
unzip -o 'tools/bypass/app-debug.apk' -d 'tools/bypass'
mv 'tools/bypass/lib/arm64-v8a/libSignatureKiller.so' 'tools/bypass/lib/arm64-v8a/libmodft3.so'
mv 'tools/bypass/lib/arm64-v8a/libSignatureKiller.so' 'tools/bypass/lib/arm64-v8a/libmodft3.so'
mv 'tools/bypass/lib/armeabi-v7a/libSignatureKiller.so' 'tools/bypass/lib/armeabi-v7a/libmodft3.so'
info "Moving libraries..."
mv 'tools/bypass/lib/arm64-v8a/libmodft3.so' 'mbapk/mbapk_unpacked/root/lib/arm64-v8a'
mv 'tools/bypass/lib/armeabi-v7a/libmodft3.so' 'mbapk/mbapk_unpacked/root/lib/armeabi-v7a'
mv 'tools/bypass/lib/arm64-v8a/libmodft3.so' 'mbapk/mbapk_unpacked/root/lib/arm64-v8a'
mv 'tools/bypass/lib/armeabi-v7a/libmodft3.so' 'mbapk/mbapk_unpacked/root/lib/armeabi-v7a'
mv 'mbapk/mbapk_unpacked/root/lib/arm64-v8a/libapp.so' 'mbapk/mbapk_unpacked/root/lib/arm64-v8a/libmbcp.so'
mv 'mbapk/mbapk_unpacked/root/lib/armeabi-v7a/libapp.so' 'mbapk/mbapk_unpacked/root/lib/armeabi-v7a/libmbcp.so'

Some files were not shown because too many files have changed in this diff Show more