Skip to content

Redmi 12 4g - seccfg says "already unlocked" but fastboot still shows it as locked #10

Description

@MrMatias123

Device model

Redmi 12

Codename

fire

SoC

MT6769Z

Firmware version

HyperOS 1.0.8.0.UMXMIXM

Which step failed?

Verification (fastboot oem lks)

Full terminal output

python mtk.py da seccfg unlock

DaHandler - [LIB]: Device is in BROM mode. No preloader given, trying to dump preloader from ram.
DAXFlash - Uploading xflash stage 1 from MTK_DA_V5.bin
XFlashExt - Patching da1 ...
Mtk - Patched "Patched loader msg" in preloader
Mtk - Patched "hash_check" in preloader
Mtk - Patched "Patched loader msg" in preloader
Mtk - Patched "get_vfy_policy" in preloader
XFlashExt - Patching da2 ...
XFlashExt - Security check patched
XFlashExt - DA version anti-rollback patched
XFlashExt - SBC patched to be disabled
XFlashExt - Register read/write not allowed patched
DAXFlash - Successfully uploaded stage 1, jumping ..
Preloader - Jumping to 0x200000
Preloader - Jumping to 0x200000: ok.
DAXFlash - Successfully received DA sync
DAXFlash - Sending emi data ...
DAXFlash - DRAM setup passed.
DAXFlash - Sending emi data succeeded.
DAXFlash - Uploading stage 2...
DAXFlash - Upload data was accepted. Jumping to stage 2...
DAXFlash - Boot to succeeded.
DAXFlash - Successfully uploaded stage 2
DAXFlash - DA SLA is disabled
DAXFlash - EMMC FWVer:      0x0
DAXFlash - EMMC ID:         Y0S256
DAXFlash - EMMC CID:        9b010059305332353600ed5408e7ca8f
DAXFlash - EMMC Boot1 Size: 0x400000
DAXFlash - EMMC Boot2 Size: 0x400000
DAXFlash - EMMC GP1 Size:   0x0
DAXFlash - EMMC GP2 Size:   0x0
DAXFlash - EMMC GP3 Size:   0x0
DAXFlash - EMMC GP4 Size:   0x0
DAXFlash - EMMC RPMB Size:  0x1000000
DAXFlash - EMMC USER Size:  0x3a3e000000
DAXFlash - Starting DA extensions ...
DAXFlash - Extensions were accepted. Jumping to extensions...
DAXFlash - Boot to succeeded.
DAXFlash - DA Extensions successfully added at 0x4fff0000
Main - Handling da commands ...
XFlashExt - Detected V4 Lockstate
Sej - AES128 CBC - HACC init
Sej - AES128 CBC - HACC run
Sej - AES128 CBC - HACC terminate
Sej - AES128 CBC - HACC init
Sej - AES128 CBC - HACC run
Sej - AES128 CBC - HACC terminate
SecCfgV4 - hwtype found: V4
Sej - AES128 CBC - HACC init
Sej - AES128 CBC - HACC run
Sej - AES128 CBC - HACC terminate
Done |██████████| 100.0% Write: (0x200/0x200),0.00 MB/s
DaHandler - Successfully wrote seccfg.
PS C:\Program Files\mtkclient>


______________________________________________________________
 python .\scan_lk.py "C:\\lk_b.bin"
[*] Reading C:\\lk_b.bin...
[*] Size: 8,388,608 bytes
[*] Scanning...
══════════════════════════════════════════════════════════
  LK BINARY SCAN REPORT — MTKClient Unlock Analyzer
══════════════════════════════════════════════════════════

  File size  : 8,388,608 bytes (8.0 MB)
  MD5        : 4646ef8af86814a0f0c50629389a3411
  SHA256     : 20c514c5d871fea02c7c370e925e6918...

  ┌─────────────────────────────────────────┐
  │  VERDICT: COMPATIBLE_SECCFG_ONLY         │
  │  Score  : 52/100 (52%)                        │
  │  Method: seccfg unlock only (no RPMB loc│
  └─────────────────────────────────────────┘

  [MAGIC] Jz8PNRUF : ✗ ABSENT

  [RPMB] Type : UFS_Samsung_0x400000
    magic                : 0x3FE0
    lock_state_len       : 0x40E0
    signature_data       : 0x41E0

  [RSA]  Modulus : ✓ FOUND
    @ 0x0010E508
    Key size: 2048 bits

  [SECCFG] Version : generic

  [FUNCTIONS] 7 detected:
    ✓ mi_get_lock_state: Reads RPMB lock state — overrides seccfg when magic present
    ✓ get_lock_state: Main lock state function  reads seccfg + RPMB
    ✓ seccfg_set_lock_state: Writes lock state to seccfg partition
    ✓ rpmb_read: Reads N bytes from RPMB
    ✓ rpmb_write: Writes N bytes to RPMB
    ✓ fastboot_oem_lks: Hidden fastboot OEM lock state commands
    ✓ verify_unlock_sig: RSA signature verification for unlock token

  [FASTBOOT] 6 OEM commands:
    ✓ oem lks @ 0x0009D560
    ✓ oem setmtklks @ 0x0009D3B4
    ✓ oem chkmtklks @ 0x0009D3A4
    ✓ flashing get_unlock_ability @ 0x0009D580
    ✓ oem unlock @ 0x0009D568
    ✓ oem lock @ 0x0009D574

══════════════════════════════════════════════════════════
  RPMB magic not found. seccfg alone should work (MIUI13 or older).
══════════════════════════════════════════════════════════
PS C:\Users\xiaomi-hyperos-bootloader-unlock> python .\scan_lk.py "C:\Program Files\mtkclient\lk_a.bin"
[*] Reading C:\Program Files\mtkclient\lk_a.bin...
[*] Size: 8,388,608 bytes
[*] Scanning...
══════════════════════════════════════════════════════════
  LK BINARY SCAN REPORT — MTKClient Unlock Analyzer
══════════════════════════════════════════════════════════

  File size  : 8,388,608 bytes (8.0 MB)
  MD5        : 2f09e417ac0a2795450b68ce2fe9e92e
  SHA256     : 7af84c911cf68a20c5f305a23cea5ce2...

  ┌─────────────────────────────────────────┐
  │  VERDICT: COMPATIBLE_SECCFG_ONLY         │
  │  Score  : 52/100 (52%)                        │
  │  Method: seccfg unlock only (no RPMB loc│
  └─────────────────────────────────────────┘

  [MAGIC] Jz8PNRUF : ✗ ABSENT

  [RPMB] Type : UFS_Samsung_0x400000
    magic                : 0x3FE0
    lock_state_len       : 0x40E0
    signature_data       : 0x41E0

  [RSA]  Modulus : ✓ FOUND
    @ 0x0010E508
    Key size: 2048 bits

  [SECCFG] Version : generic

  [FUNCTIONS] 7 detected:
    ✓ mi_get_lock_state: Reads RPMB lock state — overrides seccfg when magic present
    ✓ get_lock_state: Main lock state function  reads seccfg + RPMB
    ✓ seccfg_set_lock_state: Writes lock state to seccfg partition
    ✓ rpmb_read: Reads N bytes from RPMB
    ✓ rpmb_write: Writes N bytes to RPMB
    ✓ fastboot_oem_lks: Hidden fastboot OEM lock state commands
    ✓ verify_unlock_sig: RSA signature verification for unlock token

  [FASTBOOT] 6 OEM commands:
    ✓ oem lks @ 0x0009D560
    ✓ oem setmtklks @ 0x0009D3B4
    ✓ oem chkmtklks @ 0x0009D3A4
    ✓ flashing get_unlock_ability @ 0x0009D580
    ✓ oem unlock @ 0x0009D568
    ✓ oem lock @ 0x0009D574

══════════════════════════════════════════════════════════
  RPMB magic not found. seccfg alone should work (MIUI13 or older).
══════════════════════════════════════════════════════════


 .\fastboot.exe oem lks
(bootloader) lks = 1

.\fastboot.exe getvar unlocked
unlocked: no

.\fastboot.exe getvar secure
secure: yes

Operating system

windows 11

USB port type

USB 2.0 (black port)

Did you use a preloader file?

No — let mtkclient auto-detect

What have you already tried?

So mtkclient "says" it wrote successfully, but the phone still behaves like it's locked.

Things I already tried:

  • Ran the unlock command several times (at first it wasn't writing anything new)
  • Locked and unlocked again to force a real write
  • Checked that "OEM unlocking" is enabled in Developer Options (it is)

Something that might help:
I looked at the seccfg partition file in hex, before and after writing. There was a value that changed from 3 to 1 after forcing lock/unlock, but even so the phone still doesn't recognize itself as unlocked. So I suspect there's something else (maybe a signature or extra verification) that isn't updating properly, besides that value.

I don't know much about this technically, so any help understanding what might be going on, or if there's anything else I could try, would be really appreciated. Happy to provide more info or run more tests if needed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions