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

ComponentExamined commitCommit dateDeclared or inferred line
rcs-db6cff59d28634d718cac9fdd17cb629fd59a3cf3f2014-05-129.2.3; build 2014051201
rcs-common38290d4eab2b2c295bea021429848a36666478272015-03-319.6.0
rcs-collector42cf61af9ec3e7b886e87eac20e762c3ce51c78c2015-03-319.6 branch tip
rcs-consolea90041fcd32bf1a82276ac20c2cd5ecb7d108db02015-03-31sends RCS version 9.6.0
rcs-console-library97531201600a8a223392e955a35b2b2605c1c1d42015-03-319.6 branch tip; REST/service layer
vector-exploit2cf574d3bf2ea44f67433e32ccc9906ded6218e02014-12-12catalogue build 2014093001
rcs-anonymizer0c4189b1e5d7e23ad0bf85d0f184d9d8e46decbe2015-04-03supporting 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.

RepositoryExamined commitCommit dateAudit role
core-android888e51b4ef778ee7f1ef63e22f622ddffb358b392014-12-16Android Java core and module factory
core-android-audiocapture77b2c1bb09406fd1cfa69e8e1e9276167a664daa2015-05-13Android audio adjunct
core-android-native731733239fa91b3d5b502f0fda51d10c9ae9d9742015-06-26Android native adjuncts
core-blackberry977aca189004365f0002766fd318bfc6bc2b4d172014-11-03BlackBerry core
core-ios19868fcfce187b5d5282ba231854064ad9054a552015-04-09iOS internal and remote-agent registrations
core-linux9252cba42283e71d7858292a400f6c94043ee8ff2015-02-11Linux core and registration table
core-macosf412a71d51563db773c2f1b6bb8c5ef3b69cf2012015-04-09macOS agents and task manager
core-symbianeb5d3c477ee9b94751d83ed5c40d57a3f667f5322011-03-09Symbian core and agent factory
core-win328eb1326959fcb5c727513b59b86386dae74636832015-01-21Full Windows desktop core
core-win64a263105b32bc3416107c2950adc0e49f951866842014-01-16Partial Windows companion/IPC layer
core-winmobilee5baa43ce352e8aa4de4f1604a95e691e2e85aaa2012-08-09Windows Mobile core
core-winphone361510342e60778a003c535f5df48d27348661e12015-06-25Windows Phone core
scout-win2368421c414b833e25b7f261a2a583245bad61022015-04-02Narrow Windows Scout stage
soldier-winb0f86659d7f4a90206bd18b1053896fbd8709cd82015-03-19Intermediate 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

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

Fidelity matrix

Component or behaviorStatusWhat the book may claimPrincipal limitation
rcs-db HTTPS RESTRuns in labLAB behavior of examined 9.2.3 sourceRuntime and dependency adaptations
rcs-db WebSocket pushRuns in labLAB behavior, including heartbeat and logout pushesProxied through lab nginx for the web port
MongoDB topologyRuns in labLAB storage and sharding behaviorSingle-container physical topology
rcs-worker evidence pathRuns in lab; named replay passedLAB behavior for synthetic DEVICE decrypt/store/alert/log/pushBegins at Worker ingress; no real implant/collector session or media-transform validation
Original AIR consoleStatic source/manual analysisSOURCE and MANUAL workflowsAIR binary not executed on Linux
Web consoleNew, fully tested portWEB PORT behavior and live backend contractsNot an original HackingTeam executable
CollectorStatic analysisSOURCE protocol and host behaviorPublic listener not run in the lab
Anonymizer chainModel/UI and source analysisSOURCE/MANUAL topology semanticsNo real forwarding chain exercised
Network InjectorSource/manual analysis and render-only UISOURCE/MANUAL capabilitiesAppliance and delivery flow not run
Implants (core-*, Scout, Soldier)Systematic static capability auditSOURCE claims that preserve implemented, conditional, disabled, referenced-only, absent-from-registry, and unresolved statesNever built, run, fixed, or improved; source does not prove a shipped build, compatibility, deployment, or collection success
Exploits (vector-*)Metadata and history analysisCatalogue contents and repository historyNever built, decrypted for execution, or run
Build/installer taskRender-only in web consoleUI presence and server source contractWeb port must never create a build task
Synthetic demonstration evidenceInserted through controlled lab toolingUI/storage behaviorNot collected by an implant
Synthetic Worker evidenceNamed automated replay with sanitized traceWorker acceptance, DEVICE decode/store, alert log, and console pushDoes 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 stageImplemented or writer-validated familiesImportant qualifications
Androidmessages/mail, contacts, calendar, device/application state, calls, chat, location, screenshots, camera, microphone, clipboard, credentialsVersion-, privilege-, installed-app-, and schema-dependent paths remain conditional; native/audio trees are adjuncts
iOScontacts, call list, camera, device, messages, microphone, calendar, chatscreenshot, URL, keylog, clipboard, application, and position are remote-agent registrations rather than concrete local classes
macOSdevice, communications/chat, screen/camera, financial metadata, credentials, microphone, position, organizer, application, clipboard, files, key input, URL, VoIP-related evidenceseveral families use injected or IPC-backed companions
Linuxscreenshots, device/application state, location, camera, mouse, credentials, URL, messages, contacts, chat, calls, key input, microphone, financial metadataruntime/application prerequisites were not exercised
BlackBerrymessages/mail, contacts, calendar, call list, device, chat, location, screenshots, microphone, clipboard, application, URLcamera is build-conditional; password and keylog are absent from the checked registry
Symbiancontacts, calendar, location, messages/mail, screenshots, device, microphone, applicationshared constants do not expand the eight-entry agent factory
Windows desktopfiles, 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 evidenceprint registration is disabled; core-win64 is a partial companion
Windows Mobilemessages, calendar, call list, device, location, clipboard, URL, call recording, screenshots, camera, application, microphonedeclarations and mappings do not prove compatibility on every device
Windows Phonedirect writer confirmation for device, location, application, and camera; concrete registered bodies also exist for contacts, calendar, microphone, and screenshotsmessages, call list, clipboard, and URL remain referenced or unresolved in this bounded review
Scoutdevice and screenshotssocial is empty and webcam is commented out
Soldiersocial/account data, location, clipboard, credentials, screenshots, camera, URL, device, file-related pathsstandalone 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 groupFilesPurposeClaim impact
Dependency resolutionrcs-db/Gemfile, rcs-common.gemspecPin versions compatible with Ruby 2.1 and the database snapshot; retain HackingTeam’s minitar forkRuntime environment differs from an original installation
Cross-snapshot API shimsrcs-common/heartbeat.rb, systemstatus.rbRestore historically attested heartbeat hooks and status accessors onto the selected 9.6 bodyCallback ordering and state mapping must identify the lab adaptation
Linux case sensitivityrcs-common/evidence/url.rbChange require 'CGI' to require 'cgi'Loadability only
Optional historical database bindingsrcs-common/evidence/money.rbAvoid fatal load failure when unavailable BDB bindings are not usedMoney decoding is not validated through this path
Worker native librariesworker SRC, AMR, LAME, and Speex bindingsLoad Linux shared libraries and avoid fatal startup when optional codecs are absentRebuilt base startup and all individual transforms require recorded validation
Lab licencercs-db/make_license.rbCreate a time-valid isolated-lab licence using keys extracted byte-exact from original sourceLicence validation is original; the licence contents are synthetic
Container orchestrationDockerfiles, entrypoints, Compose, Mongo setupRecreate the expected services and sharded layoutDeployment packaging is new lab code
Console replacementdocker-lab/console-web/Reimplement the AIR views against original contractsAll 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

LabelMinimum evidence
LABReproducible observation, command/test reference, and component version
SOURCERepository commit plus file and relevant lines
MANUALManual title, edition/date, and printed or PDF page
WEB PORTPort source/test and, when relevant, original MXML counterpart
REPORTINGDirect citation and wording no stronger than the source
INFERENCEExplicit reasoning and the observations it connects

Sources and evidence

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