Export MacOS iMessage data + run iMessage Diagnostics

Overview

imessage-export

This crate provides both a library to interact with iMessage data as well as a binary that can perform some useful read-only operations using that data.

Runtime

The imessage_exporter binary exports iMessage data to txt, csv, pdf, or html formats. It can also run diagnostics to find problems with the iMessage database.

Library

The imessage_database library provides models that allow us to access iMessage information as native data structures.

Supported Features

  • Message extraction
  • Attachment resolution
  • Reactions
  • Replies
  • Apple Pay
  • Stickers

Documentation

Documentation is available here.

Comments
  • Better support for Activity/Workout messages

    Better support for Activity/Workout messages

    Workout messages are not sent with any payload or special information, but contain text that looks like one of:

    $(kIMTranscriptPluginBreadcrumbTextReceiverIdentifier) completed a workout.
    $(kIMTranscriptPluginBreadcrumbTextReceiverIdentifier) earned an achievement.
    $(kIMTranscriptPluginBreadcrumbTextReceiverIdentifier) closed all three Activity rings.
    

    Where I assume $(kIMTranscriptPluginBreadcrumbTextReceiverIdentifier) is some information about the contact that sent the message. All of the BLOB fields are NULL for these messages, so we need to check them when writing the text and replace the contact's phone number in the correct place.

    If we can avoid scanning each message as we write them, we should. Perhaps we should preflight and cache the IDs of messages that contain this kIMTranscriptPluginBreadcrumbTextReceiverIdentifier string and cache them like we do other types of message information.

    exporter txt html new feature 
    opened by ReagentX 4
  • Support parsing different types of app messages

    Support parsing different types of app messages

    balloon_bundle_id has some app developer metadata and payload_data has some plist data we can look at for specific apps like Apple Pay that contain information useful to the export.

    crate: database table new feature 
    opened by ReagentX 1
  • Panic - Filename too long

    Panic - Filename too long

    The program generates the following panic when exporting messages:

    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Os { code: 63, kind: InvalidFilename, message: "File name too long" }', imessage-exporter/src/exporters/txt.rs:250:14
    

    This appears to happen when a group chat name is concatenated to too long of a string.

    bug crate: cli exporter 
    opened by ssardegna 1
  • Feat/cs/edited messages

    Feat/cs/edited messages

    • Support edited and unsent iMessages
    • Parse streamtyped data for normal and edited messages
    • Better error handling throughout app
    • Fix indent issue for app messages in txt export
    crate: database crate: cli table exporter txt html new feature 
    opened by ReagentX 0
  • Deprecated `xmp` tag in URL metadata

    Deprecated `xmp` tag in URL metadata

    Some webmasters include HTML in their sites' metadata:

    https://darknetdiaries.com/transcript/21/

    <meta property="og:description" content="Ira Winkler's specialty is assembling elite teams of special forces and intelligence officers to go after companies. Ira shares a story about a time he and his team broke into a global 5 company. A company so large that theft of intellictual property could result in billions of dollars of damage. <br><br>Ira's consulting company: <a href='http://www.securementem.com/'>Secure Mentum</a>.<br><br>His books: <a href='https://www.amazon.com/gp/product/0764584685/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0764584685&amp;linkCode=as2&amp;tag=tunn01-20&amp;linkId=8f8a26b3c5fe68e6c8913ceea8adb0f5'>Spies Among Us</a>, <a href='https://www.amazon.com/gp/product/0128093161/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0128093161&amp;linkCode=as2&amp;tag=tunn01-20&amp;linkId=ac08090c6d15b5ad2c77789fbcf50d56'>Advanced Persistent Security</a>, <a href='https://www.amazon.com/gp/product/0895263904/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0895263904&amp;linkCode=as2&amp;tag=tunn01-20&amp;linkId=63e40c57a8bf8f04f077f55d6ed21455'>Through the Eyes of the Enemy</a>. ">
    

    In the payload_data that ends up looking like this escaped html code:

    image

    If we got the whole string that would be fine, but iMessage truncates this data, so we end up getting some unclosed tags.

    Rendering inside of <pre><code>…</code></pre> ends up rendering all of the escaped HTML, so I used an xmp tag in lieu of a code tag here to render the text properly. Since xmp is deprecated, we should do something else here. Ideally we can avoid using Javascript, as we want these pages to be printable to a PDF, and Javascript opens the door to non-printable features.

    html enhancement 
    opened by ReagentX 0
  • Add CLI Arg to replace default

    Add CLI Arg to replace default "Me" value

    ME should be overridden by custom text.

    https://github.com/ReagentX/imessage-exporter/blob/9a40b7b7bdfd55e69f066460423ff20913952203/imessage-exporter/src/app/runtime.rs#L248-L252

    https://github.com/ReagentX/imessage-exporter/blob/b61493b34c88e4c6c25f0c2df1fdbd028633b3fb/imessage-exporter/src/exporters/html.rs#L465-L470

    crate: cli exporter new feature 
    opened by ReagentX 0
  • Release to Brew

    Release to Brew

    • Example Rust app:
      • https://github.com/Homebrew/homebrew-core/blob/master/Formula/ripgrep.rb
      • https://github.com/BurntSushi/ripgrep/blob/master/.github/workflows/release.yml
    opened by ReagentX 0
  • What is `item_type` 4?

    What is `item_type` 4?

    There is an int column in the messages table called item_type. Normal messages are 0, channel announcements that update the room name are 2. I have a third item_type in my database, "aptly" named 4, and it seems to be a fully null message (no text or blob data, no associated message, nothing). What does 4 represent? Is there a 1?

    question 
    opened by ReagentX 0
Owner
Christopher Sardegna
Building things; breaking others.
Christopher Sardegna
Export statistics of Mosquitto MQTT broker (topic: $SYS) to Prometheus

Preface The Mosquitto MQTT broker provides a number of statistics on the special $SYS/# topic (see mosquitto(8)). Build requirements As a Rust program

Bobobo-bo Bo-bobo 2 Dec 15, 2022
📊 Collect cloud usage data, so that it can be combined with impact data of Boavizta API.

cloud-scanner Collect aws cloud usage data, so that it can be combined with impact data of Boavizta API. ⚠ Very early Work in progress ! At the moment

Boavizta 10 Dec 7, 2022
Docker containers on a synthetic network. Run applications in a context that lets you manipulate their network conditions.

Synthetic Network Docker containers on a synthetic network. Run applications in a context that lets you manipulate their network conditions. Dependenc

Daily 58 Dec 15, 2022
Small MQTT router. Allows creating multiple inputs/outputs and run action when input triggers.

MQRT Small MQTT router. Allows creating multiple inputs/outputs and run action when input triggers. Features multi-(input/output) multiple actions tie

Nazar Gondaruk 0 Jan 4, 2022
Reverse proxy for HTTP microservices and STDIO. Openfass watchdog which can run webassembly with wasmer-gpu written in rust.

The of-watchdog implements an HTTP server listening on port 8080, and acts as a reverse proxy for running functions and microservices. It can be used independently, or as the entrypoint for a container with OpenFaaS.

yanghaku 7 Sep 15, 2022
Easily share data between terminal windows!

abra A tool that makes data sharing between terminal windows easy. abra can be used for displaying info about the current working directory, for split

Denis Isidoro 23 Oct 2, 2022
A library for easily creating WebRTC data channel connections in Rust

Cyberdeck A library for easily creating WebRTC data channel connections in Rust.

RICHΛRD ΛNΛYΛ 34 Nov 10, 2022
Shotover: L7 data-layer proxy

Shotover: L7 data-layer proxy

null 64 Dec 16, 2022
A tcp proxy server/client which exchange the data in temp files

ftcp A tcp proxy server/client which exchange the data in temp files 通过在临时文件中交换数据来进行TCP代理的一个服务端/客户端 学校内网中有针对教学楼的防火墙导致教室电脑难以上网( 但学校内建有公共ftp服务器,因此就有了这个借

Daile Liu 2 Feb 17, 2022
Streaming data over unix sockets, in Rust

Unix-socket based client/server In order to dig into Sōzu channels, I had to dig into the workings of unix sockets. What this repo contains a small so

Emmanuel Bosquet 3 Nov 28, 2022
An app which reads data from a serial port and serves it on a TCP port.

serial-to-tcp An app which reads data from a serial port and serves it on a TCP port. How to use Clone this repo and build the app as outlined below (

Mr. E 3 Oct 21, 2022
Rosenpass is a formally verified, post-quantum secure VPN that uses WireGuard to transport the actual data.

Rosenpass README This repository contains A description of the Rosenpass protocol The reference implementation of the protocol – the rosenpass tool A

Rosenpass 597 Mar 19, 2023
RDE1 (Rusty Data Exfiltrator) is client and server tool allowing auditor to extract files from DNS and HTTPS protocols written in Rust. 🦀

Information: RDE1 is an old personal project (end 2022) that I didn't continue development on. It's part of a list of projects that helped me to learn

Quentin Texier (g0h4n) 32 Oct 6, 2023
A tool to export TiDB database data to files in cases where the TiDB server can't be restored.

tidb-exporter TiDB uses RocksDB as default storage engine(in fact, TiKV uses it). tidb-exporter can export data from pure RocksDB data files even when

zz 7 Nov 1, 2023
Markdown LSP server for easy note-taking with cross-references and diagnostics.

Zeta Note is a language server that helps you write and manage notes. The primary focus is to support Zettelkasten-like1, 2 note taking by providing an easy way to cross-reference notes (see more about features below).

Artem Pyanykh 4 Oct 27, 2022
A fancy diagnostics & error reporting crate

A fancy diagnostics & error reporting crate

Joshua Barretto 1.1k Dec 30, 2022
A cross-platform crate with FFI bindings to allow for complex vehicle ECU diagnostics.

ecu_diagnostics A cross-platform crate with FFI bindings to allow for complex vehicle ECU diagnostics. IMPORTANT Currently this crate is not 100% read

Ashcon Mohseninia 80 Dec 24, 2022
Add nice user-facing diagnostics to your errors without being weird about it.

thisdiagnostic is a Rust library for adding rich diagnostic metadata to errors, for some really fancy and customizable error reporting!

Kat Marchán 14 Feb 2, 2022
Minimal virus genome coverage assessment for metagenomic diagnostics

vircov Minimal virus genome coverage assessment for metagenomic diagnostics Overview v0.5.0 Purpose Implementation Installation Usage Tests Concept Cl

Eike Steinig 14 Oct 17, 2022
Proof of concept for a web API that can export 3MF files from parametric OpenSCAD models

Model API About A proof of concept for a web API that can export 3MF files from a parametric OpenSCAD model. A typical use would be to have a form on

Hanno Braun 4 Jul 23, 2022