Thanks for keeping this public. You're right that it belongs here rather than in email. Below is a finding-by-finding answer tied to the source and to your report. It can all be checked independently, and where I don't have an answer yet I say so.
First, what your report itself shows- 0 malicious indicators and no verdict (5 suspicious, 100 informational).
- No DNS requests, no contacted hosts and no HTTP traffic during the run. Nothing left the machine.
- The wallet crashed: the process tree shows WerFault.exe launched three times against PID 2788. The sandbox therefore mostly recorded startup plus Windows' crash handling, not the wallet running normally. The crash is a real bug and I'm reproducing it on a clean Windows 10 VM.
- I'm checking the SHA-256 you analysed (dcd5cb2a…25e5cc) against our published manifests and will confirm in tomorrow's update which release it is.
1. Indicators, mapped to code-
Screenshot APIs: gui/src/main/oshelper.cpp → screenshot() → QGuiApplication::primaryScreen()->grabWindow(0). Its only caller is OSHelper::grabQrCodesFromScreen(), the "scan QR code from screen" button inherited from Monero GUI. It hides the wallet's windows, decodes any QR codes in memory and discards the image. Nothing is saved or sent.
-
Key container within a CSP / Enhanced Cryptographic Provider: core/src/crypto/random.c → CryptAcquireContext + CryptGenRandom. This is the Windows randomness source used to generate wallet keys, identical to upstream Monero.
-
Clipboard: clipboardAdapter, used by the "copy address" buttons.
-
Registry reads/writes/deletes: OSHelper::installed() reads HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Monzero GUI Wallet_is1 to check for an installed copy. GUI settings are stored with Qt's QSettings (gui/src/qt/MoneroSettings.cpp), which on Windows is the registry under HKCU\Software\monzero-project\monzero-core. If any deleted key in your full report is outside that path, please post it. That would be a real finding.
-
ProcessDebugPort: not present anywhere in Monzero core, the GUI or upstream Monero. When a process crashes, Windows' own unhandled-exception handling queries ProcessDebugPort to check for a debugger before launching WerFault, and your run crashed. I believe that's the source but haven't proven it with a stack trace yet. I'll post the trace when I have it.
-
"Reads VM-specific registry key": not explained yet. The slim report hides which key was read (registry-172/173/177/33 are marked "not all sources available"). There is no VM-detection code in our source. If you have the full report, the key path would let me trace the module responsible. Until then it's open, not dismissed.
- Most of the 100 informational items are "contains API string" matches that any large, statically linked Qt application produces. Some are pattern false positives: "Exchange transport agent (.NET)" can't apply, since this is a native C++ binary with no .NET.
5. The Slavic stringsThey're the GUI's built-in translations, compiled into the exe as Qt resources (gui/translations/, inherited from upstream monero-gui):
- "Napredne postavke" = Croatian "Advanced settings" (monero-core_hr.ts)
- "Samo za pregledavanje" = Croatian "View only" (monero-core_hr.ts)
- "Exportovat peněženku" = Czech "Export wallet" (monero-core_cs.ts, the Export button in pages/Keys.qml)
- "Importovať" = Slovak "Import" (monero-core_sk.ts)
Your strings tool cut each one at its first non-ASCII letter (ě, ť), which is why they look like fragments.
2. What has actually been verified on the forkI diffed Monzero core against upstream Monero v0.18.5.1. Reproduce by cloning both and running diff -r on each directory:
- src/mnemonics (seed words), src/device (hardware wallets), src/ringct: byte-identical to upstream.
- src/crypto: one change, in crypto-ops.c, replacing left-shifts of negative integers (undefined behaviour in C) with equivalent multiplications. Same arithmetic result.
- src/wallet: the inactive asset prototype, a Monzero marker in the keys file so the wallet refuses to open Monero wallet files, display-unit handling and branding. Seed generation, key derivation and keys-file encryption are unchanged from Monero.
- Across all of the core src, the only new hostnames are node.monzero.org (default node) and monzero.org in the welcome text. No new outbound endpoints.
For transparency, the GUI has two optional network features inherited from Monero GUI, which explain URLs you'll see in strings:
- fiat price display (CoinGecko / Kraken / CryptoCompare), off by default;
- P2Pool download from the official SChernykh/p2pool GitHub releases, only if you choose P2Pool mining.
Neither ran in your session, consistent with the zero network activity.
To be clear: this is a source comparison done by me, not an independent audit, and I'm not presenting it as one.
3. The Windows build: being withdrawnAgreed, a clean new build doesn't clear the old one. Rather than ask anyone to trust it in the meantime, I'm withdrawing the Windows GUI download from monzero.org today. Its hashes, release notes and source will stay listed so anyone can still verify what was published. Linux builds, the Windows CLI and all source remain available.
It comes back only when:
- the sandbox crash is reproduced, explained and fixed;
- the ProcessDebugPort query and the VM registry read are both traced to a specific module, with evidence posted here and on GitHub;
- the new build has been run through the same analysis, with results posted side by side with yours.
I'll be straight about where this is heading: if the Windows build keeps being this problematic (unsigned binaries, heuristic flags and crashes in sandboxes), we will likely stop providing official Windows builds altogether and focus on Linux. Windows users would still be able to build from source, and community-built binaries would be welcome if they're independently reproducible.
If you ran the old Windows build and want peace of mind, the scanner advice above is sensible. Moving funds to a freshly generated wallet costs nothing.
For now my recommendation is the Linux build. It's the platform Monzero is developed and tested on, you can build it from source yourself in a few commands, and you don't need to trust my binary at all. Honestly, for a privacy coin, Linux is where you want to be anyway.
4. SigningCorrect: GPG-signed hash manifests are not Authenticode, and the .exe files are unsigned and labelled that way. If Windows builds continue, signed binaries and the certificate fingerprint will be posted here before the Windows GUI returns. I won't promise a date I can't guarantee.
Source and issue trackingAll Monzero source (core, desktop GUI, Android wallet and miner) is public in one repository:
https://github.com/Nightglass-Protocol1/Monzero-sourceThe GUI is under gui/: src/main/oshelper.cpp, src/qt/MoneroSettings.cpp and translations/ cover the items above. The repo was consolidated from the separate release repositories at v1.0.0 (GUI imported from monzero-gui 44eef24d4), so older GUI commit hashes such as 4b0cc9e aren't in its history. I'll post exactly where 4b0cc9e sits relative to that import, and the diff between them.
Please open a GitHub issue there for each open finding, or anything new, so the evidence stays public and tied to specific commits. I'll link the results there as well as here.
SummaryFour of the flagged behaviours map to specific, legitimate code (screen QR scan, key entropy, clipboard, settings storage), and the translation strings are fully explained. Two items are still open: the ProcessDebugPort trace, which I believe comes from the crash, and the VM registry key. The Windows GUI is being withdrawn today, and official Windows builds may be dropped for good if the problems continue.
I'm quite busy today, so I'll post an update here tomorrow with more findings: the hash confirmation, where 4b0cc9e sits, and progress on the crash and the two open indicators. If you can share the full report's registry key paths before then, that will help me close the last one. Please keep pushing if anything doesn't hold up.
Yesterday's promised update. I now have a finding-by-finding answer, and the two items I said were open — the hash and which build you analysed — are closed. Everything below is reproducible from the public source and the published artifacts.
The headline: I identified your exact binary.Your SHA-256
dcd5cb2a919ddc905b45998e464214da53c50b5f6b9a0c5bb13334025a25e5cc
is our
monzero-wallet-gui.exe from the Oct-18 "public wallet profiles" preview build (monzero-v1.0.0-windows-gui-profiles-20261018-x64.zip), built from the commit you named,
4b0cc9e…6533b5. It is
byte-identical to our own build artifact, so it is authentically our code compiled by us — not a repackage or an injected binary.
It is
not the v1.0.0 release. The shipped v1.0.0 GUI executable is a different file:
77202a6795da48154c6adfddfb8160b79da2c5399d6b3ed97fbbed2d7ed5f927 (monzero-v1.0.0-windows-gui-x64.zip)
So you analysed a
pre-release preview of an experimental feature (public wallet profiles, which adds optional HTTPS fetching) that was
removed before v1.0.0. It crashed at startup in your run, so that feature never executed — consistent with the zero network activity in your report.
2. What's actually different from Monero (reproduced with diff -r against the real v0.18.5.1 tag):
- src/mnemonics (seed words), src/device (hardware wallets), src/ringct, and src/cryptonote_basic/account.cpp (key derivation): byte-identical to upstream.
- src/crypto: a single change, in crypto-ops.c — "carryN << 26" replaced by "carryN * (1 << 26)". A left-shift of a possibly-negative signed int is undefined behaviour in C; the multiply is well-defined and arithmetically identical. Nothing cryptographic changes.
- src/wallet: the changes are an asset-transaction prototype plus a plaintext Monzero keys-file marker (so a Monzero keys file won't open as a Monero one) and branding. Seed generation, key derivation and keys-file encryption are unchanged — the ChaCha keys-file encryption code is identical; only the marker was added.
- The asset prototype is inactive: gated behind HF_VERSION_MONZERO_ASSETS = 18; the code returns "asset transfers are not active at the daemon's current hard fork".
- Outbound endpoints across all of core/src: only node.monzero.org, monzero.org and donate.monzero.org are new (the rest are inherited Monero URLs in comments/defaults). No telemetry, no paste sites, nothing unexpected.
Reproduce it yourself: clone monero-project/monero at v0.18.5.1 and run diff -r against core/src/.
1. Your indicators, mapped to code (checked at your exact commit 4b0cc9e, at v1.0.0, and upstream):
- ProcessDebugPort / anti-debug (IsDebuggerPresent, CheckRemoteDebugger, NtQueryInformationProcess): zero matches anywhere in our source. Your run crashed (WerFault x3); Windows' own unhandled-exception path queries ProcessDebugPort before launching WerFault. The live stack trace is the one thing that still needs a Windows VM repro, which I'm doing.
- VM-specific registry read: no VM-detection code of any kind in our source. Your slim report hides which key was read (registry-172/173/177/33, "not all sources available"). Post the actual key path and I'll trace the module the same day.
- Screenshots: gui/src/main/oshelper.cpp -> grabWindow(0), sole caller grabQrCodesFromScreen() — the "scan QR from screen" button. Decodes QR in memory, discards the image, saves/sends nothing.
- Registry writes/deletes: Qt QSettings under HKCU\Software\monzero-project\monzero-core; Qt removes a key when a setting is cleared, plus a read of the Uninstall key to detect an installed copy. If any deleted key in your full report is outside that path, post it — that would be a real finding.
- Key container (CSP): core/src/crypto/random.c -> CryptAcquireContext + CryptGenRandom, the Windows randomness source for key generation, identical to Monero.
5. The Slavic strings — compiled Qt translations in gui/translations/ (inherited from monero-gui):
- Napredne postavke = Croatian "Advanced settings" (monero-core_hr.ts)
- Exportovat peněženku = Czech "Export wallet" (monero-core_cs.ts)
- Samo za pregledavanje = Croatian "View only" (monero-core_hr.ts); Slovak lives in monero-core_sk.ts.
Your strings tool cut each at its first non-ASCII letter (ě), which is why they looked like fragments.
4. Signing: confirmed — the .exe files are
unsigned and labelled as such; the GPG-signed manifests cover published hashes only, not Authenticode. If Windows builds continue, signed binaries and the certificate fingerprint go here first.
3. Old vs new build: addressed above — you analysed the Oct-18 profiles preview, a different binary from v1.0.0 whose feature was removed. The Windows GUI is being
withdrawn regardless; hashes and source stay listed for
verification.
Summary- Your binary is identified and authenticated: our Oct-18 public-profiles preview (dcd5cb2a…)entical to our build output, not the v1.0.0 release (77202a67…).
- Every flagged behaviour maps to legitimate, reproducible code; the seed/key/encryption path is byte-identical to Monero; the asset prototype is inactive; no anti-debug/VM code exists in our source; no unexpected network
endpoints. - Still genuinely open: the live ProcessDebugPort stack trace (needs the Windows repro) and the exact VM-registry key (needs your full report's key paths). Post those and I'll close both.
Please open a GitHub issue per open item at github.com/Nightglass-Protocol1/Monzero-source. Thanks forreading, the Linux build remains the recommendation: you compile it yourself and don't have to trust my binary at all.