{"id":49355026,"url":"https://github.com/dvurechensky/reverseproxydll","last_synced_at":"2026-04-27T13:01:56.777Z","repository":{"id":350436207,"uuid":"1205968731","full_name":"Dvurechensky/ReverseProxyDLL","owner":"Dvurechensky","description":"Generate reverse-aware proxy DLL scaffolds for legacy x86 Windows binaries from export dumps and decompiler output.","archived":false,"fork":false,"pushed_at":"2026-04-24T03:51:06.000Z","size":258,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-24T05:33:31.673Z","etag":null,"topics":["abi","binary-analysis","compatibility","decompilation","dll","dll-proxy","dvurechensky","dvurechenskypro","game-modding-tool","ghidra","legacy-code","msvc","pe-format","proxy-dll","reverse-engineering","vs2005","win32","windows","x86"],"latest_commit_sha":null,"homepage":"https://dvurechensky.pro/","language":"Python","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/Dvurechensky.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","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-04-09T12:59:40.000Z","updated_at":"2026-04-24T03:51:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Dvurechensky/ReverseProxyDLL","commit_stats":null,"previous_names":["dvurechensky/reverseproxydll"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Dvurechensky/ReverseProxyDLL","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dvurechensky%2FReverseProxyDLL","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dvurechensky%2FReverseProxyDLL/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dvurechensky%2FReverseProxyDLL/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dvurechensky%2FReverseProxyDLL/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dvurechensky","download_url":"https://codeload.github.com/Dvurechensky/ReverseProxyDLL/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dvurechensky%2FReverseProxyDLL/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32337274,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T23:26:28.701Z","status":"online","status_checked_at":"2026-04-27T02:00:06.769Z","response_time":128,"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":["abi","binary-analysis","compatibility","decompilation","dll","dll-proxy","dvurechensky","dvurechenskypro","game-modding-tool","ghidra","legacy-code","msvc","pe-format","proxy-dll","reverse-engineering","vs2005","win32","windows","x86"],"created_at":"2026-04-27T13:01:51.936Z","updated_at":"2026-04-27T13:01:56.763Z","avatar_url":"https://github.com/Dvurechensky.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\" style=\"margin: 20px 0; padding: 10px; background: #1c1917; border-radius: 10px;\"\u003e\n  \u003cstrong\u003e🌐 Language: \u003c/strong\u003e\n  \n  \u003ca href=\"./README.ru.md\" style=\"color: #F5F752; margin: 0 10px;\"\u003e\n    🇷🇺 Russian\n  \u003c/a\u003e\n  | \n  \u003cspan style=\"color: #0891b2; margin: 0 10px;\"\u003e\n    ✅ 🇺🇸 English (current)\n  \u003c/span\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg src=\"https://github.com/7oSkaaa/7oSkaaa/blob/main/Images/about_me.gif?raw=true\" width=\"100px\"\u003e\n  \u003c/picture\u003e\n  \u003ch2\u003e💻 ReverseProxyDLL\u003c/span\u003e\u003c/h2\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://shields.dvurechensky.pro/badge/status-active-brightgreen\" /\u003e\n  \u003cimg src=\"https://shields.dvurechensky.pro/badge/platform-windows%20x86-blue\" /\u003e\n  \u003cimg src=\"https://shields.dvurechensky.pro/badge/focus-legacy%20reverse%20proxy%20dll-purple\" /\u003e\n  \u003cimg src=\"https://shields.dvurechensky.pro/badge/toolchain-vc%2B%2B%202003%20first-orange\" /\u003e\n\u003c/p\u003e\n\n\u003e Generate reverse-aware proxy DLL scaffolds for legacy x86 Windows binaries from export dumps and decompiler output.\n\n---\n\n- [Startup](docs/STARTUP.md)\n\n---\n\n- [Why I built this](#why-i-built-this)\n- [What this project does](#what-this-project-does)\n- [What makes it different from ordinary DLL proxy generators](#what-makes-it-different-from-ordinary-dll-proxy-generators)\n- [Current workflow](#current-workflow)\n- [Toolchain / target scope](#toolchain--target-scope)\n- [Core tools](#core-tools)\n  - [`generate_overrides_from_ghidra_dump.py`](#generate_overrides_from_ghidra_dumppy)\n  - [`reverse_dll_project_generator.py`](#reverse_dll_project_generatorpy)\n- [Example workflow](#example-workflow)\n- [What this project is **not**](#what-this-project-is-not)\n- [Good fit for](#good-fit-for)\n- [Status](#status)\n- [Roadmap](#roadmap)\n\n---\n\n## Why I built this\n\nI started this project while working on old Windows x86 binaries that were never meant to be pleasant to reconstruct.\n\nThe same problem kept repeating:\n\n- export tables are **not enough**\n- decompiler output is **not enough**\n- writing a compatible proxy DLL **by hand** is slow and repetitive\n- trying to fully reconstruct the original source too early is usually a dead end\n\nSo instead of rebuilding the same glue code every time, I built a workflow that gives me a **working proxy DLL scaffold first** — and only then I refine ABI, calling conventions, signatures, and real logic.\n\nThat was the exact problem I wanted to solve.\n\n---\n\n## What this project does\n\nReverseProxyDLL helps generate a **buildable compatibility scaffold** for an existing legacy x86 Windows DLL.\n\nIt can generate a proxy project that:\n\n- loads the original DLL at runtime\n- resolves exports with `GetProcAddress`\n- forwards compatible calls\n- keeps ordinals and export layout under control\n- supports runtime logging and tracing\n- gives me a structured base for reverse reconstruction\n\nThis lets me stop wasting time on repetitive boilerplate and focus on the actual `reverse engineering` work.\n\n---\n\n## What makes it different from ordinary DLL proxy generators\n\nMost DLL proxy generators only do this:\n\n- read export table\n- generate wrappers\n- forward calls\n\nThat is useful — but for real legacy reverse engineering, it is usually not enough.\n\nThis project is designed around a more practical workflow:\n\n- **export-aware**\n- **ABI-aware**\n- **reverse-oriented**\n- **manual-override friendly**\n\nIt understands that not all exports are the same.\n\nFor example, it can treat exports as:\n\n- regular C exports\n- C++ scoped / mangled exports\n- data exports\n- CRT / runtime forward exports\n\nThat distinction matters a lot when dealing with old x86 Windows DLLs.\n\n---\n\n## Current workflow\n\nTypical workflow looks like this:\n\n1. Dump exports from the original DLL\n2. Inspect / decompile functions in Ghidra\n3. Generate overrides / signatures\n4. Generate proxy scaffold\n5. Build replacement DLL\n6. Launch target application\n7. Refine ABI and logic incrementally\n\nThat means I no longer start from zero every time.\n\nI start from a **working 80–90% scaffold** and iterate from there.\n\n---\n\n## Toolchain / target scope\n\nThis project is **legacy-first by design**.\n\nIt was originally built around:\n\n- **Windows x86**\n- **older native DLLs**\n- **Visual C++ 2003 / VC7.1 style compatibility**\n- reverse workflows where ABI correctness matters more than modern build convenience\n\nThe generated scaffold is intentionally kept simple and low-level, so parts of it can also be adapted to newer MSVC environments.\n\nBut to be precise:\n\n\u003e this project is currently aimed first at **legacy x86 Windows DLL reconstruction and proxy compatibility work**.\n\nIf it also works cleanly for a newer target — great.  \nBut the primary design goal is old-school Windows binary compatibility.\n\n---\n\n## Core tools\n\n### [`generate_overrides_from_ghidra_dump.py`](src/generate_overrides_from_ghidra_dump.py)\n\nParses Ghidra-style decompiler output and generates structured `overrides.json` metadata.\n\nUseful for:\n\n- extracting signatures\n- normalizing pseudo-types\n- detecting calling conventions\n- generating override-ready function definitions\n\n### [`reverse_dll_project_generator.py`](src/reverse_dll_project_generator.py)\n\nGenerates a reverse-aware proxy DLL scaffold from export metadata and optional overrides.\n\nUseful for:\n\n- proxy DLL generation\n- export wrapper scaffolding\n- DEF/export layout control\n- legacy DLL replacement workflows\n\n---\n\n## Example workflow\n\nA typical run looks like this:\n\n```bash\npython src/generate_overrides_from_ghidra_dump.py functions_dump.c overrides.generated.json\npython src/reverse_dll_project_generator.py exports.md -o generated_proxy --dll-name dacom --original-dll dacom_addon.dll --overrides overrides.generated.json\n```\n\nFor full setup and build steps, see [Startup](docs/STARTUP.md).\n\n---\n\n## What this project is **not**\n\nThis tool does **not** magically reconstruct the full original source code.\n\nIt does **not** guarantee that every signature is automatically correct.\n\nIt does **not** replace actual reverse engineering.\n\nWhat it does is something more practical:\n\n\u003e it gives you a fast, structured, buildable starting point for binary-compatible reconstruction.\n\n---\n\n## Good fit for\n\n- reverse engineering old Windows x86 DLLs\n- building compatibility wrappers\n- legacy game / tool reconstruction\n- ABI investigation\n- DLL replacement experiments\n- runtime tracing and controlled migration away from original binaries\n\n---\n\n## Status\n\nThis project is actively evolving around real-world legacy DLL reconstruction work.\n\nThe main goal is simple:\n\n\u003e reduce the time between “I have a binary” and “I have a working proxy-compatible scaffold”.\n\n---\n\n## Roadmap\n\n- better override generation\n- cleaner C++ export handling\n- safer type inference\n- improved DEF generation\n- better legacy toolchain support\n- tighter Ghidra-assisted workflows\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdvurechensky%2Freverseproxydll","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdvurechensky%2Freverseproxydll","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdvurechensky%2Freverseproxydll/lists"}