<h1 align="center">extraire</h1>

<p align="center">
<a href="https://github.com/beerpiss/extraire/actions"><img alt="Actions Status" src="https://github.com/beerpiss/extraire/actions/workflows/build.yaml/badge.svg"></a>
<a href="https://github.com/psf/black"><img alt="Code style: black" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>
<a href="https://github.com/beerpiss/extraire/blob/trunk/LICENSE"><img alt="License: 0BSD" src="https://img.shields.io/static/v1?label=License&message=0BSD&color=brightgreen"></a>
<img alt="Supported Python versions: 3.6.2, 3.7, 3.8, 3.9, 3.10" src="https://img.shields.io/badge/python-3.6.2%20%7C%203.7%20%7C%203.8%20%7C%203.9%20%7C%203.10-blue">
</p>

> extraire (verb): to extract

Simple program to dump onboard SHSH blobs with a valid generator for **jailbroken** iOS devices. Supports Windows, macOS and Linux.

## What's this?
This program dumps the IMG4 ApTicket from /dev/disk1 on the device, copies it to your computer and converts it to a valid SHSH blob, no external dependencies required.

Even though the dumped SHSH blob is valid, you will still be limited by a few factors:
- SEP/Baseband/Rose firmware compatibility with the currently signed iOS version
- If you've updated to your current iOS version with the Settings app, you cannot use the dumped blob without a bootROM exploit (e.g. checkm8).

## Requirements
OpenSSH Server installed on your jailbroken device. That's it!

## Installation
### From PyPI
```
pip install -U extraire
```
### Standalone binaries
Standalone binaries for Windows, macOS and Linux can be found [here.](https://github.com/beerpiss/extraire/releases/tag/v0.1.4)

You will need to allow executable permission for macOS and Linux after downloading. Run `chmod +x /path/to/extraire` in a terminal (replace `/path/to/extraire` with the actual path).

## Usage
Run `extraire` only for an interactive guide.

```
❯ extraire --help
usage: extraire [-h] [-p PASSWORD] [-o OUTPUT] [--non-interactive] [HOST[:PORT]]

positional arguments:
  HOST[:PORT]           The device's IP address

optional arguments:
  -h, --help            show this help message and exit
  -p PASSWORD, --password PASSWORD
                        The device's root user password
  -o OUTPUT, --output OUTPUT
                        Where to save the dumped blob
  --non-interactive     Don't interactively ask for missing value (assume default if missing)
```

## Running/building from source
Clone this repo, install the dependencies with `poetry install` or `pip install .`, and run `python3 -m extraire`

To build a wheel, do `poetry build`.

## Credits
[tihmstar](https://github.com/tihmstar): without his [img4tool](https://github.com/tihmstar/img4tool) code I wouldn't be able to write code for dealing with IMG4s in Python.
