{"id":49930873,"url":"https://github.com/londopy/capture-bypass","last_synced_at":"2026-05-20T06:01:41.727Z","repository":{"id":358181421,"uuid":"1238337118","full_name":"Londopy/capture-bypass","owner":"Londopy","description":"DLL injection tool to bypass screen-capture protection on Windows 10/11","archived":false,"fork":false,"pushed_at":"2026-05-18T04:16:33.000Z","size":61779,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-18T04:58:45.697Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Londopy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-14T03:08:56.000Z","updated_at":"2026-05-18T04:16:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Londopy/capture-bypass","commit_stats":null,"previous_names":["londopy/capture-bypass"],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/Londopy/capture-bypass","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Londopy%2Fcapture-bypass","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Londopy%2Fcapture-bypass/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Londopy%2Fcapture-bypass/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Londopy%2Fcapture-bypass/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Londopy","download_url":"https://codeload.github.com/Londopy/capture-bypass/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Londopy%2Fcapture-bypass/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33203112,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T09:27:30.708Z","status":"online","status_checked_at":"2026-05-19T02:00:06.763Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-17T03:30:00.370Z","updated_at":"2026-05-19T05:01:21.132Z","avatar_url":"https://github.com/Londopy.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Capture Bypass\n\nA Windows utility that removes `WDA_EXCLUDEFROMCAPTURE` display-affinity protection from application windows, allowing them to be recorded normally by OBS, the Snipping Tool, and any other screen-capture software.\n\n\u003e **Legal notice:** Read [DISCLAIMER.md](DISCLAIMER.md) before use. Only use this tool on windows and processes you own or have explicit permission to capture.\n\n![Relese](https://img.shields.io/github/v/release/Londopy/capture-bypass) \n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://github.com/Londopy/HideDesktopApps/blob/main/LICENSE)\n![Files](https://img.shields.io/github/directory-file-count/Londopy/capture-bypass) \n![Issues](https://img.shields.io/github/issues/Londopy/capture-bypass) \n![Size](https://img.shields.io/github/languages/code-size/Londopy/capture-bypass) \n\n---\n\n## Download\n\nPre-built releases are on the [Releases](../../releases/latest) page — no Rust or build tools required.\n\n| Download | What's inside | Best for |\n|---|---|---|\n| `capture-bypass-setup-*.exe` | Windows installer with prompts for shortcuts, startup, and install path | Most users |\n| `capture-bypass-gui-*.zip` | Portable zip — `capture_bypass_gui.exe` + DLLs, just unzip and run | No-install preference |\n| `capture-bypass-python-*.zip` | `app.py` + all binaries pre-arranged | Python frontend users |\n\nThe installer lets you optionally add a desktop shortcut, Start Menu entry, and a **Launch at Windows startup** entry (UAC prompt will appear at each login since the app requires Administrator rights).\n\n\u003e **Note:** Windows Defender or other AV software may flag the payload DLLs due to 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://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setwindowdisplayaffinity) which lets a process mark its own windows as protected from capture. Protected windows appear black/blank in screenshots and screen recordings.\n\nBecause the API only allows a process to modify *its own* windows, bypassing it requires running code inside the target process. This tool does that via classic **LoadLibrary DLL injection**:\n\n1. `OpenProcess` — open a handle to the target with VM + thread rights.\n2. `VirtualAllocEx` / `WriteProcessMemory` — write the payload DLL path into the target's address space.\n3. `CreateRemoteThread(LoadLibraryA)` — start a thread inside the target that loads the DLL.\n4. The DLL's `DllMain` spawns a worker thread that calls `SetWindowDisplayAffinity(hwnd, WDA_NONE)` on every window owned by that process, clearing the protection flag.\n\n---\n\n## Project structure\n\n```\ncapture-bypass/\n├── core/                       Shared Rust library — inject_dll()\n├── cli/                        Rust CLI binary — called by the Python frontend\n├── gui/                        Rust/egui GUI frontend (feature-parity with app.py)\n├── payload_dll/                One-shot payload DLL (strips once and exits)\n├── payload_dll_persistent/     Persistent payload DLL (loops every 500 ms)\n├── stress_tester/              Rust stress-test window (port of test_protection.py)\n├── installer/\n│   └── capture-bypass.iss      Inno Setup installer script\n├── frontend/\n│   └── app.py                  Python/customtkinter GUI frontend\n└── test_protection.py          Python stress-test window (original)\n```\n\n---\n\n## Requirements\n\n| Dependency | Notes |\n|---|---|\n| [Rust + Cargo](https://rustup.rs) | Stable toolchain, `x86_64-pc-windows-msvc` target |\n| Python 3.10+ | For the frontend |\n| [customtkinter](https://github.com/TomSchimansky/CustomTkinter) | `pip install customtkinter` |\n| [pystray](https://github.com/moses-palmer/pystray) + [Pillow](https://python-pillow.org) | `pip install pystray pillow` (system tray support) |\n| Windows 10 2004+ | `WDA_EXCLUDEFROMCAPTURE` requires build 19041+ |\n| Administrator privileges | Required by `OpenProcess` on other processes |\n\n---\n\n## Build\n\n### x64 (required)\n\n```powershell\n# Clone the repo\ngit clone https://github.com/Londopy/capture-bypass.git\ncd capture-bypass\n\n# Build all Rust crates for 64-bit (GUI, CLI, stress tester, and both payload DLLs)\ncargo build --release -p payload_dll -p payload_dll_persistent -p cli -p gui -p stress_tester\n\n# Install Python dependencies (only needed for the Python frontend)\npip install customtkinter pystray pillow\n```\n\n### x86 (optional — needed to inject into 32-bit processes)\n\nThe frontend auto-detects 32-bit target processes (shown with an orange **32** badge) and\nroutes injection through the x86 binaries when they are present. If you skip this step,\n32-bit targets will fail gracefully with a status-bar error message.\n\n```powershell\n# Add the 32-bit Windows MSVC target\nrustup target add i686-pc-windows-msvc\n\n# Build all Rust crates for 32-bit\ncargo build --release --target i686-pc-windows-msvc -p payload_dll -p payload_dll_persistent -p cli\n```\n\nThe x86 binaries land in `target/i686-pc-windows-msvc/release/`. The frontend\npicks them up automatically — no configuration needed.\n\n---\n\n## Usage\n\n```powershell\n# Python frontend\npython frontend/app.py\n\n# Rust GUI (no Python required)\ntarget\\release\\capture_bypass_gui.exe\n```\n\n1. The app lists all visible, titled windows with their PID, process name, and live protection status.\n2. Use the **Filter** bar to search by process name or window title.\n3. Tick **Protected only** to hide unprotected windows.\n4. Click **Strip Protection** on any row, or **⚡ Strip All Protected** to batch-clear everything at once.\n5. Toggle **Mode** between *One-shot* (strips once) and *Persistent* (re-strips every 500 ms — for apps that fight back).\n6. Enable **🤖 Auto-inject** to have the app silently strip any newly protected window in the background; close to tray so it keeps running.\n7. Enable **🚀 Start with Windows** to add a startup registry entry so the app launches automatically at login.\n8. Click **📖 Help** in the header to open the built-in wiki — covers injection modes, browser handling, 32-bit support, troubleshooting, and more.\n\nThe `cli.exe` and `payload_dll*.dll` binaries must be present in `target/release/` (and optionally `target/i686-pc-windows-msvc/release/`) relative to the repo root.\n\n\u003e **Built-in docs:** click **📖 Help** in the app header for a full wiki covering injection modes, browser handling, 32-bit support, and troubleshooting — no browser needed.\n\n### Browsers\n\nInjecting Chrome, Edge, Firefox, Brave, Opera, Vivaldi, or Thorium automatically enumerates\nand injects all child processes, ensuring renderer processes that own the DRM video windows\nare covered.\n\n---\n\n## Testing\n\nTwo stress-test windows are available — pick whichever suits your setup:\n\n| Option | How to run | Requires |\n|---|---|---|\n| Rust (recommended) | `target\\release\\stress_tester.exe` | Just build the crate |\n| Python (original) | `python test_protection.py` | Python 3.10+ |\n\nBoth are functionally identical. The Rust binary is included in the `capture-bypass-gui-*.zip` release bundle, so you can test without any build step.\n\n```powershell\n# Build and run the Rust stress tester\ncargo build --release -p stress_tester\ntarget\\release\\stress_tester.exe\n\n# Or run the Python original\npython test_protection.py\n```\n\nThe window marks itself as `WDA_EXCLUDEFROMCAPTURE` on launch and polls `GetWindowDisplayAffinity`\nevery 100 ms to show the live state. Use it to:\n\n- **Verify one-shot injection** — click *Strip Protection* in the main app; the window should flip green.\n- **Stress-test persistent mode** — enable *Fight Mode* in the test window (adjustable 50–2000 ms re-apply rate) and inject the persistent DLL. The strip counter should climb while the fight counter stays ahead — until persistent mode catches up.\n\n---\n\n## Frontends\n\ncapture-bypass ships two frontends. Both use the same injection core.\nPick whichever suits your workflow.\n\n| Frontend | Language | How to run | Notes |\n|---|---|---|---|\n| Native GUI | Rust / egui | `target/release/capture_bypass_gui.exe` | No dependencies, single .exe |\n| Python GUI | Python / customtkinter | `python frontend/app.py` | Requires Python 3.10+ and pip deps |\n\nBoth frontends have feature-parity: window table with live protection badges, filter bar, one-shot / persistent mode toggle, batch strip, auto-inject, system tray, launch-at-startup toggle, and built-in help.\n\n### Build the Rust GUI\n\n```powershell\ncargo build --release -p gui\n# Produces: target/release/capture_bypass_gui.exe\n# The payload DLLs must be in the same directory — build them first:\ncargo build --release -p payload_dll -p payload_dll_persistent\n```\n\n---\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n## Disclaimer\n\nSee [DISCLAIMER.md](DISCLAIMER.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flondopy%2Fcapture-bypass","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flondopy%2Fcapture-bypass","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flondopy%2Fcapture-bypass/lists"}