В руки попался китайский бюджетный смартфон Mito A67.
После установки приложения Сбербанк и последующем его запуском пользователь получил уведомление:
Пишет, что он находится в приложении «Беспроводное обновление».
Но в свойствах этого приложения нет указания на название пакета. А, поскольку оно не активно и на экране его нет, то пришлось удалить самое подходящее по смыслу:
pm uninstall -k --user 0 com.abfota.systemUpdate
Вирус вроде как удалён, но всё равно пользователь, при запуске Сбербанк-онлайн получает сообщение об обнаруженном вирусе, при этом удалить его не может:
Попробую поставить рут. Проблема в том, что это ноунейм, а значит нет готовой прошивки с рутом. Придётся работать руками…
Инструкция тут.
1. Скачиваем и устанавливаем MTK-драйвер с офф. сайта
2. Проверим драйверы, для этого зажмите + , затем подключите USB (экран может остатся чёрным)
3. Откройте Диспетчер устройств ▶ раздел Ports (COM & LPT)
У меня отобразилось MediaTek USB VCOM (Android) (COM5)
4. Загрузим и распакуем MTK-Client.
5. Скачиваем и устанавливаем Microsoft C++ Build Tools:
- MSVC v143 — VS 2022 C++ x64/x86 build tools
- Windows 10 SDK (10.0.18362.0)
- C++ CMake tools
6. Через Windows Store загрузим и установим Python (В сеансе Администратора тоже).
7. Установим WinFsp (для использования FUSE).
8. В Проводнике из папки MTK-Client запускаем PowerShell (на пустом поле правая кнопка мыши и выбираем
9. Установим и обновим зависимости:
pip install wheel setuptools --upgrade
pip install --upgrade pip
pip3 install -r requirements.txt
pip3 install .
10. Вызываем графический интерфейс MTKClient:
python .\mtk_gui.py
Preloader - Status: Waiting for PreLoader VCOM, please reconnect mobile to brom mode
...........
...........
...........
...........
..........Preloader
Preloader - [LIB]: Status: Handshake failed, retrying...
..Preloader - CPU: MT6753()
Preloader - HW version: 0x0
Preloader - WDT: 0x10212000
Preloader - Uart: 0x11002000
Preloader - Brom payload addr: 0x100a00
Preloader - DA payload addr: 0x201000
Preloader - CQ_DMA addr: 0x10217c00
Preloader - Var1: 0x28
Preloader - Disabling Watchdog...
Preloader - HW code: 0x337
Preloader - Target config: 0x0
Preloader - SBC enabled: False
Preloader - SLA enabled: False
Preloader - DAA enabled: False
Preloader - SWJTAG enabled: False
Preloader - EPP_PARAM at 0x600 after EMMC_BOOT/SDMMC_BOOT: False
Preloader - Root cert required: False
Preloader - Mem read auth: False
Preloader - Mem write auth: False
Preloader - Cmd 0xC8 blocked: False
Preloader - Get Target info
Preloader - HW subcode: 0x8a00
Preloader - HW Ver: 0xca00
Preloader - SW Ver: 0x0
Preloader - Status: Waiting for PreLoader VCOM, please reconnect mobile to brom mode
Preloader
Preloader - [LIB]: Status: Handshake failed, retrying...
11. В предыдущем шаге мы получили Status: Handshake failed, retrying, поэтому повторяем попытку перевода телефона в режим BROM.
Удерживайте обе кнопки: Volume Down (Громкость Вниз) и Volume Up (Громкость Вверх). Иногда работает только Volume Down или только Volume Up, попробуйте варианты.
12. В MTKClient GUI выбираем
13. Снимаем галки с cache (400MB) и userdata (54GB)
14. Нажимаем кнопку
15. Выбираем папку сохранения архива.
.....Preloader - CPU: MT6753()
Preloader - HW version: 0x0
Preloader - WDT: 0x10212000
Preloader - Uart: 0x11002000
Preloader - Brom payload addr: 0x100a00
Preloader - DA payload addr: 0x201000
Preloader - CQ_DMA addr: 0x10217c00
Preloader - Var1: 0x28
Preloader - Disabling Watchdog...
Preloader - HW code: 0x337
Preloader - Target config: 0x0
Preloader - SBC enabled: False
Preloader - SLA enabled: False
Preloader - DAA enabled: False
Preloader - SWJTAG enabled: False
Preloader - EPP_PARAM at 0x600 after EMMC_BOOT/SDMMC_BOOT: False
Preloader - Root cert required: False
Preloader - Mem read auth: False
Preloader - Mem write auth: False
Preloader - Cmd 0xC8 blocked: False
Preloader - Get Target info
Preloader - HW subcode: 0x8a00
Preloader - HW Ver: 0xca00
Preloader - SW Ver: 0x0
Preloader - Jumping to 0x200000
Preloader - Jumping to 0x200000: ok.
m_emmc_ret = 0x0
m_emmc_boot1_size = 0x400000
m_emmc_boot2_size = 0x400000
m_emmc_rpmb_size = 0x1000000
m_emmc_gp_size[0] = 0x0
m_emmc_gp_size[1] = 0x0
m_emmc_gp_size[2] = 0x0
m_emmc_gp_size[3] = 0x0
m_emmc_ua_size = 0xe8f800000
m_emmc_cid = 5036424d15010047c2f8956742018ea3
m_emmc_fwver = 0100000000000000
Progress: |██████████| 100.0% Read (0x1800/0x1800, ) 2.28 MB/s
Progress: |██████████| 100.0% Read (0x2800/0x2800, ) 2.26 MB/s29 MB/s
Progress: |██████████| 100.0% Read (0x5000/0x5000, ) 2.40 MB/s23 MB/s
Progress: |██████████| 100.0% Read (0x5000/0x5000, ) 2.20 MB/s30 MB/s
Progress: |██████████| 100.0% Read (0x400/0x400, ) 3.26 MB/s
Progress: |██████████| 100.0% Read (0x400/0x400, ) 3.15 MB/s
Progress: |██████████| 100.0% Read (0x8000/0x8000, ) 2.23 MB/s20 MB/s
Progress: |██████████| 100.0% Read (0xC000/0xC000, ) 2.27 MB/s46 MB/s
Progress: |██████████| 100.0% Read (0x4000/0x4000, ) 2.29 MB/s39 MB/s
Progress: |██████████| 100.0% Read (0x5000/0x5000, ) 2.34 MB/s49 MB/s
Progress: |██████████| 100.0% Read (0x400/0x400, ) 3.08 MB/s
Progress: |██████████| 100.0% Read (0x1000/0x1000, ) 2.27 MB/s
Progress: |██████████| 100.0% Read (0x3000/0x3000, ) 2.34 MB/s31 MB/s
Progress: |██████████| 100.0% Read (0x4000/0x4000, ) 2.23 MB/s32 MB/s
Progress: |██████████| 100.0% Read (0x2800/0x2800, ) 2.26 MB/s25 MB/s
Progress: |██████████| 100.0% Read (0x2800/0x2800, ) 2.28 MB/s37 MB/s
Progress: |██████████| 100.0% Read (0x400/0x400, ) 3.20 MB/s
Progress: |██████████| 100.0% Read (0x800/0x800, ) 2.27 MB/s
Progress: |██████████| 100.0% Read (0x10000/0x10000, ) 2.36 MB/s3 MB/s
Progress: |██████████| 100.0% Read (0x10000/0x10000, ) 2.00 MB/s8 MB/s
Progress: |██████████| 100.0% Read (0xA400/0xA400, ) 3.19 MB/s21 MB/s
Progress: |██████████| 100.0% Read (0x274000/0x274000, ) 2.20 MB/s30 MB/sMB/s
16. Скачиваем Magisk
17. Устанавливаем его на телефон:
.\adb.exe install "D:\Distr-Android\Magisk\Magisk-v29.0.apk"
Performing Streamed Install
Success
18. Закидываем распакованный boot.bin (обратите внимание, что мы его переименовываем):
.\adb push "D:\Hardware\MT6753\boot.bin" /sdcard/Download/boot.img
19. Патчим boot.img:
▶ ▶ ▶ ▶
- Device platform: armeabi-v7a
- Installing: 29.0 (29000)
- Copying image to cache
- Unpacking boot image
- Checking ramdisk status
- Stock boot image detected
- Patching ramdisk
- Pre-init storage partition: userdata
- Patch fstab in boot image kernel_dtb
- Repacking boot image
****************************
Output file is written to
/storage/emulated/0/Download/magisk_patched-29000_zfCBM.img
****************************
- All done!
20. Скачиваем пропатченный файл:
./adb pull /sdcard/Download/magisk_patched-29000_zfCBM.img "D:\Hardware\Android utils\MTK-Client\mtkclient-main\boot_rooted.bin"
/sdcard/Download/magisk_patched-29000_zfCBM.img: 1 file pulled, 0 skipped. 12.9 MB/s (16777216 bytes in 1.245s)
21. Переходим в папку с mtk (подставите свою папку):
cd "D:\Hardware\Android utils\MTK-Client\mtkclient-main"
22. Разблокируем загрузчик и отключим проверку целостности:
python mtk.py da vbmeta 3
Port - Device detected :)
Preloader - CPU: MT6753()
Preloader - HW version: 0x0
Preloader - WDT: 0x10212000
Preloader - Uart: 0x11002000
Preloader - Brom payload addr: 0x100a00
Preloader - DA payload addr: 0x201000
Preloader - CQ_DMA addr: 0x10217c00
Preloader - Var1: 0x28
Preloader - Disabling Watchdog...
Preloader - HW code: 0x337
Preloader - Target config: 0x0
Preloader - SBC enabled: False
Preloader - SLA enabled: False
Preloader - DAA enabled: False
Preloader - SWJTAG enabled: False
Preloader - EPP_PARAM at 0x600 after EMMC_BOOT/SDMMC_BOOT: False
Preloader - Root cert required: False
Preloader - Mem read auth: False
Preloader - Mem write auth: False
Preloader - Cmd 0xC8 blocked: False
Preloader - Get Target info
Preloader - HW subcode: 0x8a00
Preloader - HW Ver: 0xca00
Preloader - SW Ver: 0x0
DaHandler - Device is unprotected.
DaHandler - Device is in Preloader-Mode.
DALegacy - Uploading legacy da...
DALegacy - Uploading legacy stage 1 from MTK_DA_V5.bin
LegacyExt - Legacy DA2 is patched.
LegacyExt - Legacy DA2 CMD F0 is patched.
Preloader - Jumping to 0x200000
Preloader - Jumping to 0x200000: ok.
DALegacy - Got loader sync !
DALegacy - Reading nand info
DALegacy - Reading emmc info
DALegacy - ACK: 04029b
DALegacy - Setting stage 2 config ...
DALegacy - Uploading stage 2...
DALegacy - Successfully uploaded stage 2
DALegacy - Connected to stage2
DALegacy - m_int_sram_ret = 0x0
m_int_sram_size = 0x20000
m_ext_ram_ret = 0x0
m_ext_ram_type = 0x2
m_ext_ram_chip_select = 0x0
m_int_sram_ret = 0x0
m_ext_ram_size = 0xc0000000
randomid = 0x3CC2FF1F2C622A7127708C1B8E860543
m_emmc_ret = 0x0
m_emmc_boot1_size = 0x400000
m_emmc_boot2_size = 0x400000
m_emmc_rpmb_size = 0x1000000
m_emmc_gp_size[0] = 0x0
m_emmc_gp_size[1] = 0x0
m_emmc_gp_size[2] = 0x0
m_emmc_gp_size[3] = 0x0
m_emmc_ua_size = 0xe8f800000
m_emmc_cid = 5036424d15010047c2f8956742018ea3
m_emmc_fwver = 0100000000000000
DaHandler - Dumping partition "para"
Progress: |██████████| 100.0% Read (0x400/0x400, ) 2.70 MB/s
23. Записываем пропатченный раздел загрузчика
python mtk.py w boot boot_rooted.bin
Если не сработало
Если на шаге выше не сработали — при запуске Magisk он показывает в статусе, что не установлен, то это сложности…
Итак, через командную строку образ boot.img вроде как записался, но Magisk его не признал. Проверяем. Для этого заново запускаем MTKClient GUI, но на этот раз сохраняем только раздел boot, под другим именем, чтобы не запутаться. Если это ошибка и Magisk глючит, то файлы будут совпадать.
Для сравнения используем PowerShell, просто измените в коде пути к файлам на свои и запустите:
# Укажите пути к вашим файлам
$file1 = "D:\Drivers\Android utils\MTK-Client\mtkclient-main\boot_original.bin"
$file2 = "D:\Drivers\Android utils\MTK-Client\mtkclient-main\Dump\boot.bin"
# Вычислите контрольные суммы
$hash1 = Get-FileHash -Path $file1 -Algorithm SHA256
$hash2 = Get-FileHash -Path $file2 -Algorithm SHA256
# Сравните контрольные суммы
if ($hash1.Hash -eq $hash2.Hash) {
Write-Host "Контрольные суммы файлов совпадают."
} else {
Write-Host "Контрольные суммы файлов не совпадают."
}
У меня получилось, что контрольные суммы файлов с загрузчиком якобы пропатченным (тот, который я скачал с телефона второй раз) и оригинальным одинаковые, значит Magisk не врал. Т.е. boot-раздел не записался. На этот раз я отошёл от инструкции с XDA, а воспользовался MTKClient GUI. Если там он успешно читал раздел, то наверное можно было и попытаться записать через него тоже.
Открываем MTKClient GUI вкладку Boot (16MB), для этого нажимаем на кнопку и выбираем пропатченный образ загрузчика (у меня это boot_rooted.bin).
Затем нажимаем .
24. Проверяем доступность телефона (не забыли ли мы включить отладку по USB и подтвердить цифровой отпечаток):
./adb devices
* daemon not running; starting now at tcp:5037
* daemon started successfully
List of devices attached
0123456789ABCDEF device
25. Запускаем шелл и получаем рута (при этом внимательно смотрим на экран смартфона, чтобы подтвердить запрос от Magisk):
adb shell
S23 Ultra:/ $ su
S23 Ultra:/ # cd /system/app/
S23 Ultra:/system/app # rm -r Rsota/
rm ro dir Rsota/ (y/N):y
rm ro Rsota/Rsota.apk (y/N):y
rm: Rsota.apk: Read-only file system
26. Узнаём, где смонтирован system:
mount | grep system
/dev/block/mmcblk0p23 on /system type ext4 (ro,seclabel,relatime,data=ordered)
27. Примонтируем его:
mount -o remount,rw /system
28. Ошибок нет, можно удалять папку с вирусом:
S23 Ultra:/system/app # rm -r Rsota/
S23 Ultra:/system/app # mount | grep ' /system '
/dev/block/mmcblk0p23 on /system type ext4 (ro,seclabel,relatime,data=ordered)
Потом попробовал её примонтировать, используя полученный путь:
S23 Ultra:/system/app # mount -o remount,rw /dev/block/mmcblk0p23 /system
mount: '/system' not in /proc/mounts
Неудача — прошивка использует system-as-root — т.е. раздел /system не монтируется отдельно, а встроен в корень.
Magisk
Удалять или оставлять Magisk (root) решать вам. Я оставил, на случай, если вдруг опять что-то потребуется, а проходить всё заново ой как не хочется. Поэтому просто в его настройках включу режимы Zygisk и Enforce DenyList
▶ ▶ ▶
Ну и активирую скрытый режим:
▶ ▶ ▶
и
▶ ▶ ▶ ▶
Preloader
Пришлось выковыривать его отдельно!
29. Вернёмся ва консоль PowerShell и воспользуемся mtk.py:
mtk rl dump_preloader
MTK Flash/Exploit Client Public V2.0.1 (c) B.Kerler 2018-2024
Preloader - Status: Waiting for PreLoader VCOM, please reconnect mobile to brom mode
Port - Hint:
Power off the phone before connecting.
For brom mode, press and hold vol up, vol dwn, or all hw buttons and connect usb.
For preloader mode, don't press any hw button and connect usb.
If it is already connected and on, hold power for 10 seconds to reset.
.......Port - Device detected :)
Preloader - CPU: MT6753()
Preloader - HW version: 0x0
Preloader - WDT: 0x10212000
Preloader - Uart: 0x11002000
Preloader - Brom payload addr: 0x100a00
Preloader - DA payload addr: 0x201000
Preloader - CQ_DMA addr: 0x10217c00
Preloader - Var1: 0x28
Preloader - Disabling Watchdog...
Preloader - HW code: 0x337
Preloader - Target config: 0x0
Preloader - SBC enabled: False
Preloader - SLA enabled: False
Preloader - DAA enabled: False
Preloader - SWJTAG enabled: False
Preloader - EPP_PARAM at 0x600 after EMMC_BOOT/SDMMC_BOOT: False
Preloader - Root cert required: False
Preloader - Mem read auth: False
Preloader - Mem write auth: False
Preloader - Cmd 0xC8 blocked: False
Preloader - Get Target info
Preloader - BROM mode detected.
Preloader - HW subcode: 0x8a00
Preloader - HW Ver: 0xca00
Preloader - SW Ver: 0x0
Preloader - ME_ID: 26BC32D21D0D825A847AE2F2766E9617
DaHandler - Device is unprotected.
DaHandler - Device is in BROM-Mode. Bypassing security.
PLTools - Loading payload from mt6753_payload.bin, 0x258 bytes
Exploitation - Kamakiri Run
Exploitation - Done sending payload...
PLTools - Successfully sent payload: C:\Users\opden\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\mtkclient\payloads\mt6753_payload.bin
Port - Device detected :)
DaHandler
DaHandler - [LIB]: Device is in BROM mode. No preloader given, trying to dump preloader from ram.
DALegacy - Uploading legacy da...
DALegacy - Uploading legacy stage 1 from MTK_DA_V5.bin
LegacyExt - Legacy DA2 is patched.
LegacyExt - Legacy DA2 CMD F0 is patched.
Preloader - Jumping to 0x200000
Preloader - Jumping to 0x200000: ok.
DALegacy - Got loader sync !
DALegacy - Reading nand info
DALegacy - Reading emmc info
DALegacy - ACK: 04029b
DALegacy - Setting stage 2 config ...
DALegacy - DRAM config needed for : 470001154d423650a38e014267bef8c2
DALegacy - Reading dram nand info ...
DALegacy - Sending dram info ... EMI-Version 0x14
DALegacy - RAM-Length: 0xbc
DALegacy - Checksum: 5E95
DALegacy - M_EXT_RAM_RET : 0
DALegacy - M_EXT_RAM_TYPE : 0x2
DALegacy - M_EXT_RAM_CHIP_SELECT : 0x0
DALegacy - M_EXT_RAM_SIZE : 0xc0000000
DALegacy - Uploading stage 2...
DALegacy - Successfully uploaded stage 2
DALegacy - Connected to stage2
DALegacy - Reconnecting to stage2 with higher speed