Sunday, February 17, 2013

Finding and Reverse Engineering Deleted SMS Messages


Recovering deleted SMS messages from Android phones is a frequent request I get. Luckily, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are several places and ways to recover cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se on an Android phone.  After working a case that involved manually carving hundreds of juicy, case making messages, I collaborated with cheeky4n6monkey on a way to automate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 process.  A huge thank you to Adrian, because I think cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 only way to truly appreciate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 script is to do cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 manual work first.

That being said, in my last post Dude, Where's my Data I explored cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 importance of knowing what your automatic tools are doing and digging deeper as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re may be critical information cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se tools are not parsing.   Harlan Carvey contributed a great comment which I think sums it up nicely: “Tools provide a layer of abstraction over cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data itself, often hiding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 analyst who is not curious.”

I am not trying to give cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se tools a bad rap.  In fact, I use my "all in one" tools every day. However, by understanding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 raw data, you can leverage cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se tools to help you find and understand critical data not automatically provided.

Recently I used Cellebrite to understand cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 structure of SMS messages, which I could cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n apply to SMS fragments found in unallocated space and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mmssms.db-journal file.  Although Cellebrite recovers deleted messages, it does not do so from areas outside of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS database (to my knowledge).  Of course, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se "ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r places" contained cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most important data for my case.

In this post, I am going to cover some common locations in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 file system to recover deleted text messages.  Additionally, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS structure can vary across Android devices, I am going to show how I deconstructed cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS message, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365n applied cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information to SMS messages found in unallocated space.  I am sure cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re is more than one way to skin this cat, some may even be better; this is just cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 way I did.

For this example, I used a Samsung GSM SGH-T959V Galaxy S.  Even if you don't do Mobile forensics, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 principles of this example can be applied to determine structured data found in unallocated space.


Where cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Messages are hiding

When working with cell phones, several types of acquisitions may be taken:  logical, file system and physical.  A logical acquisition is usually cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 end user sees it.  Text messages, call logs etc.  It does not include deleted data.  A file system acquisition is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 next step up. It provides access to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 files system, but not unallocated space.  A physical acquisition is a bit by bit copy of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 flash memory and thus, includes unallocated space. For more information on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se three types of acquisitions, check out this page on Mobile Forensics on Wikipedia.

For recovering deleted text messages a physical extraction is cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 best.  However, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are several locations in a file system extraction that can yield deleted text messages: cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS Database, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS journal file and a log database.

SMS Database

Text messages are stored in an SQLite database named mmssms.db typically under cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 location /Root/data/com.android.providers.telephony/databases/. These SQlite databases retain deleted data. If you are using a program like Cellebrite, it will "automatically" recover deleted text messages from this database. However, I also manually check for fragments using a Hex viewer, or an SQLite Viewer like Oxygen Forensics SQLite Viewer. They offer a 30 day free trial if you want to play around with it. This SQlite Viewer show blocks of deleted data:



SMS Journal File
The mmssms.db-journal file is a roll back journal file written to by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SQLite Database. If this file exists, it will be in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same directory as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mmssms.db file.  It can contain numerous deleted text messages. Since cheeky4n6 monkey helped develop a script to parse this, he has done an excellent write up on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 format and structure which I will post a link to once its up.  I won't go into too much detail here, except to say cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 text messages contain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same structure as in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS database.

logs.db
This file appears to be a database that logs various activities on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone such as calls and SMS messages.  The field holding cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS messages appears to contain cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 first 50 or so characters of a text message.  Because it is an SQLite database, you can view deleted data as explained above.

Unallocated Space
Glorious unallocated space - my favorite location to find deleted text messages.  I have found hundreds of deleted text messages here through various keyword searches.  If you are lucky, you can carve a whole mmssms.db SQLite database from unallocated space as explained here by Richard Drinkwater.  This will allow you to open cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 complete file with an SQLite viewer and view information such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone number, date, sent date, status and folder.  If not, this is where leveraging your tools can help you parse this information manually.

Determining cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS structure

Case Setup:
Let's say a bowl of Trix has been eaten, and you need to determine who did it and when.  A keyword search for "trix" brings you to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 following message in unallocated space (phone numbers have been changed for this example):



 As you can see from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 example above, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone number and SMS body are readily apparent.  However, just by looking at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 ASCII data on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 right, it is not possible to tell if this was a sent or received message. In this case, that is critical information.  If cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message was sent, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 suspect whose phone you're examining ate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Trix.  If this text message was received from somebody, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 sender ate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Trix.  We also need to figure out what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 date of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message was.

The steps I use to determine cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 structure of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS are as follows: View cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS database to see cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 schema and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 format of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data. Do some pattern matching using existing SMS messages and apply cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 pattern to deleted messages.

First, I use one of my 'all in one' tools to see if it was able to parse cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing messages on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone. Below is a text message in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing inbox of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone (picture from Cellebrite):



By viewing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mmssms.db file in Hex view and locating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 text message above, I can begin to see how this data is stored in a raw format. I can see information such as cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone number, body and SMSC (cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone numbers are normally 10 digits long, but messages from T-Mobile come through with a phone number of 456). I know cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 date information must be hiding in here somewhere:


By viewing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Schema of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mmssms.db SQLite database table that holds cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS messages and viewing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message within cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database, I can gacá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r more information about this message:

Schema 



Message


 By looking at cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database, I can see that cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 date is stored in Epoch, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re are some flags that look like cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y might correspond to whecá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message was sent or received – cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fields named “read” and “type”.

By using all of this information, I can begin to figure out cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 structure.  The order of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 fields in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 raw data follows cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 order of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS schema. For clarity's sake, I have only included cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 most common fields in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 picture below:


Address:
The Phone number associated with cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message.

Date Field
To determine how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 date is stored, I viewed this value in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database and noted it was stored in Epoch.  I tried converting cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Hex value 01 3C 5D BC 32 76 to decimal which is 1358782280310. This value matches cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database. Converting to UTC yields Mon, 21 January 2013 15:31:20 UTC, which matches cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 value displayed by Cellebrite.

Read/Type
By using my all in one tool, I looked through cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 existing SMS Messages and cross referenced cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se values to what I was seeing in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database to establish what cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 flag values of "read" and "type" mean.
    Read:
        00 = Message was unread
        01 = Message was read
    Type (Aka"folder"): 
        01 = Inbox
        02 = Sent

Now I can apply cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 same structure to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message found in unallocated space and parse it manually:


 Date: Hex value 01 39 22 20 57 66 to decimal which is 1344897308518. Converting to UTC yields Mon, 13 August 2012 22:35:08 UTC

Type:  02 which means cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message Sent.

So now I have some valuable information about this deleted text message. This message was sent by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 user of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone indicating cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365y ate cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 Trix, and cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 message was sent on August 13, 2012 at 3:35PM AZ time.

I should also mention that within Cellbrite, you can view an existing message in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 mmssms.db file in Hex view.  Cellebrite color blocks data it has parsed, and when you hover over a block, it will show you what values it parsed. I wanted to show cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 more "manual" way first in case some ocá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365r tools do not do this, or if for some reason cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 database was not parsed, which I have ran into. Please note, it does not do this for messages in unallocated space.

 
Depending on cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 phone, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS structure may be totally different. Also, because cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 information is stored in a SQLite database and deleted fragments may be located outside of an SQLite database, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365re does not seem to be a "header" or "magic number" to carve for.

Here are three SMS schemas from three different Android Phones. Some different fields of interest have been circled. The same method used above could be used to determine how cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365se values are stored "in cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 raw" to parse deleted messages found in unallocated space.


Samsung CDMA SPH-D720 Nexus S




Samsung GSM SGH-T839 Sidekick 4G

Samsung GSM SGH-T959V Galaxy S

 
As you can see from cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 three phones above, each phone has a different way of storing cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 SMS messages which can make it difficult to write a script to "recover all deleted text messages from all Android phones" -I have left that up to cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 monkeys - well at least one cheeky one.

Addendum [added 02/18/2013]
Please make sure and read cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 comment posted by Brian below. He makes a great point.  For any of cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 above to work, cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 data generated by cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 forensic tool/software needs to be validated against cá cược thể thao bet365_cách nạp tiền vào bet365_ đăng ký bet365 actual device. I had done that in this case, but failed to mention it.

[added 02/25/2013]
Adrian's script is now available, make sure and check it out.