Moonlock Lab

“Anti-Ledger” malware: The battle for Ledger Live seed phrases

Moonlock Lab Team

May 22, 202510 min read

"Anti-Ledger" malware: The battle for Ledger Live seed phrases: Header image

Hackers are increasingly exploiting the trust that crypto owners place in cold wallets, turning the very tools meant to secure assets into attack surfaces. The recent ByBit heist has shaken the crypto industry and is unlikely to be the last. However, more low-profile heists are already underway.

Since August 2024, Moonlock Lab has been tracking a malware campaign distributing a malicious clone of Ledger Live — a widely used app for managing crypto through Ledger cold wallets. Initially, attackers could use the clone to steal passwords, notes, and wallet details to get a glimpse of the wallet’s assets, but they had no way to extract the funds. Now, within a year, they have learned to steal seed phrases and empty the wallets of their victims.

Below, we share the details of the new malicious techniques. We also break down 4 active malware campaigns that use them to go after Ledger Live, putting millions of crypto owners at risk.

A tested campaign gets reinforced with phishing

Threat actors are now adding phishing messages that warn users about supposed suspicious activity meant to trick them into entering their seed phrase.

An image showing the Ledger Live Wallet Hack Timeline.

Take the updated infection chain of Atomic macOS Stealer (AMOS) as an example. A malicious file, disguised as a legitimate download, slips onto the victim’s Mac. It proceeds to steal personal data — passwords, notes, and wallet details — and replace the real Ledger Live app with a fake clone.

The fake app then displays a convincing alert about suspicious activity, prompting the user to enter their seed phrase. Once entered, the seed phrase is sent to an attacker-controlled server, exposing the user’s assets in seconds.

Odyssey: The one that flipped the script

The turning point came with a threat actor known as Rodrigo, who introduced a game-changing feature in his Odyssey stealer. As Moonlock reported on X, Odyssey has been bypassing Ledger Live’s defenses with a sophisticated phishing scheme since March 19, 2025.

A screenshot of a Moonlock Lab tweet about Ledger Live.

Its main Mach-O file retrieves the username from the ~/.username path. It then passes it to an HTML phishing page, which is displayed to the victim. 

A screenshot of the code showing the .username path.

The page presents a deceptive “critical error” message. The message claims that to fix the issue, the user must enter their 24-word seed phrase, which is used to recover a Ledger Live account.

A screenshot of Ledger Live with a notification reading, "Ledger Live encountered a critical error."
An image of Ledger Live showing the "Genuine Check" screen.

If the user complies, the seed phrase, along with the username, is sent to a command-and-control (C2) server via a dedicated URL structure: /ledger-seed/<USER>/<SEED>.

Announcement of a stealthier threat in the making from @mentalpositive

Rodrigo’s impact has set a dangerous precedent for others to follow. Another threat actor, @mentalpositive, recently advertised on a dark web forum that their malware now includes an “anti-Ledger” feature. This module replaces the Ledger Live app to phish for seed phrases. In the post, they claimed that their latest update not only adds this capability but also reduces the stealer’s size for increased stealth.

A screenshot of a post on a dark web forum by user mentalpositive, advertising that their malware now includes an "anti-Ledger" feature.

However, analysis of 2 samples of mentalpositive’s stealer reveals no significant changes in evolution.

The older sample (SHA-256: e539b6b53cf7009e86d0ddb279dec9b84a099aa8c8b2ecd18d65ee17538d772a, first seen on VirusTotal: April 17, 2025) is presented in green color in the screenshot below. It focused on basic data theft, such as browser credentials and local files. It used the C2 URL hxxp://gq8ruzk1h3a8.cfd for data exfiltration.

The newer sample (SHA-256: a95c414686b78296910ba7ecbc684e22eaccd508ad48bf279dcb110e66985a66, first seen: May 4, 2025) is presented in red color. It simply uses a new C2 URL, hxxps://lagkill.cc/. 

A screenshot of malware stealer code showing a string referencing a Slavic name, "JENYA."

Interestingly, the older sample contained a string referencing a Slavic name, “JENYA.” In the newer sample, this string was replaced with “SHELLS,” suggesting an attempt to hide the author’s identity.

A screenshot of malware stealer code showing the name JENYA.

Notably, both samples contain references to a “Ledger Live” folder in their strings. This appears to indicate potential data exfiltration targeting Ledger Live-related files, though not the full anti-Ledger phishing functionality advertised.

Both samples remain compact and optimized for evasion. However, the lack of a phishing component suggests mentalpositive’s anti-Ledger feature may still be in development or is forthcoming in future updates. 

A screenshot of the malware stealer code with a string that reads "Ledger Live."

Tracing anti-Ledger in a campaign uncovered by Jamf

This growing interest in targeting Ledger Live users isn’t limited to chatter on dark web forums. Just days ago, Jamf Threat Labs published research on a macOS infostealer campaign that also targets Ledger Live users.

However, the malicious files associated with the campaign were uploaded to VirusTotal 3 months earlier. This suggests that exploitation efforts began well before the public report. While Jamf was the first to document this campaign, our analysis uncovered additional details.

A screenshot of the VirusTotal report on the Anti-Ledger malware discovered by Jamf Threat Labs.

Their analysis pointed to a malicious DMG file hosted at hxxp://138.68.93.230/Ledger-Live.dmg (SHA-256: 3992d69d17a2cd460c99f98f9dd1e61bc56ce362be1bab3d3a574c414a7b6ad2). It was fully undetectable on VirusTotal at the time. This file contains a Mach-O binary, also undetectable, packed with PyInstaller to evade static detection. When unpacked, it reveals a script (Ledger Live.pyc) that fetches an HTML page from hxxp://138.68.93.230/ledgeras and attempts to load a phishing interface via an iframe. 

A breakdown of the anti-Ledger code

Let’s take a look at the most interesting parts of the code, which our team managed to recover from the PYC file.

First of all, we can see some global variables defined to properly build this stealer sample. Among them, a C2 domain definition can be seen.

A screenshot the code for Ledger Live showing a C2 domain definition.

At the bottom of the Python code, we can spot calls to multiple self-explanatory functions. We also see data exfiltration at the end of the main stealer routine.

A screenshot of code showing a breakdown of Ledger Live, including data exfiltration.

Now, let’s examine some of these functions. The first one is designed to trick users into thinking that they need to input a system password to start recording a Zoom meeting. 

A screenshot of macOS showing a pop-up engineered to trick users into entering their system password.

One interesting point is that the password will be checked. And, just in case users typed the wrong password, they will be prompted again until the real password is received.

Screenshot of Ledger Live code showing the ExtractPassword string.

Later, we are presented with a rather long AppleScript embedded into Python.

It’s worth noting that this stealer separates the process of collecting sensitive data into 2 distinct methods. The first uses AppleScript. The second uses Python. The AppleScript shown below performs the following actions:

  • Mutes system sound
  • Steals files from the Desktop
  • Steals files from the Documents folder
  • Extracts Safari cookies

It also limits file types to certain extensions and certain file sizes (less than 51,200 bytes).

A screenshot of the Ledger Live code with strings highlighted showing the File Extensions List and the File Size Limitation.

The next step is to gather sensitive data using Python methods and functions (e.g., shutil, os). The functions shown in the screenshot below do the following: 

  • Collect browser data, history, cookies, and logins
  • Collect browser local extensions and their settings
  • Collect data stored in default cryptowallet directories
A screenshot of Ledger Live code showing strings to CollectData, CollectExtensions, and CollectCryptowallets.

This makes the detection of such processes trickier. While AMOS stealer has set a de facto standard of using AppleScript exclusively, here we have to deal with multiple separate flows.

Followers of Rodrigo4

Another advanced implementation comes from the notorious AMOS stealer, which has adopted Rodrigo’s playbook, deploying an almost identical phishing page with slight frontend tweaks to target Ledger Live users. 

The AMOS campaign begins with a malicious DMG file, JandiInstaller.dmg (SHA-256: a5255d7a4f7fb67a0682d1827cfba80c3e296b23b4ef450beea832c1292e12d8), first seen on VirusTotal on April 21, 2025.

To evade detection, the DMG includes a deceptive “Terminal” alias file pointing to /System/Applications/Utilities/Terminal.app/. If users drag the included shell script, JandiInstaller.lor (SHA-256: 451fb16f40687fb34ef5fa639fd3ac884b2cdef28c284f04c217e285294a82b5), into this alias as prompted, it executes in their Terminal with their permissions. Thus, it can dodge Gatekeeper’s verification.

A screenshot of macOS showing the JandiInstaller Setup with instructions to "Open terminal, drag and drop to install the app."

This triggers an obfuscated shell script, JandiInstaller.lor (SHA-256: 451fb16f40687fb34ef5fa639fd3ac884b2cdef28c284f04c217e285294a82b5), which executes a Mach-O binary, JandiInstaller (SHA-256: 09c68e48fcaabad74626be5f3a15b9e1f3e6f45919737aa8475f74a3a353d778).

This binary performs VM detection to avoid sandboxes, using system_profiler SPMemoryDataType to check for “QEMU” or “VMware” strings. If it detects a virtual environment, it exits. 

"osascript -e 'set memData to do shell script "system_profiler SPMemoryDataType"\nif memData contains "QEMU" or memData contains "VMware" then\n\tdo shell script "exit 42"\nelse\n\tdo shell script "exit 0"\nend if'"

What happens when the malicious payload is run?

If a virtual environment is not detected, it proceeds with its payload, performing the following via AppleScript:

  • Collecting sensitive data, including browser credentials (Chrome, Firefox, Safari), Apple Notes, Keychain databases, and files like PDFs and wallet configs from Desktop, Documents, and Downloads (it also targets Binance and TonKeeper configs)
  • Zipping everything into /tmp/out.zip using ditto -c -k
  • Sending the stolen data to a C2 server at hxxp://45.94.47.102/contact via a curl POST request
  • Downloading a trojanized Ledger Live app from hxxps://gknkargo.com/zxc/app.zip (SHA-256: 86ff1cebe2fa691bc9142a1645461051eb347854d093eef506a1acf1665d0bb9)
  • Terminating the legitimate app with pkill “Ledger Live” and removing it using sudo privileges (prompted via a fake GUI dialog)
  • Installing the fake version in /Applications
  • Displaying a fraudulent welcome screen (index.html) with a warning modal via the fake Ledger Live app (SHA-256: b6887f35cd87b20664ac5757f47296c394eda96da5e8edd23c1579b0d2c83672)
  • Luring victims into clicking “Restore”
  • Redirecting them to put_seed.html, which dynamically generates 24 input fields for the recovery phrase
  • Encoding the data via base64
  • Sending it to hxxps://aimplyhired.com/receive.php via a POST request
  • Showing the final page, end.html, which displays a misleading “App corrupted” message to prevent suspicion

With its cunning phishing page, the AMOS stealer pulls off a master con. This isn’t just another heist. It’s a direct response to Ledger Live’s wallet security, which locks seed phrases beyond the reach of typical stealers.

Unlike softer targets, Ledger Live’s defenses demand this elaborate phishing charade, proving it’s a vault that attackers can’t crack without duping you first.

Final thoughts

The curtain still hasn’t closed on this crypto heist. At the time of this report, 4 active campaigns are now targeting Ledger Live users, and the attackers are only getting smarter.

This isn’t just a theft. It’s a high-stakes effort to outsmart one of the most trusted tools in the crypto world. And the thieves are not backing down.

On dark web forums, chatter around anti-Ledger schemes is growing. The next wave is already taking shape. Hackers will continue to exploit the trust crypto owners place in Ledger Live. Users should take the news as a clear signal to stay alert and observe the following advice:

  • Watch out for phishing pages, especially those warning of a “critical error” and asking for the 24-word recovery phrase.
  • Never share your seed phrase with anyone or on any site, no matter how legitimate it looks.
  • Only download Ledger Live from the official source.
  • Stay informed. Follow trusted research teams like Moonlock for early warnings and threat breakdowns.

Indicators of compromise (IoCs)

IoC TypeValueDescription
Hash (SHA-256)0dba9a31da4248a64df6488fe11f289efcbf95b1b69784d878cb96be5fd5adbbOdyssey Mach-O binary
Hash (SHA-256)4bb8f7f241eb8f47ecfb8a10d455b1e64b1153ff118945a789d8e6141a0a5aabOdyssey Mach-O binary
URLhxxp://185.147.124[.]212/ledger-seed/<USER>/<SEED>Odyssey C2 server path for exfiltrating username and seed phrase via phishing page.
URLhxxp://185.147.124[.]212/ledger-seed/Odyssey C2 server 
Hash (SHA-256)e539b6b53cf7009e86d0ddb279dec9b84a099aa8c8b2ecd18d65ee17538d772amentalpositive sample, contains “JENYA” string
Hash (SHA-256)a95c414686b78296910ba7ecbc684e22eaccd508ad48bf279dcb110e66985a66mentalpositive sample with updated C2
Hash (SHA-256)0f68b2c4a34ea9299a526cb10fe8846af59c149f35d9317f52da7ef7cb3522f8mentalpositive Mach-O contains “JENYA” string
Hash (SHA-256)31e4737946407ce7407fb9b7d9ac3a506f9c9008bf3fb2822b8bd9028c7b74e2mentalpositive Mach-O contains “JENYA” string.
Hash (SHA-256)a2f6fdc99e041724cafeb17764bb5338b84d4771d13b4f47cb37bdb31880d0damentalpositive Mach-O contains “JENYA” string
Hash (SHA-256)5a97560cb15d65cd9f369635629f8e2ab00e63d7cba5e287a0fc79b84ba7480cmentalpositive Mach-O contains “JENYA” string
Hash (SHA-256)d9a8d74903b81a64f031b0f1bfab7770a5c7ecd120b72588efb7b964d20c8d35mentalpositive Mach-O contains “JENYA” string
URLhttp://gq8ruzk1h3a8.cfdmentalpositive C2 server for data exfiltration
URLhttps://lagkill.cc/mentalpositive C2 server for data exfiltration
Hash (SHA-256)3992d69d17a2cd460c99f98f9dd1e61bc56ce362be1bab3d3a574c414a7b6ad2malicious DMG file from the Jamf’s article
URLhxxp://138.68.93.230/Ledger-Live.dmgdownload link for malicious DMG file from the Jamf’s article
URLhttp://138.68.93.230/ledgerasHTML phishing page
Hash (SHA-256)a5255d7a4f7fb67a0682d1827cfba80c3e296b23b4ef450beea832c1292e12d8AMOS JandiInstaller.dmg, initiates phishing and app replacement
Hash (SHA-256)451fb16f40687fb34ef5fa639fd3ac884b2cdef28c284f04c217e285294a82b5AMOS JandiInstaller.lor, obfuscated shell script 
Hash (SHA-256)09c68e48fcaabad74626be5f3a15b9e1f3e6f45919737aa8475f74a3a353d778AMOS .JandiInstaller, Mach-O binary with VM detection and payload execution
Hash (SHA-256)86ff1cebe2fa691bc9142a1645461051eb347854d093eef506a1acf1665d0bb9AMOS trojanized Ledger Live app, extracted from app.zip
Hash (SHA-256)b6887f35cd87b20664ac5757f47296c394eda96da5e8edd23c1579b0d2c83672AMOS fake Ledger Live app, displays phishing welcome screen and put_seed.html
URLhxxp://45.94.47.102/contactAMOS C2 server for exfiltrating stolen data (browser credentials, configs)
URLhxxps://gknkargo.com/zxc/app.zipAMOS download link for trojanized Ledger Live app
URLhxxps://aimplyhired.com/receive.phpAMOS C2 server for exfiltrating base64-encoded seed phrase via POST

This is an independent publication, and it has not been authorized, sponsored, or otherwise approved by Apple Inc. Mac and macOS are trademarks of Apple Inc.

MoonLock Banner
Moonlock Lab Team Moonlock Lab Team
Moonlock Lab is a team of malware researchers and reverse engineers, whose expertise is at the core of Moonlock's cybersecurity products. Moonlock is the cybersecurity division of MacPaw.