{"adoption": {"forks": 294, "observed_at": "2026-08-28T04:06:35.762810+00:00", "stars": 2307}, "canonical_url": "https://ross.abutalabs.com/products/teesimulator", "card": {"archived": false, "artifact_type": "plugin", "description": "Software simulation for Android hardware-backed key pairs with key attestation", "domain": ["android-tools", "security", "privacy"], "enriched": true, "function": ["security", "cryptography", "middleware"], "health_score": 99, "homepage": null, "language": "C++", "license": null, "license_family": "other", "maturity": "active", "member_repos": ["JingMatrix/TEESimulator"], "name": "JingMatrix/TEESimulator", "platform": ["cpp"], "pushed_at": "2026-08-21T16:02:03+00:00", "repo": "JingMatrix/TEESimulator", "stars": 2307, "tags": ["magisk-module", "key-attestation", "play-integrity", "keymint", "tee-simulation", "keystore", "root-detection-bypass", "tricky-store", "android"], "topics": ["android", "hardware-simulation", "playintegrity", "tee", "trickystore"], "urls": [], "use_cases": ["pass Play Integrity checks on a rooted Android device", "simulate hardware-backed key attestation in software", "sign Android key attestation certificates with a custom keybox", "bypass key attestation for specific apps while keeping hardware keys intact", "spoof device identity and patch levels in attestation chains", "make software keys look like TEE-generated keys"], "what_it_is": "TEESimulator is an Android module that defeats hardware-backed key attestation by running AOSP's reference KeyMint trusted application inside the keystore daemon, signing attestations with a user-provided keybox. It selectively intercepts attestation requests for targeted apps while leaving all other keys on the device's real hardware TEE.", "when_to_avoid": ["you have no valid keybox to sign attestations with", "you need to spoof the verified boot state or root of trust, which is deliberately not configurable", "you run Android versions older than 10", "you want a simple certificate-patching approach rather than an in-daemon KeyMint simulation"], "when_to_choose": ["you need per-app control over which apps receive simulated vs real hardware attestation", "you want internally consistent attestation certificates generated the same way a real TEE would", "you need profile-based configuration with different keyboxes and device identities per app", "you want a fail-safe setup where a missing keybox makes the module inert"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/teesimulator", "repo": "JingMatrix/TEESimulator", "role": "main", "score": 83}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:35.762810+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:39:38.834687+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "b94f569b96a5fa66b3bdecf38093b6592dbd62a8bf39d5c7306e6c8bb675d366", "fetched_at": "2026-08-28T04:06:35.762810+00:00", "kind": "readme", "missing": false, "url": "https://github.com/JingMatrix/TEESimulator"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 98, "longevity": 26, "rhythm": 97}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": ["no_license"], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 369, "days_push": 12, "days_rel": 22, "gap_med": 28.5, "n_releases_24m": 7}, "score": 83, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}