[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81877":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":13,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":15,"rankGlobal":10,"rankLanguage":10,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":10,"pushedAt":10,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":13,"starSnapshotCount":13,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},81877,"capture-bypass","Londopy\u002Fcapture-bypass","Londopy","DLL injection tool to bypass screen-capture protection on Windows 10\u002F11","",null,"Rust",20,0,1,40,"Other",false,"main",true,[],"2026-06-12 04:01:35","# Capture Bypass\n\n> **Legal notice:** By downloading, installing, cloning, or running this project in any form, you agree to the [Terms of Service](TERMS_OF_SERVICE.md) and [Disclaimer](DISCLAIMER.md). Only use this tool on windows and processes you own or have explicit permission to capture. If you do not agree, do not use this software.\n\n[![CI](https:\u002F\u002Fgithub.com\u002FLondopy\u002Fcapture-bypass\u002Factions\u002Fworkflows\u002Frelease.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FLondopy\u002Fcapture-bypass\u002Factions\u002Fworkflows\u002Frelease.yml)\n![Release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FLondopy\u002Fcapture-bypass) \n[![License: MIT](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-MIT%20%28personal%29-yellow.svg)](https:\u002F\u002Fgithub.com\u002FLondopy\u002Fcapture-bypass\u002Fblob\u002Fmain\u002FLICENSE)\n![Files](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdirectory-file-count\u002FLondopy\u002Fcapture-bypass) \n![Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002FLondopy\u002Fcapture-bypass) \n![Size](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flanguages\u002Fcode-size\u002FLondopy\u002Fcapture-bypass)\n[![Rust](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Frust-1.78%2B-orange?logo=rust&logoColor=white)](https:\u002F\u002Fwww.rust-lang.org)\n[![Platform](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows%2010%2F11-0078d4?logo=windows&logoColor=white)](https:\u002F\u002Fgithub.com\u002FLondopy\u002Fcapture-bypass\u002Freleases\u002Flatest)\n![GitHub Downloads](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002FLondopy\u002Fcapture-bypass\u002Ftotal?)\n\n---\n\n## What is this?\n\nSome apps on Windows intentionally block screen recording. You open OBS, try to capture a window, and it just shows up as a black box — even though the app is right there on your screen. This isn't OBS being broken. The app is actively telling Windows *\"don't let anyone record me.\"*\n\n**Capture Bypass removes that block.**\n\nOnce you run it on a window, OBS, the Snipping Tool, ShareX, and any other capture software can see it normally again.\n\n**Common reasons people use this:**\n\n- **Streaming or recording** — you want to share your screen but an app (a media player, a game launcher, a video player) goes black in OBS\n- **Taking a screenshot** — Windows + Shift + S just captures a black rectangle where the app should be\n- **Screen sharing** — you're in a meeting and need to show someone a window that refuses to appear on their end\n- **Recording a tutorial** — you're making a guide for something but the app keeps disappearing from the recording\n\nIt works on basically any app. Media players, certain games, some messaging apps, video software — if it's showing up black in OBS, this is probably why, and this fixes it.\n\n**This is a tool, not a hack.** It works entirely through a documented Windows API. No sketchy stuff, no kernel exploits. The only reason it needs Administrator is because that's what Windows requires to interact with another process.\n\n---\n\n## Download\n\nPre-built binaries are on the [Releases](..\u002F..\u002Freleases\u002Flatest) page — no Rust or build tools needed.\n\n| Download | What's inside |\n|---|---|\n| `capture-bypass-setup-*.exe` | Windows installer (x64) — picks install path, shortcuts, optional startup entry |\n| `capture-bypass-*-portable-x64.zip` | Portable build for x64 PCs |\n| `capture-bypass-*-portable-arm64.zip` | Portable build for ARM64 (Snapdragon X, Surface) |\n\nThe installer adds a desktop shortcut, Start Menu entry, and optionally a **Launch at Windows startup** entry (UAC prompt will show on each login since the app needs admin rights).\n\nWant a portable layout or a custom build? See the [Build](#build) section.\n\n> **Note:** Windows Defender or other AV software may flag the payload DLLs because of the DLL injection technique. This is a false positive — see [DISCLAIMER.md](DISCLAIMER.md).\n\n---\n\n## How it works\n\nWindows exposes [`SetWindowDisplayAffinity`](https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fwindows\u002Fwin32\u002Fapi\u002Fwinuser\u002Fnf-winuser-setwindowdisplayaffinity), which lets a process mark its own windows as protected from screen capture. Protected windows show up as black\u002Fblank in OBS and screenshots.\n\nSince the API only lets a process touch *its own* windows, bypassing it means running code inside the target. This tool does that with **DLL injection**:\n\n1. `OpenProcess` — get a handle to the target with VM + thread access.\n2. `VirtualAllocEx` \u002F `WriteProcessMemory` — write the payload DLL path into the target's memory.\n3. `CreateRemoteThread(LoadLibraryA)` — spin up a thread in the target that loads the DLL.\n4. The DLL's `DllMain` calls `SetWindowDisplayAffinity(hwnd, WDA_NONE)` on every window that process owns.\n\n---\n\n## Project structure\n\n```\ncapture-bypass\u002F\n├── core\u002F                       Shared injection library (inject_dll, inject_dll_stealth, InjectError)\n├── cli\u002F                        CLI binary\n├── gui\u002F                        egui GUI\n├── payload_dll\u002F                One-shot payload DLL (strips once and exits)\n├── payload_dll_persistent\u002F     Persistent payload DLL (hooks SetWindowDisplayAffinity, re-strips every 500 ms)\n├── stress_tester\u002F              Stress-test utility with Fight Mode\n└── installer\u002F\n    └── capture-bypass.iss      Inno Setup 6 script\n```\n\n---\n\n## Requirements\n\n| Dependency | Notes |\n|---|---|\n| [Rust + Cargo](https:\u002F\u002Frustup.rs) | Stable toolchain, `x86_64-pc-windows-msvc` target |\n| Windows 10 2004+ | `WDA_EXCLUDEFROMCAPTURE` needs build 19041+ |\n| Administrator rights | `OpenProcess` on other processes requires it |\n\n---\n\n## Build\n\n### x64 (main)\n\n```powershell\ngit clone https:\u002F\u002Fgithub.com\u002FLondopy\u002Fcapture-bypass.git\ncd capture-bypass\n\n# Build everything — GUI, CLI, stress tester, both payload DLLs\ncargo build --release -p payload_dll -p payload_dll_persistent -p cli -p gui -p stress_tester\n```\n\n### x86 (optional — needed to inject into 32-bit processes)\n\nThe GUI auto-detects 32-bit targets (orange **32** badge) and uses the x86 binaries when they're present. Skip this if you don't need 32-bit support.\n\n```powershell\nrustup target add i686-pc-windows-msvc\ncargo build --release --target i686-pc-windows-msvc -p payload_dll -p payload_dll_persistent -p cli\n```\n\nx86 binaries land in `target\u002Fi686-pc-windows-msvc\u002Frelease\u002F`. The GUI picks them up automatically.\n\n### ARM64 (native build for Snapdragon X \u002F Surface)\n\n```powershell\nrustup target add aarch64-pc-windows-msvc\ncargo build --release --target aarch64-pc-windows-msvc -p payload_dll -p payload_dll_persistent -p cli -p gui -p stress_tester\n```\n\n---\n\n## Usage\n\n```powershell\ntarget\\release\\capture_bypass_gui.exe\n```\n\n1. The app lists all visible, titled windows with their PID, process icon, name, and live protection status (refreshed every 500 ms). Click any column header to sort. The **status bar** along the bottom shows the current app version, lifetime injection count, and a live tally of visible \u002F protected \u002F 32-bit windows.\n2. Use the **Filter** bar to search by process name, window title, or PID. The **🔴 \u002F 🟢 protected indicator** on the right side of the filter bar shows at a glance whether any protected windows are currently detected.\n3. Tick **Protected only** to hide unprotected windows.\n4. Click **Strip Protection** on any row, or **⚡ Strip All Protected** to clear everything at once.\n5. Toggle **Mode** between *One-shot* (strips once, fast) and *Persistent* (re-strips every 500 ms — for apps that keep re-applying protection). If an app re-applies after a one-shot, a popup offers to escalate to persistent automatically.\n6. Enable **🤖 Auto-inject** to run in the background — it scans for newly protected windows and strips them automatically, escalates to persistent mode if a process fights back, and skips anything in the exclusion list or with a *Skip* per-process rule. Works while minimised to tray.\n7. Enable **🚀 Start with Windows** to add a startup registry entry so the app launches at login.\n8. Click **📖 Help** to open the built-in docs (covers every feature in detail).\n9. Use **Watch mode** in the filter bar to monitor a specific process even before it becomes protected.\n10. The **tray icon** turns **red** when protected windows are detected and **blue** when none are present — a quick check without opening the app. Right-click → Open or Quit.\n\n### Settings\n\nOpen **⚙ Settings** in the header to access all configuration options:\n\n| Setting | What it does |\n|---|---|\n| **Silent startup** | Hides the main window on launch — the app starts directly in the system tray |\n| **Strip on launch** | Automatically strips all protected windows once the first scan completes at startup |\n| **Fast scan** | Increases scan frequency from ~500 ms to ~100 ms for faster detection (slight CPU trade-off) |\n| **Desktop notifications** | Windows balloon-tip notifications on injection events; multiple strips within 400 ms are grouped into one \"Stripped N windows\" toast |\n| **Global hotkey** | A keyboard shortcut (default Ctrl+Shift+B) that triggers Strip All Protected from anywhere, even when minimised |\n| **Discord Rich Presence** | Shows your capture-bypass activity in your Discord status |\n| **Export \u002F Import config** | Save your full settings to a `.toml` file or restore from a previous export — useful for backups or moving to a new machine |\n| **Injection log file** | Appends every strip attempt (timestamp, PID, process, result, mode) to a persistent log file |\n| **Per-process rules** | Override the global Mode for specific executables: *Always One-shot*, *Always Persistent*, or *Skip* (never inject) |\n| **Exclusion list** | Executables in this list are completely ignored by all injection operations — manual, auto-inject, and Strip All Protected |\n| **Windows Defender** | If Defender flags the payload DLLs as suspicious (false positive from DLL injection), the Settings panel shows the two `Add-MpPreference` PowerShell commands with a **📋 Copy commands** button — paste and run them in an Administrator PowerShell window |\n\nAll settings are saved automatically to `config.toml` alongside the executable.\n\n### Auto-update\n\nWhen a newer release is available, a **🆕 vX.Y.Z available** button appears in the header. Clicking it opens a confirmation dialog — no download starts until you confirm. After you click **Update now**, the installer downloads in the background (progress shown in the header). When finished, the installer runs silently and the app restarts automatically. No second click needed.\n\n### Browsers\n\nInjecting Chrome, Edge, Firefox, Brave, Opera, Vivaldi, or Thorium automatically covers all child processes too, since the window's renderer lives in a child process rather than the main browser PID.\n\n---\n\n## Testing\n\nUse the included **Stress Tester** to verify injection works. Launch it from the **🔨 Stress Test** button in the header, or directly:\n\n```powershell\ntarget\\release\\stress_tester.exe\n```\n\nThe stress tester marks itself as `WDA_EXCLUDEFROMCAPTURE` on launch and polls `GetWindowDisplayAffinity` every 100 ms to show live protection state. Use it to:\n\n- **Verify one-shot injection** — click *Strip Protection*; the badge should flip to OK.\n- **Stress-test persistent mode** — enable *Fight Mode* (adjustable 50–2000 ms re-apply rate) and inject the persistent DLL. The strip counter should keep climbing while the fight counter stays ahead.\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n---\n\n## License\n\n**Personal \u002F open-source use:** MIT — see [LICENSE](LICENSE).\n\n**Commercial use (companies, paid products, enterprise):** a separate license is required. Email **Londopy@protonmail.com** or see [LICENSE-COMMERCIAL.md](LICENSE-COMMERCIAL.md).\n\n## Disclaimer\n\nSee [DISCLAIMER.md](DISCLAIMER.md).\n","Capture Bypass 是一个用于绕过 Windows 10\u002F11 屏幕捕获保护的 DLL 注入工具。其核心功能是移除应用程序对屏幕录制和截图的限制，使得 OBS、Snipping Tool 等软件能够正常捕获这些应用窗口。该项目采用 Rust 语言编写，利用了公开的 Windows API 来实现功能，无需任何内核级别的操作，但运行时需要管理员权限。适用于多种场景，如流媒体直播、教程录制、会议屏幕共享等情况下，当遇到某些应用程序（如媒体播放器、游戏启动器）在录制或截图时显示为黑屏的问题时，可以使用此工具解决。",2,"2026-06-11 04:07:03","CREATED_QUERY"]