JJTech0130 / pypush

[being rewritten] Cross-platform iMessage POC
https://discord.gg/BVvNukmfTC
Other
3.52k stars 397 forks source link

Participant identities being mistaken as fake accounts #90

Closed SundayPowerEndre closed 6 months ago

SundayPowerEndre commented 6 months ago

Hey,

I have two Apple Id users connected to each their email, and have them setup on two seperate Apple product.

I am able to use IMessage to send messages between the two devices. This worked fine with this project on the 26th of November as well, however when i returned to attempt to test it again now i get an error.

imessage.py:566 mailto:****@duck.com has no identities, this is probably not a real account imessage.py:566 mailto:****@gmail.com has no identities, this is probably not a real account

This is from the async branch as suggested by @Cypheriel on the issue #74.

Do you guys have a stable branch or working version that i can use to develop? 🤞🏽

SpaceSaver commented 6 months ago

Apple broke it again

SpaceSaver commented 6 months ago

We have no fix currently

Kasherpete commented 6 months ago

Actually, this has always been an issue for as long as I can remember. However yes, Apple did break it again so even if this issue was fixed we'd still need to fix Apple's ban of Pypush.

SpaceSaver commented 6 months ago

Actually, this has always been an issue for as long as I can remember. However yes, Apple did break it again so even if this issue was fixed we'd still need to fix Apple's ban of Pypush.

It was always Apple and never Pypush at fault for this issue. Apple limits the number of queries you can do for identities based on your account score. Pypush being missing many attributes of a real Mac tanked your score so you were subject to limits soon after signing in. This is what Beeper initially considered to be the "warm up" period. These limits would eventually go away, but Apple seems to have made it so that Beeper's Macs, Beeper Mini, Pypush, and iMessageGo are all permanently stuck in this warm up period.

Kasherpete commented 6 months ago

all permanently stuck in this warm up period.

Interesting... any confirmation on this?

SpaceSaver commented 6 months ago

all permanently stuck in this warm up period.

Interesting... any confirmation on this?

No, but to me, that's what it looks like...

biemster commented 6 months ago

Wouldn't that mean that accounts with a good score would still be able to use pypush?

maryjeck commented 6 months ago

Wouldn't that mean that accounts with a good score would still be able to use pypush?这难道不意味着得分高的帐户仍然可以使用 pypush 吗?

That’s not necessarily true. After a real account logs in with pypush, it still shows ” has no identities. This is probably not a real account.“

biemster commented 6 months ago

Yes that is what confuses me. When I login with pypush with my test account, I get "no identities" for everything, also for that logged in account. But when I hack the facetime js a bit to do the lookups, I get proper identities returned, even for that same test account. So the problem does not seem to be with accounts not having identities, but with the way pypush does lookups (or logins)?

Kasherpete commented 6 months ago

Wouldn't that mean that accounts with a good score would still be able to use pypush?

From what it seems, yes. But very rarely.

SundayPowerEndre commented 6 months ago

Thanks for replying and following up on this, from the conversation it seems like you guys have been able to make test accounts that got out of the "warm-up" periode at some point in the past.

Do you have any ways to make accounts that Apple will deem "real"?

SpaceSaver commented 6 months ago

Thanks for replying and following up on this, from the conversation it seems like you guys have been able to make test accounts that got out of the "warm-up" periode at some point in the past.

Do you have any ways to make accounts that Apple will deem "real"?

It's not that your account isn't real, it's that it thinks the account you're trying to contact isn't real.

SundayPowerEndre commented 6 months ago

Thanks for replying and following up on this, from the conversation it seems like you guys have been able to make test accounts that got out of the "warm-up" periode at some point in the past.

Do you have any ways to make accounts that Apple will deem "real"?

It's not that your account isn't real, it's that it thinks the account you're trying to contact isn't real.

I might be a bit confused, but which "it" is it that thinks the account is not real?

Regardless of that, it seems like it is non-trivial to setup a development environment if i do not already have several accounts with good scores, which is what i was attempting to do initially.

SpaceSaver commented 6 months ago

Pypush believes the account you are trying to contact is not real.

SpaceSaver commented 6 months ago

if i do not already have several accounts with good scores, which is what i was attempting to do initially.

Please note that we condemn the use of Pypush in environments with excessive numbers of accounts being used to send spam.

SundayPowerEndre commented 6 months ago

To be clear, my initial though was to setup a dev environment so i could contribute to the project. I might have triggered a spam detection while trying to setup things but that would surprise me given the low volume of messages.

I do not use imessage regularly, it is not as common in my country, which would explain why both the accounts have low scores.

If there is no way to bypass the check on the client side, im guessing it will not be feasible to contribute to the project.

0xmerp commented 6 months ago

Afaik you don't necessarily have to have been a heavy iMessage user to have a good internal "account score". Adding a payment method, setting up 2 factor authentication, having a history of activations of legitimate devices, and/or making any purchase on the account are all known to improve your account's score.

The check that's failing is server sided so you can't just bypass it on the client side without fixing the underlying issue. But tbh, if you really want to, helping to resolve issue in itself is something that would be useful to contribute. That's kind of the nature of a reverse-engineering type project.

Erisfiregamer1 commented 6 months ago

I have a pretty good score (made a lot of purchases, have 2 factor...) and Pypush won't work for me.

SpaceSaver commented 6 months ago

I have a pretty good score (made a lot of purchases, have 2 factor...) and Pypush won't work for me.

New update from Beeper suggests that you need to generate your own data.plist

biemster commented 6 months ago

I think a few people did this, without success? Maybe they were just planning though, but never actually did it..

biemster commented 6 months ago

Alright, I can confirm too that a good data.plist will fix this issue.

SpaceSaver commented 6 months ago

Alright, I can confirm too that a good data.plist will fix this issue.

Good meaning:

  1. Not used for >~10 account
  2. From a Mac theoretically compatible with Mountain Lion
jzhr commented 6 months ago

@biemster how did you generate a good data.plist?

biemster commented 6 months ago

I've got an old macbook air, https://github.com/JJTech0130/nacserver can generate it. If that does not work for you, https://github.com/Smoothstep/apple-gen-rs should be able to create the individual entries in the plist from just the device info strings but that requires some fiddling.

maryjeck commented 6 months ago

I've got an old macbook air, https://github.com/JJTech0130/nacserver can generate it. If that does not work for you, https://github.com/Smoothstep/apple-gen-rs should be able to create the individual entries in the plist from just the device info strings but that requires some fiddling.

how to use apple-gen-rs ,I just build the wheel ,and got a byte data. how could i use the data

biemster commented 6 months ago

There is a single line in the code (but it depends on which branch you are): vd = emulated.nac.generate_validation_data() Replace that with how you got that byte data.

maryjeck commented 6 months ago

There is a single line in the code (but it depends on which branch you are): vd = emulated.nac.generate_validation_data() Replace that with how you got that byte data.

In the async branch, there seems to be no such code. It directly references the data.plist file

biemster commented 6 months ago

image