Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to Grindr 9.7.0 #45

Merged
merged 22 commits into from
May 7, 2023
Merged

Update to Grindr 9.7.0 #45

merged 22 commits into from
May 7, 2023

Conversation

TebbeUbben
Copy link
Contributor

@TebbeUbben TebbeUbben commented Apr 18, 2023

Fixes the obfuscations for Grindr 9.7.0 to help with #43 and #44.

@RobbieTechie
Copy link
Contributor

const val grindr_gold_star_gay = "F"
const val grindr_pure_white = "V"

May help with the addExtraProfileFields

@RobbieTechie
Copy link
Contributor

Also under the storage section for your pull request you have

object IUserSession_ {
const val hasFeature_feature = "a"
const val isFree = "g"
const val isNoXtraUpsell = "y"
const val isXtra = "o"
const val isUnlimited = "x"
}

        the isFree section should contain an "r" and the isNoXtraUpsell is the "g".  the "y" you have in there is actually tied to a Plus role check, the code under "y" is this

public boolean y() {
boolean f;
f = a1.f(this.l, Role.PLUS);
return f;
}

The isNoXtraUpsell does a check to see if you are already Xtra or Unlimted, the code under the g() method is this

public boolean g() {
return (o() || x()) ? false : true;
}

so it checks to see if you are Xtra or Unlimited, if not then it pushes advertisements for you to upgrade. But I believe your code would still work as it will still give most of the functionality for the Xtra and Unlimited sections

Fix makeMessagesAlwaysRemovable
Fix notifyBlockStatusViaToast
Fix UserSession obfuscation
@TebbeUbben
Copy link
Contributor Author

Thanks! I've implemented your feedback among other fixes.

@TebbeUbben TebbeUbben changed the title Update to Grindr 9.6.0 to support the most basic functionality Update to Grindr 9.6.0 Apr 18, 2023
@RobbieTechie
Copy link
Contributor

Awesome, thank you for doing this pull request, hopefully ElJaviLuki will be able to still build an official update. If those changes for the Extra profile fields doesn't work, we can look at it a little more, but I tested a build with those changes already and they were showing up for me, so it should fix that part. Nice work on the update !!!

@ProfessionalMD5
Copy link

ProfessionalMD5 commented Apr 18, 2023

[Off-topic comment]

Hey, guys. I'm happy to see you working in this project. I like it a lot, and I hope to become a good developer one day to also help you all.
Thanks for the work!

@RobbieTechie
Copy link
Contributor

RobbieTechie commented Apr 20, 2023

I found one more change to improve things for the always make messages unsendable. It was not allowing that to take place with older messages. If you update Obfuscation.kt, it's line 142 for me, and change it to read

const val _canBeUnsent = "Y1"

so simply change the w1 to a capital Y1, then the app was letting me unsend any message regardless of how old it is.

I was not seeing any errors in logcat, it just wasn't working, but that update fixed it.

Pretty much the only thing left is the viewed me portion, and I know they've moved the code around with that...

I hope things are going good for you and for ElJaviLuki too if he reads this 😊

@TebbeUbben
Copy link
Contributor Author

I have added another mod that converts blocks and unblocks to chat messages instead of giving you a toast notification.

Screenshot_20230421-173603~2

@TebbeUbben
Copy link
Contributor Author

TebbeUbben commented Apr 22, 2023

My latest changes prevent chats from being forcefully deleted even if you block a user yourself. I also have an idea how to hook the retrofit services, which should allow me to get the viewed me portion working again and provide a local implementation of the saved phrases api.

@TebbeUbben
Copy link
Contributor Author

Saved phrases work now, too. Be aware that they are stored locally on the device now and will be lost if you uninstall Grindr, change phones etc.

@RobbieTechie
Copy link
Contributor

RobbieTechie commented Apr 23, 2023

Everything is working great here!!! I tested on both a physical device and an emulator, one with EdXposed and one with LSPosed, and they both work flawlessly, just to give you a little feedback.

May I ask a question?
I'm not sure if you've ever looked at the API traffic but Grindr logs almost everything you do such as who you view, where you are in the app such as which section, etc and posts it to "https://grindr.mobi/v3/logging/mobile/logs"
Not the same as the preventing profile views, this is happening constantly, even before you are logged into the app.

This is beyond my current knowledge if it is possible or not, and I've read some xposed tutorials and looked at StackOverflow, and everything I've read says you can't stop/modify abstract interfaces/methods...
One person mentioned something about cloning I think they called it. Another mentioned copying every method or interface, which sounds like a lot more hooking/modifying that should be needed.

I saw you're update about proxy and retrofit, and wondered it it is possibly to modify the object in an anstract method, so it makes an empty post, or somehow if it can be disabled?

the packages are:
com.grindrapp.android.api.d
com.grindrapp.android.api.d.a(RequestBody, Continuation<? super a<a, ? extends ResponseBody>>) Object

grindrlogging

grindrlogging2

grindrlogging3

Also Thank you for the awesome updates, it's appreciated greatly

Edit: I forgot to mention that I looked those up using Jadx, I wasnt sure if that even mattered

@TebbeUbben
Copy link
Contributor Author

TebbeUbben commented Apr 23, 2023

Thanks for your suggestion; I've implemented that functionality.

As you've said, you cannot hook interfaces and abstract methods. You have to find the actual implemention. Retrofit makes this a little harder because it uses Dynamic Proxy Classes to implement service interfaces, which means that the classes that implement the methods don't exist at compile time and are dynamically created at runtime. So, I just hooked Retrofit.create() instead and waited for it to create these proxy classes.

My original solution was to just hook the proxy classes then, which worked quite well on WSA. But on my actual phone, the app crashed because param.args was always empty. As a workaround, I no longer use XPosed for hooking here and create another proxy class instead now to redirect all method calls to the InvocationHandler of Retrofit except for the methods that I want to change.

@RobbieTechie
Copy link
Contributor

Thank you so much for sharing info on this!!! I was honestly lost on how to do this. I definitely need to learn a lot more. Thank you again!!! I hope you are doing good !!!

@TebbeUbben TebbeUbben changed the title Update to Grindr 9.6.0 Update to Grindr 9.7.0 Apr 25, 2023
@TebbeUbben
Copy link
Contributor Author

Updated to Grindr 9.7.0. Profile ID is the only working extra profile field for now because they've moved things around again. Testing is greatly appreciated.

@RobbieTechie
Copy link
Contributor

RobbieTechie commented Apr 25, 2023

It's working good here! Logcat isn't showing any errors

@signed-log
Copy link

signed-log commented Apr 27, 2023

Working good on LSPosed (physicial device) here

@TebbeUbben
Copy link
Contributor Author

I've added another feature which makes Grindr use a three column layout for favorites now.

@donutnotnut
Copy link

Hey bruv, I really appreciate your work on this project but I don't think the developer is interested in allowing the merge any time soon, maybe you might just release latest version under your profile? I really want to say but thanks to you for all the work you did, and I'm sure there are more people that are happy to see you supporting this project! Thanks ❤️❤️❤️

@Sureillplay
Copy link

Could someone help a newbie out? How do I apply this on my patch? Can I compile the code into an apk or something?

@donutnotnut
Copy link

Could someone help a newbie out? How do I apply this on my patch? Can I compile the code into an apk or something?

Same thing tbh, you just need to build the APK yourself, you can search it up on Google, requires kind of a lot of effort for a user that never did it, so depending on this it's either good for you or not

@Sureillplay
Copy link

Couldn't they upload a new version? Or could anyone upload the apk here? I don't know how to do that

@ProfessionalMD5
Copy link

ProfessionalMD5 commented May 17, 2023

https://anonfiles.com/d7r4L5r9z0/app_debug_apk

@Sureillplay, @donutnotnut, I only have the unsigned .apk I built myself

@Sureillplay
Copy link

I think it worked! thank you so much. Let's see how long until they force another update though 😅

R0rt1z2 referenced this pull request in R0rt1z2/GrindrPlus Apr 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants