live · scanning repos
Scanrepo
github.com
DANGER
malware detected
github.com / zevnda

zevnda/steam-game-idler

TypeScript·829 files·commit 4df194f·scanned 2h ago·cached ✓
89/100
MALICIOUS
Matches known-malicious patterns. Do not clone or install.

This repository contains patterns associated with malware. Do NOT run this code.

verdict accurate?
Partial architecture graph
Desktop app detected
threat-state: maliciouslive

FINDINGS ░▒▓

criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.src-tauri/src/idling/manager.rs

    let mut command = Command::new(&exe_path);
    command
        .arg("idle")
+8
criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.src-tauri/src/local_steam/commands.rs
pub fn anti_away() -> AppResult<()> {
    let mut command = std::process::Command::new("cmd");
    command.args(["/C", "start", "", "steam://friends/status/online"]);
    #[cfg(windows)]
+8
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.src-tauri/src/main.rs
            // that could race on the environment has run.
            unsafe {
                std::env::set_var("GDK_BACKEND", "wayland,x11");
            }
+3
criticalRust process Command usagestd::process::Command can execute arbitrary shell commands. Malware uses it to drop payloads, exfiltrate data, or establish persistence.src-tauri/src/steam_agent/process.rs

        let mut command = Command::new(&exe_path);
        command
            .arg("agent")
+8
warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.src-tauri/src/zoom.rs
            #[cfg(windows)]
            unsafe {
                if let Err(e) = webview.controller().SetZoomFactor(scale_factor) {
                    tracing::warn!(error = %e, scale_factor, "failed...
+3
infoSuspicious files are not reachable from entry pointsFlagged files exist but are not imported by any entry point. They may be dead code, tests, or attack payloads triggered by another mechanism.+2
warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.src-tauri/src/achievement_unlocker/import_timings.rs
//! Not account-scoped and doesn't branch on `GamesAccount` - this queries a target profile that has
//! nothing to do with which account is signed in to this app. The Steam Web API key is resolved
//...
+5
warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.src-tauri/src/achievements/web_api.rs
//! it as a public, unauthenticated endpoint keyed only by `appid`, independent of session or
//! sign-in mode - the real source behind the local Steam client's native
//! `GetAchievementAchievedPerce...
+5
warningRust wallet/crypto code with network activityCode handling private keys or signing and also making network requests may be exfiltrating secrets or sending funds to an attacker.src-tauri/src/free_games/discovery.rs
//! Anonymous scrape of the Steam store's free-games search results - no auth, no account, works
//! identically for both sign-in modes. Ported from `main`'s `game_data::get_free_games`, same
//! URL/...
+5
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.src/features/account-switcher/components/AccountSwitcher.tsx+3
warningHigh-entropy string literalsFound 3 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.src/features/achievement-unlocker/components/AchievementOrderRow.tsx+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.src/features/achievement-unlocker/components/AchievementUnlockerPage.tsx+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.src/features/achievement-unlocker/hooks/useAchievementOrder.ts+3
warningHigh-entropy string literalsFound 4 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.src/shared/components/Banner.tsx+3
warningHigh-entropy string literalsFound 4 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.src/shared/components/GameThumbnail.tsx+3
warningDependency runs install scripts"<root>/postinstall" executes code during installation. Malicious packages use this to drop payloads before the app even runs.package.json+3
infoAuthor has no other public repositoriesGitHub user "sgi-actions[bot]" has no other public repositories, common for burner accounts used in scams.+2

Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.

547 files scanned @ 4df194f | 9/25/2026 | heuristic scan — always review manually

risk by category
code execution25
network & exfiltration25
file system access0
obfuscation15
supply chain5
owasp / injection0
telemetry
files 547/829rules hit 17engine v6commit 4df194f

github

zevnda/steam-game-idler

Farm Steam trading cards, manage achievements, and idle games automatically — an all-in-one alternative to ArchiSteamFarm, Steam Achievement Manager, and Idle Master

TypeScript
731
35
863d
829 files
547 scanned(66%)
4df194f

architecture░▒▓

entry (1) flagged (36) pkg (294)
694 nodes · 1829 edgesscroll to zoom · click node to jump to finding