I wanted to find a specific message a friend sent me a while back, but we've sent so many messages back and forth it was impossible to find. Here's how you can access your entire text message history provided your iPhone is jailbroken.
First off, you'll need
openSSH
installed. The password for
root
and
mobile
accounts is
alpine
by default. You should change it immediately to something secure, like
hunter2
or
password
.
SSH into your iPhone. The local IP should be available under
Settings > WiFi > Whatever network you're on > IP Address
. Ignore my hell-themed hostnames — it's been a rough semester. It should look something like
this.
nots@abyss ~ $ ssh root@192.168.0.101
root@192.168.0.101s password:
root@abaddon ~ #
If you're not connected to the same network as your phone, or are disappointed in the speed of your connection, you can SSH into your iPhone over a USB connection.
First, install the following:
nots@abyss ~ $ sudo apt install libimobiledevice6 libusbmuxd-tools
Then connect your iPhone to your computer with the USB cable and run
nots@abyss ~ $ iproxy 2222 22 &
You can then SSH using port
2222
with default password
alpine
.
nots@abyss ~ $ ssh mobile@localhost -p 2222
mobile@localhost's password:
mobile@abaddon ~ #
Everything we need is located in
/var/mobile/Library/SMS/
mobile@abaddon /var/mobile $ cd /var/mobile/Library/SMS
mobile@abaddon ~/Library/SMS $ ls
Attachments Drafts EmergencyAlerts sms.db sms.db-shm sms.db-wal
mobile@abaddon ~/Library/SMS $
I've never had good luck doing anything over SSH on my iPhone, so I just elected to SCP everything to my desktop and work from there.
mobile@abaddon ~/Library/SMS $ scp sms.db nots@192.168.0.104:~/
The authenticity of host '192.168.0.104 (192.168.0.104)' can't be established.
Are you sure you want to continue connecting (yes/no)? yes
nots@192.168.0.104's password:
sms.db 100% 2404KB 2.4MB/s 00:01
mobile@abaddon ~/Library/SMS $ scp -r Attachments nots@192.168.0.104:~/
nots@192.168.0.104's password:
...
mobile@abaddon ~/Library/SMS $
We can now use a database browser to view our texts. I'm partial to
sqlitebrowser
which is in the default Ubuntu repositories.
nots@abyss ~ $ sudo apt install sqlitebrowser
nots@abyss ~ $ sqlitebrowser sms.db &
nots@abyss ~ $
The
handle
table has a list of all the numbers you've texted. Use the following to grab the message handle of the
conversation you wish to view.
xxxyyyzzzz
is the phone number I'm interested in with no special characters, and no spaces.
SELECT * FROM `handle` WHERE `uncanonicalized_id` LIKE 'xxxyyyzzzz';
You should get the following
ROWID | id | country | service | uncanonicalized-id |
---|---|---|---|---|
178 | +1xxxyyyzzzz | us | iMessage | xxxyyyzzzz |
Make note of the
ROWID
, it's the
handle_id
we're going to use in the next statement. If you only use iMessage, the
account
field of the
message
table has each message's sender's phone number. However, I text more than just people with iPhones.
SELECT `text`, `is_from_me` FROM `message` WHERE `handle_id` LIKE '178';
This produces the following table of the last few texts between one of my roommates and I. He knows me well.
text | is-from-me | |
---|---|---|
... | ||
160 | You in robotics lab | 0 |
161 | Yes | 1 |
162 | You in robotics lab | 0 |
163 | No, my room | 1 |
164 | You in robotics lab | 0 |
165 | Yeah | 1 |
One last thing to mention is the
Attachments/
folder. Attachments are not stored in a human-friendly format, so you might want to flatten the
directory. Execute the following one level above the
Attachments/
directory
nots@abyss ~ $ find Attachments/ -mindepth 2 -type f -exec mv -i '{}' Attachments/ ';'
This will leave lots of empty directories scattered about, so run the following from inside
Attachments/
to clean it up.
nots@abyss ~/Attachments $ find . -type d -empty -delete
Related sidenote: your voicemails are stored as
.amr
files inside
/var/mobile/Library/Voicemail/