source : https://stackoverflow.com/questions/3012287/how-to-read-mms-data-in-android http://minhdanh2002.blogspot.de/2012/02/raw-access-to-sms-database-on-android.html https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/jb-release/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java http://www.etsi.org/deliver/etsi_gts/03/0340/05.03.00_60/gsmts_0340v050300p.pdf SMS type 0 (SMS ping, SMS furtifs): https://github.com/SecUpwN/Android-IMSI-Catcher-Detector/issues/69 https://github.com/domi007/silentSMS http://forum.xda-developers.com/showthread.php?t=1422969 http://rednaxela.net/pdu.php localisation GSM: http://blog.ptsecurity.com/2014/04/search-and-neutralize-how-to-determine.html http://events.ccc.de/congress/2008/Fahrplan/attachments/1262_25c3-locating-mobile-phones.pdf carte GSM: http://gsmmap.org/ The /data/data/com.android.providers.telephony/databases/mmssms.db file use sqlite format and is accessible into root mode ont the phone. table addr ---------- _id: INTEGER (primary key) ID msg_id: INTEGER The ID of MM which this Address entry belongs to contact_id: INTEGER The ID of contact entry in Phone Book address: TEXT The address text type: INTEGER Type of address,must be one of PduHeaders.BCC, PduHeaders.CC, PduHeaders.FROM, PduHeaders.TO charset: INTEGER Character set of entry table android_metadata ---------------------- locale: TEXT table SMS (info on SMS) ---------------------------- This table is used by the SMS dispatcher to hold incomplete partial messages until all the parts arrive. _id: INTEGER (primary key) SMS ID thread_id: INTEGER The thread ID of the message address: TEXT The address of the other party person: INTEGER date: INTEGER The date the message was received date_sent: INTEGER The date the message was sent protocol: INTEGER The protocol identifier code read: INTEGER Has the message been read? (boolean) status: INTEGER a TP-Status value or -1 if it status hasn't been received (default) STATUS_COMPLETE=0 TP-Status: complete. STATUS_FAILED=64 TP-Status: failed. STATUS_NONE=-1 TP-Status: no status received. STATUS_PENDING=32 TP-Status: pending. http://www.etsi.org/deliver/etsi_gts/03/0340/05.03.00_60/gsmts_0340v050300p.pdf type: INTEGER The type of message unsure sense ? 1 if sent 2 if receiverd 3 if ? reply_path_present: INTEGER subject: TEXT The subject of the message, if present body: TEXT The body of the message service_center: TEXT The service center (SC) through which to send the message, if present locked: INTEGER Is the message locked? (default 0) error_code: INTEGER Error code associated with sending or receiving this message (default 0) seen: INTEGER Indicates whether this message has been seen by the user. The "seen" flag will be used to figure out whether we need to throw up a statusbar notification or not (default 0) table sr_pending ---------------- This table is used by the SMS dispatcher to hold pending delivery status report intents. reference_number: INTEGER action: TEXT data: TEXT table threads ------------- This table maps the subject and an ordered set of recipient IDs, separated by spaces, to a unique thread ID. The IDs come from the canonical_addresses table. This works because messages are considered to be part of the same thread if they have the same subject (or a null subject) and the same set of recipients. _id: INTEGER PRIMARY KEY identifier autoincremented date: INTEGER The date at which the thread was created (default 0) message_count: INTEGER The message count of the thread (default 0) recipient_ids: TEXT A string encoding of the recipient IDs of the recipients of the message, in numerical order and separated by spaces = canonical_addresses snippet: TEXT The snippet of the latest message in the thread snippet_cs: INTEGER The charset of the snippet (default 0) read: INTEGER Indicates whether all messages of the thread have been read (default 1) type: INTEGER Type of the thread, either Threads.COMMON_THREAD=0 or Threads.BROADCAST_THREAD=1 error: INTEGER Indicates whether there is a transmission error in the thread (default 0) has_attachment: INTEGER Indicates whether this thread contains any attachments (1), or 0 (default) if pure text table words (FTS3) ------------------ _id (2<<32)+source_id index_text source_id table_to_use 1 or 2 table words_content ------------------- docid: INTEGER PRIMARY KEY c0_id (2<<32)+ c2source_id c1index_text c2source_id c3table_to_use 1 or 2 table words_segments -------------------- blockid: INTEGER PRIMARY KEY block: BLOB table words_segdir ------------------ level: INTEGER PRIMARY KEY idx: INTEGER start_block: INTEGER leaves_end_block: INTEGER end_block: INTEGER root: BLOB table attachments ----------------- sms_id: INTEGER ID content_url: TEXT URL offset: INTEGER table canonical_addresses ------------------------- This table maps the first instance seen of any particular MMS/SMS address to an ID, which is then used as its canonical representation. If the same address or an equivalent address (as determined by our Sqlite PHONE_NUMBERS_EQUAL extension) is seen later, this same ID will be used. The _id is created with AUTOINCREMENT so it will never be reused again if a recipient is deleted. _id: INTEGER PRIMARY KEY address: TEXT An address used in MMS or SMS. Email addresses are converted to lower case and are compared by string equality. Other addresses are compared using PHONE_NUMBERS_EQUAL table drm --------- _id: INTEGER PRIMARY KEY _data: TEXT table part ---------- _id: INTEGER PRIMARY KEY mid: INTEGER The identifier of the message which this part belongs to part._id = pdu._id seq: INTEGER The order of the part ct: TEXT type MIME (cf. https://fr.wikipedia.org/wiki/Type_MIME) text/plain, image/jpeg, image/bmp, image/gif, image/jpg, image/png if text/plain or application/smil, MMS is not pure text and there is some attachment (has_attachment=1 in the thread from threads table) name: TEXT The name of the part chset: INTEGER The charset of the part cd: TEXT The content disposition of the part fn: TEXT The file name of the part cid: TEXT The content ID of the part cl: TEXT The content location of the part ctt_s: INTEGER The start of content-type of the message ctt_t: TEXT The type of content-type of the message _data: TEXT The location(on filesystem) of the binary data of the part (empty if text) text: TEXT content if text, empty else table pdu (info on MMS) ---------------------------- http://www.xuebuyuan.com/1068475.html https://developer.android.com/reference/android/provider/Telephony.BaseMmsColumns.html1 _id: INTEGER PRIMARY KEY thread_id: INTEGER thread id date: INTEGER The date the message was received (unix format) date_sent: INTEGER The date the message was sent (default 0) msg_box: INTEGER The box which the message belong to MESSAGE_BOX_ALL = 0 MESSAGE_BOX_INBOX = 1 MESSAGE_BOX_SENT = 2 MESSAGE_BOX_DRAFTS = 3 MESSAGE_BOX_OUTBOX = 4 read: INTEGER Has the message been read? (boolean) m_id: TEXT The Message-ID of the message sub: TEXT The subject of the message, if present sub_cs: INTEGER The character set of the subject, if present ct_t: TEXT The Content-Type of the message ct_l: TEXT The Content-Location of the message exp: INTEGER The expiry time of the message m_cls: TEXT The class of the message m_type: INTEGER The type of the message defined by MMS spec 128 if sent 130 if to send again 132 if resent v: INTEGER The version of specification that this message conform m_size: INTEGER The size of the message pri: INTEGER The priority of the message rr: INTEGER The read-report of the message rpt_a: INTEGER Whether the report is allowed resp_st: INTEGER The response-status of the message st: INTEGER The status of the message tr_id: TEXT The transaction-id of the message retr_st: INTEGER The retrieve-status of the message retr_txt: TEXT The retrieve-text of the message retr_txt_cs: INTEGER The character set of the retrieve-text read_status: INTEGER The read-status of the message ct_cls: INTEGER The content-class of the message resp_txt: TEXT The response-text of the message d_tm: INTEGER The delivery-time of the message d_rpt: INTEGER The delivery-report of the message locked: INTEGER Has the message been locked? seen: INTEGER Indicates whether this message has been seen by the user. The "seen" flag will be used to figure out whether we need to throw up a statusbar notification or not (default 0) table pending_msgs ------------------ This table stores the queue of messages to be sent/downloaded. _id: INTEGER PRIMARY KEY ID proto_type: INTEGER The type of transport protocol(MMS or SMS) msg_id: INTEGER The ID of the message to be sent or downloaded msg_type: INTEGER The type of the message to be sent or downloaded err_type: INTEGER The type of the error code err_code: INTEGER The error code of sending/retrieving process retry_index: INTEGER How many times we tried to send or download the message due_time: INTEGER The time to do next retry last_try: INTEGER The time we last tried to send or download the message table rate ---------- sent_time: INTEGER When a message was successfully sent table raw --------- _id: INTEGER PRIMARY KEY date: INTEGER reference_number: INTEGER one per full message count: INTEGER the number of parts sequence: INTEGER the part number of this message destination_port: INTEGER address: TEXT pdu: TEXT the raw PDU for this part sqlite_autoindex_words_segdir_1 typeThreadIdIndex