Appendix I: Source Commits, Manuals, and References
This appendix is the book’s consolidated provenance index. It identifies the immutable source revisions, manual files, research artifacts, and external works used across the chapters. It does not replace the local citation beside a claim: a commit identifies a tree, while a file and line range identify the evidence inside it.
Paths beginning with data/ refer to read-only leak material in the defensive
research workspace. Paths beginning with docker-lab/ refer to the isolated
reconstruction or its documentation. Paths under research/hackingteam-rcs/
are book research artifacts. No repository or manual hash establishes that
the material was deployed by a particular customer.
Frozen repository revisions
| Repository | Examined commit | Commit timestamp | Principal use in the book |
|---|---|---|---|
rcs-db | 6cff59d28634d718cac9fdd17cb629fd59a3cf3f | 2014-05-12 10:01:21 +02:00 | REST/WSS backend, MongoDB models, worker, licensing, installers, backup, tasks, collectors/connectors |
rcs-common | 38290d4eab2b2c295bea021429848a3666647827 | 2015-03-31 11:37:49 +02:00 | Shared crypto, evidence decoding, heartbeat and status contracts; declares 9.6.0 |
rcs-collector | 42cf61af9ec3e7b886e87eac20e762c3ce51c78c | 2015-03-31 11:36:16 +02:00 | Collector listener, decoy behavior, public-file path, database client |
rcs-console | a90041fcd32bf1a82276ac20c2cd5ecb7d108db0 | 2015-03-31 11:49:33 +02:00 | Original Adobe AIR views and application lifecycle |
rcs-console-library | 97531201600a8a223392e955a35b2b2605c1c1d4 | 2015-03-31 11:50:01 +02:00 | Console managers, models, REST service layer and push handling |
vector-exploit | 2cf574d3bf2ea44f67433e32ccc9906ded6218e0 | 2014-12-12 10:59:55 +01:00 | Static exploit manifests, changelog and full Git history |
rcs-anonymizer | 0c4189b1e5d7e23ad0bf85d0f184d9d8e46decbe | 2015-04-03 09:00:55 +02:00 | Static next-hop proxy and forwarded-header behavior; commit subject identifies 9.6.0 |
The first six revisions are the primary snapshots frozen before drafting. The
anonymizer revision was added to this reference index when Chapter 9’s cited
supporting tree was consolidated. The local connector implementation cited in
Chapters 9 and 10 is not a separate repository in this archive; it lives under
rcs-db/lib/rcs-connector/ and is therefore covered by the rcs-db commit.
Git timestamps are repository metadata, not release dates. In particular, the database identifies itself as 9.2.3 while the common library and console-side trees identify 9.6.0. The source/version appendix records the direct version evidence and fidelity consequences.
Endpoint capability-audit revisions
The endpoint audit adds the following immutable repository states. Full tree
hashes, classification rules, and file/line anchors are recorded in
research/hackingteam-rcs/IMPLANT-CAPABILITY-AUDIT.md.
| Repository | Examined commit | Timestamp | Role |
|---|---|---|---|
core-android | 888e51b4ef778ee7f1ef63e22f622ddffb358b39 | 2014-12-16T17:12:06+01:00 | Android core |
core-android-audiocapture | 77b2c1bb09406fd1cfa69e8e1e9276167a664daa | 2015-05-13T10:34:02+02:00 | Android audio adjunct |
core-android-native | 731733239fa91b3d5b502f0fda51d10c9ae9d974 | 2015-06-26T18:13:10+02:00 | Android native adjuncts |
core-blackberry | 977aca189004365f0002766fd318bfc6bc2b4d17 | 2014-11-03T10:38:29+01:00 | BlackBerry core |
core-ios | 19868fcfce187b5d5282ba231854064ad9054a55 | 2015-04-09T15:30:56+02:00 | iOS core |
core-linux | 9252cba42283e71d7858292a400f6c94043ee8ff | 2015-02-11T14:37:52+01:00 | Linux core |
core-macos | f412a71d51563db773c2f1b6bb8c5ef3b69cf201 | 2015-04-09T15:38:54+02:00 | macOS core |
core-symbian | eb5d3c477ee9b94751d83ed5c40d57a3f667f532 | 2011-03-09T16:02:14+01:00 | Symbian core |
core-win32 | 8eb1326959fcb5c727513b59b86386dae7463683 | 2015-01-21T16:50:35+01:00 | Windows desktop core |
core-win64 | a263105b32bc3416107c2950adc0e49f95186684 | 2014-01-16T15:22:14+01:00 | Windows companion layer |
core-winmobile | e5baa43ce352e8aa4de4f1604a95e691e2e85aaa | 2012-08-09T11:46:24+02:00 | Windows Mobile core |
core-winphone | 361510342e60778a003c535f5df48d27348661e1 | 2015-06-25T14:14:06+02:00 | Windows Phone core |
scout-win | 2368421c414b833e25b7f261a2a583245bad6102 | 2015-04-02T11:36:12+02:00 | Narrow Windows stage |
soldier-win | b0f86659d7f4a90206bd18b1053896fbd8709cd8 | 2015-03-19T16:10:06+01:00 | Intermediate Windows stage |
These sources were read only. None was built, run, repaired, or improved, and their different timestamps do not establish a coherent shipped release.
Historical common-library compatibility reference
The current-tree table is supplemented by one historical revision and its immediate transition:
| Repository state | Commit | Date | Relevance |
|---|---|---|---|
| Compatible 9.2.3 candidate | 34da36c873873a50a5ef053aa8f055207c1f1f2f | 2014-04-28 | Declares 9.2.3 and contains the heartbeat hooks and SystemStatus accessors expected by the selected database |
| Heartbeat refactor | 261e08dddf2f581e96a8798e041c182551dfd536 | 2014-05-13 | Still declares 9.2.3 while removing or reshaping the legacy interface |
| Visible 9.3.0 bump | 9a770f8455d9c250b62ae1a0034c1d45cdc3fbbc | 2014-05-13 | Marks the subsequent version transition |
This history proves that the expected interface existed in a contemporary
9.2.3 common-library state. It does not identify the database’s exact build
input: rcs-db/Gemfile.lock records a path dependency and version, not a
common-library commit. The lab shims therefore restore historically attested
interfaces but remain adaptations onto the selected 9.6 implementation.
Canonical source roots
| Short name used in citations | Workspace path |
|---|---|
| Original repositories | data/HackingTeam/unpacked/hackedteam/ |
Original rcs-db | data/HackingTeam/unpacked/hackedteam/rcs-db/ |
| Original manuals | data/HackingTeam - manuals/ |
| Patched backend copies | docker-lab/rcs-db/ and docker-lab/rcs-common/ |
| Web console reconstruction | docker-lab/console-web/ |
| Lab operations and IOCs | docker-lab/README.md and docker-lab/IOCs.md |
| Book research | ../blog/research/hackingteam-rcs/ from the defensive workspace |
When a chapter cites a bare path such as lib/rcs-db/rest/auth.rb, its Sources
and evidence section supplies the repository and commit. A citation to a lab
copy must say LAB or name docker-lab; otherwise the cited implementation is
the read-only original.
Operator manual corpus
The four core RCS 9 manuals are image-only PDFs. Page numbers in the book use
the PDF page (pdf-p.N) unless the citation explicitly says “printed page.”
The page footer and PDF page can differ because of covers and front matter.
| Manual file | Role in the book | PDF pages | SHA-256 |
|---|---|---|---|
rcs-9-admin-final.pdf | Users, groups, audit, monitoring and licence administration | 61 | 5b24dfd9817ae6478536118e5bd25a8bd4402d4a3139d1a472a31e7ea012b503 |
rcs-9-analyst-final.pdf | Login shell, investigations, evidence, intelligence, dashboards and alerts | 109 | e0bd5de11d076286edc65b53af762d97beb199851171d1c39aa1f10c68670e07 |
rcs-9-sysadmin-final.pdf | Installation, architecture, frontends, shards, backup and system management | 129 | 1ab4de6daf91d4159e55ef8b74f78cc3fdd7bdb5755733b4d3e351bcf12b0333 |
rcs-9-technician-final.pdf | Factories, configuration, build UI, Network Injector and technical workflows | 180 | c5d6036f2af41437416e59eba00dcfb03788b9eea7be0133a927df850fd33df6 |
These total 479 PDF pages. The OCR cache contains 479 per-page text files plus
four combined text files. Identical copies of the four PDFs also exist under
data/HackingTeam/; matching SHA-256 values confirm that either location
contains the same bytes. The book treats data/HackingTeam - manuals/ as the
canonical citation root.
The supporting manual directory also contains:
| File | Pages | SHA-256 | Use |
|---|---|---|---|
invisibility-report-9-0-final.pdf | 1 | a5c9f692fecc4f9b8391f14e059f236e4cb0039accf9cef6ec0f573982ee481a | Vendor-supplied product/visibility material; claims require attribution |
remote-control-system-9-0-changelog-final.pdf | 2 | 5512320ba5400919ce72802d68b8cb839802587a77a09ad33ffc58b012bd1a03 | RCS 9.0 change summary |
remote-control-system-9-1-changelog-final.pdf | 2 | c24c98c629f4ada65db8be8794dfaa63c834ac3454db40b2122df7070603bfce | RCS 9.1 change summary |
The locally preserved Intercept article PDF is contextual reporting, not an RCS product manual. It is not counted in the 479-page operator corpus.
Manual verification artifacts
The web-console manual audit connects 38 concrete manual claims to the running reimplementation:
docker-lab/console-web/tests/specs/manual-claims.jsstores claim text, manual file, PDF page and executable check;docker-lab/console-web/tests/specs/manual-audit.live.spec.jsruns the claims against the isolated backend;docker-lab/console-web/tests/manual-ocr/preserves the OCR text;docker-lab/manual-audit.mdrecords the per-section findings; anddocker-lab/console-web/MANUAL-AUDIT.mdexplains reproduction and state hygiene.
The result—38/38 claims matched—supports surface conformance of the web port. It does not turn the new JavaScript application into an original HackingTeam artifact or prove every untested AIR behavior.
Internal research artifacts
| Artifact | Purpose | Publication status or limitation |
|---|---|---|
research/hackingteam-rcs/CLAIM-LEDGER.md | Falsifiable claims, provenance, evidence, confidence and review state | Working control document; line references require final refresh |
research/hackingteam-rcs/history/CHRONOLOGY.md | Dated human-rights, disclosure and export-control record | Sourced chronology and author-side review complete; independent editorial review remains open |
research/hackingteam-rcs/HISTORICAL-HUMAN-RIGHTS-REVIEW.md | Historical, attribution and harm-sensitive language control | Author-side pass complete; independent human-rights and survivor-sensitive review remains open |
research/hackingteam-rcs/PUBLICATION-SAFETY-REVIEW.md | Secret, personal-data, operational-detail and synthetic-provenance control | Full-draft pass complete; repeat after copy and production changes |
research/hackingteam-rcs/COMMISSIONING-VALIDATION.md | Sanitized disposable empty-volume first-boot record, hashes, readiness, and recovery | Runtime commissioning passed; artifact-retention/lockfile policy remains open |
research/hackingteam-rcs/DEPENDENCY-REBUILD-VALIDATION.md | Separate-tag no-cache build and content-inventory comparison | Rebuild passed; upstream artifacts are not yet retained as an immutable bundle |
research/hackingteam-rcs/WORKER-VALIDATION.md | Named synthetic encrypted-evidence replay through the original Worker path | No implant or collector; optional media transforms remain untested |
research/hackingteam-rcs/IMPLANT-CAPABILITY-AUDIT.md | Frozen-revision static audit from module registration through implementation and evidence/log/IPC sinks | No implant execution; source capability does not establish deployment, compatibility, success, or historical use |
research/hackingteam-rcs/exploit-catalogue/inventory.rb | Reproducible Git-history normalization of exploit manifests | Static metadata only; never builds or executes packages |
research/hackingteam-rcs/exploit-catalogue/README.md | Catalogue method, counts and limitations | Source presence does not establish deployment or authorship |
research/hackingteam-rcs/detections/ | Suricata, Sigma and YARA rules plus exact validation record | Mechanical and bounded fixture gates pass; target-environment calibration remains in Appendix G |
research/hackingteam-rcs/incident-response/IR-CHECKLIST.md | Preservation-first field checklist | General workflow requiring local legal/forensic adaptation |
research/hackingteam-rcs/incident-response/MONGODB-QUERIES.md | Read-only metadata-first query catalogue | Static checks and 24-block synthetic MongoDB 2.6 replay pass; independent field review remains open |
research/hackingteam-rcs/incident-response/MONGODB26-VALIDATION.md | Isolated MongoDB 2.6 fixture, replay, assertions, and no-write equality record | Synthetic metadata only; not an incident-data test |
docker-lab/IOCs.md | Source- and lab-derived indicator record with file/line citations | Contains sensitive research detail; book omits embedded secrets |
docker-lab/console-web/MILESTONES.md | Web-port behavior, fidelity rules and M0-M7 gates | Applies to the reconstruction, not the AIR executable |
docker-lab/console-web/tests/ | Mock, live, compliance and manual-audit validation | Synthetic data and isolated backend only |
Chapter 10 also cites the immutable assessment snapshot identifier
codex-security-snapshot/v1:sha256:63da7d1a5c75bc3be86076e68891284c4bbc6b8125b4369b327bed289911139e.
The claim ledger carries the 27 validated findings and their limitations. The
identifier describes the reviewed source snapshot, not a hash of a historical
customer installation.
Human rights, history, and policy
The following sources support Chapter 1 and the framing used elsewhere. The book preserves each source’s level of certainty: product identification, targeting, suspected operator geography, commercial relationship, and successful compromise are not interchangeable conclusions.
- Citizen Lab, Backdoors are Forever: Hacking Team and the Targeting of Dissent (2012).
- Citizen Lab, Hacking Team and the Targeting of Ethiopian Journalists (2014).
- Citizen Lab, Mapping Hacking Team’s “Untraceable” Spyware (2014).
- Citizen Lab, Hacking Team Reloaded? US-Based Ethiopian Journalists Again Targeted with Spyware (2015).
- Kaspersky GReAT, HackingTeam 2.0: The Story Goes Mobile (2014).
- Committee to Protect Journalists, Ethiopia suspected of spying on independent TV network ESAT (2015).
- European Commission, Delegated Regulation (EU) No 1382/2014.
- Camera dei Deputati, response 5-08423 concerning HackingTeam export authorisations (20 April 2016).
- Privacy International, The Right to Privacy in Italy: submission to the UN Human Rights Committee (2017).
- UN Special Rapporteur, Surveillance and human rights, A/HRC/41/35 (2019).
- Formiche, interview with Memento Labs president Paolo Lezzi (2019).
Vulnerability and exploit-history references
These works validate public vulnerability identifiers and post-disclosure use. They do not establish who authored every repository package or whether any specific HackingTeam customer deployed it.
- Microsoft, Security Bulletin MS11-031 and MS11-081.
- NIST National Vulnerability Database, CVE-2015-5119, CVE-2011-0609, and CVE-2010-1095.
- Palo Alto Networks Unit 42, APT Group UPS Targets US Government with Hacking Team Flash Exploit.
- Mandiant, Demonstrating Hustle, Chinese APT Groups Quickly Use Zero-Day Vulnerability.
Citation and review rules
- Cite original source with repository, commit, file and refreshed line range.
- Cite a manual with filename and PDF page; add printed page when useful.
- Mark lab observations with the test, trace, capture or reproduction step.
- Mark web-port behavior separately unless original source/manual evidence also supports it.
- Attribute vendor claims as vendor claims.
- Do not cite a Git timestamp as a product release date.
- Do not turn source capability into evidence of sale, deployment or use.
- Do not reproduce victim content, passwords, cookies, component signatures, agent keys or licence cryptographic material merely to make a claim reproducible.
- Preserve unresolved discrepancies and negative results rather than silently harmonizing versions.
The mechanical link and source-range check is recorded in
research/hackingteam-rcs/CITATION-AUDIT.md. The final publication pass must
repeat it after edits and complete semantic technical, manual, historical,
human-rights, archival, and publication-safety review.
↑ HackingTeam's RCS: Bringing a Commercial Spyware Platform Back to Life