MAGISK MODULE ❯ Universal SafetyNet Fix 2.3.1

Search This thread

pndwal

Senior Member
Now we need a new variation
Universal Play Integrity Fix
If not, root is dead
Root won't die! 🤪 ...

Please see this pull request:
Play Integrity Api bypass
#207 opened 22 days ago by Displax

... You can test it already, but this fixes / will fix / close several issues incl.:
- Please make 'Universal Play Integrity Fix' ... #204
also
- New Google Integrity API update breaks universal safetynet fix #203
- Google Pay #201
- OnePlus Nord #196
- SafetyNet fails on C.20 update for OnePlus 8 Pro #188
- CTS fails #171
- CTS profile failed, unlocked bootloader still detected #170

👀 PW
 

pndwal

Senior Member
So I rooted my brick??? If apps fail to run with root then what good is root???
Rooting enables a user to have administrator-level permissions to the operating system environment, allows normal users to install custom Roms, alternative software kernels, update to the latest version of Android OS on an older phone, run root apps, remove or bypass bloatware, etc etc. It is also a very important tool for development / developers / software/hardware testing / pen-testers etc etc...

Modders have also been enjoying the power-use it makes available and unlike Apple, Google is not inclined to prevent any of these advantages of root; Rootability is good for their business model, a selling point for OEM partners and devices and ultimately good for their bottom line and mobile OS promotion.

Subverting / spoofing security signals however is quite a different matter, and is arguably NOT the purpose of root... It's certainly not an official function in Android...

When it comes to running proprietary software on anything other than the verified-secure system a vendor agreed to provide software for, these are just our 'wants', and off course banks are concerned (understatement?) when AVB (Android Verified Boot) / DM Verity (Device Mapper Verity), SafetyNet, Play Integrity and other security measures are bypassed...

Have we just come to expect these personal conveniences simply because we've been on the pigs back for so long?...

Well when we're unceremoniously ditched, some of us will understand, some will wake up and smell the roses, and others will just continue to hate Google... for taking away our free ride... and just for being big... and successful...

For me It's a no-brainer that Google must / should meet the hightening security demands of institutions supplying the software Android users want before indulging a small modding community... They'd be nothing other than stupid not to...

I don't doubt Google want to indulge us (they are our benefactors as providers of the only moddable mobile OS with any sort of respectable presence after all; not 'evil'!)... And they have for quite a while, and quite knowingly to boot!...

But do the maths!!! - They need to look after corporate partners as well as be seen to be offering a platform that is capable of keeping up with emerging security issues and requirements including a fundamentally infallible system of attestation to a secure operating environment for proprietary code as is expected by both banks and the average bank customer and Android user...

Hope this helps just a few more here to Get Real! ...

However...

When apps do fail to run with root (and they will), both root and development will continue as well as practically all root apps, even if some of us will have to find a new mode of transport...

MagiskHide is dead... RootHide may be dying too,

...but Long Live Root! 😁 PW
 
Last edited:
So, here is my modification of USNF with Play Integrity API bypass.

It changes fingerprint to old 7.1.2 6.0 (LOL) and apply it only for GMS SafetyNet process (by Zygisk injection), so your original prints/security path level does not change. This avoids many side effects/problems with global props changing.

Updated:
Drop fingerprint to lowest possible (6.0) to ensure that no one use same Android version

Usage:
1. Delete/disable/reset MagiskHidePropsConfig (if installed).
2. Just install it over old Universal SafetyNet Fix and reboot device.

Many thanks to @1nikolas for integrity checker.

Source code: https://github.com/Displax/safetynet-fix/tree/integrity
Thank you so much!! It works for me.
 

ashish1989

Senior Member
Aug 22, 2014
411
33
Ghaziabad
Kindly help, I have tried 2-3 versions, in my samsung device having A7 aosp rom in it.
But no module is working, which version to use in android 7.1.2?
 

pndwal

Senior Member
Kindly help, I have tried 2-3 versions, in my samsung device having A7 aosp rom in it.
But no module is working, which version to use in android 7.1.2?
This module is largely for fixing SafetyNet by causing falback from HARDWARE to BASIC evaluation (attestation) type... This is generally only needed w/ Android 8+ w/ Keymaster 3... (Google haven't invoked Hardware Evaluation type using early hardware Keymaster 1 or 2).

Please say what isn't working; do you have have BASIC evaluation type in YASNAC?...

USNF 2.3.1 did restore compatibility w/ A7 however, since it was removed from 2.1.3... This will adjust sensitive props for A7 which may help with S/N, but attestation type fallback using Zygisk is disabled...

If you mean an AOSP custom ROM (stock Samsung is also AOSP), @Displax's unofficial USNF should be a good way to pass CTS Profile match instead of using a fingerprint prop configured in MagiskHide Props Config module... It should also allow new Play Integrity Meets_Device_Integrity verdict...

So this mod may well solve your A7 woes... See here:
https://forum.xda-developers.com/t/magisk-module-universal-safetynet-fix-2-3-1.4217823/post-87198517

🙂 PW
 

ashish1989

Senior Member
Aug 22, 2014
411
33
Ghaziabad
This module is largely for fixing SafetyNet by causing falback from HARDWARE to BASIC evaluation (attestation) type... This is generally only needed w/ Android 8+ w/ Keymaster 3... (Google haven't invoked Hardware Evaluation type using early hardware Keymaster 1 or 2).

Please say what isn't working; do you have have BASIC evaluation type in YASNAC?...

USNF 2.3.1 did restore compatibility w/ A7 however, since it was removed from 2.1.3... This will adjust sensitive props for A7 which may help with S/N, but attestation type fallback using Zygisk is disabled...

If you mean an AOSP custom ROM (stock Samsung is also AOSP), @Displax's unofficial USNF should be a good way to pass CTS Profile match instead of using a fingerprint prop configured in MagiskHide Props Config module... It should also allow new Play Integrity Meets_Device_Integrity verdict...

So this mod may well solve your A7 woes... See here:
https://forum.xda-developers.com/t/magisk-module-universal-safetynet-fix-2-3-1.4217823/post-87198517

🙂 PW
I have flashed this mod and because of this mod I am stuck on boot logo now, I have xposed installed, can that be the reason?
 

skr1p7k1dd

Member
Dec 4, 2017
9
1
@Displax
@pndwai

Thanks bros! I can confirm that the v2.3.1 mod fixed my situation. Kdragons v2.3.1 version worked until I updated to oxygenos12 c33 then my device would no longer pass basic integrity check. Confirmed using Play Integrity API Checker

Anyways, after flashing I am able to use google pay/wallet again. It doesnt pass strong integrity but I'm pretty sure I dont need that anyway.
 
  • Like
Reactions: pndwal

pndwal

Senior Member
I have flashed this mod and because of this mod I am stuck on boot logo now, I have xposed installed, can that be the reason?
Haven't heard reports of issues like that w/ this, but thinking about it now there may well be issues for A7 (probably not xposed related however):

Official versions disable Zygisk parts (fallback to BASIC triggers targeting the gms attestation process specifically) to re-enable A7 support...

It could be that @Displax's modded version doesn't properly disable the added fix which adds old A6 fingerprint prop targeting same gms attestation process (using Zygisk), and failure to run this may be causing your issues...

I hadn't thought that part through for your A7 device, and clearly the old fingerprint prop won't be applied in any case, so modded (unofficial) version won't benefit you anyway...

The solution for your custom setup to pass S/N & PI is will most likely be the traditional use of MHPC w/ configured fingerprint... You may need to spoof an older print to allow new PI API's MEETS_DEVICE_INTEGRITY but usually this isn't needed for Android 10 and less AFAIK...

@Displax / others may be able to expand on this observation... PW
 
Last edited:

ashish1989

Senior Member
Aug 22, 2014
411
33
Ghaziabad
I also deleted module from twrp manually, but still device is stuck on boot logo
Haven't heard reports of issues like that w/ this, but thinking about it now there may well be issues for A7 (probably not xposed related however):

Official versions disable Zygisk parts (fallback to BASIC triggers targeting the gms attestation process specifically) to re-enable A7 support...

It could be that @Displax's modded version doesn't properly disable the added fix which adds old A6 fingerprint prop targeting same gms attestation process (using Zygisk), and failure to run this may be causing your issues...

I hadn't thought that part through for your A7 device, and clearly the old fingerprint prop won't be applied in any case, so modded (unofficial) version won't benefit you anyway...

The solution for your custom setup to pass S/N & PI is will most likely be the traditional use of MHPC w/ configured fingerprint... You may need to spoof an older print to allow new PI API's MEETS_DEVICE_INTEGRITY but usually this isn't needed for Android 10 and less AFAIK...

@Displax / others may be able to expand on this observation... PW
Well I reflashed the rom now, but still my device is not certified on play store, as you said its not needed on devices below A10, I am not using any safetynet module now. But still thinking, what can be done for my old device now?
 

DocMAX

Senior Member
Nov 22, 2006
686
29
In YASNAC i'm stuck with "RESTORE_TO_FACTORY_ROM" advice. I am on latest Magisk with SafeNet Fix. No chance to fix.
 

pndwal

Senior Member
I also deleted module from twrp manually, but still device is stuck on boot logo

Well I reflashed the rom now, but still my device is not certified on play store, as you said its not needed on devices below A10, I am not using any safetynet module now. But still thinking, what can be done for my old device now?
I didn't say that... And you haven't said exactly what 'wasn't working' after your initial efforts ...

I said modded USNF version is not generally needed for deviceIntegrity verdict in A10 (or less) devices... A7 won't need Fallback to BASIC attestation type... Please read carefully...

However, for custom ROMs you likely need solutions to spoof fingerprint or security patch prop(s) to pass SafetyNets CTS Profile Match as well as to set / reset sensitive props that trip SafetyNet & Play Integrity APIs

If the @Displax modded USNF can be made to work (ie. Zygisk is active), it should also naturally fix this issue as a side benefit as it spoofs a passing A6 print. It will also set / reset sensitive props as needed... Nb. Some custom ROMs will do all this and pass S/N without Magisk by spoofing prints and setting sensitive props (also integrating Proton's SafetyNet Fix for A8+ ROMs) out-of-the-box. Some, eg. official LOS, never will...

If modded USNF cannot work (eg Zygisk cannot activate on your device or mod dis-allows Zygisk-targeted fingerprint prop application in addition to Zygisk-activated evaluation Type fallbacks - you'll only need the former, but I'm not sure whether it's active or not in A7), your best fix for SafetyNet's CTS Profile Match and sensitive props is the traditional MHPC configured passing fingerprint prop applied globally. Nb. MHPC will also also set / reset sensitive props as needed by default (unconfigured) and applies these global also...

Your issue w/ USNF may be with Zygisk. Are you getting Zygisk=Yes on home screen?... Nb. old Samsung devices w/ kernels before 3.19 may not be able to use Zygisk.
https://github.com/topjohnwu/Magisk/issues/5395

🙂 PW
 

Top Liked Posts

  • There are no posts matching your filters.
  • 5
    So 'a boring or unenterprising person' or a fan of "Casey Jones"?... You don't need to answer that! 😜
    "And you know that notion just crossed my mind." 🙃

    Had a quick look at mHide SafetyNet project though...
    Just from this:

    Magisk Module
    Module to help pass SafetyNet on devices that do not support hardware attestation...

    This module will
    • Generate a list of 'sensitive' properties on the device and set the values to the 'safe' setting(s) during boot.
    • Check and adjust some 'sensitive' properties during boot.
    • Set Magisk's Denylist to enforcing.
    • Add part of PlayServices to the DenyList.
    Requires Zygisk to be enabled in Magisk.
    ... I'm wondering:
    - Could this be made to be an ideal solution for older devices in the event that Zygisk fix in modded USNF cannot be activated for A7 and lower?
    That is the idea (attempt). 🙃

    Ie.
    • Do adjustments to sensitive props target only com.google.android.gms.unstable?
    • Can we not set Denylist to enforcing (for use with Shamiko etc)?
    • Can we do targeted hiding of root from com.google.android.gms.unstable process instead of adding this to denylist (like USNF)?
    (I'm assuming Magisk path is always in /sbin in legacy ramdisk booting devices; is this correct?)
    • Can we do com.google.android.gms.unstable targeted spoofing of the same old A6 fingerprint prop as @Displax's USNF mod uses to fix CTS Profile Match in uncertified ROMs? (Possibly this could be enabled as an option if there's any benefit leaving original fingerprint as is where ROM is stock... I'm not sure there is however...)

    At the time I started mHide SafetyNet, the only way to access the denylist was when enforcing.
    The only way to "hide" Magisk was to add SafetyNet and (if needed) GMS to the denylist.
    A lot has changed since then and part of the reason I shelved the project.
    mHideSN still works on newer devices that do not support 'Hardware attestation'.
    Plan to update and cleanup one more time before archiving the repo.

    ---

    As for merging parts of mhsn into USNF..

    The 'com.google.android.gms' part is only to "hide" Magisk from SafetyNet when enforcing the Denylist.
    Only added on Android 7.x and older with Magisk 24.x and newer.
    Adapted from the 'MagiskHide' code purge. Lines 230-231 | Lines 249-256
    Became the 'set_default_list' function.​

    Since there are now other methods to "hide" Magisk..
    I currently only included a denylist check for Android 7.x and below.
    Not the part to enforce the denylist.

    Not sure if other methods like 'Shamiko' work on Android 7.x and below?

    When other methods of "hiding" Magisk started coming out.
    Most of them using the denylist (instead of creating their own list).
    I was not sure if any current or future, needed to add gms to the denylist list?
    - Part of the reason for commit.

    ---

    Setting the sensitive [secure] prop(s) to the safe value is only limited to what I and others have found.
    This part works across all Android versions.
    Using a system.prop file for some and the resetprop command in the service script for others.​

    The 'system.prop' file is generated during the install.
    I tried to move them all into the service and/or post-fs script(s) to be more dynamic (check and adjust during boot) but, ran into some issues.
    Some device/manufacture props do not exist until very late after boot complete if at all.
    So back to creating a system.prop file during the module install.​

    If the following prop(s) exist, it is added to the system.prop file regardless of the current value.
    The prop is added with the safe value.
    I would prefer to only add insecure props with the safe value but, this is a work-a-round in case the props are set by another module(s).​
    These props will be set shortly after the post.fs stage.
    ro.adb.secure=1
    ro.boot.selinux=enforcing
    ro.boot.warranty_bit=0
    ro.build.tags=release-keys
    ro.build.type=user
    ro.debuggable=0
    ro.is_ever_orange=0
    ro.odm.build.tags=release-keys
    ro.odm.build.type=user
    ro.product.build.tags=release-keys
    ro.product.build.type=user
    ro.system.build.tags=release-keys
    ro.system.build.type=user
    ro.vendor.boot.warranty_bit=0
    ro.vendor.build.tags=release-keys
    ro.vendor.build.type=user
    ro.vendor.warranty_bit=0
    ro.warranty_bit=0
    Props that are checked and adjusted if need be in service script.
    If 'ro.boot.mode' is recovery, set to unknown
    If 'ro.bootmode' is recovery, set to unknown
    If 'vendor.boot.mode' is recovery, set to unknown

    If 'ro.boot.hwc' is CN, set to GLOBAL
    If 'ro.boot.hwcountry' is China, set to GLOBAL

    If 'ro.build.selinux' exists, delete (remove) it.
    I still question this one but, it was part of 'MagiskHide'.
    'ro.boot.flash.locked' if not 1, set to 1
    'ro.boot.vbmeta.device_state' if not locked, set to locked
    'ro.boot.verifiedbootstate' if not green, set to green
    'ro.boot.veritymode' if not enforcing, set to enforcing
    'ro.secure' if not 1, set to 1
    'sys.oem_unlock_allowed' if not 0, set to 0
    'vendor.boot.vbmeta.device_state' if not locked, set to locked
    'vendor.boot.verifiedbootstate' if not green, set to green

    Currently USNF includes a 'system.prop' file.
    By generating the 'system.prop' file during the install instead, we can check if the prop exists before adding it.
    This will help from adding non-native props to the device.
    Currently any one using USNF has the OnePlus and Samsung props set.
    No matter if it is a Google, LG, Motorola, Poco, ...., Xiaomi device.

    ---

    Without the Zygisk part of the module, You would have to set the fingerprint globally.
    The same as the MHPC module does.
    Set props early (post-fs) you will change it across the board.
    Set props late (service) you will set it after system has started.
    For example of the difference between setting props early and late, see my question and flar2's response in the DevCheck thread - Post #258.​

    ---

    Hope it helps explain more than confuse. 🙃

    Cheers. :cowboy:
    5
    Strong integrity = hardware attestation, basically, so no, no way to fix AFAIK. OnePlus devices at least up to the OnePlus 9 Pro still shipped stock with broken hardware attestation, so there's no way at all of getting it working on those devices.
    4
    Hi all,

    Does anyone know if there is any fix for the "MEETS_STRONG_INTEGRITY" ?
    From what I've read, the "MEETS_DEVICE_INTEGRITY" and "MEETS_BASIC_INTEGRITY" are fixable using Displax's fix on the USNF (thank you so much for this).

    However, i didn't found anything related the strong integrity.
    Is this correct, or have I missed some step?
    I'm facing this on a OnePlus 5 and a Nothing 1

    Thanks
    Yes; purchase an Asus ROG Phone 3!

    This is the only device I know of where the OEM has messed up the Keymaster implementation in such a way that it will pass MEETS_STRONG_INTEGRITY verdict w/ unlocked bootloader... Other device's may also...

    An app requiring new MEETS_STRONG_INTEGRITY is equivalent to requiring old CTS Profile Match using HARDWARE_BACKED evaluationType. As such, banks have not yet required either (although they could) as doing so would exclude users / customers with
    1) Many late devices (many OnePlus and others) with broken keymaster implementations.
    2) Devices launched with Android 7 and earlier, even if running late Android.

    🤠 PW
    4
    That's what I have... (But Xiaomi device w/ A10)...
    The 1st thing i did was to put play services and frameworks to denaylist.
    ... Better remove everything from there except bank apps etc... PW
    3
    As the use of Play Integrity (and its likely descendants) continues to spread, more and more apps will cease to function fully (or at all) on a rooted/modded device.

    Sure, rooting will still be possible, but rooted devices will become more and more crippled for normal use as time goes on.

    Im not super concerned, but if it ever gets that bad, i reckon we start a class action and call it "classroot" or "right to root", which here in Oz would have an entirely different context....
  • 277
    Universal SafetyNet Fix
    Magisk module​

    Magisk module to work around Google's SafetyNet attestation.

    This module works around hardware attestation and recent updates to SafetyNet CTS profile checks. You must already be able to pass basic CTS profile attestation, which requires a valid combination of device and model names, build fingerprints, and security patch levels.

    If you still have trouble passing SafetyNet with this module, use MagiskHide Props Config to spoof a certified device profile. This is a common issue on old devices, custom ROMs, and stock ROMs without GMS certification (e.g. Chinese ROMs).

    Android versions up to 13 Beta 3 are supported, including OEM skins such as Samsung One UI and MIUI.

    How does it work?
    The way this workaround works is relatively low-level. An in-depth explanation, as well as source code and ROM changes, can be found on GitHub.

    Ideally, this workaround should be incorporated in ROMs instead of overriding part of the ROM in a Magisk module. The ROM changes for it are linked above for ROM developers to use.

    Downloads
    Downloads and changelogs can be found on GitHub. The topmost release is the latest.

    Latest release
    v2.3.1

    Highlights
    • Fixed fingerprint on OxygenOS/ColorOS 12 (@osm0sis)
    • Support for Magisk 24+ module updates (@benjibobs)
    • Restored support for Android 7
    Other changes
    • Spoofed OnePlus OEM unlock status for futureproofing (@osm0sis)
    • Minor code improvements
    This version only supports Zygisk (Magisk 24 and newer).

    Source code

    If this helped you, please consider donating to support development: recurring donation for sustainable support or buy me a coffee. Thank you for your support!
    132
    So, here is my modification of USNF with Play Integrity API bypass.

    It changes fingerprint to old 7.1.2 6.0 (LOL) and apply it only for GMS SafetyNet process (by Zygisk injection), so your original prints/security path level does not change. This avoids many side effects/problems with global props changing.

    Updated:
    Drop fingerprint to lowest possible (6.0) to ensure that no one use same Android version

    Usage:
    1. Delete/disable/reset MagiskHidePropsConfig (if installed).
    2. Just install it over old Universal SafetyNet Fix and reboot device.

    Many thanks to @1nikolas for integrity checker.

    Source code: https://github.com/Displax/safetynet-fix/tree/integrity
    30
    Folks, the SafetyNet API was depreciated last Month with 'full turndown' slated for June 2024 and the introduction of the new Play Integrity API. It has also become clear that Google apps are simply the first to adopt the long foretold Play Integrity API; all responsible banks are bound to follow suit in short order, and at least before the June 2023 migration deadline.

    This means (assuming fully deployed Hardware Key Attestation doesn't come first 😬) that the need for a 'Universal Play Integrity Fix' has become quite urgent.

    We currently have workarounds involving using older fingerprint props by means of MHPC module (similar to fix needed for uncertified ROMs), but success/mileage varies per device and users of regular bank apps / gamers etc on stock devices will all soon be forced to experiment with MHPC prints also... This is hardly ideal.

    So I've made an issue report/request on USNF GitHub as follows. This information may be insightful to users here also...

    Please let me know here if I have missed anything important, or add any technically relevant details there...

    PLEASE DON'T spam that issue with unimportant details or queries... (The previous issue is already burgeoning w/ OT.) That's what this thread is for... 😛 :

    Please make 'Universal Play Integrity Fix' ... #204

    Fixes to expand 'Universal SafetyNet Fix' to become a 'Universal Play Integrity Fix' are needed.

    The SafetyNet Attestation API is deprecated and has been replaced by the Play Integrity API.
    https://developer.android.com/training/safetynet/deprecation-timeline

    New Play Integrity API is rolling out from June 2022, and evidently Google Play Store and Google Pay/Wallet are already using its verdict.

    June 2023 is the Migration Deadline for app developers. This will also allow their older app versions to continue working with SafetyNet API for a limited time.

    June 2024 is the End of life for SafetyNet API; its attestation will no longer work for any app version, and apps will receive an error.

    The new Integrity API has more strict requirements for passing attestation, and this seems to be enforced in Android 11+ particularly.

    Currently (evidently due to this), device security issues are detected by

    1. Google Pay/Wallet, which may state "You can't pay contactless with this device...(Your phone doesn't meet software standards)" on updating or attempting to add a card despite in-app Contactless setup stating "You're ready to pay contactless with your phone (Your phone meets security requirements)", and
    2. Google Play Store, which may no longer show apps like Netflix w/ Android 11+ (developers can 'exclude devices from their app's distribution based on their device integrity . Device exclusion is based on the latest device integrity verdict that the Play Store app receives from the Play Integrity API') despite in-app settings showing Play Protect 'Device is certified' result.
    I'm guessing that the 'passing' messages based on the old SafetyNet API are likely to realigned soon.

    A workaround that evidently allows Play Integrity API attestation to pass (and solve Wallet / Play Store issues also) has been discovered. It involves spoofing an earlier certified ROM, generally by using MagiskHide Props Config module to change fingerprint prop to one for Android 10 or earlier.

    Undoubtedly other apps will begin to detect broken TEE etc / fail as they migrate or begin integrating the Play Integrity API.

    A 'Universal Play Integrity Fix' will evidently require more understanding / research into how the fingerprint prop is used, and possibly other new behaviours.

    Here's hoping... 🙃 PW
    28
    ok so there is a solution

    get the magisk module riru

    after you get riru get LSPosed

    after you get LSPosed get xprivacylua (in the LSPosed app)

    select play services in the xprivacylua settings IN the LSPosed app

    AND in the xprivacylua app itself after you've restarted.

    clear play service data

    check safetynet in magisk - enjoy?

    I would reboot between each step just to be safe but I know it's necessary to load the xprivacylua module

    s/o to saitama_96 for discovering it or so I'm led to believe
    26
    Some useless statistics:
    My MOD was downloaded over 2k times.
    1,5k from XDA
    800 from GitHub

    I'm glad i made 2000+ people happier :) Thank you!