[Magisk v14.0] Universal SafetyNet Fix | Universal Hide [v2 Beta 5]

Search This thread

Deic

Senior Member
Feb 4, 2012
540
987
Madrid
www.xiaomiadictos.com
Universal SafetyNet Fix
This module tries to pass SafetyNet on devices that triggered it.

It works by doing some magic with the system props, which are changed to match with the required by Google to pass it's security test (SafetyNet). However, that is not all...

The real magic here is the Universal Hide part, which is a custom implementation of Magisk Hide. It basically does the same magic as Magisk Hide, but in a shell-y simple way.
It reads the file Magisk Hide uses to store apps that should be hidden and then monitors logcat until a hidden app is opened. Once this happens, it enters it's mount namespace to unmount all Magisk related mount points.
That way you can hide root or bypass SafetyNet for almost to all apps. App's that use custom checks to detect root are one of the few exceptions as we cannot anticipate what they check.

Why did I basically duplicated Magisk Hide? Well, Magisk Hide doesn't work properly for all devices, so this is a fast solution until topjohnwu fix all the issues.

Information

Requeriments
  • Magisk v13.x/14.0
  • MagiskSU

Links
Download Beta
Download Stable (very outdated)
Download uninstaller
Source code

Installation
  1. Flash the .ZIP from TWRP
  2. Reboot

Donations
If you feel I helped you, you can buy me a coffee here. :)

Changelog

v1.10.1
  • Fixed Magisk Hide detection for Magisk v12

v1.10
  • Module is now universal, not for Xiaomi devices only
  • Module refactored
  • Magisk v13 beta support
  • Added some props
  • Added SafetyNet fix for Magisk v12
  • Check if Magisk Hide was properly started and try to fix
  • Zip signed

v1.9.1
  • Fixed logging code: ignore output of wait for unmount loop

v1.9
  • Added new supported devices: Redmi Pro, Mi 4S, Redmi 4X
  • Changed Redmi Note 3 MTK prop
  • Changed wait for Magisk SafetyNet check to a function and run in a subshell

v1.8.2
  • Fixed Redmi Note 3 MTK device name typo

v1.8.1
  • Fixed forgotten set_prop function calls

v1.8
  • Added new supported devices: Mi Note Pro, Redmi 1, Redmi 1S
  • Fixed Mi 5 prop
  • Removed run enable script
  • Code improved

v1.7
  • Added new supported devices: Mi 6
  • Added "ro.bootimage.build.fingerprint" prop
  • Removed reinitiate Magisk Hide
  • Added run Magisk Hide when boot & service steps are completed
  • Improved log code: waiting to SafetyNet test and Magisk Hide folder unmount, silence some shell output

v1.6
  • Added new supported devices: Mi Pad, Mi Note, Mi 3/Mi 4, Mi 2/2S, Mi Pad 2, Mi Pad 3
  • Added code to reinitiate Magisk Hide

v1.5
  • Added new supported devices: Redmi 4, Redmi 4 Prime, Redmi 4A

v1.4
  • Added new supported devices: Redmi 3/Prime, Mi 4i
  • Added code to generate useful logs and enable Magisk Hide if not enabled
  • Changed to use resetprop directly from script @laggardkernel
  • Removed build description because is useless



v1.3
  • Added new supported devices: Redmi 2/4G, Redmi 2 Prime
  • Added some extra code to support device with different model name

v1.2
  • Added new supported devices: Mi 4c, Mi 5c, Redmi Note 3 Special Edition, Mi Note 2, Redmi Note 4X

v1.1
  • Added new suported devices: Mi Max, Mi Max Prime, Redmi 3S/Prime/3X

v1
  • Initial release
  • Suported devices: Redmi Note 2, Redmi Note 3 MTK, Redmi Note 3 Qualcomm, Redmi Note 4 MTK, Mi 5, Mi 5s, Mi 5s Plus, Mi MIX

Thank you
 
Last edited:

lampshade90

Senior Member
Oct 30, 2011
323
99
It's not working for me on redmi note 4 mtk latest (7.4.27) xiaomi.eu unlocked bootloader fresh install with magisk v12. Don't know if there is a difference to the snapdragon version...

Edit: sadly I've been waiting for this since I bought this phone! Still get profile cts mismatch

Edit2: files added
 

Attachments

  • post-fs-data.log
    1.4 KB · Views: 2,775
  • system.log
    243 bytes · Views: 1,834
Last edited:
  • Like
Reactions: llamasking
G

GuestK00333

Guest
Not working on my mi5 with MIUI 8.2.2 by Multirom. wrong CTS profile error
 

chucky8

Senior Member
Oct 17, 2007
135
25
Waiting for Redmi 3s.
Thanks for your work.

Gesendet von meinem Redmi 3S mit Tapatalk
 

kleytonhunter

Senior Member
Nov 20, 2013
84
9
42
recife
:confused: CTS profile mismatch on my redmi note 3 pro :confused:
 

Attachments

  • Screenshot_20170503-171308.png
    Screenshot_20170503-171308.png
    77.8 KB · Views: 14,010
Last edited:

mura20

Senior Member
Dec 17, 2012
504
93
Did not work for me. I am running 030517 Nitrogen 7.1.2 on a Redmi Note 3 Pro
 

C114

Senior Member
Jul 24, 2013
315
61
Szczecin
Kenzo. RR Official Nightlies 7.1.1 2017/04/14 build
 

Attachments

  • Screenshot_20170503-235709.png
    Screenshot_20170503-235709.png
    66.7 KB · Views: 6,981

Deic

Senior Member
Feb 4, 2012
540
987
Madrid
www.xiaomiadictos.com
  • Like
Reactions: rohitdave

Deic

Senior Member
Feb 4, 2012
540
987
Madrid
www.xiaomiadictos.com
I know you try to run the post-fs-data.sh immediately after installation. But it is still a little weird that, all the changes in system.prop, the properties written by post-fs-data.sh during boot, will be loaded at next boot. How about dropping the system.prop and loading the properties by post-fs-data.sh directly?

https://github.com/DeicPro/xiaomi-safetynet-fix/pull/1

These props are read before of run resetprop from post-fs-data. My first step was as you did it and I had to do as is now.
 
Last edited:

Top Liked Posts

  • There are no posts matching your filters.
  • 223
    Universal SafetyNet Fix
    This module tries to pass SafetyNet on devices that triggered it.

    It works by doing some magic with the system props, which are changed to match with the required by Google to pass it's security test (SafetyNet). However, that is not all...

    The real magic here is the Universal Hide part, which is a custom implementation of Magisk Hide. It basically does the same magic as Magisk Hide, but in a shell-y simple way.
    It reads the file Magisk Hide uses to store apps that should be hidden and then monitors logcat until a hidden app is opened. Once this happens, it enters it's mount namespace to unmount all Magisk related mount points.
    That way you can hide root or bypass SafetyNet for almost to all apps. App's that use custom checks to detect root are one of the few exceptions as we cannot anticipate what they check.

    Why did I basically duplicated Magisk Hide? Well, Magisk Hide doesn't work properly for all devices, so this is a fast solution until topjohnwu fix all the issues.

    Information

    Requeriments
    • Magisk v13.x/14.0
    • MagiskSU

    Links
    Download Beta
    Download Stable (very outdated)
    Download uninstaller
    Source code

    Installation
    1. Flash the .ZIP from TWRP
    2. Reboot

    Donations
    If you feel I helped you, you can buy me a coffee here. :)

    Changelog

    v1.10.1
    • Fixed Magisk Hide detection for Magisk v12

    v1.10
    • Module is now universal, not for Xiaomi devices only
    • Module refactored
    • Magisk v13 beta support
    • Added some props
    • Added SafetyNet fix for Magisk v12
    • Check if Magisk Hide was properly started and try to fix
    • Zip signed

    v1.9.1
    • Fixed logging code: ignore output of wait for unmount loop

    v1.9
    • Added new supported devices: Redmi Pro, Mi 4S, Redmi 4X
    • Changed Redmi Note 3 MTK prop
    • Changed wait for Magisk SafetyNet check to a function and run in a subshell

    v1.8.2
    • Fixed Redmi Note 3 MTK device name typo

    v1.8.1
    • Fixed forgotten set_prop function calls

    v1.8
    • Added new supported devices: Mi Note Pro, Redmi 1, Redmi 1S
    • Fixed Mi 5 prop
    • Removed run enable script
    • Code improved

    v1.7
    • Added new supported devices: Mi 6
    • Added "ro.bootimage.build.fingerprint" prop
    • Removed reinitiate Magisk Hide
    • Added run Magisk Hide when boot & service steps are completed
    • Improved log code: waiting to SafetyNet test and Magisk Hide folder unmount, silence some shell output

    v1.6
    • Added new supported devices: Mi Pad, Mi Note, Mi 3/Mi 4, Mi 2/2S, Mi Pad 2, Mi Pad 3
    • Added code to reinitiate Magisk Hide

    v1.5
    • Added new supported devices: Redmi 4, Redmi 4 Prime, Redmi 4A

    v1.4
    • Added new supported devices: Redmi 3/Prime, Mi 4i
    • Added code to generate useful logs and enable Magisk Hide if not enabled
    • Changed to use resetprop directly from script @laggardkernel
    • Removed build description because is useless



    v1.3
    • Added new supported devices: Redmi 2/4G, Redmi 2 Prime
    • Added some extra code to support device with different model name

    v1.2
    • Added new supported devices: Mi 4c, Mi 5c, Redmi Note 3 Special Edition, Mi Note 2, Redmi Note 4X

    v1.1
    • Added new suported devices: Mi Max, Mi Max Prime, Redmi 3S/Prime/3X

    v1
    • Initial release
    • Suported devices: Redmi Note 2, Redmi Note 3 MTK, Redmi Note 3 Qualcomm, Redmi Note 4 MTK, Mi 5, Mi 5s, Mi 5s Plus, Mi MIX

    Thank you
    112
    Universal SafetyNet Fix v2 Beta 5

    I'm testing some functions and they could doesn't work stably in all devices, so I decided to release betas to test new things and get some feedback.

    USNF Settings
    Use from terminal emulator with root provileges, run this to see usage
    Code:
    usnf
    v2 Beta 5 changelog
    • Added Magisk v13+ support to Universal Hide
    • Added module settings
    • Fixed fake not mount namespace support message due 32-bit devices
    • Better Magisk version detection
    • Separated every type of mount points to own unmount command
    • Fixed some problem when clear logcat
    • Fix fingerprint issue
    • Added reboot ask to module settings
    • Removed Magisk v13 props to fix SafetyNet
    • Copy busybox and magiskhide in every boot
    • Removed Magisk Hide disable and enable loop
    • Output Magisk related props in the log
    • Hide permissive mode
    • Hide the original Magisk binaries of /sbin_orig folder
    • Added more props to hide
    • Updated bundle Busybox binaries to 1.27.1
    • Removed the waiting for Magisk boot end
    • Better output in Magisk log
    • Some code syntax cleanup
    • Cleanup some code
    • Hide more Magisk props
    • Added output to Magisk log of target process namespace at unmount
    • Added partial support for Magisk v12
    • Added support for newer Huawei devices unmounting vendor mountpoint
    • Added Magisk 13.5 Beta support
    • Fixed unmount of some modules
    • Improved module outputs in Magisk log

    Previous beta changelogs

    v2 Beta 4
    • Own Magisk Hide implementation renamed to Universal Hide
    • Fixed Universal Hide when there are not modules
    • Kill module if mount namespaces are not supported
    • Enable full Universal Hide if Zygote namespace is not found in Magisk log
    • Check if system shell runs correctly when is runned by BusyBox's nsenter applet, if not use BusyBox's shell
    v2 Beta 3
    • Completed own implementation of Magisk Hide to unmount all when any process listed in hidelist file is runned for Magisk v12 only, auto-enabled only if you Magisk Hide doesn't work
    v2 Beta 2
    • Own implementation of Magisk Hide to unmount all when SafetyNet process (com.google.android.gms.unstable) is runned to bypass SafetyNet for Magisk v12 only, auto-enabled only if you Magisk Hide doesn't work
    • Fix for unmount mirror, dummy & busybox
    v2 Beta 1
    • Unmount mirror, dummy & busybox in the namespace of the process you hide for Magisk v12 like Magisk v13 does. No more /dev/magisk ugly rename workaround.


    If you have issues, join here (Telegram group): https://t.me/USNFGroup

    Magisk v14 hotfix here
    79
    Hotfix for Magisk v14

    Use only with Magisk v14+

    *re-uploaded
    25
    Universal SafetyNet Fix v2 Beta 4

    I'm testing some functions and they could doesn't work stably in all devices, so I decided to release betas to test new things and get some feedback. Have in mind that you wont got support by me if something works bad with a beta version.

    v2 Beta 4 changelog
    • Own Magisk Hide implementation renamed to Universal Hide
    • Fixed Universal Hide when there are not modules
    • Kill module if mount namespaces are not supported
    • Enable full Universal Hide if Zygote namespace is not found in Magisk log
    • Check if system shell runs correctly when is runned by BusyBox's nsenter applet, if not use BusyBox's shell

    Previous beta changelogs

    v2 Beta 3
    • Completed own implementation of Magisk Hide to unmount all when any process listed in hidelist file is runned for Magisk v12 only, auto-enabled only if you Magisk Hide doesn't work
    v2 Beta 2
    • Own implementation of Magisk Hide to unmount all when SafetyNet process (com.google.android.gms.unstable) is runned to bypass SafetyNet for Magisk v12 only, auto-enabled only if you Magisk Hide doesn't work
    • Fix for unmount mirror, dummy & busybox
    v2 Beta 1
    • Unmount mirror, dummy & busybox in the namespace of the process you hide for Magisk v12 like Magisk v13 does. No more /dev/magisk ugly rename workaround.


    If you have issues, post these information
    1. Magisk log in Magisk Manager or magisk.log file in /cache
    2. universal-safetynet-fix.log file in /cache
    3. Install RootBeer Sample from Google Play, HIDE IT from Magisk Hide, run it, click the button and take screenshot.

    ATM is not fully compatible for Magisk v12 due the last SafetyNet update. Universal Hide (my own "Magisk Hide") doesn't support Magisk v13+ too.

    Beta 5 test builds is fully compatible for Magisk v12/v13+
    17
    Uninstaller

    Created the uninstaller zip from @Dark❶'s uninstaller template.
    This can be flashed from recovery to remove the module.

    May be useful in case of bootloops (although we know there are none) or may be other cases.
    I have tested at my end, works flawlessly.
    @Deic please add to OP if you find it useful.