TAXISPY RAT : Analysis of TaxiSpy RAT – Russian Banking – Focused Android Malware with Full Remote Control

Published On : 2026-03-06
Share :
TAXISPY RAT : Analysis of TaxiSpy RAT – Russian Banking – Focused Android Malware with Full Remote Control

EXECUTIVE SUMMARY

This report analyzes a highly sophisticated Android Banking Trojan with integrated Remote Access Trojan (RAT) functionality, specifically targeting Russian financial institutions. The malware leverages advanced evasion techniques, such as native library encryption, rolling XOR string obfuscation, and real-time VNC-like remote control via WebSocket. Its design allows comprehensive device surveillance, including SMS, call logs, contacts, notifications, and banking app monitoring, highlighting its financially motivated and region-specific focus.

INTRODUCTION

This analysis examines the same malware in detail, providing context for its targeted behavior and technical sophistication. The Trojan is engineered to stealthily compromise Russian users, collecting sensitive information and enabling remote control through native code routines and Firebase-backed command infrastructure. Its extensive permissions, multi-layered persistence, and app-targeting logic demonstrate a strategically focused, financially motivated threat, making it a significant risk to affected users and banking systems.

Capabilities of Malware:

1. Extensive Permission Abuse

  • Requests high-risk permissions, including SMS access, call logs, contacts, phone state, location, overlay display, package visibility, boot persistence, exact alarms, and battery optimization bypass.
  • Ability to become the default SMS app, enabling full control over sending, reading, and deleting SMS, including OTP interception.

2. Targeted Banking Application Surveillance

  • Detects installed banking apps, marketplaces, government apps, and cryptocurrency wallets.
  • Maintains a list of targeted Russian banking apps and decrypts them at runtime using XOR routines.
  • Enables credential theft, transaction monitoring, and potential fraud targeting specific financial institutions.

3. Data Exfiltration

  • Collects and exfiltrates:
    • SMS messages
    • Contacts
    • Call logs
    • Clipboard contents
    • Installed apps list
    • Notifications and OTPs
    • Lock screen PINs
    • Keystrokes / keylogging data

4. Native Library & Obfuscation Techniques

  • Uses the sysruntime.so native library for critical operations to evade static analysis.
  • Employs XOR-based encryption and rolling keys for C2 addresses, Firebase credentials, and configuration data.
  • Hides infrastructure and sensitive values until runtime.

5. Command & Control (C2) Interaction

  • Communicates with C2 server (193.233.112[.]229) using HTTP POST and WebSocket protocols.
  • Supports dynamic command execution, reporting of execution results, and bot configuration updates.
  • Firebase push commands enable remote control and maintain persistence.

6. Remote Access & Device Control

  • Implements real-time VNC-like access via WebSockets using Accessibility and MediaProjection APIs.
  • Captures screen, PINs, and user interactions on lock screen or banking apps.
  • Allows remote execution of actions and surveillance by threat actors.

7. Persistence & Stealth Mechanisms

  • Multi-layered persistence using:
    • Boot auto-start
    • Foreground services
    • Accessibility abuse
    • Scheduled alarms and jobs
    • Push messaging triggers
    • User activity monitoring (screen unlock, power connection)
  • Conceals app icon by replacing LAUNCHER category with INFO category.
  • Bypasses battery optimization to remain active on the device.

8. Communication & Evasion Techniques

  • Obfuscates C2 communication using custom XOR routines and non-linear memory access patterns.
  • Employs rolling encryption keys and runtime decryption of sensitive data to avoid detection.
  • Uses randomized package names and targets the latest Android APIs while maintaining backward compatibility.

9. Operational Flexibility

  • Supports multiple CPU architectures: arm64-v8a, armeabi-v7a, x86_64.
  • Enables campaign-specific worker keys for affiliate separation or multi-actor use of the same C2 infrastructure.
  • It can exfiltrate different types of data based on attacker commands, including sensitive user inputs, media, and application metadata.

Static Analysis:

Permissions:

The application requests an unusually large and intrusive set of high-risk permissions spanning SMS access, call logs, contacts, phone state, location, overlay display, package visibility, boot persistence, exact alarms, and battery optimization bypass, indicating an attempt to obtain extensive surveillance and control capabilities over the device; such excessive permission aggregation is inconsistent with normal app functionality and is commonly associated with financially motivated spyware or banking malware that aims to intercept OTPs, monitor user activity, manipulate communications, and maintain long-term stealthy persistence.

SDK Targeting & Package Identity:

The app targets the latest Android API while maintaining backward compatibility with older versions, maximizing its potential victim base. The randomly generated package name indicates automated building through a RAT kit, a tactic commonly used to evade signature detection and complicate attribution.

Launcher Icon Concealment Behavior:

The application’s AndroidManifest intentionally replaces the LAUNCHER category with the INFO category to prevent the app icon from appearing in the device launcher. This deliberate configuration indicates an attempt to conceal the application’s presence from the user, strongly suggesting malicious intent and stealth-oriented behavior.

Native Library Initialization:

At launch, the malware loads a native library named sysruntime.so, shifting critical logic away from easily analyzable Java code into compiled native code to hinder reverse engineering and static detection.

The native library sysruntime.so is stored in the /lib folder and built for multiple CPU types, including arm64 v8a, armeabi v7a, and x86_64, which allows the malware to run on most Android devices. Important data, such as the bot ID, server list, and WebView link, is hidden inside this native file instead of the normal app code. The attacker has done this on purpose, so these sensitive details are not easily visible during basic analysis. The values are decrypted only when the app runs, making it harder for security tools and researchers to detect the real infrastructure and behavior of the malware.

Exported Native Capabilities:

Analysis of libsysruntime.so shows functions like getBotId, getServerListNative, getWebviewUrlNative, and getWorkerKeyNative, indicating that important configuration data is fetched from native code. It also contains functions for Firebase credentials, confirming that the malware uses Firebase for command and control while hiding its infrastructure details inside the native layer.

C2 Obfuscation Mechanism:

The native function getServerListNative implements an obfuscated routine to decrypt the C2 server address. Two critical data structures reside in the ’.rodata’ section:

XOR Key Array (data_409a80 – 22 bytes)
B2 1F CC E3 6A 7E 71 F4 0A C0 1D 78 7B 4B 1B 15 2A 2F 24 20 33 1C

Encrypted Data Block (data_409aad – starting at offset 0x9AAD)
F5 69 1C 83 CB 52 9F E1 34 A0 6D 3A 7F B2 1D E9 54 C8 6B F7 B6

The decryption logic employs a non-linear memory access pattern using the formula base_address – (24 * floor(counter/24)). This reads bytes from 24 byte aligned blocks located before the data_409aad pointer, making the access pattern non sequential and harder to follow statically. As a result, a complete memory map of the ’.rodata’ section is required to retrieve all referenced bytes.

The XOR key starts at 47 and increments by 91 each iteration across the 22 byte loop. The algorithm implicitly handles 32 bit integer overflow, so precise tracking of the key’s evolution is necessary to reproduce the decryption correctly.

C2 Address Decryption:

To recover the C2 server address, we reverse-engineered the custom XOR based routine implemented in the native function. The sample stores a 22 byte XOR key (byte_9A80) and an encrypted buffer (unk_9AAD) inside the ‘.rodata’ section. Decryption relies on a non linear access pattern defined as base – 24 * floor(counter/24), along with a rolling XOR key initialized at 47 and increased by 91 on each iteration. We reproduced the exact behavior in a Python script, modeling the complete ‘.rodata’ memory layout referenced by the routine to ensure accurate output.

Decryptor

Running the Python script that reproduces the native getServerListNative decryption routine successfully revealed the hidden server address.

Recovered C2 Address

[http://193.233.112[.]229]

The result confirms that the malware keeps its command-and-control address hidden and reconstructs it at runtime using obfuscation techniques that make static analysis difficult.

Extraction of Embedded Firebase Credentials:

Following the successful decryption of the C2 server, we used the same approach to extract additional Firebase credentials embedded in the binary. We identified an 8 byte XOR key (byte_9AB8: 3A 7F B2 1D E9 54 C8 6B) in the ‘.rodata’ section, along with a 39 byte encrypted blob at unk_99C0. The decryption relies on a rolling XOR scheme, where each byte is XORed with a running value that increases by 55 each iteration, combined with the static key array.

Custom XOR-Decryptor

Running the Python script that replicates the rolling XOR decryption successfully revealed the Firebase API key.

Recovered API Key

[AIzaSyAjWqYjz1VbRByhLX8Mu0sXeh6FzIko90]

This confirms that the malware stores sensitive Firebase credentials in an obfuscated form and reconstructs them at runtime using the embedded XOR key and rolling scheme.

Using the same methodology, we were able to decrypt all relevant native functions and extract the embedded credentials. This includes the Firebase API Key, Firebase Project ID, Firebase App ID, storage bucket, sender ID, and other associated parameters.

WebView URL:

While analyzing the native library, we found that the WebView URL (https://taxi.ru) is stored in plaintext within the ‘.rodata’ section, unlike other strings, which are obfuscated.

In addition to the WebView URL, several other sensitive strings, including the bot ID and Worker key, were found hardcoded in plaintext within the ‘.rodata’ section.

Workers key:

The worker key 9bc096a5f4ec7ba133d743cbaf4b8a2e (stored in plaintext at offset 0x9950) serves a critical role in the malware’s operational structure:

Purpose:

  • Acts as a campaign identifier or operator tracking token
  • Allows multiple threat actors to share the same C2 infrastructure (http://193.233.112[.]229) while maintaining separation of infected victims
  • Functions similarly to a “team ID” or “affiliate code” in malware-as-a-service operations

Permissions flag

System Profiling:

Initially, the malware collects various device details, such as the model, OS version, phone number, and SIM-related information (including SIM count and SIM metadata like slot, operator, and associated number). In addition to this, it gathers sensitive data related to installed banking applications to identify which banks are used by the targeted victim.

The collected configuration is then passed to the function A12(), which issues an HTTP POST request to the endpoint /api/v1/sync/init, transmitting the profiling data in JSON format to the attacker-controlled server.

Notification Capture:

Upon receiving the intent “NOTIFICATION_RECEIVED”, the malware extracts the originating application’s package name, notification title, and message text. It also parses the notification content using a regex pattern to capture OTPs and other sensitive codes. This data is then transmitted to the attacker-controlled server via an HTTP POST request to the endpoint /api/v1/sync/notification.

Send SMS:

Send SMS capability allows the application to silently dispatch SMS messages from a selected SIM slot, allowing the operator to transmit stolen data, such as OTPs and other sensitive SMS content, potentially facilitating 2FA bypass.

SMS Harvesting:

Similarly, the malware collects all SMS messages and transmits them to the attacker controlled server via an HTTP POST request to the endpoint /api/v1/sync/backup/messages. The exfiltrated data includes message ID, sender/recipient address, body, timestamp, message type (incoming/outgoing), read status, subscription ID, and a client identifier used to profile the victim.

Default SMS Takeover:

The application requests to be set as the device’s default SMS app through the official system prompt. If granted, it obtains full control over SMS functionality, enabling it to read incoming messages, send SMS, access OTPs, suppress notifications, and silently delete messages. In a malicious context, this allows interception of verification codes and covert messaging activity without the user’s awareness.

Contacts Harvesting:

The malware collects the victim’s contact list, including names and phone numbers, and exfiltrates this data to the attacker controlled server via an HTTP POST request to the endpoint /api/v1/sync/backup/contacts. This enables mapping of the victim’s personal network and facilitates further social engineering activities.

Call logs harvesting:

Similarly, the malware collects the device’s call history and transmits it to the attacker controlled server via an HTTP POST request to the endpoint /api/v1/sync/backup/calls.

Clipboard Capture:

The malware also captures clipboard contents and exfiltrates the data to the attacker controlled server via an HTTP POST request to the endpoint /api/v1/sync/backup/clipboard.

Apps List:

The malware collects comprehensive information about applications installed on the victim’s device, including app name, package name, version, category, whether it is a banking app, and whether it is a system app. This data is compiled into a JSON object and transmitted to the attacker controlled server via an HTTP POST request to the endpoint /api/v1/sync/backup/apps.

It explicitly classifies apps to determine if they belong to banking, marketplace, government, or cryptocurrency categories.

Banking App Detection:

The malware maintains a list of application package names categorized into a HashSet to identify app types, such as government, cryptocurrency, marketplace, or banking. These package names are stored as encrypted strings and are decrypted at runtime using a custom XOR based routine implemented in the function INJG_.A213().

List of encrypted package names

Function A213() revealed that it applies a custom XOR key: {58, 127, -78, 29, -23, 84, -56, 107}.

By reversing the routine, we successfully decoded the obfuscated strings. So far, we have analyzed two of them, and both resolved to package names of Russian banking applications.

String Decryptor

Similarly, we decoded all the obfuscated strings and obtained the following list of application package names.

Banks (33 apps):

Marketplace (14 apps):

Gov Apps (9 apps):

Crypto (6 Apps):

Remote Access / VNC Control:

The malware implements remote access using WebSockets to provide VNC-like functionality for real-time screen streaming. This is achieved through a combination of the Accessibility service and MediaProjection APIs, allowing full control and observation of the device.

Lock Screen PIN Capture:

The malware is capable of capturing the device’s lock PIN when the user interacts with the system lock screen or any vendor specific keyguard. It first confirms that the foreground interface belongs to a recognized lock screen package, then monitors user input to intercept the PIN as it is entered. The stolen credentials are quietly saved in local SharedPreferences using keys like lock_password and last_captured_pin, along with their corresponding timestamps.

Keylogging Data Exfiltration:

This routine format captured keystroke data into a structured JSON payload containing the source application, logged text, event type, and timestamp. The prepared data is then forwarded to the attacker controlled server, enabling monitoring of user input across applications.

Firebase command:

When a Firebase push message labeled “command” is received, the malware extracts the cmd value and accompanying data, wraps them into a PUSH_COMMAND broadcast, and sends it system wide. The app currently does not include any receiver for PUSH_COMMAND, suggesting it may be added later, but the Firebase implementation alone already makes the application highly persistent in the background.

Persistent techniques identified:

Multi-layered persistence architecture combines boot auto-start, foreground services, accessibility abuse, scheduled alarms, push messaging, and user-activity triggers. Such redundancy ensures the malware remains active under nearly all conditions — reboot, network loss, device idle state, or user attempts to stop it — which is characteristic of advanced Android RAT families.

  • Automatically launches after device reboot and even before the user unlocks the phone
  • Maintains long-running foreground services to reduce the likelihood of system termination
  • Uses Accessibility Service privileges to regain control, grant permissions, and prevent removal
  • Schedules exact alarms and background jobs to periodically revive components
  • Leverages push messaging to receive remote commands and wake on demand
  • Monitors user actions such as screen unlock, power connection, and device activity to trigger execution
  • Intercepts SMS and notifications to stay informed about device state and verification messages
  • Detects network changes to reconnect to the command infrastructure when connectivity returns
  • Requests battery optimization exemptions and wake locks to avoid being suspended by the system

C2 API Endpoints identified:

Dynamic behavior:

1. SMS Default Behavior:
When the app launches, it requests to become the default SMS app. Once granted, Android automatically permits most runtime permissions—like notifications, camera, file access, SMS, phone, and microphone—without further prompts. This allows the app to gain full control over SMS functionality, including reading, sending, and writing messages.

2. WebView Attempt:
The app tries to open a WebView pointing to https://taxi.ru, but the domain is unreachable.

3. Server Communication:
The application continuously attempts to connect to the server at IP address 193.233.112.229, but the server is also unresponsive.

EXTERNAL THREAT LANDSCAPE MANAGEMENT

The application under analysis demonstrates a highly targeted and region-specific threat posture, primarily impacting Russian users. The malware is purpose-built to exploit the banking ecosystem within Russia, with explicit targeting of financial institutions and other widely used Russian banking applications. Its architecture, permissions, and operational logic indicate a deliberate design choice to maximize effectiveness against this demographic while minimizing accidental exposure in other regions.

Geographic Targeting and Distribution:

  • The malware is spreading predominantly among Russian-speaking users, leveraging social engineering, repackaged popular apps, and localized distribution channels.
  • The choice of language, embedded URLs (e.g., https://taxi.ru), and banking app targeting demonstrates a clear focus on Russian consumers, suggesting the operators are exploiting localized trust models.
  • Evidence indicates automated distribution via RAT kits, allowing rapid deployment and scaling across the target region.

Threat Actor Motivation and Capabilities:

  • The threat actor’s objectives appear financially motivated, focusing on credential theft, OTP interception, and remote control of victim devices.
  • The integration of VNC-like remote access, keylogging, notification interception, and SMS exfiltration underscores a capability for comprehensive surveillance and fraud facilitation.
  • Use of obfuscated native libraries, dynamic XOR decryption, and Firebase-backed command infrastructure indicates sophisticated operational security, designed to evade detection by traditional antivirus and endpoint protection solutions.

MITRE ATT&CK FRAMEWORK

S.N Tactic Technique
1. Initial Access (TA0027) T1660: Phishing
2. Persistence (TA0028) T1541: Foreground Persistence
T1603: Scheduled Task/Job
3. Privilege Escalation (TA0029) T1626.001: Device Administrator Permissions ()
4. Défense Evasion (TA0030) T1628: Hide Artifacts
T1628.002: User Evasion
T1629.001: Prevent Application Removal
T1516: Input Injection
5. Credential Access (TA0031) T1414: Clipboard Data
T1417.001: Keylogging
6. Discovery (TA0032) T1420: File and Directory Discovery
T1430: Location Tracking
T1418: Software Discovery
T1426: System Information Discovery
T1422: Internet Connection Discovery
7. Collection (TA0035) T1414: Clipboard Data
T1636.001: Calendar Entries
T1636.002: Call Log
T1636.003: Contact List
T1417: Input Capture
T1636.004: SMS Messages
T1513: Screen Capture
T1512: Video Capture
8. Command and Control (TA0037) T1437: Application Layer Protocol
T1437.001: Web Protocols
T1521: Encrypted Channel
T1521.003: SSL Pinning
T1481: Web Services
9. Exfiltration (TA0036) T1646: Exfiltration Over C2 Channel

INDICATORS OF COMPROMISE

S. N indicators type context
1. 67d5d8283346f850eb560f10424ea5a9ccdca5e6769fbbbf659a3e308987cafd APK RuTaxi APK
(ru.y34tuy.t8595)
2. 193.233.112[.]229 URL C2-exfiltration
3. 9bc096a5f4ec7ba133d743cbaf4b8a2e String Worker Key / Campaign ID
4. 3A 7F B2 1D E9 54 C8 6B hexadecimal byte array Firebase XOR Key (8 bytes)
5. B2 1F CC E3 6A 7E 71 F4 0A C0 1D 78 7B 4B 1B 15 2A 2F 24 20 33 1C hexadecimal byte array C2 XOR Key (22 bytes)

CONCLUSION

The analyzed Android malware represents a highly sophisticated and region-specific threat, primarily targeting Russian financial institutions and their customers, with the potential to spread to other regions. Its architecture demonstrates a combination of advanced evasion techniques, multi-layered persistence, and comprehensive data exfiltration capabilities. By leveraging native libraries, custom XOR-based obfuscation, and Firebase-backed command infrastructure, the malware can conceal its operations, maintain long-term persistence, and evade traditional detection mechanisms.

The malware’s functionality—ranging from SMS interception, notification, and clipboard harvesting, keylogging, to full VNC-style remote access—underscores its financial motivation and the risk posed to end-users. Additionally, its deliberate targeting of Russian banking applications, campaign-specific worker keys, and localized distribution channels reveal a strategically focused threat actor.

From a defensive standpoint, this threat emphasizes the importance of:

  • Targeted threat intelligence sharing among financial institutions
  • Behavioral monitoring for high-risk permissions and Accessibility abuse
  • Rapid detection and mitigation of unauthorized C2 communications

Overall, this malware demonstrates the evolving sophistication of Android banking RATs, highlighting the need for proactive monitoring, incident response preparedness, and region-specific security measures to mitigate risks to users and financial infrastructures.

YARA Rules

rule TaxiSpy_Android_Banking_RAT
{
meta:
author = “Cyfirma_Research”
description = “Detects TaxiSpy Android Banking RAT targeting Russian users”
date = “2026-03-02”
platform = “Android”
hash = “67d5d8283346f850eb560f10424ea5a9ccdca5e6769fbbbf659a3e308987cafd”
strings:
$apk_package = “ru.y34tuy.t8595” ascii
$c2_ip = “193.233.112.229” ascii
$worker_key = “9bc096a5f4ec7ba133d743cbaf4b8a2e” ascii
$firebase_xor = { 3A 7F B2 1D E9 54 C8 6B }
$c2_xor = { B2 1F CC E3 6A 7E 71 F4 0A C0 1D 78 7B 4B 1B 15 2A 2F 24 20 33 1C }
condition:
uint32(0) == 0x504B0304 and // APK ZIP magic
any of ($apk_package, $c2_ip, $worker_key) or
any of ($firebase_xor, $c2_xor)
}

RECOMMENDATIONS

1. Threat Intelligence & Monitoring

  • Establish continuous monitoring for the identified C2 infrastructure (193.233.112[.]229) and all associated API endpoints.
  • Share IOCs, including XOR keys, Firebase credentials, worker IDs, and targeted app package names, with trusted threat intelligence communities.
  • Implement automated alerts for suspicious network activity resembling malware communication patterns (HTTP POST to /api/v1/sync/* or WebSocket connections for VNC).

2. Mobile Device Security & EDR

  • Enforce application whitelisting and restrict installation of apps requesting excessive permissions (SMS, Accessibility, overlay, boot persistence).
  • Monitor for hidden or disguised apps that attempt to remove their launcher icon or request default SMS privileges.
  • Detect and block suspicious native libraries (e.g., sysruntime.so) and unexpected Firebase integrations.

3. User Awareness & Education

  • Educate users on the risks of granting SMS, Accessibility, and overlay permissions to unverified applications.
  • Advise users to avoid downloading apps from untrusted sources or third-party marketplaces.
  • Conduct targeted awareness campaigns for banking app users regarding OTP interception, phishing, and malware risks.

4. Application & Network Hardening

  • Implement two-factor authentication mechanisms resistant to SMS interception (e.g., hardware tokens or app-based OTP).
  • Use network segmentation and firewall rules to restrict outbound traffic to unknown or suspicious endpoints.
  • Regularly audit installed applications and device permissions to detect abnormal or hidden activity.

5. Incident Response & Recovery

  • Prepare automated procedures to isolate infected devices, revoke compromised credentials, and restore secure configurations.
  • Maintain backups of critical user and enterprise data to ensure recovery in case of exfiltration.
  • Continuously update detection signatures and behavioral rules based on evolving malware variants.

6. Collaboration & Reporting

  • Collaborate with Russian financial institutions and law enforcement for coordinated detection and takedown of malware campaigns.
  • Report identified malware samples, C2 servers, and attack patterns to national cyber threat response centers.