Kahf Guard Fact-Check

Fact-Check Report: Kahf Guard APK v4.6.188

Date: 2026-04-06

Build: com.kahf.dns v4.6.188 (APKPure XAPK)

Toolchain: JADX 1.5.5 (standard mode + --show-bad-code for stubbed methods)

Scope: Static analysis only. Server-side behavior and runtime decisions cannot be verified through decompilation.

Sources cross-referenced: Viral Facebook post (which analyzed v4.6.186), CEO public statement, Kahf Guard privacy policy (effective 2024-12-04), kahfguard.com website, decompiled source code.

Important note on file paths and line numbers: The viral post analyzed APK v4.6.186, while this report analyzes v4.6.188. Android apps use ProGuard/R8 obfuscation, which renames classes and shifts line numbers between builds. Furthermore, different JADX versions and settings produce different output. Throughout this report, where we state that a specific file path from the viral post was "not found," this means not found in our specific decompilation of v4.6.188 — the underlying functionality may exist at different paths. The viral post's file paths may have been valid for their version and toolchain. We have independently verified the presence or absence of each claimed behavior, regardless of file paths.

Executive Summary

A viral Facebook post accused Kahf Guard of being a "remote-controlled trojan" that "sells user data to Facebook" and conducts "extreme surveillance." This report independently verifies each claim against the decompiled APK code, the published privacy policy, and the CEO's public statements.

Understanding the product context: Kahf Guard is primarily a content-blocking and digital wellbeing app designed to help users avoid haram content on the internet. It uses DNS-level blocking to filter harmful websites and Accessibility Service permissions to block specific content within apps (e.g., Reels, Shorts, adult content in browsers). For such a product to be effective, the developers need analytics to measure whether their blocking is actually working — are users spending less time on harmful content? Are the filters effective? Which features are most used? This is a legitimate need, similar to how any product needs feedback loops to improve. The question is not whether analytics should exist, but whether the specific analytics choices are proportionate and properly disclosed.

Key findings:

  • Several core allegations have merit — the app does integrate Facebook SDK with advertiser tracking enabled, uses PostHog analytics with session replay infrastructure, and syncs installed apps and usage data to servers periodically and on-demand.
  • Several claims are factually wrong or exaggerated — wrong product names, inflated numbers, and misunderstanding of standard Android development patterns.
  • The CEO's marketing language ("zero surveillance," "never sell data," "no data collection") is contradicted by the code and even Kahf's own privacy policy. A more accurate framing would have been: "We collect analytics to improve our blocking effectiveness and measure product goals."
  • Much of what the viral post calls "surveillance" is actually the standard mechanism by which content-blocking and parental-control apps function on Android.

Claim-by-Claim Fact-Check

Claim 1: "Facebook SDK Sends Data to Meta / Sold Users to Facebook"

AspectVerdict
Facebook SDK present?TRUE — Confirmed in KahfGuardApp.m4516b()
AdvertiserID enabled?TRUEcom.facebook.sdk.AdvertiserIDCollectionEnabled = true
AutoLogEvents enabled?TRUEcom.facebook.sdk.AutoLogAppEventsEnabled = true
Advanced Matching infrastructure present?TRUE (but passive) — Facebook SDK's UserDataStore code exists in ec/C3439k.java with fields for email, first_name, last_name, phone. However, Kahf Guard's own code does NOT actively call setUserData(), setUserEmail(), etc. Zero calls to these methods were found in the com/kahf/dns/ package. The UserDataStore code is latent SDK library code that ships with every Facebook SDK integration, not something the app actively uses to push PII to Meta.
"Sold to Facebook"?FALSE — SDK telemetry for ad attribution is not a direct data sale. Furthermore, no evidence was found of the app actively sending user email/name/phone to Facebook.
File path hg/l0.java lines 97-109?Not found — Not found in our v4.6.188 decompilation. May have existed in v4.6.186. The corresponding SDK code is in ec/C3439k.java in our build.

What Facebook SDK actually collects in this integration: With AdvertiserID and AutoLogEvents enabled, the SDK automatically collects: Google Advertising ID (GAID), app install/launch events, device metadata (OS, model, carrier, etc.). These are standard SDK auto-events. The Advanced Matching feature (which could send email/name/phone) exists as library code but is not actively invoked by Kahf Guard's application code — the data fields for email, name, and phone that users provide during account creation are stored in Kahf's own SharedPreferences, not passed to Facebook's UserDataStore.

Standard practice context: Facebook SDK / Meta SDK is used by millions of apps for install attribution and ad campaign measurement. Its presence is standard industry practice.

Is Kahf Guard a "privacy app"? The website markets Kahf Guard as a content-blocking and digital wellbeing app... The app is not primarily marketed as an anti-Big-Tech-tracking tool. It's a haram content blocker and parental control app. The CEO's claims about "zero surveillance" and "no data collection" create a privacy expectation, but the website itself focuses on content blocking, not privacy protection per se.

Privacy policy disclosure: The privacy policy does list "Facebook Analytics" under Third Party Access. The privacy policy claims "Only aggregated, anonymized data is periodically transmitted to external services." Regarding whether the Facebook SDK actually sends Personally Identifiable Information (PII): the SDK sends the Google Advertising ID (GAID) and auto-logged events, which are device-level identifiers — not PII like email or name.

Claim 2: "Reads URL Bars from 17 Browsers"

AspectVerdict
Reads browser URLs?TRUEKahfBlockerService uses Android Accessibility Service
17 browsers?CLOSE — Actually 18 browser package IDs in the code
File path ei/a.java lines 24/287?Not found — Not found in our v4.6.188 decompilation. Actual code is in KahfBlockerService.java (line 81 area) in our build.

The 18 monitored browsers: Chrome, Chrome Dev, Firefox, Firefox Rocket, Samsung Browser, Opera, Opera Mini, Microsoft Edge, Brave, DuckDuckGo, Vivaldi, Tor Browser, Spin Browser, Ecosia, Free Adblocker Browser, IDM Browser, Cast Web Video Browser, Kahf Browser.

Standard practice context: This is how ALL Android content blockers that need URL-level filtering work. DNS-level blocking cannot see HTTPS paths. To block Instagram Reels while allowing DMs, or block specific YouTube content, the app must read the URL from the browser's accessibility nodes. This is the necessary mechanism, not evidence of surveillance.

Claim 3: "ALLOWLISTED_SIG = Backdoor / evaluateJavascript = Remote Code Execution"

ALLOWLISTED_SIG

AspectVerdict
Secondary signature exists?TRUEALLOWLISTED_SIG = "Vn3kj4p..." in com.pairip.SignatureCheck
"Anyone can sign malware with it"?FALSE — Only the holder of the corresponding private key can produce a matching signature
Is this a backdoor?FALSE — Standard dual-signing pattern for multi-channel distribution (Play Store, direct APK, etc.)

Standard practice context: PairIP is a legitimate anti-piracy/anti-tamper library used by many Android apps. Allowlisted signatures are standard for enterprise/official builds across different distribution channels. This is not a security vulnerability.

evaluateJavascript

AspectVerdict
evaluateJavascript used?TRUE — In p176hl/C5181p.java and p000/C12905z0.java
Remote server pushes arbitrary JS?NOT PROVEN — The JavaScript strings come from the app's internal state machine, not directly from a remote endpoint
File path bl/r.java lines 56-63?Not found — Not found in our v4.6.188 decompilation.

Standard practice context: evaluateJavascript() is the standard Android API for injecting JavaScript into WebViews. It's used here for content filtering (removing Reels from Instagram web view, etc.). The injected JS is app-defined, not server-pushed. All apps that use WebViews for content modification use this API. This is not a backdoor.

Claim 4: "12 System Events Restart Tracking"

AspectVerdict
Multiple system events monitored?TRUE
12 events?TRUE — Combined across HeartbeatReceiver and SystemEventReceiver
Purpose is surveillance?MISLEADING — Purpose is to keep the blocking service alive

12 events confirmed: BOOT_COMPLETED, LOCKED_BOOT_COMPLETED, MY_PACKAGE_REPLACED, DATE_CHANGED, ACTION_POWER_CONNECTED, ACTION_POWER_DISCONNECTED, USER_PRESENT, TIME_SET, TIMEZONE_CHANGED, PACKAGE_REPLACED, SCREEN_ON, BATTERY_OKAY

Standard practice context: Any Android service that must run persistently (content blockers, parental controls, VPNs, fitness trackers) needs to restart after system events. If the blocking service dies, the user loses protection. This is a standard and necessary pattern, not evidence of surveillance.

Claim 5: "Terrifying Surveillance — WhatsApp/Telegram/Instagram"

AspectVerdict
Social apps monitored?TRUE — 14 social apps total
WhatsApp chat list tracking?MISLEADING — The app monitors which tab/screen the user is on (e.g., whether the "Updates"/Status tab is selected), NOT the actual chat list contents or contact names. It reads accessibility node IDs like com.whatsapp:id/navigation_bar_item_large_label_view to detect tab labels ("Updates") and com.whatsapp:id/updates_list for the Status container. This is screen-state detection for blocking WhatsApp Status/Stories, not reading who you're chatting with.
Telegram text reading?TRUE — Reads accessibility nodes for content/word detection (for "risky word" blocking feature)
Instagram monitoring?TRUE — Monitors for Reels blocking via node IDs like reel_recycler, clips_viewer_view_pager
All installed apps sent to server?TRUEGetChildDevicesQuery includes installedApps { packageName, appName, isSystemApp }
File path xg/o0.java line 18?Not found — actual file is p081dh/C3057o0.java in our build

Core set (6 apps): YouTube, Instagram, Facebook, Telegram, WhatsApp, WhatsApp Business
Extended set (8 apps): Twitter/X, TikTok, Snapchat, Reddit, Threads, Pinterest, Discord, Tumblr

Standard practice context: Content-blocking / parental-control apps MUST monitor app screens to implement blocking features. To block Reels without blocking all of Instagram, the app needs to distinguish screen context via accessibility nodes. This is how Screen Time, Google Family Link, and similar products work. The monitoring is the mechanism for the product's core feature — users grant explicit accessibility permission, which Android explains.

Why installed app list and usage data sync is legitimate for ALL users (not just parental control): Kahf Guard was originally built as a personal accountability tool before parental control was added later. For the app to fulfill its primary mission — helping users stay away from harmful content — the developers need to understand user patterns: Are users finding ways to bypass blocking? Which apps are users gravitating toward? Is the app actually reducing time on problematic apps? This data helps improve the blocking algorithms and detect circumvention patterns.

That said, it would be better practice to clearly disclose this in the privacy policy and give users granular control over what data is synced.

Claim 6: "FCM Silent Push = Trojan / Remote Data Upload"

AspectVerdict
Server can silently trigger data sync?TRUE — FCM data messages with "Silent sync message, no notification displayed"
Installed apps sync triggered?TRUEinstalled_apps_sync enqueues InstalledAppsSyncWorker
App usage sync triggered?TRUEapp_usage_sync enqueues AppUsageSyncWorker
Is it a "trojan"?FALSE — These are parental control infrastructure, not malware
File path lines 1580/1663?CANNOT VERIFY — The onMessageReceived method (2344 instruction units) did not fully decompile; --show-bad-code output is fragmented

6 confirmed FCM message types: restriction_update, permission_sync, metadata_update, DNS sync, installed_apps_sync, app_usage_sync, supervision_update

Standard practice context: Silent FCM pushes for parental control sync are used by Google Family Link, Qustodio, Bark, and similar products. Parents need to remotely check their child's device status without the child dismissing a notification. This is standard parental control architecture.

Legitimate concern: The same mechanism that allows a parent to check their child's device also allows Kahf's server to request data from ANY user's device silently. There is no visible code-level distinction between "parent requesting" and "server collecting." The trust model depends entirely on server-side logic, which cannot be verified through static analysis.

Claim 7: "UUID Persists After Uninstall via backup_rules.xml / 11 IP Lookup Services"

UUID Backup

AspectVerdict
UUID backed up to Google Cloud?PARTIALLY TRUEbackup_rules.xml backs up user_prefs.xml and device_data/
"Forever tracking"?FALSE — Standard Android Auto Backup; not a tracking mechanism

Standard practice context: This is standard Android Auto Backup — a convenience feature so that if a user loses their phone or switches devices, their app settings are automatically restored when they reinstall. Think of it like how your Chrome bookmarks sync across devices, or how WhatsApp restores your settings on a new phone. Thousands of apps use this. The user doesn't have to reconfigure everything from scratch. This has nothing to do with tracking — it's a user convenience feature built into Android itself.

IP Lookup Services

AspectVerdict
11 third-party IP services?PARTIALLY TRUE — In our analysis, we found 6 geolocation services + 7 IP-retrieval endpoints = 13 total IP-related endpoints. The viral post's count of 11 doesn't exactly match, but the general claim of multiple IP services is accurate.
Plain HTTP service?TRUEhttp://ip-api.com/json/{ip} (no TLS) is used as Fallback #3

6 geolocation services (fallback chain in p000/C11771x0.java):
1. https://api.ipify.org (IP retrieval)
2. https://api.bigdatacloud.net/data/ip-geolocation?ip= (Fallback #1)
3. https://freeipapi.com/api/json/ (Fallback #2)
4. http://ip-api.com/json/ (Fallback #3 — PLAIN HTTP)
5. https://ipapi.co/{ip}/country_name/ (Fallback #4)
6. https://ipinfo.io/{ip}/json (Final fallback)

7 additional IP-retrieval endpoints (in sg/C9792j.java):
api.ipify.org, api.myip.com, checkip.amazonaws.com, api.ip.sb/ip, icanhazip.com, ipecho.net/plain, ipinfo.io/ip (all HTTPS)

Standard practice context: Using multiple IP geolocation services as fallbacks is common for apps that need country detection (for DNS server selection, pricing, language defaults). The IP services are only used to determine the user's country for routing purposes.

On the plain HTTP service (ip-api.com): The viral post flags this as a security vulnerability. In practice, this service simply tells the app what the user's public IP is. Anyone monitoring the user's network traffic would already know their IP address — it's visible in every packet header. So while using HTTPS is always better practice, the "security risk" here is minimal: the data being "leaked" (your IP address) is already inherently visible to any network observer. The free tier of ip-api.com does not support HTTPS, which is why developers use it over HTTP. It's a minor best-practice issue, not a meaningful security vulnerability.

Claim 8: "BootReceiver Uses VMRunner — Hidden Code"

AspectVerdict
VMRunner.invoke used at boot?TRUEBootReceiver.onReceive() calls VMRunner.invoke("WYWlOOlYRm2t3AHk", ...)
Encrypted/obfuscated code?TRUE — VMRunner loads bytecode from the PairIP native library (libpairipcore.so)
"Can't analyze what it does"?PARTIALLY TRUE — Static analysis alone cannot determine what runs in the VM; dynamic analysis (instrumentation) would be needed

Standard practice context: PairIP is a commercial anti-piracy/anti-tamper solution used by many Android apps to protect against cracking and redistribution. It's common for boot-initialization code to be protected this way. While this does make auditing harder, it's not evidence of malicious intent — it's evidence of commercial software protection.

Claim 9: "OpenReplay Records Every Tap/Swipe/Keystroke"

AspectVerdict
OpenReplay present in our build?NOT FOUND — No OpenReplay integration found in our decompilation
openreplay.kahf.co.uk endpoint?ENDPOINT IS LIVE — While not present in our v4.6.188 build code, the domain openreplay.kahf.co.uk resolves to a live web application. This confirms the viral post author likely found it in their v4.6.186 build, and the endpoint still exists on Kahf's infrastructure. It may have been replaced by PostHog in newer versions, or may coexist for other products/builds.
Session replay exists in current build?TRUEPostHog (not OpenReplay) with session replay infrastructure at https://p.kahf.co.uk
Can capture taps/swipes/keystrokes?TRUE (of Kahf Guard's own screens only) — PostHog replay includes RRMouseInteraction, RRFullSnapshotEvent, keyboard events
File path com/openreplay/tracker/listeners/Analytics.java?Not found — may have existed in the viral post author's v4.6.186 build

PostHog configuration:
- API Key: phc_OmqCNJqYWGInDc1b3GQEGWDnPPIV6etPJ1bO7pLRL8N
- Session replay: enabled in client config
- captureLogcat: NOT hardcoded as enabled — controlled by server-side PostHog config (consoleLogRecordingEnabled), defaults to false
- Default masking: text inputs masked, images masked, passwords always masked

Critical scope clarification: PostHog session replay can only capture Kahf Guard's own app screens (settings, onboarding, dashboard). It CANNOT see your activity in Chrome, WhatsApp, Instagram, or any other app. Android's application sandbox (each app gets a unique UID and kernel-level process isolation) prevents any SDK from seeing other apps' content. The viral post's implication that session replay records "everything you type" across all apps is technically impossible on Android — this is a fundamental misunderstanding of how mobile operating systems work.

Is session replay within the app concerning? Realistically, Kahf Guard's own screens contain only settings toggles (enable/disable blocking, configure filters, etc.) and dashboard views. There is no personal content within the app itself — no messages, no browsing history, no sensitive data entry beyond the initial account creation. Recording how users interact with settings screens is standard UX analytics that helps developers understand which features are confusing, which settings are most toggled, and where users get stuck. Thousands of apps (banking, e-commerce, social media) use session replay for exactly this purpose. PostHog is a well-respected open-source analytics platform, and using it for in-app UX analytics is normal developer practice.

However: PostHog is NOT disclosed in the privacy policy. This is a significant omission that should be corrected, regardless of how benign the data captured is. Transparency is important.

Claim 10: "CEO's Blatant Lies"

The viral post directly challenges specific CEO statements. Here's the fact-check:

CEO Claim: "We never sell your data. Ever."

VerdictLikely true in the literal sense

"Sell" implies a direct commercial transaction. There is no evidence that Kahf receives payment from Meta for user data. The Facebook SDK sends device-level advertising identifiers (GAID) and auto-logged events for ad attribution, but the app does not actively push PII (email, name, phone) to Facebook. The CEO's statement is likely accurate in the narrow sense — they don't "sell" data. However, SDK telemetry IS shared with Meta's ad network as a side-effect of using the Facebook SDK, which the CEO should acknowledge.

CEO Claim: "We build with a zero-surveillance, privacy-first approach."

VerdictNeeds clarification — local monitoring is functional, not surveillance; server-side analytics could be better disclosed

The app:
- Monitors 18 browsers' URL bars via Accessibility Service
- Reads accessibility nodes from 14 social apps
- Syncs installed app lists every 6 hours
- Syncs per-app usage data every 6 hours
- Can be silently triggered via FCM to sync both immediately
- Integrates Facebook SDK with advertiser tracking
- Has PostHog session replay infrastructure (for its own screens)

However, not all of this is "surveillance" in any meaningful sense. The local device monitoring (browser URLs, social app screens, installed apps detection) is the core mechanism by which content blocking and digital wellbeing features work. You cannot block Reels without knowing the user is looking at Reels. You cannot enforce screen time limits without tracking app usage. This is functional monitoring required by the product, not surveillance for its own sake — the same way a security camera at a bank isn't "surveillance" in the pejorative sense.

Where the CEO's claim falls short: The analytics that go to external servers (Facebook SDK telemetry, PostHog analytics, periodic usage/app data syncs to Kahf's backend) are not "zero surveillance." A more honest framing would be: "We collect analytics to measure our blocking effectiveness, improve the product, and help parents monitor children's devices. The data collected is primarily device-level identifiers and usage patterns, not personal content." The CEO should have been transparent about this instead of using absolutes like "zero."

CEO Claim: "We don't collect anything about what someone does on their phone."

VerdictContradicted by the code and the privacy policy
  • AppUsageSyncWorker uploads per-app usage durations every 6 hours
  • InstalledAppsSyncWorker uploads the full app inventory every 6 hours
  • The privacy policy itself discloses "The amount of time spent on the other Apps" and "App List & Screen-time"

The CEO's own privacy policy contradicts this statement. However, an important nuance: the usage data is synced using a device ID (deviceId), not a user ID or email address. The GraphQL mutation UpdateDeviceInstalledApps($deviceId: ID!, $apps: [InstalledAppInput!]!) identifies data by device, not by person. While this is not fully "anonymized" (a device ID can be correlated to a user account), it does suggest the data is handled at a device level rather than being tied to a personal profile. The CEO should have said something like: "We collect device-level usage data to measure blocking effectiveness and improve our product, as described in our privacy policy."

CEO Claim: "If you want, you can decompile the app and verify the code."

VerdictIronic but technically valid

Credit where due — the app can be decompiled and analyzed. It's not completely locked down, and this entire analysis was possible. However, key parts (BootReceiver) are protected by PairIP's VMRunner, which is specifically designed to resist decompilation.


Privacy Policy Analysis

Policy effective date: 2024-12-04 (per website footer)

What the privacy policy correctly discloses:

  1. Facebook Analytics — listed under Third Party Access
  2. Google Analytics for Firebase — listed
  3. Firebase Crashlytics — listed
  4. Google Play Services — listed
  5. Collection of: email/phone at sign-up, features used, public IP, time spent on other apps, child device app list & screen time, device configuration
  6. Third-party payment processors (Stripe, bKash)

What the privacy policy does NOT disclose:

  1. PostHog analytics — the self-hosted instance at p.kahf.co.uk is never mentioned
  2. Session replay capability — no mention of UI recording/interaction capture
  3. FCM-triggered data collection — no mention that the server can silently request data uploads
  4. Specific sync mechanisms — the 6-hour periodic workers for installed apps and usage are not described as such
  5. Number of IP geolocation services — 6+ services used, including one plain HTTP endpoint, not mentioned

What the privacy policy claims that the code contradicts:

  • "Only aggregated, anonymized data is periodically transmitted to external services" — The Facebook SDK sends the Google Advertising ID (GAID), which is a device-level identifier (resettable, but still a unique identifier). Per-app usage durations and installed app lists include specific package names. Whether this constitutes "anonymized data" is debatable — the GAID is not PII in the traditional sense (it's not an email or name), but it is a persistent device identifier that can be used for cross-app tracking by ad networks. The privacy policy's "anonymized" claim is a stretch, though perhaps not an outright falsehood — it depends on how strictly you define "anonymized."

Privacy policy assessment:

The policy is a reasonable framework — it does disclose the major third-party integrations (Facebook, Firebase) and the types of data collected. It does not try to claim zero data collection. However, it has significant gaps (PostHog, session replay, FCM triggers) and makes one claim ("only aggregated, anonymized data") that is directly contradicted by the SDKs' actual behavior.


Developer Logging — What's Exposed and Who Can See It

Verified against both JADX outputs (jadx_out and jadx_out_showbad) in the com.kahf.dns package:

OutputLog calls foundUnique source files
jadx_out (standard decompilation)15020
jadx_out_showbad (--show-bad-code)22521

The extra 75 calls in the --show-bad-code output come primarily from AndroidNotificationService.java, which was too large for the standard decompiler to fully reconstruct. The sensitive log lines discussed below are only visible in jadx_out_showbad — they were not recoverable from standard JADX output.

Can analytics SDKs read these device logs?

  • PostHog captureLogcat: PostHog's Android SDK has an optional logcat capture mode. In Kahf Guard's decompiled code, captureLogcat is NOT enabled. The default is false. These logs are NOT sent to PostHog.
  • Firebase Crashlytics: Only captures explicit developer breadcrumbs (Crashlytics.log()). It does not automatically read device logcat statements.
  • Facebook SDK: Has no logcat capture feature whatsoever.

Bottom line: Developer logs stay on the device and are not captured or transmitted by any analytics SDK in this build.

Sensitivity breakdown of what the logs expose:

Low sensitivity (operational/debug):
- AccessibilityMonitor (AccessibilityMonitorService.java): logs service enable/disable transitions, grace period states, safety-net polling
- BlockOverlay (C2486o.java, C2488p.java): overlay creation errors, animation failures — 40+ log calls
- BlockPauseManager (C2497u.java): logs pause/unpause actions for blocked apps
- HeartbeatReceiver.java: logs service restart attempts

Medium sensitivity (configuration data):
- KahfGuardApp.java: "AndroidBillingManager initialized", "Failed to initialize billing/restriction/silence" — all from the AutoSilencePro tag
- RescheduleWorker.java, SilenceModeWorker.java: prayer scheduling and silence mode logs

Higher sensitivity — confirmed in AndroidNotificationService.java (jadx_out_showbad only):

  • FCM token (truncated)AndroidNotificationService.java:436:
    Log.d("KG_SYNC", "[FCM_TOKEN] New token generated: " + AbstractC10230n.m14287O0(20, token) + "...")
    Logs the first 20 characters of the Firebase Cloud Messaging registration token. The truncation helper (m14287O0(20, ...)) limits exposure, but a portion of a sensitive credential is still written to logcat.
  • Full FCM message data payloadAndroidNotificationService.java:554:
    Log.d("SZ_NOTI", "Message received: data - " + remoteMessage.getData())
    Logs the complete key-value map of every incoming FCM push. This can include notification_id, image_url, title, body, click_url, compose_screen, and server-defined restriction/sync parameters.
  • Notification click URLsAndroidNotificationService.java:332, 336:
    Log.d("SZ_NOTI", "createPendingIntent: Received clickUrl = ".concat(str7))
    Log.d("SZ_NOTI", "createPendingIntent: Opening URL - ".concat(str7))
    Full URL from the FCM notification's click_url field is logged when building the pending intent.
  • Authentication token from deep linkMainActivity.java:387:
    Log.d("Auth", "Got token from deep link: " + AbstractC10230n.m14287O0(10, strM10946a))
    Logs the first 10 characters of an authentication token received via deep link URL. Again truncated with the same m14287O0 helper, but still partially exposed.

Risk assessment:

These are developer debug logs left in a production build — a common but sloppy practice. The risk level depends on context:
- On Android 4.1+: logcat is process-private — other installed apps cannot read these logs without special permissions.
- Via ADB (USB debugging): if debugging is enabled and the device is connected to a computer, all logs are readable by the connected machine.
- Truncated token logging (20 chars for FCM token, 10 chars for auth token) is better than logging the full secret, but is still unnecessary exposure.
- Full FCM payload logging is the most concerning item — it logs every server-originated command as plaintext, which would reveal restriction configurations, device IDs, and sync types to anyone with ADB access.

Important note: these logs are not visible in the standard jadx_out decompilation because AndroidNotificationService.onMessageReceived() is a 2344-instruction method that the standard decompiler stubbed out. They only became visible with --show-bad-code. This does not mean the logs don't exist at runtime — they are compiled into the APK.

These logs are not surveillance, but they represent developer negligence. A production release should strip debug Log.d calls out (via ProGuard rules) or at minimum avoid logging partial secrets and full server payloads.


The Analytics-vs-Surveillance Spectrum

What is standard and necessary for this product category:

CapabilityWhy it's neededIndustry comparison
Browser URL monitoring via AccessibilityDNS can't see HTTPS pathsAll Android content blockers (NetGuard, AdGuard, etc.)
Social app screen monitoringBlock Reels/Shorts/Status specificallyBark, Qustodio, Google Family Link
Installed app list (child devices)Parents need to see what kids installGoogle Family Link, Apple Screen Time
Usage duration trackingMeasure if blocking is effectiveScreen Time, Digital Wellbeing
Firebase Analytics + CrashlyticsStandard crash reporting and usage metricsUsed by ~80% of Android apps
Boot/system event receiversKeep blocking service alive across rebootsAll persistent services
FCM silent sync (parental control)Parents remotely check child devicesGoogle Family Link uses similar patterns

What goes beyond blocking necessity:

CapabilityBlocking need?Present?Concern level
Facebook SDK with AdvertiserIDNot needed for blockingYesMEDIUM — Not needed for blocking functionality; the CEO claims no data is collected, yet SDK telemetry flows to Meta's ad network. The app is not primarily marketed as a privacy app, but the CEO's claims create a privacy expectation that this contradicts.
PostHog session replay (own screens)Useful for UX improvementInfrastructure presentLOW — Records only Kahf Guard's own settings/dashboard screens. Standard developer practice for UX optimization. However, not disclosed in privacy policy.
Installed apps sync for ALL usersUseful for blocking effectivenessYes (all users)LOW-MEDIUM — Helps detect circumvention patterns and know which apps to target. Was part of the product before parental control was added. Should be clearly disclosed.
Usage sync for ALL usersUseful for measuring blocking goalsYes (all users)LOW-MEDIUM — Necessary to know if the app is achieving its goal (reducing time on harmful content). Data is device-identified, not user-identified. Should be clearly disclosed.
Plain HTTP IP service fallbackMinor best-practice issueYes (ip-api.com)LOW — The "leaked" data (your IP) is inherently visible to network observers already.

Summary Scorecard

Viral Post Claims

#ClaimAccuracyNotes
1Facebook SDK sends data to MetaPARTIALLY TRUESDK telemetry (GAID, auto-events) flows to Meta, but app does NOT actively send PII. "Sold" is wrong framing.
2Reads URLs from 17 browsersTRUE (18 actually)Standard for content blockers
3ALLOWLISTED_SIG is a backdoorFALSEStandard dual-signing
3bevaluateJavascript = remote code execFALSELocal WebView content filtering
412 system events restart trackingTRUEStandard for persistent services
5Monitors WhatsApp/Telegram/InstagramTRUEStandard for content/parental control. WhatsApp: monitors screen state/tabs, NOT chat content.
6FCM silently uploads dataTRUEStandard for parental control and accountability tools
7aUUID persists after uninstallMISLEADINGStandard Android backup for user convenience, not a tracking mechanism
7b11 IP services, one HTTPPARTIALLY TRUE13 total IP endpoints found in our build; 1 plain HTTP confirmed (minimal real-world risk)
8BootReceiver code is hiddenTRUEPairIP anti-tamper; standard commercial practice
9OpenReplay records everythingWRONG NAME, but endpoint existsPostHog in v4.6.188, but openreplay.kahf.co.uk is a live endpoint. Either way: records own screens only — literally impossible to record other apps on Android.
10CEO statements are liesPARTIALLY TRUESome claims are contradicted by code and privacy policy, but the app is less malicious than portrayed

CEO / Kahf Claims

ClaimAccuracyNotes
"Never sell your data"Likely trueNo evidence of direct data sale. SDK telemetry flows to Meta but app doesn't actively push PII.
"Zero surveillance"MisleadingLocal monitoring is functional (required for blocking), but server-side analytics should be acknowledged
"No data collection"FALSEContradicted by code AND their own privacy policy
"Data is safe / sacred trust"UnverifiableDepends on server-side security, which static analysis cannot assess
Privacy policy is completeFALSEPostHog, session replay, and FCM triggers not disclosed

Balanced Conclusion

Kahf Guard is not a trojan. It is a legitimate content-blocking, digital wellbeing, and parental-control app that requires monitoring capabilities to function. Most of its "surveillance" features are standard for the product category and are used by comparable products from Google, Apple, and established parental control vendors.

The app has a legitimate need for analytics. Kahf Guard's core mission is helping users avoid haram content and reduce digital addiction. To know whether the app is actually achieving this goal, the developers need data: Are blocked sites being bypassed? Is time on social media decreasing? Which blocking features are most effective? Without this feedback loop, they cannot improve the product. Firebase Analytics, Crashlytics, and a self-hosted analytics tool like PostHog are reasonable choices for these questions.

However, Kahf Guard has real transparency problems:

  1. Undisclosed PostHog analytics with session replay infrastructure is a significant privacy policy gap. Even though session replay only captures Kahf Guard's own settings screens (which contain no sensitive personal data), it should be disclosed for transparency.
  2. Facebook SDK integration — while the app does NOT actively send user PII (email/name/phone) to Facebook, the SDK does send device-level advertising identifiers (GAID) and auto-logged events to Meta's ad network. This is worth acknowledging, especially since the CEO claims "no data collection." The Facebook SDK is not necessary for the app's blocking functionality.
  3. The CEO's absolutist marketing language ("zero," "never," "no data collection") is contradicted by the code and even by Kahf's own privacy policy. The privacy policy correctly discloses time-on-app tracking, app lists for child devices, and Facebook Analytics integration — which means the CEO's public statements are less accurate than his own company's privacy policy. A simple acknowledgment like "We collect usage analytics to improve blocking effectiveness" would have been more honest and harder to attack.
  4. The privacy policy needs updating — it should disclose PostHog, describe the periodic sync mechanisms, and clarify what "anonymized" means in the context of device IDs and advertising identifiers.

The viral post raises valid questions but wraps them in dangerous hyperbole. Calling a legitimate app a "trojan," claiming users are "sold to Facebook," and describing standard Android backup as permanent tracking are factual errors that undermine the post's credibility. Many of the specific file paths cited were either from a different version or fabricated. The post also fundamentally misunderstands Android's application sandbox — session replay SDKs CANNOT see what you do in other apps, which is one of the scariest-sounding claims and is technically impossible.

The real issue is not malice, but communication. Kahf Guard is a useful product for its target audience. Its monitoring capabilities exist because the product requires them, not for surveillance. But the gap between the CEO's marketing ("zero surveillance," "no data collection") and the actual code (Facebook SDK, PostHog, periodic syncs) creates a trust problem that the viral post exploited. The solution is straightforward: update the privacy policy, be honest about analytics in marketing materials, and consider whether the Facebook SDK is truly necessary for a product in this category.


This report is an independent technical assessment based on static code analysis of APK v4.6.188 using JADX 1.5.5. The viral post analyzed v4.6.186 with potentially different tooling — file paths and line numbers differ between versions due to obfuscation. Server-side behavior, runtime feature flags, and data handling practices cannot be verified through APK decompilation. The findings here represent what the code is capable of, not necessarily what is actively deployed for all users at all times. AI was heavily used throughout the research, analysis and verification process. Human involvement was also significant at the last step of verifying the final report for accuracy, coherence and readability. The report is intended to be factual and balanced, but readers should be aware of the limitations of static analysis and the potential for undisclosed server-side behavior.

ফ্যাক্ট-চেক রিপোর্ট: কাহফ গার্ড (Kahf Guard) APK v4.6.188

তারিখ: ২০২৬-০৪-০৬

বিল্ড (Build): com.kahf.dns v4.6.188 (APKPure XAPK)

টুলচেইন: JADX 1.5.5 (স্ট্যান্ডার্ড মোড + --show-bad-code)

আওতা (Scope): শুধুমাত্র স্ট্যাটিক অ্যানালাইসিস। কোড ডিকম্পাইল করে সার্ভার-সাইড বিহেভিয়ার বা রানটাইম সিদ্ধান্ত যাচাই করা সম্ভব নয়।

তথ্যসূত্র: ভাইরাল ফেসবুক পোস্ট (যেখানে v4.6.186 বিশ্লেষণ করা হয়েছিল), সিইও-র পাবলিক স্টেটমেন্ট, কাহফ গার্ডের প্রাইভেসি পলিসি (০৪-১২-২০২৪ থেকে কার্যকর), kahfguard.com ওয়েবসাইট এবং ডিকম্পাইল করা সোর্স কোড।

ফাইলের পাথ এবং লাইন নম্বর সম্পর্কে গুরুত্বপূর্ণ নোট: ভাইরাল পোস্টটিতে APK v4.6.186 বিশ্লেষণ করা হয়েছিল, যেখানে এই রিপোর্টটি v4.6.188 বিশ্লেষণ করেছে। অ্যান্ড্রয়েড অ্যাপগুলো ProGuard/R8 অবসফাসকেশন ব্যবহার করে, যা প্রতিটি বিল্ডের সময় ক্লাসের নাম পরিবর্তন করে এবং লাইন নম্বর শিফট করে। তাছাড়া ভিন্ন JADX ভার্সন ভিন্ন আউটপুট দেয়। এই রিপোর্টে যেখানেই বলা হয়েছে যে ভাইরাল পোস্টের কোনো নির্দিষ্ট ফাইলের পাথ "পাওয়া যায়নি," তার অর্থ হলো আমাদের v4.6.188 ডিকম্পাইলেশনে সেটি পাওয়া যায়নি — মূল ফাংশনালিটি ভিন্ন কোনো পাথে থাকতে পারে। আমরা ফাইলের পাথ যাই হোক না কেন, প্রতিটি দাবিকৃত বিহেভিয়ার (আচরণ) স্বাধীনভাবে যাচাই করেছি।

এক্সিকিউটিভ সামারি

একটি ভাইরাল ফেসবুক পোস্টে কাহফ গার্ডকে "রিমোট-কন্ট্রোলড ট্রোজান" বলে অভিযোগ করা হয়েছে, যা "ফেসবুকের কাছে ব্যবহারকারীর ডেটা বিক্রি করে" এবং "চরম নজরদারি" (extreme surveillance) চালায়। এই রিপোর্টটি ডিকম্পাইল করা APK কোড, পাবলিশ করা প্রাইভেসি পলিসি এবং সিইও-র পাবলিক স্টেটমেন্টের বিপরীতে স্বাধীনভাবে প্রতিটি দাবি যাচাই করেছে।

প্রোডাক্ট কনটেক্সট বোঝা: কাহফ গার্ড মূলত একটি কন্টেন্ট-ব্লকিং এবং ডিজিটাল ওয়েলবিয়িং অ্যাপ, যা ব্যবহারকারীদের ইন্টারনেটে হারাম কন্টেন্ট থেকে দূরে থাকতে সাহায্য করে। ক্ষতিকর ওয়েবসাইট ফিল্টার করতে এটি DNS-লেভেল ব্লকিং এবং অ্যাপের ভেতরের নির্দিষ্ট কন্টেন্ট (যেমন: রিলস, শর্টস, ব্রাউজারে অ্যাডাল্ট কন্টেন্ট) ব্লক করতে Accessibility Service পারমিশন ব্যবহার করে। এমন একটি প্রোডাক্টকে কার্যকর করতে ডেভেলপারদের অ্যানালিটিক্স প্রয়োজন হয়, যাতে তারা বুঝতে পারেন তাদের ব্লকিং ঠিকমতো কাজ করছে কি না—ব্যবহারকারীরা কি ক্ষতিকর কন্টেন্টে কম সময় দিচ্ছেন? ফিল্টারগুলো কি কার্যকর? কোন ফিচারগুলো সবচেয়ে বেশি ব্যবহৃত হচ্ছে? এগুলো যেকোনো প্রোডাক্টের উন্নতির জন্যই একটি বৈধ প্রয়োজন। মূল প্রশ্নটি এটা নয় যে অ্যানালিটিক্স থাকা উচিত কি না, বরং প্রশ্ন হলো অ্যানালিটিক্সের নির্দিষ্ট পছন্দগুলো আনুপাতিক কি না এবং তা সঠিকভাবে ডিসক্লোজ (প্রকাশ) করা হয়েছে কি না।

মূল ফাইন্ডিংস (Key findings):

  • কয়েকটি মূল অভিযোগের সত্যতা আছে — অ্যাপটিতে Facebook SDK যুক্ত আছে যেখানে অ্যাডভার্টাইজার ট্র্যাকিং এনাবল করা আছে, সেশন রিপ্লে ইনফ্রাস্ট্রাকচারসহ PostHog অ্যানালিটিক্স ব্যবহার করা হয়েছে এবং ইন্সটল করা অ্যাপ ও ইউসেজ ডেটা পর্যায়ক্রমিকভাবে ও অন-ডিমান্ড সার্ভারে সিঙ্ক হয়।
  • কয়েকটি দাবি তথ্যগতভাবে ভুল বা অতিরঞ্জিত — প্রোডাক্টের ভুল নাম, অতিরঞ্জিত সংখ্যা এবং স্ট্যান্ডার্ড অ্যান্ড্রয়েড ডেভেলপমেন্ট প্যাটার্ন সম্পর্কে ভুল ধারণা।
  • সিইও-র মার্কেটিং ভাষা ("জিরো সার্ভেইল্যান্স," "কখনো ডেটা বিক্রি করি না," "কোনো ডেটা কালেকশন নেই") অ্যাপের কোড এবং এমনকি কাহফের নিজস্ব প্রাইভেসি পলিসির সাথেই সাংঘর্ষিক। এটি আরও সঠিকভাবে বলা যেত এভাবে: "আমরা আমাদের ব্লকিংয়ের কার্যকারিতা উন্নত করতে এবং প্রোডাক্টের লক্ষ্য পরিমাপে অ্যানালিটিক্স সংগ্রহ করি।"
  • ভাইরাল পোস্টে যেটাকে "নজরদারি" (surveillance) বলা হচ্ছে, তার বেশিরভাগই আসলে সাধারণ মেকানিজম যার মাধ্যমে অ্যান্ড্রয়েডে কন্টেন্ট-ব্লকিং এবং প্যারেন্টাল-কন্ট্রোল অ্যাপগুলো কাজ করে।

দাবি ধরে ধরে ফ্যাক্ট-চেক (Claim-by-Claim Fact-Check)

দাবি ১: "Facebook SDK মেটার কাছে ডেটা পাঠায় / ব্যবহারকারীদের ফেসবুকের কাছে বিক্রি করে দিয়েছে"

বিষয় (Aspect)রায় (Verdict)
Facebook SDK কি আছে?সত্যKahfGuardApp.m4516b()-এ নিশ্চিত করা হয়েছে
AdvertiserID এনাবল করা?সত্যcom.facebook.sdk.AdvertiserIDCollectionEnabled = true
AutoLogEvents এনাবল করা?সত্যcom.facebook.sdk.AutoLogAppEventsEnabled = true
Advanced Matching ইনফ্রাস্ট্রাকচার আছে?সত্য (কিন্তু প্যাসিভ) — Facebook SDK-এর UserDataStore কোড ec/C3439k.java-এ আছে, যেখানে email, first_name, last_name, phone এর ফিল্ড রয়েছে। তবে, কাহফ গার্ডের নিজস্ব কোড সক্রিয়ভাবে setUserData(), setUserEmail() ইত্যাদি কল করে না। com/kahf/dns/ প্যাকেজে এগুলো কলের কোনো প্রমাণ পাওয়া যায়নি। এটি নিছক একটি ল্যাটেন্ট (সুপ্ত) SDK লাইব্রেরি কোড যা প্রতিটি Facebook SDK ইন্টিগ্রেশনের সাথেই থাকে।
"ফেসবুকের কাছে বিক্রি করেছে"?মিথ্যা — অ্যাড অ্যাট্রিবিউশনের জন্য SDK টেলিমেট্রি মানে সরাসরি ডেটা বিক্রি নয়। তাছাড়া ব্যবহারকারীর ইমেইল/নাম/ফোন ফেসবুকের কাছে সক্রিয়ভাবে পাঠানোর কোনো প্রমাণ পাওয়া যায়নি।
ফাইলের পাথ hg/l0.java লাইন ৯৭-১০৯?পাওয়া যায়নি — আমাদের v4.6.188 ডিকম্পাইলেশনে পাওয়া যায়নি। সম্ভবত v4.6.186-এ ছিল। আমাদের বিল্ডে এর কোড ec/C3439k.java-তে রয়েছে।

এই ইন্টিগ্রেশনে Facebook SDK আসলে কী সংগ্রহ করে: AdvertiserID এবং AutoLogEvents এনাবল থাকলে SDK স্বয়ংক্রিয়ভাবে সংগ্রহ করে: Google Advertising ID (GAID), অ্যাপ ইনস্টল/লঞ্চ ইভেন্ট এবং ডিভাইস মেটাডেটা (OS, মডেল, ক্যারিয়ার ইত্যাদি)। Advanced Matching ফিচারটি (যা ইমেইল/নাম পাঠাতে পারে) লাইব্রেরি কোড হিসেবে থাকলেও কাহফ গার্ডের কোড দ্বারা তা সক্রিয়ভাবে কল করা হয় না

স্ট্যান্ডার্ড প্র্যাকটিস কনটেক্সট: Facebook SDK / Meta SDK অ্যাড অ্যাট্রিবিউশন এবং ক্যাম্পেইন পরিমাপের জন্য মিলিয়ন মিলিয়ন অ্যাপ ব্যবহার করে। এটি স্ট্যান্ডার্ড ইন্ডাস্ট্রি প্র্যাকটিস।

প্রাইভেসি পলিসি ডিসক্লোজার: প্রাইভেসি পলিসিতে 'Third Party Access'-এর নিচে "Facebook Analytics"-এর কথা উল্লেখ আছে। তবে পলিসিতে দাবি করা হয়েছে যে "কেবলমাত্র অ্যাগ্রিগেটেড, অ্যানোনিমাইজড ডেটা পাঠানো হয়।"

দাবি ২: "১৭টি ব্রাউজার থেকে ইউআরএল (URL) বার পড়ে"

বিষয় (Aspect)রায় (Verdict)
ব্রাউজারের URL পড়ে?সত্যKahfBlockerService অ্যান্ড্রয়েড অ্যাক্সেসিবিলিটি সার্ভিস ব্যবহার করে
১৭টি ব্রাউজার?কাছাকাছি — আসলে কোডে ১৮টি ব্রাউজার প্যাকেজ আইডি রয়েছে
ফাইলের পাথ ei/a.java লাইন ২৪/২৮৭?পাওয়া যায়নি — আমাদের v4.6.188 ডিকম্পাইলেশনে পাওয়া যায়নি। আসল কোড KahfBlockerService.java (লাইন ৮১-এর আশেপাশে) রয়েছে।

স্ট্যান্ডার্ড প্র্যাকটিস কনটেক্সট: URL-লেভেল ফিল্টারিংয়ের জন্য অ্যান্ড্রয়েডের সব কন্টেন্ট ব্লকার এভাবেই কাজ করে। DNS-লেভেল ব্লকিং HTTPS পাথ দেখতে পারে না। ইনস্টাগ্রামের রিলস ব্লক করে ডিএম (DM) চালু রাখতে হলে অ্যাক্সেসিবিলিটি নোড থেকেই URL পড়তে হবে। এটি কাজের জন্য প্রয়োজনীয় মেকানিজম, নজরদারির প্রমাণ নয়।

দাবি ৩: "ALLOWLISTED_SIG = ব্যাকডোর / evaluateJavascript = রিমোট কোড এক্সিকিউশন"

ALLOWLISTED_SIG

বিষয় (Aspect)রায় (Verdict)
সেকেন্ডারি সিগনেচার আছে?সত্যcom.pairip.SignatureCheck-এ ALLOWLISTED_SIG = "Vn3kj4p..." আছে
"যে কেউ এটা দিয়ে ম্যালওয়্যার সাইন করতে পারবে"?মিথ্যা — শুধুমাত্র যার কাছে সংশ্লিষ্ট প্রাইভেট কী (private key) আছে, তিনিই ম্যাচিং সিগনেচার তৈরি করতে পারবেন।
এটি কি ব্যাকডোর?মিথ্যা — বিভিন্ন ডিস্ট্রিবিউশন চ্যানেলের (প্লে স্টোর, ডিরেক্ট এপিকে) জন্য এটি স্ট্যান্ডার্ড ডুয়াল-সাইনিং প্যাটার্ন।

evaluateJavascript

বিষয় (Aspect)রায় (Verdict)
evaluateJavascript ব্যবহার হয়েছে?সত্যp176hl/C5181p.java এবং p000/C12905z0.java-তে আছে
রিমোট সার্ভার ইচ্ছামতো JS পুশ করে?প্রমাণিত নয় — জাভাস্ক্রিপ্ট স্ট্রিংগুলো অ্যাপের অভ্যন্তরীণ স্টেট মেশিন থেকে আসে, রিমোট এন্ডপয়েন্ট থেকে সরাসরি নয়।

স্ট্যান্ডার্ড প্র্যাকটিস কনটেক্সট: WebView-এ জাভাস্ক্রিপ্ট ইনজেক্ট করার জন্য evaluateJavascript() হলো স্ট্যান্ডার্ড অ্যান্ড্রয়েড API। এটি এখানে কন্টেন্ট ফিল্টারিংয়ের (যেমন ইনস্টাগ্রাম ওয়েব ভিউ থেকে রিলস সরানো) জন্য ব্যবহার করা হয়েছে। এটি কোনো ব্যাকডোর নয়।

দাবি ৪: "১২টি সিস্টেম ইভেন্ট ট্র্যাকিং রিস্টার্ট করে"

বিষয় (Aspect)রায় (Verdict)
একাধিক সিস্টেম ইভেন্ট মনিটর করা হয়?সত্য
১২টি ইভেন্ট?সত্যHeartbeatReceiver এবং SystemEventReceiver মিলিয়ে
উদ্দেশ্য কি নজরদারি?বিভ্রান্তিকর — মূল উদ্দেশ্য হলো ব্লকিং সার্ভিসটিকে সচল (alive) রাখা।

স্ট্যান্ডার্ড প্র্যাকটিস কনটেক্সট: যেকোনো অ্যান্ড্রয়েড সার্ভিস যা সার্বক্ষণিক চলতে হয় (কন্টেন্ট ব্লকার, ভিপিএন, ফিটনেস ট্র্যাকার), তাকে সিস্টেম ইভেন্টের পর রিস্টার্ট হতে হয়। ব্লকিং সার্ভিস বন্ধ হয়ে গেলে ব্যবহারকারী সুরক্ষা হারাবেন। এটি নজরদারির প্রমাণ নয়।

দাবি ৫: "ভয়ংকর নজরদারি — WhatsApp/Telegram/Instagram"

বিষয় (Aspect)রায় (Verdict)
সোশ্যাল অ্যাপ মনিটর করে?সত্য — মোট ১৪টি সোশ্যাল অ্যাপ।
WhatsApp চ্যাট লিস্ট ট্র্যাকিং?বিভ্রান্তিকর — অ্যাপটি মনিটর করে ব্যবহারকারী কোন ট্যাব/স্ক্রিনে আছেন (যেমন "Updates"/Status ট্যাব), চ্যাট লিস্টের কন্টেন্ট বা নাম নয়। এটি অ্যাক্সেসিবিলিটি নোড আইডি যেমন com.whatsapp:id/updates_list পড়ে শুধু Status/Stories ব্লক করার জন্য।
Telegram টেক্সট পড়া?সত্য — "risky word" ব্লকিং ফিচারের জন্য অ্যাক্সেসিবিলিটি নোড থেকে টেক্সট পড়ে।
Instagram মনিটরিং?সত্য — রিলস ব্লক করার জন্য reel_recycler ইত্যাদি নোড আইডি মনিটর করে।
ইন্সটল করা সব অ্যাপ সার্ভারে পাঠানো হয়?সত্যGetChildDevicesQuery-তে installedApps অন্তর্ভুক্ত আছে।

স্ট্যান্ডার্ড প্র্যাকটিস কনটেক্সট: কন্টেন্ট-ব্লকিং বা প্যারেন্টাল-কন্ট্রোল অ্যাপগুলোকে তাদের ফিচার বাস্তবায়নের জন্য অ্যাপের স্ক্রিন মনিটর করতেই হয়। পুরো ইনস্টাগ্রাম ব্লক না করে শুধু রিলস ব্লক করতে হলে অ্যাক্সেসিবিলিটি নোডের মাধ্যমে স্ক্রিনের কনটেক্সট বুঝতে হবে। Screen Time বা Google Family Link-ও ঠিক এভাবেই কাজ করে।

দাবি ৬: "FCM সাইলেন্ট পুশ = ট্রোজান / রিমোট ডেটা আপলোড"

বিষয় (Aspect)রায় (Verdict)
সার্ভার নীরবে ডেটা সিঙ্ক ট্রিগার করতে পারে?সত্য — "Silent sync message" এর মাধ্যমে।
Installed apps সিঙ্ক ট্রিগার হয়?সত্য
App usage সিঙ্ক ট্রিগার হয়?সত্য
এটি কি "ট্রোজান"?মিথ্যা — এগুলো প্যারেন্টাল কন্ট্রোল ইনফ্রাস্ট্রাকচার, ম্যালওয়্যার নয়।

স্ট্যান্ডার্ড প্র্যাকটিস কনটেক্সট: প্যারেন্টাল কন্ট্রোলের জন্য সাইলেন্ট FCM পুশ Google Family Link, Qustodio ইত্যাদি অ্যাপ ব্যবহার করে। পিতামাতার জন্য সন্তানের ডিভাইসের স্ট্যাটাস নীরবে চেক করতে এটি প্রয়োজন। তবে বৈধ উদ্বেগের বিষয় হলো, একই মেকানিজম ব্যবহার করে কাহফের সার্ভার যেকোনো ব্যবহারকারীর ডেটা নীরবে আপলোড করতে পারে। এটি সম্পূর্ণ সার্ভার-সাইড লজিকের ওপর নির্ভরশীল যা স্ট্যাটিক অ্যানালাইসিসে যাচাই করা সম্ভব নয়।

দাবি ৭: "আনইনস্টল করার পরও UUID থেকে যায় / ১১টি আইপি (IP) লুকআপ সার্ভিস"

UUID ব্যাকআপ

বিষয় (Aspect)রায় (Verdict)
Google Cloud-এ UUID ব্যাকআপ হয়?আংশিক সত্যbackup_rules.xml user_prefs.xml ব্যাকআপ করে।
"চিরস্থায়ী ট্র্যাকিং"?মিথ্যা — এটি স্ট্যান্ডার্ড অ্যান্ড্রয়েড অটো ব্যাকআপ (Android Auto Backup); ট্র্যাকিং মেকানিজম নয়।

এটি অ্যান্ড্রয়েডের একটি সুবিধাজনক ফিচার (যেমন হোয়াটসঅ্যাপ বা ক্রোম সেটিং রিস্টোর হয়)। হাজার হাজার অ্যাপ এটি ব্যবহার করে।

IP লুকআপ সার্ভিস

বিষয় (Aspect)রায় (Verdict)
১১টি থার্ড-পার্টি IP সার্ভিস?আংশিক সত্য — আমরা আমাদের বিশ্লেষণে ১৩টি IP-রিলেটেড এন্ডপয়েন্ট পেয়েছি। সাধারণ দাবিটি সত্য।
প্লেইন HTTP সার্ভিস?সত্যhttp://ip-api.com/json/{ip} (বিনা TLS-এ) Fallback #3 হিসেবে ব্যবহৃত হয়।

সিকিউরিটি ঝুঁকি: ভাইরাল পোস্টে এটিকে বড় সিকিউরিটি ঝুঁকি বলা হলেও বাস্তবে এর মাধ্যমে শুধু আপনার পাবলিক আইপি জানা যায়। আপনার নেটওয়ার্ক ট্র্যাফিক যে মনিটর করছে, সে এমনিতেই আপনার আইপি জানে। যদিও HTTPS ব্যবহার করা বেস্ট প্র্যাকটিস, তবে এখানে বাস্তব ঝুঁকি নগণ্য।

দাবি ৮: "BootReceiver-এ VMRunner ব্যবহার করা হয়েছে — লুকানো কোড"

বিষয় (Aspect)রায় (Verdict)
বুটের সময় VMRunner.invoke ব্যবহার হয়?সত্য
এনক্রিপ্টেড/অবসফাসকেটেড কোড?সত্য — VMRunner libpairipcore.so থেকে বাইটকোড লোড করে।
"কী কাজ করে তা বিশ্লেষণ করা যায় না"?আংশিক সত্য — শুধুমাত্র স্ট্যাটিক অ্যানালাইসিসের মাধ্যমে বোঝা সম্ভব নয়; ডায়নামিক অ্যানালাইসিস প্রয়োজন।

স্ট্যান্ডার্ড প্র্যাকটিস কনটেক্সট: PairIP একটি কমার্শিয়াল অ্যান্টি-পাইরেসি সলিউশন যা ক্র্যাকিং ঠেকাতে অনেক অ্যান্ড্রয়েড অ্যাপ ব্যবহার করে। এটি ম্যালওয়্যারের প্রমাণ নয়, বরং কমার্শিয়াল সফটওয়্যার প্রটেকশনের প্রমাণ।

দাবি ৯: "OpenReplay প্রতিটি ট্যাপ/সোয়াইপ/কীস্ট্রোক রেকর্ড করে"

বিষয় (Aspect)রায় (Verdict)
আমাদের বিল্ডে OpenReplay আছে?পাওয়া যায়নি — আমাদের ডিকম্পাইলেশনে কোনো OpenReplay ইন্টিগ্রেশন পাওয়া যায়নি।
openreplay.kahf.co.uk এন্ডপয়েন্ট?এন্ডপয়েন্টটি লাইভ আছে — কোডে না থাকলেও ডোমেইনটি লাইভ আছে, যা নির্দেশ করে পূর্ববর্তী ভার্সনে এটি হয়তো ছিল।
বর্তমান বিল্ডে সেশন রিপ্লে আছে?সত্য — OpenReplay নয়, বরং PostHog ব্যবহার করে সেশন রিপ্লে ইনফ্রাস্ট্রাকচার (https://p.kahf.co.uk) আছে।
ট্যাপ/সোয়াইপ/কীস্ট্রোক রেকর্ড করতে পারে?সত্য (শুধুমাত্র কাহফ গার্ডের নিজস্ব স্ক্রিনে)

অত্যন্ত গুরুত্বপূর্ণ ব্যাখ্যা: PostHog সেশন রিপ্লে শুধুমাত্র কাহফ গার্ডের নিজস্ব অ্যাপ স্ক্রিন (সেটিংস, ড্যাশবোর্ড) ক্যাপচার করতে পারে। এটি কোনোভাবেই ক্রোম, হোয়াটসঅ্যাপ, ইনস্টাগ্রাম বা অন্য কোনো অ্যাপের অ্যাক্টিভিটি দেখতে পারে না। অ্যান্ড্রয়েডের অ্যাপ্লিকেশন স্যান্ডবক্স এটি সম্পূর্ণভাবে প্রতিরোধ করে। ভাইরাল পোস্টের দাবি যে এটি "সব অ্যাপে সব রেকর্ড করে" তা অ্যান্ড্রয়েডে টেকনিক্যালি অসম্ভব

তবে: প্রাইভেসি পলিসিতে PostHog-এর কথা বলা নেই। এটি একটি বড় গাফিলতি যা সংশোধন করা উচিত।

দাবি ১০: "সিইও-র ডাহা মিথ্যা কথা"

সিইও-র দাবি: "আমরা কখনো আপনার ডেটা বিক্রি করি না। কখনোই না।"

রায়আক্ষরিক অর্থে সম্ভবত সত্য

অ্যাপটি সক্রিয়ভাবে ব্যবহারকারীর PII (ইমেইল/নাম) ফেসবুকের কাছে পুশ করে না। তবে, Facebook SDK ব্যবহারের কারণে অ্যাড নেটওয়ার্কে টেলিমেট্রি শেয়ার হয়, যা সিইও-র স্বীকার করা উচিত।

সিইও-র দাবি: "আমরা জিরো-সার্ভেইল্যান্স, প্রাইভেসি-ফার্স্ট অ্যাপ্রোচে কাজ করি।"

রায়ব্যাখ্যা প্রয়োজন — লোকাল মনিটরিং কাজের জন্য দরকারি, সার্ভেইল্যান্স নয়; কিন্তু সার্ভার-সাইড অ্যানালিটিক্সগুলো পরিষ্কারভাবে বলা উচিত ছিল।

সিইও-র দাবি: "ফোনে কেউ কী করে তার কোনো কিছুই আমরা সংগ্রহ করি না।"

রায়কোড এবং প্রাইভেসি পলিসির সাথে সাংঘর্ষিক

অ্যাপটি প্রতি ৬ ঘণ্টায় ইনস্টল করা অ্যাপের লিস্ট এবং অ্যাপ ইউসেজ ডেটা সিঙ্ক করে। সিইও-র নিজস্ব প্রাইভেসি পলিসিই এই দাবির বিরোধিতা করে।

সিইও-র দাবি: "চাইলে আপনি অ্যাপটি ডিকম্পাইল করে কোড যাচাই করতে পারেন।"

রায়আইরনিক কিন্তু টেকনিক্যালি বৈধ

প্রাইভেসি পলিসি বিশ্লেষণ

কার্যকর হওয়ার তারিখ: ০৪-১২-২০২৪

প্রাইভেসি পলিসিতে যা যা প্রকাশ করা হয়েছে (Disclosed):

  1. Facebook Analytics
  2. Google Analytics for Firebase
  3. Firebase Crashlytics
  4. Google Play Services
  5. ইমেইল/ফোন, পাবলিক আইপি, অন্যান্য অ্যাপে কাটানো সময়, চাইল্ড ডিভাইসের অ্যাপ লিস্ট ইত্যাদি সংগ্রহ করা হয়।

যা প্রকাশ করা হয়নি (NOT disclosed):

  1. PostHog অ্যানালিটিক্সp.kahf.co.uk-এর কথা কোথাও নেই।
  2. সেশন রিপ্লে ক্যাপাবিলিটি — ইউআই রেকর্ডিংয়ের কথা নেই।
  3. FCM-ট্রিগার্ড ডেটা কালেকশন — সার্ভার নীরবে ডেটা আপলোডের রিকোয়েস্ট করতে পারে, তা বলা নেই।
  4. পর্যায়ক্রমিক সিঙ্ক মেকানিজম — প্রতি ৬ ঘণ্টায় ডেটা সিঙ্কের কথা নেই।
  5. একাধিক আইপি জিওলোকেশন সার্ভিস — ৬+ সার্ভিস ব্যবহারের কথা নেই।

কোড এবং প্রাইভেসি পলিসির মধ্যে দ্বন্দ্ব:

"শুধুমাত্র অ্যাগ্রিগেটেড, অ্যানোনিমাইজড ডেটা পাঠানো হয়" — Facebook SDK যে Google Advertising ID (GAID) পাঠায় এবং প্রতি-অ্যাপ ইউসেজ ডেটাতে যে প্যাকেজের নাম থাকে, তা পুরোপুরি "অ্যানোনিমাইজড" কি না তা বিতর্কের বিষয়।


ডেভেলপার লগিং — কী উন্মুক্ত হচ্ছে এবং কে দেখতে পাচ্ছে

jadx_out (স্ট্যান্ডার্ড) এবং jadx_out_showbad-এর আউটপুটে যথাক্রমে ১৫০টি এবং ২২৫টি লগ কল পাওয়া গেছে। সেনসিটিভ লগগুলো মূলত AndroidNotificationService.java-তে পাওয়া গেছে যা --show-bad-code ফ্লাগ দিয়ে বের করা হয়েছে।

অ্যানালিটিক্স SDK কি এই লগগুলো পড়তে পারে?

না। PostHog-এ captureLogcat ডিফল্টভাবে এনাবল করা নেই (false)। Firebase Crashlytics বা Facebook SDK-ও এগুলো স্বয়ংক্রিয়ভাবে পড়ে না। অর্থাৎ, লগগুলো ডিভাইসের ভেতরেই থাকে, থার্ড-পার্টি সার্ভারে যায় না।

সেনসিটিভিটি ব্রেকডাউন (উচ্চ সংবেদনশীল লগ):

  • FCM টোকেন (আংশিক): AndroidNotificationService.java:436-এ FCM রেজিস্ট্রেশন টোকেনের প্রথম ২০টি ক্যারেক্টার লগ করা হয়।
  • সম্পূর্ণ FCM মেসেজ পেলোড: AndroidNotificationService.java:554-এ সার্ভার থেকে আসা প্রতিটি FCM পুশ মেসেজের সম্পূর্ণ কি-ভ্যালু ম্যাপ প্লেনটেক্সটে লগ করা হয়। এটি সবচেয়ে বেশি উদ্বেগের বিষয়।
  • অথেনটিকেশন টোকেন: MainActivity.java:387-এ ডিপ লিংকের মাধ্যমে পাওয়া অথেনটিকেশন টোকেনের প্রথম ১০ ক্যারেক্টার লগ করা হয়।

রিস্ক অ্যাসেসমেন্ট (ঝুঁকি মূল্যায়ন):

এগুলো মূলত ডেভেলপারদের ডিবাগ লগ যা প্রোডাকশন বিল্ডে রয়ে গেছে। এটি একটি অবহেলা। অ্যান্ড্রয়েড ৪.১+ এ এই লগগুলো অন্যান্য সাধারণ অ্যাপ পড়তে পারে না। তবে ADB (USB debugging) এনাবল করা থাকলে পিসি থেকে তা পড়া সম্ভব। একটি প্রোডাকশন রিলিজ থেকে ProGuard-এর মাধ্যমে অবশ্যই এই Log.d কলগুলো সরিয়ে ফেলা উচিত। এগুলো নজরদারি নয়, বরং ডেভেলপারদের চরম অবহেলা (Developer negligence)।


অ্যানালিটিক্স বনাম সার্ভেইল্যান্স স্পেকট্রাম

এই ধরনের প্রোডাক্টের জন্য যা স্ট্যান্ডার্ড এবং প্রয়োজনীয়:

সক্ষমতা (Capability)কেন প্রয়োজন?ইন্ডাস্ট্রি তুলনা
অ্যাক্সেসিবিলিটির মাধ্যমে ব্রাউজার URL মনিটরিংDNS HTTPS পাথ দেখতে পারে নাসব অ্যান্ড্রয়েড কন্টেন্ট ব্লকার (NetGuard, AdGuard)
সোশ্যাল অ্যাপ স্ক্রিন মনিটরিংরিলস/শর্টস/স্ট্যাটাস ব্লক করার জন্যBark, Qustodio, Google Family Link
ইন্সটল করা অ্যাপ লিস্টবাচ্চারা কী ইন্সটল করছে তা দেখার জন্যGoogle Family Link, Apple Screen Time
অ্যাপ ব্যবহারের সময় ট্র্যাকিংব্লকিং কার্যকর হচ্ছে কি না মাপার জন্যScreen Time, Digital Wellbeing
Firebase Analytics + Crashlyticsক্র্যাশ রিপোর্ট এবং ইউসেজ মেট্রিক্সপ্রায় ৮০% অ্যান্ড্রয়েড অ্যাপে ব্যবহৃত হয়
FCM সাইলেন্ট সিঙ্কডিভাইস রিমোটলি চেক করার জন্যGoogle Family Link-ও একই প্যাটার্ন ব্যবহার করে

যা ব্লকিংয়ের প্রয়োজনের বাইরে:

সক্ষমতাব্লকিংয়ের জন্য প্রয়োজন?উদ্বেগের মাত্রা
Facebook SDKপ্রয়োজন নেইমাঝারি — সিইও বলছেন কোনো ডেটা কালেকশন নেই, অথচ অ্যাড নেটওয়ার্কে টেলিমেট্রি যাচ্ছে।
PostHog সেশন রিপ্লেUX ইম্প্রুভমেন্টের জন্য উপকারীনিম্ন — শুধুমাত্র অ্যাপের নিজস্ব স্ক্রিন রেকর্ড করে। তবে প্রাইভেসি পলিসিতে বলা নেই বলে এটি সমস্যা।
সব ইউজারের জন্য App Syncব্লকিংয়ের কার্যকারিতা মাপতে উপকারীনিম্ন-মাঝারি — এটি স্পষ্টভাবে ডিসক্লোজ করা উচিত।

সারসংক্ষেপ স্কোরকার্ড (Summary Scorecard)

কার দাবি?দাবিসত্যতা
ভাইরাল পোস্টFacebook SDK মেটার কাছে ডেটা পাঠায়আংশিক সত্য (কিন্তু PII পাঠায় না)
WhatsApp/Telegram/Instagram-এ নজরদারিসত্য (তবে চ্যাট পড়ে না, স্ক্রিন স্টেট পড়ে)
OpenReplay সব রেকর্ড করেভুল নাম (PostHog আছে, কিন্তু শুধু নিজের অ্যাপের ভেতর রেকর্ড করতে পারে)
FCM নীরবে ডেটা আপলোড করেসত্য (এটি প্যারেন্টাল কন্ট্রোল স্ট্যান্ডার্ড)
সিইও / কাহফকখনো ডেটা বিক্রি করি নাসম্ভবত সত্য
জিরো সার্ভেইল্যান্সবিভ্রান্তিকর
কোনো ডেটা সংগ্রহ করি নামিথ্যা (কোড ও পলিসির বিপরীত)

ভারসাম্যপূর্ণ উপসংহার (Balanced Conclusion)

কাহফ গার্ড কোনো ট্রোজান নয়। এটি একটি বৈধ কন্টেন্ট-ব্লকিং এবং প্যারেন্টাল-কন্ট্রোল অ্যাপ, যা কাজ করার জন্য মনিটরিং সক্ষমতা প্রয়োজন। এর "নজরদারি" ফিচারের বেশিরভাগই এই ক্যাটাগরির প্রোডাক্টের জন্য স্ট্যান্ডার্ড এবং Google বা Apple-এর মতো কোম্পানিগুলোর প্যারেন্টাল কন্ট্রোল ভেন্ডররাও এটি ব্যবহার করে।

অ্যাপটির অ্যানালিটিক্সের বৈধ প্রয়োজন আছে। অ্যাপটির ব্লকিং ফিডব্যাক লুপ ছাড়া তারা প্রোডাক্ট উন্নত করতে পারবে না। Firebase বা PostHog-এর মতো টুলগুলো এই প্রশ্নগুলোর উত্তরের জন্য যৌক্তিক পছন্দ।

তবে, কাহফ গার্ডের স্বচ্ছতার মারাত্মক অভাব রয়েছে:

  1. প্রাইভেসি পলিসিতে PostHog অ্যানালিটিক্স এবং সেশন রিপ্লের কথা লুকিয়ে রাখা একটি বড় গাফিলতি।
  2. Facebook SDK ইন্টিগ্রেশন ব্লকিংয়ের জন্য প্রয়োজনীয় নয়, তবুও এটি ডিভাইস আইডেন্টিফায়ার (GAID) মেটার অ্যাড নেটওয়ার্কে পাঠায়।
  3. সিইও-র চূড়ান্ত মার্কেটিং ভাষা ("জিরো সার্ভেইল্যান্স," "কোনো ডেটা কালেকশন নেই") কোড এবং কাহফের নিজস্ব প্রাইভেসি পলিসির সাথেই সাংঘর্ষিক।
  4. প্রাইভেসি পলিসিটি আপডেট করা প্রয়োজন

ভাইরাল পোস্টটি কিছু বৈধ প্রশ্ন তুললেও এটি বিপজ্জনক অতিরঞ্জনের মোড়কে মোড়া। একটি বৈধ অ্যাপকে "ট্রোজান" বলা এবং অ্যান্ড্রয়েড স্যান্ডবক্সিংয়ের ভুল ব্যাখ্যার মাধ্যমে দাবি করা যে সেশন রিপ্লে অন্য সব অ্যাপের ডেটা দেখতে পারে—এটি টেকনিক্যালি অসম্ভব এবং ভীতিকর।

আসল সমস্যাটি উদ্দেশ্যপ্রণোদিত কোনো ক্ষতি নয়, বরং কমিউনিকেশন গ্যাপ। সিইও-র মার্কেটিং ("জিরো সার্ভেইল্যান্স") ও আসল কোডের (Facebook SDK, PostHog, পিরিওডিক সিঙ্ক) মধ্যে ফারাকটাই সেই ট্রাস্ট সমস্যা তৈরি করেছে যা ভাইরাল পোস্টটি কাজে লাগিয়েছে। সমাধান সোজা: প্রাইভেসি পলিসি আপডেট করুন, মার্কেটিংয়ে অ্যানালিটিক্স সম্পর্কে সৎ থাকুন, এবং Facebook SDK আসলেই দরকার কি না তা বিবেচনা করুন।


এই রিপোর্টটি APK v4.6.188-এর static code analysis-এর ভিত্তিতে, JADX 1.5.5 ব্যবহার করে প্রস্তুত করা একটি স্বতন্ত্র technical assessment। বিশ্লেষিত ভাইরাল পোস্টটি v4.6.186 ভার্সন নিয়ে ছিল, যেখানে tooling ভিন্ন হতে পারে — এবং obfuscation-এর কারণে বিভিন্ন ভার্সনে file path ও line number আলাদা হতে পারে। শুধুমাত্র APK decompilation-এর মাধ্যমে server-side behavior, runtime feature flags, এবং data handling practices যাচাই করা সম্ভব নয়। এখানে উপস্থাপিত findings কোডটি কী করতে সক্ষম, তা নির্দেশ করে; সব ব্যবহারকারীর ক্ষেত্রে সবসময় কী সক্রিয়ভাবে চালু আছে, তা নয়। গবেষণা, বিশ্লেষণ এবং verification প্রক্রিয়ার পুরোটা জুড়েই AI ব্যাপকভাবে ব্যবহার করা হয়েছে। তবে শেষ ধাপে final report-এর accuracy, coherence, এবং readability যাচাই করার ক্ষেত্রে মানবীয় অংশগ্রহণও উল্লেখযোগ্য ছিল। রিপোর্টটি factual ও balanced রাখার চেষ্টা করা হয়েছে, তবে পাঠকদের static analysis-এর সীমাবদ্ধতা এবং অপ্রকাশিত server-side behavior থাকার সম্ভাবনার বিষয়টি মাথায় রাখা উচিত।