Lure page
The visible web interface is the entry point into the reviewed wallet flow.
Correlate domain, script and loading relationships.
Supported by review evidenceMalware Analysis / Artefact: core-chain-v1.7.min.js · SHA-256 194ce39215a1…
The claim interface, transaction authorizations and backend control in the archived XRPL controller. With code, C2 indicators and a separate assessment of the other cases.
No new execution; no proof of current deployment state
The wallet prompt is not the interesting part; the data reaching it is. This analysis therefore starts with the preserved bundle and follows the path to the signing boundary.
194ce39215a160ed33b4748accdb6c5e792ba96b1d6199d7d2edb7352cc13c2fThe analysis path for this report. Every node shows what is supported, where detection can start and where the claim stops.
The visible web interface is the entry point into the reviewed wallet flow.
Correlate domain, script and loading relationships.
Supported by review evidenceThe client requests a wallet connection; a request alone does not establish approval.
Join unexpected provider calls with origin context.
Supported by review evidenceStatic logic prepares an action whose meaning depends on parameters and the target system.
Compare methods, destinations and displayed purpose.
Supported by review evidenceOnly user approval crosses the signing boundary; this report separates preparation from execution.
Prioritise wallet warnings and simulation mismatches.
Bounded or unresolvedAn observed or reconstructed action is assessed only within the documented case.
Correlate on-chain effects separately from frontend telemetry.
Bounded or unresolvedReview pivots derived from the report — not a live configuration or universal family indicator.
Source, validation and limits accompany every rule.
rules:
- id: remote-wallet-transaction-signing
languages: [javascript, typescript]
severity: WARNING
message: Review wallet signing where transaction data originates in a remote response
patterns:
- pattern-inside: |
$R = await fetch(...);
...
$TX = await $R.json();
...
- pattern-either:
- pattern: $W.signAndSubmit($TX)
- pattern: $W.sign($TX)
The review examined the archived XRP Flux Cast controller from the Web3 corpus dated 11 October 2026. Its SHA-256 was recomputed locally and matches the historical audit. No sample was executed and no C2 or ledger query performed.
194ce39215a160ed33b4748accdb6c5e792ba96b1d6199d7d2edb7352cc13c2fPreserved original bundle
a99df897c7aed2289b27ca934b4bb9e230cd4f0be790806c527d97421a56e02fFormatted derivative
0131abf01187f995d4577bb58866b11ae90768212b7624706faf1759e9388c2dDerivative with folded strings
96694272da2415664f9b0948c55c87b3f2fb7441a663c6fd464ad761d7eb0b74Our archived tool for static preparation
The first view shows stored references; the second reconstructs the documented workflow. No step was rerun.
The first view shows stored references; the second reconstructs the documented workflow. No step was rerun.
A file reference does not establish runtime behaviour. Recorded processing is not a new execution.
Evidenced paths and existing derivatives; backend remains unresolved.
Captured HTML; script reference at line 262.
index.html:262 names the relative bundle path. A reference does not establish execution.
Preserved original bundle; hash checked locally.
index.html:262 names the relative bundle path. A reference does not establish execution.
Tool:11–16 names the input and readFile.
Reads the specified bundle as text.
Tool:11–16 names the input and readFile.
Tool:27–36 and56 document preparation/output; not rerun today.
Tool:40–60 documents folding and output; archived file exists.
Formatted derivative, not raw code.
Tool:27–36 and56 document preparation/output; not rerun today.
Archived derivative with constant string folding.
Tool:40–60 documents folding and output; archived file exists.
Tool:94–115 documents validation/outputs; both stored lists are empty.
AUDIT.md:29 names the folded artifact with a line reference.
Client evidence establishes neither server code nor specific runtime responses.
Classic XRP and hex-address lists are empty; both files were checked.
Tool:94–115 documents validation/outputs; both stored lists are empty.
Historical controller audit with artifact and finding references.
AUDIT.md:29 names the folded artifact with a line reference.
Actual server implementation is not evidenced by the bundle. An existing clean-room model does not replace it.
Client evidence establishes neither server code nor specific runtime responses.
Archived preparation and assessment, no fresh execution.
The case report documents the October 2026 capture. No new capture was made.
Tool path binds the archived bundle input.
First documented parse/print pass without compression.
Tool path binds the archived bundle input.
Tool records two separate transform calls.
Conservative options; actual property pairs checked in derivatives.
Tool records two separate transform calls.
AUDIT.md references the derived controller artifact.
Tool records address validation after folding.
Controller findings supported classification; harmless property pairs alone did not.
AUDIT.md references the derived controller artifact.
The current task covered static archive review only.
Checksum validation and empty outputs; not proof of absent runtime values.
Tool records address validation after folding.
Not performed. Another case’s historical session remains separate.
The current task covered static archive review only.
Limit: References do not establish runtime behaviour. “Recorded” edges describe documented steps; “unresolved” marks missing current or server-side evidence.
core-chain-v1.7.min.js is the preserved original bundle. core-chain-v1.7.pretty.js is a formatted derivative, not the raw original. The strings-folded.js derivative contains folded constant strings. The following pairs were matched locally in both derivatives; they are actual excerpts, not invented models. The actual preparation uses a conservative Terser pass: default compression is disabled while literal evaluation and property normalization are explicitly enabled. The excerpt shows that archived configuration.
const folded = await transform({
compress: {
defaults: false,
evaluate: true,
computed_props: true,
properties: true,
},
mangle: false,
format: {
beautify: true,
comments: true,
keep_quoted_props: true,
quote_style: 1,
},
});
Line numbers refer to this excerpt. Choose a note to highlight its range.
The actual wrapper passes source already read as text to Terser. If output code is absent, preparation stops with an error. This excerpt was read only; the pipeline was not rerun.
SHA-256 96694272da2415664f9b0948c55c87b3f2fb7441a663c6fd464ad761d7eb0b74async function transform(options) {
const result = await minify(source, options);
if (!result.code) throw new Error('Terser returned no code');
return result.code;
}
Original source-file lines. Choose a note to highlight its range.
Before string folding, the tool produces a readable derivative without compression or additional identifier mangling. That explains pretty.js: formatted source, not a raw capture or an already fully deobfuscated application.
SHA-256 96694272da2415664f9b0948c55c87b3f2fb7441a663c6fd464ad761d7eb0b74const pretty = await transform({
compress: false,
mangle: false,
format: {
beautify: true,
comments: true,
keep_quoted_props: true,
quote_style: 1,
},
});
Original source-file lines. Choose a note to highlight its range.
The fragments resolve to the property name title. This excerpt demonstrates string obfuscation and its resolution, not the controller’s malicious behaviour. Surrounding control flow is intentionally omitted.
Source artifact · hash of the full file, not the excerpt
document['ti' + 'tl' + 'e']document.titleText view · no execution · original remains unchanged
The brackets contain constant string literals only. The formatted derivative preserves the original string concealment.
Joining these literals produces title. A dynamic expression would instead remain unresolved.
The existing analysis artifact shows document.title. The notation becomes readable; the object property stays the same.
Limit: No sample execution. Property resolution alone does not establish malicious behaviour.
readyState is likewise written as short literals in the formatted artifact. It is directly readable in the folded artifact. Only the constant string was checked; no sample expression was executed.
Source artifact · hash of the full file, not the excerpt
document['re' + 'ad' + 'yS' + 'ta' + 'te']document.readyStateText view · no execution · original remains unchanged
The brackets contain constant string literals only. The formatted derivative preserves the original string concealment.
Joining these literals produces readyState. A dynamic expression would instead remain unresolved.
The existing analysis artifact shows document.readyState. The notation becomes readable; the object property stays the same.
Limit: No sample execution. Property resolution alone does not establish malicious behaviour.
The interface promised an XRP airdrop claim. Historical controller evidence instead showed genuine XRPL transactions for signing and submission through wallet interfaces, while the page described the request as a generic “message”. Instructions came from the backend without local checks of recipient, amount or transaction type. This is the concrete discrepancy supporting classification: not merely proof of a claim, but approval of a potentially value-bearing transaction. Static evidence alone cannot determine the transaction type returned for a particular user. Recorded in REPORT.md lines 3–15 and AUDIT.md lines 9–13, 29 and 47–59; controller region core-chain-v1.7.strings-folded.js from line 40576. The audit does not claim a flaw in XRPL or legitimate wallet products.
AUDIT.md line 63 records the hardcoded backend domain. IOCS.md also identifies the captured frontend and bundle hash. The table separates those roles: a hash identifies identical bytes; a domain records an infrastructure relationship. Neither alone establishes an operator identity or current activity.
Domains are deliberately defanged. The hash was recomputed locally.
xrpl-scanner[.]comx-flux-cast[.]pages[.]devloyalty-xprl[.]com194ce39215a160ed33b4748accdb6c5e792ba96b1d6199d7d2edb7352cc13c2fNo indicators in this category.
Both archived lists, xrpl-classic-addresses.txt and hex-addresses.txt, contain zero non-empty entries. IOCS.md and AUDIT.md likewise report no validated static XRP recipient in the primary sample. Negative extraction does not prove no address appears at runtime. Nor does it permit substituting an address from another case as this sample’s recipient.
Historical extraction of classic XRP addresses did not rely on regex alone. This function checks decoded format and embedded checksum. It does not prove a recipient role. The archived output list remains empty; dynamically supplied values are not excluded.
SHA-256 96694272da2415664f9b0948c55c87b3f2fb7441a663c6fd464ad761d7eb0b74function isValidClassicAddress(value) {
const decoded = decodeRippleBase58(value);
if (!decoded || decoded.length !== 25 || decoded[0] !== 0) return false;
const payload = decoded.subarray(0, 21);
const expected = decoded.subarray(21);
const first = createHash('sha256').update(payload).digest();
const actual = createHash('sha256').update(first).digest().subarray(0, 4);
return actual.equals(expected);
}
Original source-file lines. Choose a note to highlight its range.
The Loyalty report includes an earlier explicitly authorized controlled C2 session. It cannot be described as wholly static research; that session was not repeated now. Shibnow remained unconfirmed: the captured content was a challenge page without application logic. Shared infrastructure does not turn that candidate into a confirmed drainer.
Confirmed deception was tailored to Web3 expectations and genuine wallet dialogs. Brand imitation, misleading claim copy and string obfuscation are familiar techniques, not evidence of technical novelty. The relevant distinction is the evidenced discrepancy between presentation and action. This material does not establish market share, success rate or common authorship.
The Evidence Anchor at the start identifies the binary, file or revision actually used. These links provide context and reported observations; they do not substitute for local sample analysis.
XRPL · Secure Signing ↗Historical controller evidence supports the primary case’s drainer classification. The local recheck confirms its hash and two actual string resolutions, not present-day activity. A static recipient remains unestablished; Shibnow remains a candidate.
Start a conversation