No description
Find a file
2023-11-19 15:00:02 -07:00
emulated fix requirements issues 2023-11-17 21:43:47 -05:00
examples remove cloudkit stuff not ready yet 2023-10-23 12:41:59 -04:00
icloud remove cloudkit stuff not ready yet 2023-10-23 12:41:59 -04:00
proxy log everything to file 2023-10-11 20:01:31 -04:00
pypush rename demo.py to __main__.py 2023-11-19 14:59:10 -07:00
requirements add dev dependency requirements 2023-11-19 15:00:02 -07:00
.gitignore major refactor 2023-10-21 20:39:40 -04:00
LICENSE Add licensing information 2023-08-02 11:42:06 -04:00
poetry.lock initiate poetry project 2023-11-19 14:56:23 -07:00
pyproject.toml initiate poetry project 2023-11-19 14:56:23 -07:00
README.md adjust installation instructions 2023-11-19 14:57:08 -07:00

pypush

pypush is a POC demo of my recent iMessage reverse-engineering. It can currently register as a new device on an Apple ID, set up encryption keys, and send and receive iMessages!

pypush is completely platform-independent, and does not require a Mac or other Apple device to use!

Installation

It's pretty self-explanatory:

  1. python3 -m pip install pipx
  2. python3 -m pipx ensurepath
  3. pipx install git+https://github.com/beeper/pypush@async
  4. pypush

For Developers

  1. git clone -b async https://github.com/beeper/pypush
  2. cd pypush
  3. Install pypush and dependencies
    • via pip & requirements.txt (A virtual environment is recommended)
      1. python3 -m pip install -r requirements/requirements.txt
      2. python3 -m pip install -r requirements/requirements-dev.txt
      3. python3 -m pip install --editable ./pypush
    • via Poetry
      1. poetry install
      2. poetry shell

Troubleshooting

If you have any issues, please join the Discord and ask for help.

Operation

pypush will generate a config.json in the repository when you run demo.py. DO NOT SHARE THIS FILE. It contains all the encryption keys necessary to log into you Apple ID and send iMessages as you.

Once it loads, it should prompt you with >>. Type help and press enter for a list of supported commands.

Special Notes

Unicorn dependency

pypush currently uses the Unicorn CPU emulator and a custom MachO loader to load a framework from an old version of macOS, in order to call some obfuscated functions.

This is only necessary during initial registration, so theoretically you can register on one device, and then copy the config.json to another device that doesn't support the Unicorn emulator. Or you could switch out the emulator for another x86 emulator if you really wanted to.

Public key caching

iMessage will cache public keys. If you get decryption errors in pypush or can only send and not receive messages from another device, try logging out and back into iMessage on that device, forcing it to refresh it's key cache. Alternatively, you can wait and the cache should expire eventually.

Licensing

This project is licensed under the terms of the SSPL. Portions of this project are based on macholibre by Aaron Stephens under the Apache 2.0 license.

If you would like to use all or portions of this project in a commercial produce (without releasing source code), we are open to contacts about possible dual-licensing terms.