Perseus: DTO malware that takes notes
19 March 2026
Jump to
Most mobile malware must continuously evolve to remain effective in an environment shaped by improving security measures, platform restrictions, and user awareness. Rather than relying solely on traditional techniques, contemporary threats increasingly adapt by introducing new capabilities and leveraging legitimate system features in unintended ways. This ongoing evolution reflects a broader trend in which attackers refine their tooling to maintain persistence, evade detection, and maximize control over compromised devices, highlighting the importance of studying how such threats adapt over time.
The Mobile Threat Intelligence Team has identified a new Android threat actively distributed in the wild. The threat is called Perseus, and represents the continued evolution of mobile malware, building upon the code base of earlier families such as Cerberus and Phoenix, and advancing into a more flexible and capable platform for device compromise.
As modern mobile threats adapt to an increasingly hardened ecosystem, they incorporate new techniques and often repurpose legitimate system functionalities to maintain effectiveness. In this research, we examine Perseus’s design and behavior to highlight how such evolution enables persistent, interactive control over infected devices, offering insight into the shifting landscape of mobile malware.
Key takeaways of this report are:
- Continuous Evolution: Perseus builds on earlier threats like Phoenix, demonstrating how mobile malware adapts by introducing new techniques and leveraging legitimate system features to remain effective.
- Interactive Remote Control: Through Accessibility-based remote sessions, the malware enables real-time monitoring and precise interaction with infected devices, allowing full Device Takeover and targeting various regions, with strong focus on Turkey and Italy.
- Targeted Data Collection: Beyond traditional credential theft, Perseus monitors user notes, indicating a focus on extracting high-value personal or financial information.
- Strong Anti-Analysis Measures: Extensive environment checks, including detection of tools like Frida, highlight a clear focus on evading analysis and maintaining operational secrecy.
- Continues the trend of IPTV applications: increasingly used as masquerading for mobile threats distribution.
The Opposite of a Hero
If Greek mythology had a cybersecurity chapter, Perseus would fit right in, though not quite as the hero. Instead, this time Perseus seems to have learned a few tricks from the very monsters he was meant to defeat. Building on codebases like Phoenix and Cerberus (two well-known “creatures” of the Android malware underworld) and showing connections to operations involving Medusa, this variant feels less like a lone warrior and more like the product of a full mythological crossover.
The Origin story
The name Perseus comes directly from the C2 login Panel, which is accessible from some of the campaigns analyzed:

The underlying code is based on Cerberus, a long-standing malware family that has served as the foundation for several others, such as Ermac and Phoenix, following the leak of its source code in 2020. Perseus appears to build specifically on the Phoenix codebase, as its earlier versions adopt a similar class structure and naming conventions.

During the analysis, two main branches were identified: one that was active for a short period of time, and another that is currently being distributed. While there are some differences in functionality and supported commands between the two, the most evident distinction lies in the naming of classes, which are in English in one branch and in Turkish in the other.
In the English-based branch, which features extensive Quality-of-Life and debugging features that are missing in the more discrete Turkish version, there are also indications of likely use of LLM-based tools to assist in the development of the malware. These include extensive in-app logging and the presence of emojis within the code, which are uncommon in traditional malware development.
Observed campaigns
The distribution strategy observed in all Perseus campaign consistently leverages applications masquerading as IPTV services, a tactic likely chosen to maximize credibility and user engagement within the primary target region, particularly Turkey and that we already discussed in our previous report about Massiv.
IPTV applications are widely used and often distributed outside of official marketplaces such as the Google Play Store, making users more accustomed to sideloading APK files and less likely to question non-standard installation workflows. By embedding its payload within this expected context, the Perseus malware effectively reduces user suspicion and increases infection success rates, blending malicious activity with a commonly accepted distribution model for such services.
Perseus uses a dropper to bypass Android 13+ restrictions when distributed via side-loading. The specific dropper application used to distribute Perseus is not unique to this malware family, but has been observed distributing also other malware families, such as Klopatra and Medusa.

Once deployed, Perseus is capable of launching overlay attacks and keylogging virtually everything displayed on the device, directly inheriting this capability from its predecessor, Phoenix. This allows attackers to intercept user input in real time and superimpose fake interfaces to capture sensitive credentials with high accuracy. Combined with the remote actions that the malware is capable of, it grants full device takeover to the malicious application, allowing criminals to perform and authorize fraudulent transactions.
In the campaigns we observed, a clear targeting strategy emerges, with a strong focus on users in Turkey and Italy. The distribution of targeted institutions reflects this geographic focus, as shown in the table below:
| Country | number of institutions targeted |
|
🇹🇷 Turkey |
17 |
|
🇮🇹 Italy |
15 |
|
🇵🇱 Poland |
5 |
|
🇩🇪 Germany |
3 |
|
🇫🇷 France |
2 |
|
🇦🇪 UAE |
1 |
|
🇵🇹 Portugal |
1 |
|
🌍 Crypto |
9 |
The Rebirth of the Phoenix
Much like the mythical Phoenix rising from its ashes, Perseus represents a rebirth of earlier malware, carrying forward its lineage while introducing selective but meaningful new capabilities. While much of its core functionality can be traced back to predecessors like Phoenix and Cerberus, this evolved variant refines its focus with additions that enhance both intelligence gathering and survivability.
Take some notes
Among its more distinctive capabilities, Perseus introduces functionality aimed at monitoring user-created content, specifically notes stored on the device. While many Android malware families focus primarily on harvesting credentials or intercepting communications, this feature reflects a broader interest in contextual and personally curated data. Notes often contain sensitive information such as passwords, recovery phrases, financial details, or private thoughts, making them a valuable target for attackers.
In the English fork of the malware, a particularly notable feature was identified that has not been commonly observed in other malware families The feature, triggered by the command “scan_notes”, checks for the presence of a predefined set of applications, including widely used note-taking apps. It then proceeds to systematically open each application and iterate through individual notes.

To achieve this, the malware leverages Accessibility Services to automate user interactions. It navigates the UI by iterating over elements, selecting target nodes, and programmatically triggering click actions. After a short delay, it performs a global “back” action to return to the previous screen and continues the process. This behavior enables the malware to systematically explore the contents of note-taking applications without user involvement. Combined with its logging capabilities, this allows the malware to capture and record the contents of the notes.
The list of notes applications that are monitored by Perseus is presented in the Appendix.
Taking over the device
Perseus inherits the remote control modules that power the DTO capabilities from its predecessors. In its primary mode, it abuses the Android Accessibility Service to continuously capture screenshots of the device using takeScreenshot() API call, processes them into compressed JPEG images, encodes them in Base64, and transmits them to the C2 server, effectively creating a near real-time visual stream of the victim’s screen. This is enabled using the “start_vnc” command.
On the other hand, when receiving the “start”hvnc” command, Perseus transmits a structured representation of the UI hierarchy: the malware traverses the AccessibilityNodeInfo tree and converts it into a JSON “skeleton” of the interface, enriched with metadata such as screen dimensions, screen state (awake or not), blackscreen status, and a device identifier. This data is sent through the active connection channel, allowing the operator to either see the screen or to understand and interact with UI elements programmatically:

Perseus implements a set of supported actions that can be performed by the remote operator. The remote control commands supported are listed in the Appendix.
Device Risk assessment and anti-analysis
Perseus performs extensive environment checks to detect analysis or sandbox conditions. These include verifying the presence of root access, scanning for instrumentation frameworks such as Frida, as can be seen in the below:

In addition, Perseus checks all the following aspects to make sure that it is running in a real device:
- SIM and telephony realism — verifies that a SIM is present and that operator details do not look fake or emulator-like.
- Debugger presence — checks whether a debugger is attached to the process.
- Dynamic analysis / instrumentation tools — looks for tools such as Frida and Xposed.
- Root indicators — checks for both root binaries and known root-management applications.
- Build and emulator fingerprints — inspects Android build properties for signs of emulators or virtualized devices.
- Hardware profile consistency — evaluates whether the device has realistic hardware characteristics, such as cameras and sensors.
- Battery plausibility — checks for suspicious battery values often associated with emulated environments.
- Bluetooth availability — verifies whether Bluetooth support exists, as missing hardware can indicate a fake environment.
- Installed application count — checks whether the number of installed apps is unusually low, which may suggest a sandbox or fresh emulator.
- Google Play Services presence — verifies whether Play Services are installed, since their absence can indicate a non-standard or analysis environment.
Perseus then combines all this information to obtain an overall suspicion score that is sent to the C2 panel for an operator to assess.
Conclusion
Perseus highlights the continued evolution of Android malware, demonstrating how modern threats build upon established families like Cerberus and Phoenix while introducing targeted improvements rather than entirely new paradigms. Its capabilities, which range from Accessibility-based remote control and overlay attacks to notes monitoring, show a clear focus on maximizing both interaction with the device and the value of the data collected. This balance between inherited functionality and selective innovation reflects a broader trend toward efficiency and adaptability in malware development.
Its distribution through IPTV-themed droppers and its overlap with infrastructure used by other families, such as Medusa, underline how tools, delivery methods, and even codebases are reused across campaigns. Coupled with strong anti-analysis measures, including Frida detection and comprehensive environment checks, Perseus demonstrates a growing emphasis on evasion and operational resilience.
Overall, Perseus can be seen as a “reborn” threat: not entirely new, but refined and adapted to remain effective in a more secure and scrutinized mobile environment.
Appendix
Indicators of Compromise
|
SHA-256 |
Package name |
Application name |
|
|
1ea8360c4d3b7ccea50e9f19630be9d23df26ac713799e2f8457520c0d29bdda |
com.xcvuc.ocnsxn | Roja App Directa | Perseus Dropper |
| 2524e9d5ed1e55332fe2d1cc0e7ad4e2656ad5ca624199e6f619325979b3529a | com.tvtapps.live | TvTApp | Perseus Payload (English Fork) |
| 56d3bb5e8771b41b11d368e70ddd26fe6f1e7bd00b3aafcfd4c34ef62f87093d | com.streamview.players | PolBox Tv | Perseus Payload (Turkish Fork) |
Notes Targets
| Package name | App name |
|
com.google.android.keep |
Google Keep - Notes and Lists |
|
com.miui.notes |
Xiaomi Notes |
|
com.samsung.android.app.notes |
Samsung Notes |
|
com.socialnmobile.dictapps.notepad.color.note |
ColorNote Notepad Notes |
|
com.evernote |
Evernote - Note Organizer |
|
com.microsoft.onenote |
Microsoft One note (wrong package name) |
|
com.simplemobiletools.notes.pro |
Simple Notes Pro |
|
com.simplemobiletools.notes |
Simple Notes |
Bot commands
Commands in green are part only of the English fork, while commands in red are part only of the Turkish fork.
| Commands | description |
|
action_click |
Simulates a standard tap on a selected UI element |
|
action_long_click |
Simulates a long press on a selected UI element |
|
click_coord |
Performs a tap at specific screen coordinates. |
|
action_custom_gesture |
Executes a custom gesture path defined by the operator |
|
global_action_back |
Triggers the Android system “Back” button action |
|
global_action_home |
Returns the device to the home screen |
|
global_action_recents |
Opens the recent apps overview |
|
swipe_up |
Performs an upward swipe on the screen |
|
swipe_down |
Performs a downward swipe on the screen |
|
swipe_left |
Performs a leftward swipe on the screen |
|
swipe_right |
Performs a rightward swipe on the screen |
|
action_edit_text |
Modifies the text content of an existing input field |
|
action_input_text |
Inserts operator-supplied text into a target field |
|
action_screen_on |
Wakes the device screen if it is off |
|
start_hvnc |
Starts the remote session based on accessibility-driven remote control |
|
stop_hvnc |
Stops the remote session |
|
enable_accessibility_screenshot |
Enables screenshot-based screen capture through the Accessibility Service |
|
disable_accessibility_screenshot |
Disables screenshot-based screen capture through the Accessibility Service |
|
start_vnc |
Starts a screenshot based remote session on the device |
|
stop_vnc |
Stops a screenshot based remote session on the device |
|
block_app |
Adds an application to a blocklist to restrict or interfere with its use |
|
unblock_app |
Removes an application from the blocklist |
|
clear_blocked |
Clears the entire list of blocked applications |
|
action_blackscreen |
Toggles a black screen overlay to hide device activity from the user |
|
nighty |
Mutes audio |
|
get_unlockpass |
Attempts to retrieve or intercept the device unlock credential |
|
start_record_gesture |
Begins recording a user gesture |
|
stop_record_gesture |
Stops the current gesture recording session |
|
action_recorded_gesture |
Replays a previously recorded gesture sequence |
|
unlock_pin |
Attempts to unlock the device using a PIN entry routine |
|
sms_perm |
Requests SMS-related permissions |
|
install_from_unknown |
Guides or forces enabling installation from unknown sources |
|
start_app |
Launches a specified application on the device |
|
undead |
Displays a temporary notification |
|
load_features |
Requests additional modular features from the server |
|
feature_status |
Retrieves the current status of available or loaded features |
|
unload_features |
Disables previously loaded modular features |
|
scan_notes |
Searches stored notes on the device for sensitive or useful information |
|
action_set_clipboard |
Replaces the device clipboard contents with operator-supplied text |
|
reset_injection |
Resets the current injection configuration or state |
|
disable_injection |
Turns off overlay or web injection functionality |
|
enable_injection |
Turns on overlay or web injection functionality |
