The short version
You have an app on a phone and you don’t trust it. Maybe it appeared after someone else "borrowed" your phone for ten minutes. Maybe it is called "System Service" and has no icon. Maybe it is a perfectly ordinary-looking keyboard that your partner insisted you install.
The GuestSpy app scanner takes that app’s install file (an APK), pulls it apart in your browser, and tells you what it is, who signed it, what it is allowed to do, where it talks to, and whether any of that matches the 176 stalkerware and monitoring families in our database. Then it shows you the evidence for every single claim. No "trust us, it’s bad". You see the permission, the component, the domain, the rule ID and the danger code, in plain English.
Nothing is uploaded. The APK is parsed with code that runs inside your browser tab, and the indicator database is downloaded to your device, not the other way round. When you close the tab, the file is gone.
[00.84s] com.android.core.monitor → cert 0E0BE37D… MATCH Hoverwatch [00.91s] com.whatsapp → clean [00.93s] com.systemservice → pkg MATCH TheTruthSpy [01.02s] com.wondershare.famisafe → watchware [01.05s] org.telegram.messenger → clean
Stage by stage: what happens when you drop in an APK
Stage 1: SHA-256 against known samples
The first thing the scanner does is hash the entire file with SHA-256. This is a fixed-length fingerprint of every byte in the file. Change one byte and the fingerprint changes completely.
That fingerprint is checked against roughly 2,950 known sample hashes from the Echap stalkerware indicator set. If it matches, the scan is effectively over before it has started: the file is byte-for-byte identical to a sample that has already been analysed and attributed to a specific family. This is the highest confidence a verdict can have. The report will say Known stalkerware, name the family, give the danger code (for example GS-STK-AND-7685 for the mSpy family) and set confidence to Exact hash match.
Most files you scan will not match at this stage, and that is normal. Stalkerware vendors rebuild their apps often, and a rebuild with a different version string produces a new hash. A miss here means nothing on its own. The scanner carries on.
We also compute SHA-1 and MD5 for the Identity section, because other tools and online sandboxes often index by those, and you may want to cross-reference.
Stage 2: ZIP parse
Next the scanner reads the ZIP central directory and lists every entry. This sounds dull, but a few things are already visible at this stage:
Whether the archive is well-formed
Some malware deliberately corrupts ZIP headers in ways Android tolerates but analysis tools choke on. The scanner notes this as evidence (rule GS-R-002, "Malformed or non-standard ZIP structure") rather than giving up.
How many DEX files there are, and whether there are extra ones with unusual names.
Whether assets/ or res/raw/ contains files that look like second-stage payloads: another .apk, a .dex, a .jar, or a large blob with no recognisable type.
Native libraries under lib/, and which architectures are included.
The entry list is kept for the Code section of the report.
Stage 3: Decoding AndroidManifest.xml
The manifest is stored as Android binary XML ("AXML"). The scanner decodes it back into a readable tree, and this is where most of the real information comes from.
From the manifest the scanner extracts:
Identity. The package name (com.example.something), the version name and version code, and the minimum and target SDK levels. Package names matter enormously: the database contains 600+ package names tied to specific families, and stalkerware apps have a habit of choosing names that look like system components (com.android.core.monitor, android.helper.system, com.system.user, com.systemservice). A match on package name gives Package-name match confidence, one step below a certificate match, because package names can be copied by anyone.
A very low target SDK is also noted. Apps targeting old Android versions get older, looser permission behaviour, and some monitoring apps deliberately keep an old target to avoid newer restrictions on background location or SMS access.
Permissions. Every <uses-permission> line, sorted into risk tiers. The permission audit page explains each one in depth. Here, the scanner is interested in both single high-risk permissions and combinations. Reading SMS on its own might be a legitimate messaging app. Reading SMS plus call log plus fine location together is rule GS-R-030 and is what a monitoring app looks like.
Services.
Background components. The scanner flags any service that declares the android.accessibilityservice.AccessibilityService intent filter together with BIND_ACCESSIBILITY_SERVICE. An accessibility service, once the user enables it in settings, can read the text of everything on screen, including messages in apps that otherwise encrypt their traffic, and can observe every key press. That is rule GS-R-021, "Accessibility service can read screen content", mapped to ATT&CK T1417.001 (Keylogging) and T1513 (Screen Capture). The scanner also reads the service’s own configuration resource, if it can find it, to see whether it asks for flagRetrieveInteractiveWindows or canRetrieveWindowContent.
Notification listener services (BIND_NOTIFICATION_LISTENER_SERVICE) get the same treatment. A notification listener sees the content of every notification, which on most phones means the content of every incoming message from every messaging app, without needing any SMS permission at all. ATT&CK T1517, Access Notifications.
Receivers.
Broadcast receivers that wake the app up on events. Two are of special interest:
- A receiver for
android.intent.action.BOOT_COMPLETED, together with theRECEIVE_BOOT_COMPLETEDpermission, means the app starts itself every time the phone restarts. Normal for an alarm clock. Essential for anything that wants to monitor you without being reopened. - A receiver protected by
BIND_DEVICE_ADMINwith theandroid.app.action.DEVICE_ADMIN_ENABLEDfilter means the app is a device administrator. Device admin apps can be made very hard to uninstall (the uninstall button is greyed out until admin is revoked), can wipe the device, and can enforce lock settings. RuleGS-R-018, ATT&CK T1626.001.
Hidden launcher icon. The scanner looks at the app’s activities. If there is no activity with the MAIN action and LAUNCHER category, or if the launcher activity is an activity-alias that the app can disable programmatically, the app can exist on the phone with no icon in the app drawer. Rule GS-R-014, "Hides launcher icon", ATT&CK T1628.001. Legitimate apps almost never do this. Nearly every stalkerware app does.
Intent filters. The scanner lists any filter that catches outgoing calls (NEW_OUTGOING_CALL), incoming SMS (SMS_RECEIVED, with a high priority value so it sees the message before the default messaging app), or package install events (PACKAGE_ADDED, used to notice when the victim installs a security app).
Stage 4: Certificate extraction and signer matching
Every Android app must be signed, and the signing certificate cannot be changed without breaking updates. This makes the certificate one of the most reliable identifiers of who really built an app, regardless of what name or icon they gave it.
The scanner reads the certificate from META-INF/*.RSA (or .DSA/.EC) and, where present, from the APK Signature Scheme v2/v3 block. It computes the SHA-1 and SHA-256 fingerprints of the certificate and extracts the subject and issuer fields (the "CN=" and "O=" values the developer typed when they generated the key).
The fingerprints are then compared against 470+ signing certificates in the database. A certificate match gives Signing-certificate match confidence. This catches a huge amount that package-name matching misses: when a vendor renames their app from "SpyPhone" to "Battery Saver Pro" and changes the package name, they very often keep signing with the same key, because changing it would break updates for existing paying customers.
The scanner also notes:
- Self-signed debug certificates (
CN=Android Debug), which appear in apps built from a developer machine rather than released properly. - Certificates whose subject fields are empty, random-looking, or deliberately imitate Google (
CN=Android, O=Google Inc.without the real Google key). - Certificates with absurdly long or short validity windows, which are weak signals on their own but add up.
Stage 5: String extraction – domains, IPs, URLs
The scanner walks through every DEX file, the resource table, and anything in assets/ that looks like text or configuration, and pulls out strings that look like network destinations: fully qualified domain names, IPv4 addresses, full URLs, and a few things that look like API keys for push and analytics services.
Why strings? Because an app that sends your messages to a server has to know the server’s address, and that address is somewhere in the file. Obfuscation tools can scramble class names, but a domain has to be a domain at the moment it is used, and in most stalkerware it is simply sitting there as a plain string constant.
The extracted list is shown in full in the Network indicators section, with the obvious noise (Google, Android schema URLs, common libraries) grouped separately so the interesting addresses stand out.
Stage 6: C2 matching
Each extracted domain and IP is compared with 900+ known command-and-control domains and with the distribution and website domains of every family in the database. Command and control (C2) is the server a monitoring app reports to and takes instructions from: "upload the last hour of audio", "send the current GPS fix", "turn on the camera".
A match here gives C2-domain match confidence and names the family. To give a concrete example, the TheTruthSpy family (GS-STK-AND-1405, which also covers the old GuestSpy monitoring builds, package com.guest) uses dozens of subdomains following patterns like protocol-a###.thetruthspy.com and media-sync-a###.fonetracker.com; these are in the database, and an app containing any of them will be attributed to that family even if its package name and certificate are new.
The scanner also applies a few generic network rules with no family attribution: hard-coded raw IP addresses used as the primary endpoint (GS-R-041), domains using "dynamic DNS" style hosting, and endpoints whose path contains words like /upload, /sync, /keylog, /callrecord, /sms.
Stage 7: Native libraries and packers
Some monitoring apps ship native code to record calls, capture audio at low level, or simply to hide logic from DEX-level analysis. The scanner lists each .so file and architecture and extracts strings from the native binaries too, so a C2 domain hidden in native code is still found.
It also checks for signs of commercial or open-source packers and protectors. The usual pattern is a tiny stub DEX whose only job is to decrypt and load the real code from assets/ at runtime. The scanner looks for known stub class names, for high-entropy blobs in assets/, and for the DexClassLoader / InMemoryDexClassLoader calls that load code dynamically. Packing is not proof of anything; plenty of banking and game apps use it. But a tiny app with a device admin receiver, an accessibility service, no launcher icon, and a packed payload is a combination that has only one sensible explanation. Packing is reported as GS-R-050 ("Dynamically loads code at runtime") and feeds into the score.
Stage 8: Danger scoring and the verdict
Now the scanner has a list of findings, each tagged with a rule ID, a weight, and any family attribution. It produces three things:
Severity (0-100). A weighted sum of findings, capped at 100. Family-level matches set a floor (a certificate match to a stalkerware family will never score below the Dangerous band, whatever else is going on). Combinations count more than sums: GS-R-030 adds more than the three permissions it is built from would add separately.
Confidence. The strongest kind of evidence found, in a fixed order: Exact hash match, then Signing-certificate match, then Package-name match, then C2-domain match, then Heuristic. This is shown separately from severity on purpose. An app can be high severity and heuristic-only (it behaves like spyware but we cannot name it) or lower severity with exact-hash confidence (a known "watchware" parental app that is honest about what it does).
Verdict. One of five words: Clean, Low risk, Suspicious, Dangerous, Known stalkerware. "Known stalkerware" is reserved for family matches of hash, certificate or package name in the stalkerware (STK) class. Apps in the watchware (WCH) class, meaning visible monitoring and parental apps such as Life360 (GS-WCH-AND-7021), are given their own purple label and explained as what they are: software that monitors, but doesn’t hide. Whether that is OK depends entirely on whether you knew it was installed and agreed to it.
Every finding carries a danger code in the format GS-<CLASS>-<PLATFORM>-<NNNN>. The class tells you the kind of problem (STK, WCH, SPY, TRJ, ADW, PUA, CFG, DOC, CLN); the platform here is always AND; the number identifies the family or, for heuristic verdicts, the heuristic profile.
Walking through a full deep report
Here is how a report reads from top to bottom for an app that was pulled off a phone because it had no icon and the owner didn’t remember installing it. The details below are what the scanner would produce for a Hoverwatch-style monitoring build; the family, package and domain patterns come from the database.
Sync Services v2.4.1
com.guest · APK · 4.2 MB · SHA-256 7f3a9c…e21bIdentity
- Package
- com.guest
- Label
- Sync Services
- SDK
- API 19 → API 22
- Launcher icon
- none
- Signer
- CN=Unknown, O=Unknown · RSA 2048
- Valid
- 2015-03-02 → 2042-07-19
Permissions by tier
- CREAD_SMS
- CREAD_CALL_LOG
- CACCESS_BACKGROUND_LOCATION
- CRECORD_AUDIO
- CBIND_ACCESSIBILITY_SERVICE
- CBIND_DEVICE_ADMIN
Network indicators
- guestspy.com known infrastructure
- media-sync-a.thetruthspy.com known infrastructure
- api.github.com
- 69.64.81.166 known C2 IP
ATT&CK techniques
Overview
Verdict: Known stalkerware
Family: Hoverwatch
Danger code:GS-STK-AND-7843
Severity: 96 / 100
Confidence: Signing-certificate match
Summary: This app is signed with a certificate attributed to the Hoverwatch monitoring family, hides its launcher icon, registers an accessibility service and a device administrator, starts at boot, and contains the Hoverwatch command-and-control domain. It can read your messages, record calls, track your location and send all of it to a remote dashboard.
The overview is written for someone who may read nothing else. It says what the app is, how sure we are, and what it can do to you. If you are in a hurry, this and the Removal plan are the two sections to read.
Identity
| Field | Value |
|---|---|
| Package | com.android.core.monitor |
| App label | "Sync Services" |
| Version | 7.2.1 (code 7210) |
| Min SDK / Target SDK | 21 / 28 |
| File SHA-256 | (full hash shown; no match in sample DB) |
| Signer SHA-1 | 0E0BE37D…CE227C – matches Hoverwatch |
| Signer SHA-256 | (full fingerprint shown) |
| Certificate subject | CN=hw, O=hw |
| Signature scheme | v1 + v2 |
Two things to notice. The package name imitates an Android system component, and the certificate, not the hash, is what made the attribution. The hash is new because this is a build we had not seen, but the vendor used the same signing key as every other Hoverwatch build in the database.
Permissions by risk tier
The scanner groups permissions into Critical, High, Medium and Low. For this app:
Critical: READ_SMS, RECEIVE_SMS, READ_CALL_LOG, RECORD_AUDIO, ACCESS_FINE_LOCATION, ACCESS_BACKGROUND_LOCATION, BIND_ACCESSIBILITY_SERVICE (via service), BIND_DEVICE_ADMIN (via receiver), BIND_NOTIFICATION_LISTENER_SERVICE (via service).
High: CAMERA, READ_CONTACTS, PROCESS_OUTGOING_CALLS, SYSTEM_ALERT_WINDOW, READ_EXTERNAL_STORAGE, PACKAGE_USAGE_STATS, QUERY_ALL_PACKAGES.
Medium: RECEIVE_BOOT_COMPLETED, REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, GET_ACCOUNTS, READ_PHONE_STATE, FOREGROUND_SERVICE.
Low: INTERNET, WAKE_LOCK, ACCESS_NETWORK_STATE, VIBRATE.
Beneath the tiers, the combination rules that fired:
GS-R-030Reads SMS + call log + location together.GS-R-031Records audio with background location and boot start.GS-R-033Reads notifications and has accessibility service (double message capture).
Each permission line expands to a plain-English sentence ("READ_SMS: can read every text message stored on the phone, including two-factor codes") and the ATT&CK technique it enables.
Components
Accessibility service
com.android.core.monitor.AccService – GS-R-021. Config requests canRetrieveWindowContent=true, event types: all. This can log keystrokes and read on-screen text in any app.
Device admin receiver
.AdminReceiver – GS-R-018. Policies: force-lock, wipe-data. Uninstall will be blocked until admin is deactivated.
Notification listener
.NotifService – GS-R-023.
Boot receiver
.BootReceiver for BOOT_COMPLETED, QUICKBOOT_POWERON and USER_PRESENT – GS-R-011.
Outgoing call receiver
With priority 2147483647 – GS-R-036.
Launcher icon:
No LAUNCHER activity found – GS-R-014. The app is invisible in the app drawer.
Foreground service
Declared with type location|microphone|camera.
The Components section is where you see how the permissions are actually wired up. A permission is a request; a component is the machinery that uses it.
Network indicators
a.hw.cab
– C2 match: Hoverwatch
hw.cab
– C2 match: Hoverwatch
a.hwa.cab
– C2 match: Hoverwatch
https://a.hw.cab/api/v2/upload
– path keyword upload
firebaseinstallations.googleapis.com
– common library (collapsed)
crashlytics.com
– common library (collapsed)
Three matches on the family’s own infrastructure. Even without the certificate, this would have attributed the app.
Code
DEX files: 2 (classes.dex, classes2.dex)
Native libraries
Lib/armeabi-v7a/librec.so, lib/arm64-v8a/librec.so – strings include AudioRecord, /dev/snd/
Dynamic code loading: not detected
Packer: not detected
Obfuscation: ProGuard-style short class names (common, low weight)
ATT&CK mapping
| Technique | Evidence |
|---|---|
| T1636.004 SMS Messages | READ_SMS, RECEIVE_SMS, SMS receiver |
| T1636.002 Call Log | READ_CALL_LOG |
| T1636.003 Contact List | READ_CONTACTS |
| T1430 Location Tracking | fine + background location, foreground service type |
| T1429 Audio Capture | RECORD_AUDIO, librec.so |
| T1512 Video Capture | CAMERA |
| T1417.001 Keylogging | accessibility service |
| T1513 Screen Capture | accessibility service canRetrieveWindowContent |
| T1517 Access Notifications | notification listener |
| T1626.001 Device Administrator Permissions | device admin receiver |
| T1628.001 Suppress Application Icon | no launcher activity |
| T1624.001 Broadcast Receivers | boot and call receivers |
| T1437.001 Web Protocols | HTTPS C2 |
The mapping is there so that a report can be handed to an advocate, a lawyer, a police officer or an IT department and be understood in a standard vocabulary without re-explaining everything.
Removal plan
The removal plan is specific to the findings. For this app it reads:
- 1Before doing anything, read the safety note below.
- 2Deactivate device admin: Settings > Security (or Security & privacy) > More security settings > Device admin apps (names vary by manufacturer). Toggle off "Sync Services".
- 3Turn off the accessibility service: Settings > Accessibility > Downloaded apps (or Installed apps) > "Sync Services" > Off.
- 4Remove notification access: Settings > Notifications > Device & app notifications (or Notification access).
- 5Uninstall: Settings > Apps > See all apps > "Sync Services" > Uninstall. If the button is still greyed out, step 2 did not take; repeat it.
- 6Change the passwords for your Google account and anything you logged into from this phone, from a different device.
- 7Consider a factory reset if you cannot be sure this was the only thing installed.
Removing stalkerware can alert the person who installed it. Their dashboard may show "device offline" within minutes. If that person is someone you live with or are afraid of, make a safety plan first. The Coalition Against Stalkerware (stopstalkerware.org) lists support organisations by country. In the US, the National Domestic Violence Hotline is 1-800-799-7233. You may also want to keep the evidence (export this report as PDF) before removal. See our safety page.
Community verdicts
The last section shows what other GuestSpy users have said about this package name or file hash: Safe, Suspicious or Malicious votes, with moderated comments. If nobody has reported it yet, the section says so. We never pre-fill this section, so an empty community section is honest, not broken. You can add your own vote from here.
Subject
Sync Services (com.guest) v2.4.1
APK · 4.2 MBSHA-256 7f3a9c0e…4e21b
Verdict
Severity 96 / 100
Confidence: signing-certificate match
Danger code GS-STK-AND-1405
Family
TheTruthSpy
also: Copy9, iSpyoo, FoneTracker, GuestSpy (legacy)
Evidence (12)
| CERT | Signer matches TheTruthSpy family | Certificate |
| GS-R-014 | Hides launcher icon | T1628.001 |
| GS-R-021 | Accessibility service declared | T1417.001 |
| GS-R-030 | SMS + call log + location combination | T1636.004 |
| GS-R-018 | Device administrator receiver | T1626.001 |
| GS-IOC-C2 | media-sync-a.thetruthspy.com | T1437.001 |
Checks performed
37 rules evaluated · 12 fired · 25 passed · 5 evidence levels · database 176 families / 2,953 hashes
False positives, and how to read a "Suspicious" result
The scanner is designed to show its work precisely because automated scoring can be wrong. A few patterns that generate noise, and how the report handles them:
Legitimate apps with scary permissions.
A real SMS backup app reads SMS. A real call recorder records audio and processes outgoing calls. A password manager uses an accessibility service to autofill. A corporate MDM agent is a device admin. None of these are stalkerware, and the scanner will typically land them in Suspicious or Low risk with Heuristic confidence, not in Known stalkerware. The report will say which rules fired, and you can judge whether the app’s stated purpose explains them. If the app is a flashlight and it fired GS-R-030, the stated purpose does not explain it.
Watchware.
Parental control and family-locator apps are honest about monitoring. They have icons, they show notifications, they are on the Play Store. The database classifies them as WCH and the scanner shows them in purple with an explanation. The relevant question is consent: did you install this, do you know who sees the data, can you turn it off? If the answer is no, the technical class doesn’t make it OK.
Shared certificates. Occasionally a signing certificate in the database belongs to a developer who publishes both a monitoring app and unrelated apps. The report states the match and the family; you can see from the Permissions and Components sections whether the app actually has monitoring capability. A certificate match with no monitoring permissions is worth a second look rather than panic.
Repackaged and modded apps. "Modded" versions of popular apps from third-party sites are frequently re-signed with a new certificate and may contain injected code. The scanner will flag the certificate mismatch against the known official signer for well-known packages (GS-R-060, "Package name belongs to a known publisher but certificate does not match") and show you the extra network indicators.
Heuristic-only Dangerous. If the verdict is Dangerous but no family matched, you are looking at something that behaves like monitoring software and is not yet in the database. This is exactly the case where community reports matter. Vote, add what you know, and if you are comfortable doing so, share the hash so it can be added to the indicator set.
When the scanner says Clean. Clean means no family match and no heuristic rule above the Low tier fired. It does not mean the app has been proven safe; no scanner can prove that. It means that in the parts of the file we can read, there is nothing that looks like monitoring. If you still have a strong reason to think the phone is compromised, check the other usual places: your Google account’s device list, Play Protect status, accessibility services, device admin apps, and anything with notification access.
Where to get the APK
The Web Scanner runs in a browser, so it needs the APK file. A web page cannot reach into a phone and pull files out by itself. Here are the practical ways to get the file.
Option A: the GuestSpy Android app
If you can install our app on the phone (see download), it reads the list of installed packages, exports each one’s APK and hands them to the scanner on-device. This is the easiest route and the only one that doesn’t need a computer. It also catches apps that are hidden from the app drawer, because it reads the package list from the system, not from the launcher.
Option B: adb from a computer
If you have a computer and a USB cable:
- 1On the phone, enable Developer options (Settings > About phone > tap "Build number" seven times; on Samsung it is under Settings > About phone > Software information).
- 2Settings > System > Developer options > USB debugging: on.
- 3Install the Android platform tools on your computer and connect the phone. Accept the "Allow USB debugging" prompt on the phone.
- 4List packages:
adb shell pm list packages -3(third-party apps only). Look for anything you don’t recognise. Add-fto see the file path for each. - 5Find the path:
adb shell pm path com.suspicious.package - 6Pull it:
adb pull /data/app/.../base.apk ./suspicious.apk - 7Drop
suspicious.apkinto the Web Scanner.
You can also paste the whole output of pm list packages into the scanner’s Installed-apps list check mode. It will match every package name against the database without needing any files at all. It is less thorough than a full APK scan but takes thirty seconds.
| Stalkerware | com.android.core.monitorHoverwatch · GS-STK-AND-7843 · sideloaded | GS-R-070 system-name impostor · GS-R-030 7 surveillance permissions |
| Stalkerware | com.systemserviceTheTruthSpy · GS-STK-AND-1405 | installer: null · 2 components disabled |
| Watchware | com.wondershare.famisafeFamiSafe · GS-WCH-AND-0487 | Play Store · visible icon |
| Suspicious | com.wifi.sync.service | GS-R-072 generic system name · sideloaded · installed 3 days ago |
| OK | com.whatsapp | no findings |
Option C: a file manager with APK export
Several file managers and "APK extractor" apps can save an installed app’s APK to the Downloads folder. Then you can share it to a computer, or open the Web Scanner in the phone’s own browser and choose the file from Downloads. This works for most apps, but note:
- An app that is hidden from the launcher may still be visible in the file manager’s app list; look for the package name rather than a friendly name.
- Some device-admin stalkerware blocks other apps from reading its APK path. If export fails for exactly one app, that in itself is a finding worth writing down.
- Use a file manager you already trust. Installing a random "APK extractor" from a third-party site to investigate stalkerware is not a great trade.
Option D: the original installer file
If the app was sideloaded, the installer may still be sitting in Downloads, in a messaging app’s media folder, or in the browser’s download history. Those files can be scanned directly, and the download timestamp is useful evidence of when, and from where, the app arrived.
The scanner is just as useful before installation. If someone sends you an APK and asks you to install it "so we can share location" or "it’s a better keyboard", scan it first. If it hides its icon and wants device admin, you have your answer without ever installing it.
Frequently asked questions
Does the APK get uploaded to your servers?
No. The parsing, hashing, decoding and matching all run inside your browser. The indicator database is downloaded to your device as part of the page. The only thing that leaves your device is a community report if you choose to submit one, and that contains the package name or hash and your vote, not the file.
The scan says "Known stalkerware" but the app looks like a normal game. Is that possible?
Yes. The match may be on the signing certificate or an embedded C2 domain, neither of which are visible from the app’s icon or name. Open the Identity and Network sections to see exactly what matched. Repackaged games with monitoring code injected are a real distribution method.
Why is the confidence "Heuristic" when the severity is 90?
Severity measures what the app can do. Confidence measures how certain we are about who made it. An app with an accessibility service, device admin, hidden icon and boot start is capable of a great deal (high severity) even if its certificate and package are not in any database (heuristic confidence). Both numbers are shown because both matter.
What is the difference between "Dangerous" and "Known stalkerware"?
"Known stalkerware" means a specific family in the database matched by hash, certificate or package name. "Dangerous" means the heuristic score is in the top band without a family match. In terms of what to do next, treat them the same.
Can I scan a split APK or an .xapk / .apks bundle?
Yes. Drop in the whole bundle. The scanner analyses the base APK for the manifest and certificate and hashes each split separately. Split configuration APKs (language and density packs) rarely contain anything interesting and are listed in the Code section for completeness.
How often is the database updated?
The indicator set is rebuilt from the Echap repository and our own rules whenever either changes. The stats block on the scanner page shows the current counts of families, packages, certificates, hashes and C2 domains that your browser has loaded.
Run a free scan right now
Drop an APK, a file, your installed-apps list or an iPhone configuration profile into the GuestSpy Web Scanner. Everything is analysed inside your browser. Nothing is uploaded.