android-reverse-engineering.../plugins/android-reverse-engineering/skills/sdk-neutralizer/registry/_schema.json

189 lines
5.4 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "sdk-registry-entry.schema.json",
"title": "SDK Neutralization Registry Entry",
"description": "Defines which public API methods of a third-party SDK can be safely neutralized (stubbed) in a decompiled Android APK.",
"type": "object",
"required": ["sdk_id", "display_name", "vendor", "category", "packages", "targets"],
"additionalProperties": false,
"properties": {
"$schema": {
"type": "string"
},
"sdk_id": {
"type": "string",
"pattern": "^[a-z0-9-]+$",
"description": "Unique lowercase identifier for this SDK (used as filename stem)"
},
"display_name": {
"type": "string",
"description": "Human-readable SDK name"
},
"description": {
"type": "string"
},
"vendor": {
"type": "string"
},
"category": {
"type": "string",
"enum": ["ads", "analytics", "attribution", "crash_reporting", "ads_mediation", "social"]
},
"known_versions": {
"type": "array",
"items": { "type": "string" },
"description": "SDK versions tested against (for reference only)"
},
"packages": {
"type": "array",
"items": { "type": "string" },
"minItems": 1,
"description": "Root Java/Kotlin packages of this SDK"
},
"obfuscation": {
"type": "object",
"properties": {
"public_api": {
"type": "string",
"enum": ["readable", "mixed", "obfuscated"]
},
"internals": {
"type": "string",
"enum": ["readable", "mixed", "obfuscated"]
},
"internal_prefix": {
"type": "string",
"description": "If known, the obfuscation prefix pattern (e.g. 'zz', single letters)"
}
},
"additionalProperties": false
},
"targets": {
"type": "object",
"additionalProperties": false,
"properties": {
"entry_points": {
"type": "array",
"items": { "$ref": "#/definitions/class_target" },
"description": "Level 1: SDK init methods. Stubbing these disables the entire SDK."
},
"ad_operations": {
"type": "array",
"items": { "$ref": "#/definitions/class_target" },
"description": "Level 2: load/show/cache methods. Safety net if init stub is bypassed."
},
"deep_patterns": {
"type": "array",
"items": { "$ref": "#/definitions/deep_pattern" },
"description": "Level 3: Broad internal patterns. Use for well-known SDK internals."
}
}
},
"manifest_components": {
"type": "array",
"items": { "$ref": "#/definitions/manifest_component" },
"description": "AndroidManifest components to disable/remove"
},
"protected_patterns": {
"type": "array",
"items": { "$ref": "#/definitions/protected_pattern" },
"description": "Methods/patterns that must NEVER be stubbed in this SDK"
}
},
"definitions": {
"class_target": {
"type": "object",
"required": ["class", "methods"],
"additionalProperties": false,
"properties": {
"class": {
"type": "string",
"description": "Fully qualified Java class name (dot-separated)"
},
"methods": {
"type": "array",
"items": { "$ref": "#/definitions/method_target" },
"minItems": 1
}
}
},
"method_target": {
"type": "object",
"required": ["name", "stub"],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"description": "Method name"
},
"signature": {
"type": "string",
"description": "Smali-style signature or '*' for all overloads"
},
"stub": {
"type": "string",
"enum": ["return-void", "return-false/0", "return-null"],
"description": "Stub type to apply"
},
"note": {
"type": "string"
}
}
},
"deep_pattern": {
"type": "object",
"required": ["package_glob", "rule"],
"additionalProperties": false,
"properties": {
"package_glob": {
"type": "string",
"description": "Glob pattern for packages (e.g. 'com.google.android.gms.internal.ads.**')"
},
"rule": {
"type": "string",
"enum": ["stub_all_void", "stub_all_concrete", "stub_all_non_getter"],
"description": "How aggressively to stub matched classes"
},
"note": {
"type": "string"
}
}
},
"manifest_component": {
"type": "object",
"required": ["type", "class", "action"],
"additionalProperties": false,
"properties": {
"type": {
"type": "string",
"enum": ["activity", "service", "receiver", "provider"]
},
"class": {
"type": "string"
},
"action": {
"type": "string",
"enum": ["disable", "remove"]
},
"note": {
"type": "string"
}
}
},
"protected_pattern": {
"type": "object",
"required": ["pattern", "reason"],
"additionalProperties": false,
"properties": {
"pattern": {
"type": "string",
"description": "Glob or regex pattern for methods to protect"
},
"reason": {
"type": "string"
}
}
}
}
}