Martin's Blog

18. Appendices D–E: Source, Version, and Fidelity Map

This appendix identifies the source snapshots and execution boundaries behind the book. It is a working research artifact and will grow as the claim ledger is reviewed.

Source snapshots

Component Examined commit Commit date Declared or inferred line
rcs-db 6cff59d28634d718cac9fdd17cb629fd59a3cf3f 2014-05-12 9.2.3; build 2014051201
rcs-common 38290d4eab2b2c295bea021429848a3666647827 2015-03-31 9.6.0
rcs-collector 42cf61af9ec3e7b886e87eac20e762c3ce51c78c 2015-03-31 9.6 branch tip
rcs-console a90041fcd32bf1a82276ac20c2cd5ecb7d108db0 2015-03-31 sends RCS version 9.6.0
rcs-console-library 97531201600a8a223392e955a35b2b2605c1c1d4 2015-03-31 9.6 branch tip; REST/service layer
vector-exploit 2cf574d3bf2ea44f67433e32ccc9906ded6218e0 2014-12-12 catalogue build 2014093001
rcs-anonymizer 0c4189b1e5d7e23ad0bf85d0f184d9d8e46decbe 2015-04-03 supporting static tree; commit identifies 9.6.0

The first six rows are the primary snapshots frozen before drafting; the anonymizer is the supporting static tree cited by Chapter 9. The Git commit date describes the examined repository tip. It is not a product release date and offers no evidence that the components were deployed together. The connector implementation cited in Chapters 9 and 10 resides inside the rcs-db tree at lib/rcs-connector/ rather than in a separate repository.

Endpoint source snapshots

The static capability audit freezes a second set of repositories. Android’s native and audio trees are treated as supporting sources, and Windows’ 64-bit tree as a companion layer, rather than independent feature-complete implants.

Repository Examined commit Commit date Audit role
core-android 888e51b4ef778ee7f1ef63e22f622ddffb358b39 2014-12-16 Android Java core and module factory
core-android-audiocapture 77b2c1bb09406fd1cfa69e8e1e9276167a664daa 2015-05-13 Android audio adjunct
core-android-native 731733239fa91b3d5b502f0fda51d10c9ae9d974 2015-06-26 Android native adjuncts
core-blackberry 977aca189004365f0002766fd318bfc6bc2b4d17 2014-11-03 BlackBerry core
core-ios 19868fcfce187b5d5282ba231854064ad9054a55 2015-04-09 iOS internal and remote-agent registrations
core-linux 9252cba42283e71d7858292a400f6c94043ee8ff 2015-02-11 Linux core and registration table
core-macos f412a71d51563db773c2f1b6bb8c5ef3b69cf201 2015-04-09 macOS agents and task manager
core-symbian eb5d3c477ee9b94751d83ed5c40d57a3f667f532 2011-03-09 Symbian core and agent factory
core-win32 8eb1326959fcb5c727513b59b86386dae7463683 2015-01-21 Full Windows desktop core
core-win64 a263105b32bc3416107c2950adc0e49f95186684 2014-01-16 Partial Windows companion/IPC layer
core-winmobile e5baa43ce352e8aa4de4f1604a95e691e2e85aaa 2012-08-09 Windows Mobile core
core-winphone 361510342e60778a003c535f5df48d27348661e1 2015-06-25 Windows Phone core
scout-win 2368421c414b833e25b7f261a2a583245bad6102 2015-04-02 Narrow Windows Scout stage
soldier-win b0f86659d7f4a90206bd18b1053896fbd8709cd8 2015-03-19 Intermediate Windows Soldier stage

Their dates span more than four years. The matrix below must therefore not be read as one release’s cross-platform feature list.

Direct version evidence

Claim Evidence
Database identifies as 9.2.3 rcs-db/config/VERSION:1; rcs-db/CHANGELOG:1-3
Database build date is 12 May 2014 rcs-db/config/VERSION_BUILD:1 contains 2014051201
Database lockfile expects common 9.2.3 rcs-db/Gemfile.lock:8-18
Checked-out common library declares 9.6.0 rcs-common/lib/rcs-common/version.rb:1-5
Common history contains the expected 9.2.3 heartbeat/status interfaces rcs-common commit 34da36c873873a50a5ef053aa8f055207c1f1f2f; refactored at 261e08dddf2f581e96a8798e041c182551dfd536; visible 9.3.0 bump at 9a770f8455d9c250b62ae1a0034c1d45cdc3fbbc
Console sends 9.6.0 rcs-console/src/Console.mxml:31-41
Exploit catalogue build is 30 September 2014 vector-exploit/VERSION:1 contains 2014093001
Catalogue manifests declare 20140930 package info.yaml:1 files at repository HEAD
Database accepts exploit manifest 20140512 only rcs-db/lib/rcs-db/build/exploit.rb:238-254

Fidelity matrix

Component or behavior Status What the book may claim Principal limitation
rcs-db HTTPS REST Runs in lab LAB behavior of examined 9.2.3 source Runtime and dependency adaptations
rcs-db WebSocket push Runs in lab LAB behavior, including heartbeat and logout pushes Proxied through lab nginx for the web port
MongoDB topology Runs in lab LAB storage and sharding behavior Single-container physical topology
rcs-worker evidence path Runs in lab; named replay passed LAB behavior for synthetic DEVICE decrypt/store/alert/log/push Begins at Worker ingress; no real implant/collector session or media-transform validation
Original AIR console Static source/manual analysis SOURCE and MANUAL workflows AIR binary not executed on Linux
Web console New, fully tested port WEB PORT behavior and live backend contracts Not an original HackingTeam executable
Collector Static analysis SOURCE protocol and host behavior Public listener not run in the lab
Anonymizer chain Model/UI and source analysis SOURCE/MANUAL topology semantics No real forwarding chain exercised
Network Injector Source/manual analysis and render-only UI SOURCE/MANUAL capabilities Appliance and delivery flow not run
Implants (core-*, Scout, Soldier) Systematic static capability audit SOURCE claims that preserve implemented, conditional, disabled, referenced-only, absent-from-registry, and unresolved states Never built, run, fixed, or improved; source does not prove a shipped build, compatibility, deployment, or collection success
Exploits (vector-*) Metadata and history analysis Catalogue contents and repository history Never built, decrypted for execution, or run
Build/installer task Render-only in web console UI presence and server source contract Web port must never create a build task
Synthetic demonstration evidence Inserted through controlled lab tooling UI/storage behavior Not collected by an implant
Synthetic Worker evidence Named automated replay with sanitized trace Worker acceptance, DEVICE decode/store, alert log, and console push Does not reproduce target-to-collector transport or media transforms

Static endpoint capability matrix

The audit requires a registration or dispatch path, concrete implementation, and evidence/log/IPC sink before calling a capability Implemented. A build/runtime prerequisite makes it Conditional. Empty, commented, or deliberately inactive paths are Stub/disabled. A declaration or name without a complete local chain is Referenced only. Absence means only absence from the inspected registry. All states remain SOURCE claims.

Platform or stage Implemented or writer-validated families Important qualifications
Android messages/mail, contacts, calendar, device/application state, calls, chat, location, screenshots, camera, microphone, clipboard, credentials Version-, privilege-, installed-app-, and schema-dependent paths remain conditional; native/audio trees are adjuncts
iOS contacts, call list, camera, device, messages, microphone, calendar, chat screenshot, URL, keylog, clipboard, application, and position are remote-agent registrations rather than concrete local classes
macOS device, communications/chat, screen/camera, financial metadata, credentials, microphone, position, organizer, application, clipboard, files, key input, URL, VoIP-related evidence several families use injected or IPC-backed companions
Linux screenshots, device/application state, location, camera, mouse, credentials, URL, messages, contacts, chat, calls, key input, microphone, financial metadata runtime/application prerequisites were not exercised
BlackBerry messages/mail, contacts, calendar, call list, device, chat, location, screenshots, microphone, clipboard, application, URL camera is build-conditional; password and keylog are absent from the checked registry
Symbian contacts, calendar, location, messages/mail, screenshots, device, microphone, application shared constants do not expand the eight-entry agent factory
Windows desktop files, key input, screenshots, Wi-Fi location, URL, clipboard, webcam, mail, credential stores, IM/chat, device, financial metadata, mouse, application, contacts, microphone, social and VoIP-related evidence print registration is disabled; core-win64 is a partial companion
Windows Mobile messages, calendar, call list, device, location, clipboard, URL, call recording, screenshots, camera, application, microphone declarations and mappings do not prove compatibility on every device
Windows Phone direct writer confirmation for device, location, application, and camera; concrete registered bodies also exist for contacts, calendar, microphone, and screenshots messages, call list, clipboard, and URL remain referenced or unresolved in this bounded review
Scout device and screenshots social is empty and webcam is commented out
Soldier social/account data, location, clipboard, credentials, screenshots, camera, URL, device, file-related paths standalone photo thread is disabled; provider-dependent families remain conditional

The detailed control record, including tree hashes, representative file/line anchors, classification rules, and remaining proof gaps, is research/hackingteam-rcs/IMPLANT-CAPABILITY-AUDIT.md.

Runtime and compatibility patch summary

The complete original-to-lab patch inventory lists every carried source difference, omission group, new orchestration file, and verification hash. The summary groups are:

Patch group Files Purpose Claim impact
Dependency resolution rcs-db/Gemfile, rcs-common.gemspec Pin versions compatible with Ruby 2.1 and the database snapshot; retain HackingTeam’s minitar fork Runtime environment differs from an original installation
Cross-snapshot API shims rcs-common/heartbeat.rb, systemstatus.rb Restore historically attested heartbeat hooks and status accessors onto the selected 9.6 body Callback ordering and state mapping must identify the lab adaptation
Linux case sensitivity rcs-common/evidence/url.rb Change require 'CGI' to require 'cgi' Loadability only
Optional historical database bindings rcs-common/evidence/money.rb Avoid fatal load failure when unavailable BDB bindings are not used Money decoding is not validated through this path
Worker native libraries worker SRC, AMR, LAME, and Speex bindings Load Linux shared libraries and avoid fatal startup when optional codecs are absent Rebuilt base startup and all individual transforms require recorded validation
Lab licence rcs-db/make_license.rb Create a time-valid isolated-lab licence using keys extracted byte-exact from original source Licence validation is original; the licence contents are synthetic
Container orchestration Dockerfiles, entrypoints, Compose, Mongo setup Recreate the expected services and sharded layout Deployment packaging is new lab code
Console replacement docker-lab/console-web/ Reimplement the AIR views against original contracts All UI claims require WEB PORT or independent SOURCE/MANUAL support

Removed Windows installers, binary dependencies, NSIS trees, OCR trees, and test material are omissions from the runtime copy rather than patches to the original archive. The read-only originals remain available for static research.

Provenance labels

Label Minimum evidence
LAB Reproducible observation, command/test reference, and component version
SOURCE Repository commit plus file and relevant lines
MANUAL Manual title, edition/date, and printed or PDF page
WEB PORT Port source/test and, when relevant, original MXML counterpart
REPORTING Direct citation and wording no stronger than the source
INFERENCE Explicit reasoning and the observations it connects

Sources and evidence

↑ HackingTeam's RCS: Bringing a Commercial Spyware Platform Back to Life