It uses synthetic taps to switch on Wireless Debugging, then pairs with the phone's own ADB daemon to get a shell (UID 2000) foothold outside the app sandbox. Two Go binaries keep that foothold alive after the app is uninstalled, and can reinstall it.
When its scripted taps fail, it asks a generative AI model where to tap. The operator console, branded 熊猫工坊 / Panda Workshop, reportedly uses Gemini to rank victims by estimated bank balance.
What RATHat is
Threat reseachers disclosed RATHat on 16 September 2026, and followed on 28 September with an analysis of its operator console. It is rented out as a service. Each customer gets a separate web console to build, sign and distribute the malware and to control infected phones. Cleafy counted nearly 100 console deployments since April 2026.
Distribution is simple: targeted smishing and malvertising that lead to fake download portals. Earlier campaigns used a StripChat-themed decoy. The sophistication starts after installation.
Infection chain
From sideloaded APK to a foothold that survives uninstall
- Lure and sideload An SMS link or ad leads to a fake download portal. The victim installs the APK and grants Accessibility. smishing / malvertising
- Self-pair with ADB Synthetic taps unlock Developer Options and enable Wireless Debugging. The malware reads the six-digit pairing code and port from the screen and pairs with the local ADB daemon. libadb-android
- Ask the model If a scripted step fails, the Accessibility tree is serialised to XML and sent with Mandarin prompts to a generative AI model, which replies with tap coordinates. reported as Google Gemini
-
Drop shell-level agents
Over ADB, two Go binaries disguised as native libraries are written to
/data/local/tmp: a command agent and an FRP reverse-tunnel client. UID 2000 - Steal and persist Overlays, SMS theft and touch logging collect credentials and OTPs. The agent outlives uninstall and can reinstall the app and re-enable Accessibility. FRP to console
Escaping the sandbox without an exploit
Most Android banking trojans are limited to the permissions the user grants them. RATHat uses those permissions to get more. With Accessibility it can press any button a user can, so it walks through Settings, taps the build number to unlock Developer Options, and turns on Wireless Debugging.
Wireless Debugging normally pairs a phone with a developer's computer using a six-digit code shown on screen. RATHat
reads that code and the dynamic port from the screen, then authenticates to the phone's own ADB
daemon through an embedded libadb-android library. No computer, no vulnerability and no root are needed.
The result is a shell running as Android's shell user (UID 2000), the same identity a developer gets
over USB. From there it can install packages, change secure settings and read input devices that an ordinary app
cannot reach.
"...local ADB (Android Debug Bridge) self-pairing to break out of the standard Android application sandbox."
Persistence: two Go binaries and a tunnel
Once the shell is in place, RATHat stages its long-lived components. Both are written in Go and named to look like ordinary native libraries.
| Component | Location | Role |
|---|---|---|
| liblocal-service.so | /data/local/tmp |
Shell-level command agent: screen streaming, touch logging, reinstall, settings changes |
| libmedia_codec.so | /data/local/tmp |
FRP client built from fatedier/frp, holding a reverse tunnel to the console through NAT and firewalls |
| app.apk | /data/local/tmp |
Staged copy of the malware for silent reinstall |
The agent runs outside the app's package lifecycle, so uninstalling the app does not stop it. It can
put the app back with pm install -r -g -i com.android.packageinstaller /data/local/tmp/app.apk and
restore Accessibility with settings put secure. Zimperium notes that the heartbeat restarting the agent
depends on the app, so it is still unclear whether the foothold survives a reboot after removal.
What it steals, and how
- Overlays: HTML phishing screens drawn over banking and payment apps, including WeChat and Alipay, to capture logins.
- SMS and OTPs: incoming text messages, including one-time passcodes, are forwarded to the operator.
- Accessibility text capture: typed text is rebuilt from Accessibility events.
- Touch logging: the Go agent runs
geteventon/dev/inputto record raw touch coordinates, then maps them to PINs and unlock patterns using per-brand keypad layouts inlocateValues.json. - Remote control: minicap and minitouch stream the screen and inject taps with no permission prompt and no recording indicator on Android 13 and earlier.
screencapat about 5 fps and standard MediaProjection are the fallbacks.
Where the AI comes in
RATHat uses a large language model in two places. Neither one moves money.
1. On the phone: a navigation fallback
Settings screens differ across Android versions and OEM skins, which breaks hard-coded tap sequences. When that
happens, RATHat serialises the live Accessibility tree to XML and sends it, with Mandarin prompts, to a generative AI
model. The model returns JSON with coordinates and actions such as tap or SCROLL_DOWN, for example to
find the "Pair device with pairing code" button. Cleafy found the model is used mainly to keep the Wireless Debugging
setup working, with the API key stored in the app's settings.
2. In the console: victim triage
According to Cleafy, the latest console supports only Google Gemini and sends operators to Google AI Studio for a key. It feeds stolen SMS to the model to estimate each victim's bank balance and sorts phones into high-value and mid-value groups, so operators know whom to work first. Nothing in the analysed samples uses the model to transfer funds.
| PromptSpy (ESET, Feb 2026) | RATHat (Sep 2026) | |
|---|---|---|
| Input to model | Prompt and XML screen dump | Mandarin prompt and XML Accessibility tree |
| Model output | JSON tap instructions | JSON coordinates and actions |
| Used for | Staying pinned in recent apps | Automating the ADB pairing chain |
| Console-side AI | None reported | Victim ranking by estimated balance |
| Privilege escalation | No | Yes, ADB shell as UID 2000 |
The ADB self-pairing is what makes RATHat dangerous. The model adds reliability, letting one build work across many phone models, and saves operators time when choosing targets.
The operator console
Every RATHat customer runs a separate console. Cleafy describes it as a complete build tool: operators create and sign builds, schedule rebuilds that change file hashes, and publish to Amazon S3 or their own servers. The panel has been rebranded several times.
| Branding | Period | Example C2 |
|---|---|---|
| Fisher | Dec 2025 to Feb 2026 | admin.rathat[.]live |
| BlackCat Remote Control Management | Apr 2026 | 8.231.120[.]246 |
| Panda Workshop V5 | Aug 2026 | admin.xiongmaocs[.]pics |
| Panda Workshop V6 | Sep 2026 | admin.chunhuating[.]best |
Live consoles serve an HTTPS panel titled 熊猫工坊-旗舰版V5, 熊猫工坊-旗舰版V6
("Panda Workshop, Flagship Edition") or PandaV6. Public scan data shows the same hosts running an
FRP server on TCP 7000, which is where the tunnels opened by libmedia_codec.so
terminate. Console domains follow a consistent pattern: admin. subdomains of cheap TLDs, registered in
bulk at NameSilo, many of them hosted on BGPNET (AS4907, Singapore).
The brand is older than the reporting. rathat[.]me and rathat[.]org were registered in the
same second on 8 September 2024, and passive DNS shows admin.rathat[.]live resolving by November 2024.
The Internet Archive holds a capture of the rathat[.]live panel from July 2025, and in January 2026 its
/api/version endpoint reported V2.0.
What the old panel domain serves now
As of 29 September 2026, admin.rathat[.]live no longer shows a console. It serves a Chinese government
welfare themed download page, "畅聊民生" (roughly "Chat About People's Livelihood"), advertising elderly care, social
security and healthcare services. The page redirects to yzbwiosod.hucuwa[.]cn/clms.bin, which delivers a
68 MB APK.
That APK is not RATHat. It is a chat app built on a commercial messaging SDK, with a wallet, group "red packets",
withdrawals and a PhoneIntercepterService backed by call-handling permissions. The feature set matches
Chinese telecom-fraud apps that keep victims in scripted chat groups and can intercept calls to banks or police. Each
download is repackaged with a new package name, a new hash and a deliberately invalid ZIP header.
The link to RATHat is the server rather than the code. The same host, 165.154.203[.]196, served
accessibility.rathat[.]club, api.rathat[.]club and download.rathat[.]club in
March 2026. This points to one operation, or one infrastructure provider, running both a banking trojan and a fraud
chat app. Whether the chat app can deliver RATHat as a second stage has not been confirmed.
Who is behind it?
"...threat actors that appear to be operating in China."
No public source names the developer or the operators. The indicators are Mandarin prompts, a Chinese-language panel, pinyin domain names (xiongmao "panda", cunzhang "village chief", jiaozhu "cult leader") and WeChat and Alipay targeting. Together they describe a Chinese-speaking operation, not a specific group or location. There is no verified link to PlayPraetor, SpyNote, GoldFactory or other Chinese-speaking Android MaaS families.
The infrastructure suggests a central developer. Brand domains and console domains are registered in batches seconds apart, hosting is uniform, and every console carries the same FRP setup. That fits one provider building panels for many paying customers.
Detection and response
- Device: look for processes running as UID 2000 outside a developer session, and for
liblocal-service.so,libmedia_codec.so,app.apk,minicaporminitouchin/data/local/tmp. - Network: alert on device traffic to TCP 7000 on unfamiliar hosts and on WebSocket traffic to
admin.*subdomains of low-cost TLDs. Block the indicators below. - MDM and enterprise: flag devices with Wireless Debugging or Developer Options enabled, and sideloaded apps holding Accessibility.
- Users: do not install apps from links in texts or ads, and treat any app asking for Accessibility with suspicion.
Uninstall the app, turn off Wireless Debugging and Developer Options, and revoke all debugging authorisations.
Remove the binaries from /data/local/tmp (this may need ADB from a trusted computer), reboot, and check that the app has not returned and that no unknown service holds Accessibility.
These steps follow from the documented behaviour. No vendor has published a full removal procedure yet. If in doubt, back up and factory reset.
Indicators of compromise
Zimperium's repository [2] lists published C2 endpoints, distribution URLs and 161 APK SHA-256 hashes. The console domains in the first table below do not appear in published IOC lists. "Confirmed" means public scan data shows the Panda Workshop panel or FRPS on port 7000. "Candidate" means the registration batch and hosting match, but content was not observed.
Panda Workshop consoles
| Domain | IP | Status |
|---|---|---|
| admin.xiongmaoys[.]mom | 186.240.199[.]130 | Confirmed |
| admin.xiongmaoys[.]pics | 186.240.200[.]78 | Confirmed |
| admin.xiongmaoys[.]help | 186.240.199[.]191 | Confirmed |
| admin.xiongmaodx[.]buzz | 186.240.200[.]140 | Confirmed |
| admin.xiongmaodx[.]casa | 186.240.200[.]21 | Confirmed |
| admin.xiongmaodx[.]skin | 186.240.200[.]65 | Confirmed |
| admin.chunhuating[.]beer | 186.240.199[.]95 | Confirmed |
| admin.chunhuating[.]casa | 186.240.201[.]184 | Confirmed |
| admin.xiongmaocs[.]best | 186.240.200[.]56 | Candidate |
| admin.xiongmaodx[.]beer | 186.240.200[.]144 | Candidate |
| admin.xiongmaodx[.]mom | 186.240.200[.]49 | Candidate |
| admin.xiongmaodx[.]pics | 186.240.200[.]58 | Candidate |
| admin.xiongmaodx[.]qpon | 186.240.201[.]49 | Candidate |
| admin.xiongmaoys[.]best | Cloudflare | Candidate |
| admin.xiongmaodx[.]hair | Cloudflare | Candidate |
| admin.bawanu[.]best | 186.240.199[.]31 (historical) | Candidate |
Published by Cleafy
| Type | Value | Context |
|---|---|---|
| Domain | admin.chunhuating[.]best | Sep 2026 C2 (Panda V6) |
| Domain | admin.xiongmaocs[.]pics | Aug 2026 C2 (Panda V5) |
| IPv4 | 8.231.120[.]246 | Apr 2026 C2 (BlackCat) |
| Domain | admin.rathat[.]live | Dec 2025 to Feb 2026 C2 (Fisher) |
| URL | hxxps://dramaspoolcoa[.]com/en.html | Sep 2026 delivery |
| URL | hxxps://rathat[.]me/app-release-rat-hat-live.apk | Dec 2025 to Feb 2026 delivery |
| MD5 | 116346cace7f00ba557034b534d40791 | Sep 2026 sample |
| MD5 | 8fdc21e25097a46528211274e54330e1 | Feb 2026 sample |
| MD5 | f83357b2d47c7d38ee53943373961211 | Dec 2025 sample |
RATHat brand infrastructure and current lure
# Brand domains (GoDaddy, registered in batches)
rathat[.]me rathat[.]org rathat[.]live rathat[.]cloud rathat[.]club
accessibility.rathat[.]club api.rathat[.]club download.rathat[.]club
admin.rathat[.]cloud api.rathat[.]live
# Server hosting the panel domain and the current lure
165.154.203[.]196 7088603[.]cc
# Fraud chat app delivery (served from admin.rathat[.]live)
hxxps://yzbwiosod.hucuwa[.]cn/clms.bin
# Repackaged per download. Stable markers:
com.ddtx.dingdatacontact.*
com.CjftvKAgfmYMVk.PSkDqSVbrrhoGb.*
OpenInstall key ghbfm3
Network ranges and host artifacts
# Console hosting observed, AS4907 BGPNET PTE LTD
186.240.199.0/24 186.240.200.0/24 186.240.201.0/24
# On-device
/data/local/tmp/liblocal-service.so
/data/local/tmp/libmedia_codec.so
/data/local/tmp/app.apk
Blocking whole /24 ranges at a hosting provider can affect unrelated customers, so evaluate before deploying. This infrastructure rotates quickly, and several domains had stopped resolving at the time of writing.
Verdict
| What is new about RATHat? | It escapes the sandbox by pairing with the phone's own wireless ADB. No exploit, no root, no computer. |
| Is the AI the main threat? | No. It is a reliability and triage layer. The ADB shell is the real risk. |
| Does uninstalling fix it? | No. The Go agent in /data/local/tmp can outlive the app and reinstall it. |
| Who is at risk? | Users who sideload apps from SMS or ad links. Overlays target WeChat, Alipay, banking and crypto apps. |
| Who runs it? | A Chinese-speaking MaaS operation serving multiple customers. No named actor. |