Droid-ify / client

F-Droid client with Material UI.
GNU General Public License v3.0
3.17k stars 70 forks source link

Make Drodify compatible with microG / signature spoofing #765

Open Lanchon opened 3 days ago

Lanchon commented 3 days ago

Is your feature request related to a problem? Please describe. Droidify cannot upgrade microG, so i have to keep F-Droid client around just for that.

the reason is microG uses signature spoofing: it is signed with its own signature, and android will accept updates only signed with same signature, just like any app. but... if anyone asks (Droidify included), android will answer that microG is signed with google's key.

this is required because proprietary client libraries made by google and included in most Play Store apps will not talk to microG if its signing key is not google's.

btw, signature spoofing is a modification of the android OS precisely to allow this kind of thing.

so when Drodify checks compatibility of any app that uses signature spoofing on a signature spoofing-enabled OS, it will believe that the app is incompatible and not install it. when in reality if it tried the install, it would succeed.

Describe the solution you'd like the best solution would be a per-app setting that disables signature checks. a good solution would allow notifications of updates, and would not be hard-coded to microG, as other hacks use signature spoofing (i personally use it to hack 3rd party apps).

Describe alternatives you've considered an option to manually force install instead of a per-app setting. not good, as it would not notify of upgrades. however, an additional option to force install would be welcome. (eg: when you click an apk version you get the mismatched signature dialog, but an option there to "install anyway".)

Additional context some people use other android modifications to allow app downgrades and/or disable signature checks. once such solution is the CorePatch Xposed module. using this module you can switch from a play store edition of an app to an f-droid edition. in fact, one user is already asking for this.

and since we are on the subject, the "install anyway" option -if implemented- should also be shown in the cannot downgrade dialog (as some people have OSes in which you actually can downgrade).

Lanchon commented 3 days ago

@Iamlooker,

ok so i saw your reply here: https://github.com/Droid-ify/client/issues/255#issuecomment-2208086829

unfortunately i don't use telegram (privacy concerns), so i'll have to wait.

what did you implement? a per-app setting or a force install option?

Lanchon commented 3 days ago

i just saw the commits, looks like you added a global setting.

this will try to upgrade apps coming from the play store; not really ideal, but better than no option.

Iamlooker commented 3 days ago

I just added a global toggle, its only for advanced users. I was actually asked repetitively for this one feature even when I stated that I was focusing on other stuff. I will polish this in future, also thanks for a very clear description. Any further info about implementation of this feature is also welcomed as I am not that informed about this topic :)

Iamlooker commented 3 days ago

You can download the app inside a zip from here (https://github.com/Droid-ify/client/actions/runs/9772987579). Use the website not the app, just in case.

Lanchon commented 3 days ago

thanks! for the time being, i'll keep F-Droid running in the background.

what i did was, i disabled all repos in F-Droid except for microG's (the only one using signature spoofing). this is better than toggling the new global switch because i have some apps downloaded directly from author (via Aurora, Obtainium, or whatever) and i don't want Droidify to notify of updates it can't apply. (yes, in the general case i very much like the signature checking Droidify always had.) this is the case for apps such as Signal, that i want with google's push support (through microG).

so F-Droid only shows up in case of a microG update, which is a rare event. in essence, i'm improvising a per-repo setting, by which only one repo will ignore signatures. however i think a per-app setting is not only better, but much easier to implement, as Droidify already has per-app settings such as "ignore all updates"


one final note is that i could enable your new global toggle, then go one-by-one to the apps installed direct from author and disable all Doridify updates for such apps. this would work, but would require an additional action for every new such app, which i want to avoid. for now, having F-Droid in the background is best.