Dexaura security research · Android threat analysis

Inside a Pirated Android Streaming App

An evidence-led review of user complaints, the supplied APK’s network-request code, encrypted host recovery, and investigator screenshots—separating verified code capability from unverified activity and attribution.

By Ahmed Hesham
Inside a pirated streaming app: Dexaura security research banner showing an Android phone and network analysis visualizations
Editorial illustration for this research article. Technical evidence and investigator screenshots follow below.

Publication note: application names and selected identifiers are redacted in the text and evidence images. The displayed package alias is a placeholder; code offsets and forensic hashes are retained.

This review began after users raised multiple complaints about different behaviors associated with the pirated streaming app, including concern about SMS activity. We examined the supplied Android v7.0.0 APK and the separately provided Android-player and iOS samples. In the Android build reviewed here, the standard SMS permissions needed to read or receive SMS are absent, so the supplied evidence does not substantiate SMS theft. The strongest code-level finding is a MyWorker path that parses task-shaped input and dispatches to HTTP, raw TCP and SSH-like helpers. That establishes capability in this sample; it does not show that a command reached a user device or that a third-party service was attacked. This article distinguishes inspected binary evidence from investigator-reported screenshots and unresolved questions.

Target packageapp.package.redacted
Version7.0.0
APK size10,498,954 bytes
Primary evidenceDEX + native ELF
High-priority code-review findingStatic behavior confirmed

A remotely steerable network-execution path inside a TV application

String parsing is connected to a repeat count and to methods constructing outbound HTTP, arbitrary-host TCP and SSH-like traffic. This is materially different from ordinary playback, advertising or analytics code. The available evidence establishes capability, but does not establish that a distributed attack occurred.

Figure 01 — Reconstructed network execution architecture
Figure 01 — Reconstructed network execution architectureSolid arrows represent locally inspected code relationships; dashed arrows represent reported bootstrap/configuration behavior.
Acquisition & scope

01 / Samples, integrity and analytical scope

The review covers the exact Android APK supplied as v7.0.0.apk, a separate Url Video Player.apk and the iOS archive ios-sample-1.0.18.ipa. Binary identity matters: conclusions here refer to these particular files, not every application sold under a similar name. The original investigation reported matching the APK to a download from [distribution domain redacted]; this match was not independently re-performed in the subsequent offline review.

ArtifactIdentitySHA-256
Android app v7.0app.package.redactedf1661051c949c2867be4c66d5ac9d4a62d7fd1925f5bb0e6a0912c04a5666d7e
Url Video Player base APKinfo.t4w.vp7e57f289af5a331a05da11e6fc1283b45307838899aaf28c5bc4b72f040375bb
Separate iOS IPAsport-apps.livesport853e59290a40f4f23f1fdabbf72af956dac6e14527afad7f5fa40c0f64cd6871
Figure 02 — Package identity and manifest inspection
Figure 02 — Package identity and manifest inspectionArtifact fingerprint and Android manifest evidence from the independent offline casefile.

The Android DEX contains 8,474 class definitions. The security-relevant custom code is concentrated in a much smaller number of application components, surrounded by normal third-party libraries. The main entry points include StartActivity, MainActivity, MyWorker, BootReceiver and SecureEncryptor.

DEX reversing

02 / Reconstructing the command parser

The pivotal method is Lapp/package/redacted/services/MyWorker;, code item beginning at 0x270148 in classes.dex. The inspected instruction sequence tests for the pipe character and calls String.split(). It also compares a field to POST and later checks for ATT. Rather than inferring behavior from strings alone, the branch sequence provides a data-flow starting point.

MyWorker · input splittingDEX code item @ 0x270148 + 0x011c
011c: const-string  '|' [091a b317]0120: invoke-virtual  Ljava/lang/String;->contains [206e 4f60 0092]0128: const/4  0 [0a12]012a: if-eqz [0938 0059]012e: const-string  '\\|' [091a 65c1]0132: invoke-virtual  Ljava/lang/String;->split [206e 4f7b 0092]0140: if-le [8b37 0005]0148: goto [0228]014e: if-le [7c37 000e]0156: const-string  'POST' [0d1a 4ec6]015a: invoke-virtual  Ljava/lang/String;->equalsIgnoreCase [206e 4f65 00dc]
Figure 03 — Pipe-delimited input parsing
Figure 03 — Pipe-delimited input parsingDEX opcode excerpt showing delimiter detection, split and the POST discriminator.

The command format reconstructed in the previous report is destination | user-agent | ATT<count> [| extra]. This grammar is an analytical reconstruction from code and the reported decoded notifications, not a captured production command. It should be read as a parsing contract, not as an instruction to trigger the module.

Command interpretation

03 / ATT parsing and repeat-count logic

The branch converts a token to uppercase, checks the ATT prefix, extracts the suffix and falls back to the integer 100 when the suffix is empty. If present, the numeric suffix is converted using Integer.parseInt(). It is therefore not merely a label for analytics; it influences how often downstream work can be performed.

MyWorker · ATT discriminatorDEX code item @ 0x270148 + 0x0178
0178: invoke-virtual  Ljava/lang/String;->toUpperCase [106e 4f84 000d]0180: const-string  'ATT' [0f1a 0869]0184: invoke-virtual  Ljava/lang/String;->startsWith [206e 4f7d 00fd]018c: if-eqz [0d38 0018]0194: invoke-virtual  Ljava/lang/String;->substring [206e 4f7f 00ed]019c: invoke-virtual  Ljava/lang/String;->isEmpty [106e 4f70 000d]01a4: const/16  100 [1013 0064]01a8: if-eqz [0f38 0003]01ac: goto [0a28]01ae: invoke-static  Ljava/lang/Integer;->parseInt [1071 4ee0 000d]
Figure 04 — ATT branch in the DEX
Figure 04 — ATT branch in the DEXCode shows startsWith(ATT), substring and parseInt, including the literal default 100.
◆

What this does and does not prove: a repeat-count branch exists. It does not prove an unlimited rate, a sustained 30-second attack cadence or real-world flooding: scheduling, network failures and runtime conditions still matter.

Control flow

04 / From parsed input to network routines

The handler has a thread helper at code item 0x270104. The inspected dispatch sequence calls an internal method for the counted path and includes a separate form-request branch calling the HTTP helper four times. The static call sites are clear; exact HTTP success, payload content and thread lifetime require a controlled runtime capture.

MyWorker · dispatch and form branchDEX code item @ 0x270148 + 0x01e0
01e0: const/4  0 [0c12]01e2: const/4  0 [0d12]01e4: if-lez [0d3d 0007]01e8: invoke-virtual  Lapp/package/redacted/services/MyWorker;->Ⱙ [406e 4d5a db20]01ee: const/4  1 [1412]01f0: goto [3028]01f2: if-eqz [0c38 0010]01f6: invoke-virtual  Lapp/package/redacted/services/MyWorker;->㵒 [406e 4d63 9b20]01fc: invoke-virtual  Lapp/package/redacted/services/MyWorker;->㵒 [406e 4d63 9b20]0202: invoke-virtual  Lapp/package/redacted/services/MyWorker;->㵒 [406e 4d63 9b20]0208: invoke-virtual  Lapp/package/redacted/services/MyWorker;->㵒 [406e 4d63 9b20]
Figure 05 — Worker dispatch call sites
Figure 05 — Worker dispatch call sitesFour observed invocations of the HTTP helper appear in the alternate branch.

The destination scheme then determines which network primitive is used. The dispatcher at 0x26FFEC recognizes ssh://, http:// and https://, while the remaining branch feeds a raw socket routine.

MyWorker · scheme dispatchDEX code item @ 0x26FFEC + 0x0006
0006: const-string  'ssh://' [011a ab87]000a: invoke-virtual  Ljava/lang/String;->startsWith [206e 4f7d 0014]0012: if-eqz [0138 0008]0016: invoke-virtual  Lapp/package/redacted/services/MyWorker;->㚈 [206e 4d5d 0042]001c: goto [1f28]0020: goto [1a28]0022: const-string  'http://' [011a 817b]0026: invoke-virtual  Ljava/lang/String;->startsWith [206e 4f7d 0014]002e: if-nez [0139 000f]0032: const-string  'https://' [011a 8185]0036: invoke-virtual  Ljava/lang/String;->startsWith [206e 4f7d 0014]003e: if-eqz [0138 0003]0042: goto [0528]0044: invoke-virtual  Lapp/package/redacted/services/MyWorker;->ᵛ [206e 4d58 0042]004a: goto [0828]004c: invoke-virtual  Lapp/package/redacted/services/MyWorker;->㒬 [306e 4d5c 0542]
Figure 06 — URL-scheme dispatch
Figure 06 — URL-scheme dispatchScheme discrimination and calls into SSH-like, HTTP and raw TCP routines.
Network primitive A

05 / Raw TCP: arbitrary destination and random-byte write

At code item 0x26FA24, the helper constructs a Java Socket, connects to a supplied InetSocketAddress with a five-second timeout, obtains input/output streams, generates a random byte array and writes it to the remote socket. This is a concrete outbound traffic primitive rather than ordinary video playback.

MyWorker · raw TCP helperDEX code item @ 0x26FA24 + 0x004c
004c: new-instance [0122 0a3c]0050: invoke-direct  Ljava/net/Socket;-><init> [1070 5078 0001]0056: new-instance [0022 0a35]005a: invoke-direct  Ljava/net/InetSocketAddress;-><init> [3070 5064 0250]0060: const/16  5000 [0513 1388]0064: invoke-virtual  Ljava/net/Socket;->connect [306e 507c 0501]006a: invoke-virtual  Ljava/net/Socket;->getOutputStream [106e 507f 0001]0072: invoke-virtual  Ljava/net/Socket;->getInputStream [106e 507d 0001]007a: new-instance [0222 0ac6]007e: invoke-direct  Ljava/util/Random;-><init> [1070 52df 0002]0084: const/16  512 [0313 0200]0088: invoke-virtual  Ljava/util/Random;->nextInt [206e 52e5 0032]0094: new-array [3323 254b]0098: invoke-virtual  Ljava/util/Random;->nextBytes [206e 52e2 0032]009e: invoke-virtual  Ljava/io/OutputStream;->write [206e 4e11 0035]00a4: invoke-virtual  Ljava/io/OutputStream;->flush [106e 4e0f 0005]
Figure 07 — Socket creation and random bytes
Figure 07 — Socket creation and random bytesRelevant DEX calls: Socket.connect, Random.nextBytes, OutputStream.write and flush.

The method itself does not visibly enforce an Internet-only destination restriction. Depending on how a destination is supplied and resolved at runtime, this creates a plausible local-network exposure as well as potential Internet abuse. No private-network targeting or scan was performed in this investigation.

Network primitive B

06 / SSH-like connections: why the protocol detail matters

The separate routine at code item 0x26FB78 opens a TCP socket and writes an explicit SSH identification string: SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1. Following a read it may send additional bytes. A standalone streaming player has no clear functional reason to impersonate an OpenSSH endpoint toward arbitrary destinations. This makes the helper unusually relevant to threat hunting.

MyWorker · SSH-like handshakeDEX code item @ 0x26FB78 + 0x003e
003e: new-instance [0122 0a3c]0042: invoke-direct  Ljava/net/Socket;-><init> [1070 5078 0001]0048: new-instance [0022 0a35]004c: invoke-direct  Ljava/net/InetSocketAddress;-><init> [3070 5064 0360]0052: const/16  5000 [0613 1388]0056: invoke-virtual  Ljava/net/Socket;->connect [306e 507c 0601]005c: invoke-virtual  Ljava/net/Socket;->getOutputStream [106e 507f 0001]0064: const-string  'SSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1\r\n' [001a 53aa]0068: invoke-virtual  Ljava/lang/String;->getBytes [106e 4f68 0000]0070: invoke-virtual  Ljava/io/OutputStream;->write [206e 4e11 0006]0076: invoke-virtual  Ljava/io/OutputStream;->flush [106e 4e0f 0006]007c: invoke-virtual  Ljava/net/Socket;->getInputStream [106e 507d 0001]0084: const/16  1024 [0313 0400]0088: new-array [3323 254b]008c: invoke-virtual  Ljava/io/InputStream;->read [206e 4df7 0030]0094: if-lez [003d 000e]0098: new-instance [0422 0a00]009c: invoke-direct  Ljava/lang/String;-><init> [4070 4f54 0234]00a2: goto [0728]00a8: goto [1e28]00ae: goto [1228]00b0: invoke-virtual  Lapp/package/redacted/services/MyWorker;->㝽 [106e 4d5f 0005]00b8: invoke-virtual  Ljava/io/OutputStream;->write [206e 4e11 0006]
Figure 08 — Fabricated SSH identification exchange
Figure 08 — Fabricated SSH identification exchangeStatic code demonstrates the socket and banner transmission; server load and attacker intent were not measured.

The original report describes a hand-assembled key-exchange packet following the banner. That interpretation remains a strong review target; the excerpt above directly corroborates the initial banner and subsequent output-write path, while detailed packet conformance needs a controlled capture.

Network primitive C

07 / HTTP and the overlooked form-request branch

The HTTP helper at 0x26F908 contains a desktop Windows Chrome User-Agent string and the MIME type application/x-www-form-urlencoded. Decompiled call sites reveal that the command handler may invoke this helper repeatedly. The precise request method and submitted body for each path cannot be inferred solely from the adjacent string constants, so the report distinguishes form-related construction from verified on-wire POST traffic.

MyWorker · HTTP request constructionDEX code item @ 0x26F908 + 0x0022
0022: const-string  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537. [071a 4b6f]0026: const-string  'application/x-www-form-urlencoded' [031a 6ada]002a: if-eqz [0838 0011]002e: invoke-virtual  Ljava/lang/String;->isEmpty [106e 4f70 0008]0036: if-nez [0439 000b]003a: invoke-static  L토/ᔁ;->Ԅ [1071 88c6 0003]0042: invoke-static  L토/ᔧ;->ᖓ [2071 8956 0038]004a: goto [0b28]004c: const-string  '' [081a 0000]0050: invoke-static  L토/ᔁ;->Ԅ [1071 88c6 0003]0058: invoke-static  L토/ᔧ;->ᖓ [2071 8956 0038]0060: new-instance [0322 1518]0064: invoke-direct  L토/ᖧ$ཋ;-><init> [1070 8ae0 0003]006a: invoke-virtual  L토/ᖧ$ཋ;->㮾 [206e 8aea 0063]0072: invoke-virtual  L토/ᖧ$ཋ;->㻇 [206e 8aeb 0083]007a: const-string  'User-Agent' [031a 5dd6]007e: invoke-virtual  L토/ᖧ$ཋ;->Ḅ [306e 8ae7 0738]
Figure 09 — HTTP request builder
Figure 09 — HTTP request builderHardcoded User-Agent and form content type, followed by client builder calls.
Figure 10 — HTTP helper call-site audit
Figure 10 — HTTP helper call-site auditCross-check of parsed input and repeated helper invocations from the offline casefile.
Execution lifetime

08 / Persistence, scheduling and app lifecycle

The application declares a boot receiver and constructs WorkManager tasks under a name such as ContinuousWork. The report also identifies an attempted battery-optimization exemption and references a nominal 30-second cycle. However, a loop delay and a WorkManager scheduling request are different mechanisms; periodic WorkManager jobs are subject to platform minimums, and neither proves the frequency of actual network activity in the field.

MyWorker · background chainDEX code item @ DEX worker/scheduler excerpt
0000: invoke-static  L토/ᔻ;->Ԅ [1071 8975 0003]000c: new-instance [0122 2034]0010: const-class [021c 0992]0014: invoke-direct  L토/㠑$ཋ;-><init> [2070 c42d 0021]001a: invoke-virtual  L토/㔨$ཋ;->Ḅ [106e b86e 0001]0026: const-string  'ContinuousWork' [021a 12a4]002a: invoke-virtual  L토/ᔻ;->ऍ [406e 8977 1023]
Figure 11 — ContinuousWork registration
Figure 11 — ContinuousWork registrationWorker chain label and scheduling-related DEX calls.

Android documents a 15-minute minimum repeat interval for PeriodicWorkRequest. That limit does not prevent an application from arranging other one-time chains, but it means a claimed “uninterruptible 30-second WorkManager job” must be demonstrated, not assumed. See Android WorkManager documentation.

Configuration recovery

09 / Native cryptography and embedded infrastructure

The Android package includes lib/arm64-v8a/libcrypto_jni.so. A JNI decrypt routine passes fixed key and IV buffers into OpenSSL AES-CBC initialization. Disassembly and offline decryption recover two embedded hostnames: start[.]ver6[.]top and n6[.]not6[.]top. Those are extracted configuration indicators, not an independently confirmed live C2 session.

libcrypto_jni.so · arm64 JNI pathnative disassembly excerpt
14d470: adr x3, #0xee8b0  ; 32-byte AES key address14d478: adr x4, #0xee8d0  ; 16-byte IV address14d484: bl  EVP_DecryptInit_ex
Figure 12 — AES-CBC positive and negative control
Figure 12 — AES-CBC positive and negative controlThe original report copied one IV byte incorrectly; the corrected IV yields the recovered names, while the reported value mutates one character in the first plaintext block.

This explains the apparently contradictory earlier finding: the investigator could have decrypted correctly with the bytes extracted from the library while accidentally transcribing a different IV into an IOC table. CBC applies the IV to the first plaintext block through XOR; changing a single IV bit can alter plaintext without causing a padding failure.

Original Figure — Initial native-key recovery
Original Figure — Initial native-key recoveryThe first investigator diagram documents the broad extraction chain; the corrected IV appears in Figure 12.
Casefile — Corrected cipher verification
Casefile — Corrected cipher verificationOffline positive/negative comparison preserved from the earlier forensic review.
Infrastructure & protocol

10 / DNS TXT command configuration

According to the initial investigator, n6[.]not6[.]top was queried as a DNS TXT record through a public resolver. Its response reportedly contained compressed/encoded JSON holding a notifications array. The startup channel was reportedly resolved through DoH with a fallback route. The captured strings and decoded structure warrant attention, although the independent review did not reproduce a live response on 24 October.

Documented decoding structureanalytical pseudocode, not an intercepted live command
TXT record → Base64 decode → zlib inflate → JSON

{
  "notifications": [
    {"id": "…", "type": "…", "message": "…"}
  ]
}
Figure 13 — Original DNS TXT capture
Figure 13 — Original DNS TXT captureHistorical investigator screenshot showing an encoded response and decoded JSON outline; not a new live collection.
Figure 14 — Investigator command-channel console
Figure 14 — Investigator command-channel consoleArchived original terminal screenshot retained for provenance and comparison.

DNS TXT is not a web endpoint. Entering a domain into a browser tests HTTP(S), not a TXT response. The proper protocol distinction is described in Google Public DNS-over-HTTPS API documentation. A response observed at one time does not establish ongoing operation or attribution.

Configuration & failover

11 / Firestore fallback and remote switching

The earlier report shows a readable Firestore document in project [project redacted] at c/c. The captured field matrix included version-dependent values, a resolver field and a browser User-Agent field. Such a structure could serve as a remote switching mechanism for a client that consumes it. However, a publicly readable configuration document is not the same as a writable administrative console, and a Firebase API key by itself does not prove a compromise.

Figure 15 — Reported Firestore document response
Figure 15 — Reported Firestore document responsePreserved original investigator read-only capture, with sensitive identifiers partially redacted.
Figure 16 — Original Firestore terminal capture
Figure 16 — Original Firestore terminal captureArchived response screenshot used to review capture provenance.
Figure 17 — DNS versus HTTP diagnostic
Figure 17 — DNS versus HTTP diagnosticSeparates browser reachability from DNS TXT and Firestore API behavior, avoiding a false offline-C2 conclusion.

For Firestore security interpretation, see Firebase API keys and authorization. Nothing in these screenshots establishes unauthorized write access or identifies the controller of the project.

Additional Android attack surface

12 / WebView, identity modification and exposed app capabilities

The initial technical teardown also identifies ChromeEmulationWebView modifying navigation and browser fingerprint signals, including the reported disabling of Safe Browsing, client-hint adjustment, JavaScript changes affecting navigator.webdriver, and permissive file/network settings. Those behaviors deserve separate review: they may increase exposure to untrusted content and undermine platform browser defenses. They do not automatically defeat Cloudflare, TLS fingerprinting or all bot defenses.

AreaStatic observationWhy it matters
PermissionsREQUEST_INSTALL_PACKAGES, MANAGE_EXTERNAL_STORAGE, SYSTEM_ALERT_WINDOW, QUERY_ALL_PACKAGES listed in the manifestDeclared privileges enlarge potential attack surface; grant state and use remain unmeasured.
Web contentClient/JavaScript fingerprint modifications and permissive WebView settings described in the casefileRaises browser hardening, untrusted-content and identity-spoofing concerns.
Device identifiersReport describes attaching android_id and per-session IDs to stream URLsPotential tracking surface; traffic capture needed to establish collection scope.
Ad deliveryReported FCM notifications, browser intents and URL randomizationCould enable unsolicited redirects/advertising; actual frequency not measured.
Figure 18 — Network capabilities inventory
Figure 18 — Network capabilities inventoryCasefile inventory of networking primitives and associated functions.
Ecosystem linkage

13 / The companion Android player

The separately supplied Url Video Player.apk exposes the package info.t4w.vp and recognizes urlvplayer and urlplayer URI schemes. Those handlers support a technical relationship with the streaming workflow. The upstream report describes an explicit launch contract using a remotely supplied package name and player activity.

The base APK references HlsKeyDecryptor and libnext.so, but the provided artifact does not contain the relevant ABI split. It would be unsound to infer DRM circumvention or the exact decryption algorithm without inspecting the actual native split and valid sample streams. The Google Play listing identifies a player product, not proof that its publisher controls the other app’s remote configuration.

Figure 19 — Companion APK and iOS sample comparison
Figure 19 — Companion APK and iOS sample comparisonSeparate app identifiers and technical relationships from assertions of common control.
Cross-platform artifacts

14 / iOS sample: a distinct evidentiary track

The iOS IPA uses bundle identifier sport-apps.livesport and Flutter components. Its plist contains UIFileSharingEnabled=true and remote-notification/background declarations. A separately positioned NSAllowsArbitraryLoads key is not the same as a properly nested NSAppTransportSecurity exception, and cannot be used to establish ATS bypass. No counterpart to the Android ATT/TCP/SSH-like engine was demonstrated from the provided IPA.

Apple defines the nesting and semantics of these settings in its App Transport Security documentation. Attribution or risk conclusions must not be transferred automatically between Android and iOS binaries.

Threat intelligence context

15 / History and infrastructure provenance

The previous intelligence report cites an Android signing-certificate validity start in March 2019, Firestore document creation in November 2020, domain registrations across 2024–2026 and app-store update records. These dates may show continuity of infrastructure or branding, but they are not a forensic chain proving that one actor operated all components for seven years. Historical account, registrar and certificate records should be archived before drawing ownership conclusions.

Figure 20 — Timeline from the original investigation
Figure 20 — Timeline from the original investigationDates and infrastructure events as reported by the first investigator; not independently reverified here.
Figure 21 — Original multi-stage architecture hypothesis
Figure 21 — Original multi-stage architecture hypothesisPreserved as original research material. Compare with Figure 01, which distinguishes directly checked code from reported control-plane links.
Original attack-vector diagram and cross-application linkage map 2 figures
Original investigator attack-vector diagram
Original investigator attack-vector diagramOverview of hypothesized flooding modes; static capability is established, real attacks unobserved.
Original cross-account linkage hypothesis
Original cross-account linkage hypothesisHistorical investigative lead; names and association lines are not proof of criminal control or ownership.
Assessment

16 / Threat scenario and ATT&CK-style behavior mapping

A plausible scenario is that an operator controlling the external configuration could supply an encoded instruction that reaches MyWorker; the handler then extracts the destination and repeat count, dispatches to protocol-specific routines and generates traffic from a user’s device. That is the security consequence the implementation permits under appropriate runtime conditions. The observed technical facts alone do not demonstrate that the scenario was executed.

BehaviorEvidencePotential impact
Encoded external configurationNative AES strings; reported DNS TXT + Firestore capturesSeparates client behavior from static hostnames; complicates inspection.
Command-like task parsingATT, POST, delimiter parsing, count and thread dispatchEnables remotely configurable network execution.
Protocol-diverse outbound connectionsOkHttp builder, TCP socket and SSH-like bannerCan generate unnecessary network load and possibly reach private address spaces.
Background executionBoot receiver and WorkManager-related callsMay run outside the active streaming UI; true cadence depends on environment.
Figure 22 — Findings by evidence level
Figure 22 — Findings by evidence levelAvoids collapsing “static presence,” “reported infrastructure response” and “confirmed attack campaign” into one label.
Detection engineering

17 / Indicators for defensive hunting

TypeIndicatorConfidence / use
Android packageapp.package.redactedVerified from supplied APK; match signing fingerprint and hash.
APK SHA-256f1661051c949c2867be4c66d5ac9d4a62d7fd1925f5bb0e6a0912c04a5666d7eExact static sample identity.
Recovered bootstrap namestart[.]ver6[.]topStatic decrypted string; live role unconfirmed.
Recovered command namen6[.]not6[.]topStatic decrypted string; historical DNS behavior reported.
Firestore project[project redacted]Prior public document capture; read-only behavior reported.
Application task nameContinuousWorkRelevant for app analysis, not a globally unique IOC.
SSH identificationSSH-2.0-OpenSSH_8.9p1 Ubuntu-3ubuntu0.1Higher-signal when originating from a mobile device and correlated with this package.
Companion playerinfo.t4w.vpTechnical integration indicator, not a malware verdict on its own.
Reported portal hostnamefcodial6aypzzp8qgojvqqwxdkntvc236sy9exbxswnhfggbrr[.]sa027[.]shopValue decoded by the original investigator from a supplied Firestore screenshot. Domain resolution, ownership and live activity were not independently verified.
Social URL strings in separate iOS IPAx[.]com/bswbw; t[.]me/gblwjbStatic strings in the supplied iOS sidecar. Account ownership, current availability and a connection to the Android sample are not established; these are not attribution claims.

For high-fidelity detection, correlate the package signature and network process identity with destination/protocol behavior. Broadly blocking Firebase, public DNS or a generic User-Agent would create poor precision and may disrupt legitimate applications.

Research integrity

Findings, confidence and open evidence

ClaimVerdictSupporting basis
ATT/POST branch and dispatchVerified staticDEX excerpts, code item offsets and helper call sites.
Raw TCP & SSH-like write capabilityVerified staticSocket and output-stream instructions in MyWorker.
Native AES / recovered infrastructureVerified offlineELF/JNI inspection and controlled decryption check.
Live DNS TXT / Firestore activityHistorical reported capturesImages in the initial investigation; live replication unavailable in this session.
Delivered commands / active DDoSNot observedNo production-device PCAP, on-wire instructions or identified victim.
Population / operator / financial attributionNot establishedInstall counters and storefront publisher labels are insufficient.

The earlier investigation started with an SMS concern; the reviewed Android manifest did not expose standard SMS-read capabilities in this build. That negative observation is not the center of this article and does not affect the network-execution finding.

The strongest remaining missing evidence is a reproducible on-device execution trace in an isolated lab, with destination restricted to a researcher-controlled endpoint, together with code-to-packet correlation and timestamps. A preserved resolver response would independently establish the DNS TXT state at a specific point in time, not prove any operator’s identity.

Response guidance

What users, analysts and incident responders should do

Mobile users

Avoid installing unofficial APKs whose provenance you cannot validate. Remove suspicious builds, inspect app permissions and unusual battery exemptions, update Android and use mobile security controls where available.

Enterprise defenders

Preserve the binary and certificate fingerprint; hunt for the exact package; correlate outbound DNS TXT requests and atypical SSH traffic with application process telemetry; review endpoints on sensitive Wi-Fi networks.

Incident responders

Acquire PCAP and device logs under controlled conditions. Preserve raw DNS responses and timestamps. Separate observations from inferred campaign behavior and refer abuse evidence to infrastructure providers and national response teams.

For coordinated reporting in Egypt, the official EG-CERT incident-reporting portal provides a designated channel. Platform complaints should attach the sample hash, defensible code excerpts and any genuinely observed network evidence.

Source material

References and original research assets

  1. Original investigation — the pirated streaming app Threat Intelligence Report, 24 October 2026. Supplied alongside three binary samples; original capture and diagrams retained with provenance in this post.
  2. Independent re-analysis — streaming app Threat Report Complete Casefile, 24 October 2026; reconstructed DEX offsets, AES correction, confidence ledger.
  3. Google Public DNS — https://developers.google.com/speed/public-dns/docs/doh
  4. Firebase API key guidance — https://firebase.google.com/docs/projects/api-keys
  5. Android WorkManager — https://developer.android.com/reference/androidx/work/PeriodicWorkRequest
  6. Apple App Transport Security — https://developer.apple.com/documentation/bundleresources/information-property-list/nsapptransportsecurity/nsallowsarbitraryloads
  7. Google Play product listing — https://play.google.com/store/apps/details?id=info.t4w.vp
  8. EG-CERT reporting — https://egcert.eg/report-an-incident/
Dexaura Security Research

The verifiable finding is enough.

A television streaming APK with externally influenced command parsing and multi-protocol network-write primitives is a meaningful security discovery. The public record becomes stronger when each capability, infrastructure observation and attribution claim is backed by the appropriate type of evidence.

About the author

Ahmed Hesham

Ahmed works in application security and mobile-security research and leads Dexaura. This article is based on the supplied forensic record and distinguishes static analysis from independently unverified live observations.

View LinkedIn profile