{"id":18745672,"url":"https://github.com/washi1337/awaitfuscator","last_synced_at":"2025-04-03T03:13:09.101Z","repository":{"id":218400479,"uuid":"746288696","full_name":"Washi1337/AwaitFuscator","owner":"Washi1337","description":"Transforms a .NET binary into a chain of meaningless-looking await expressions.","archived":false,"fork":false,"pushed_at":"2024-12-23T15:34:30.000Z","size":123,"stargazers_count":69,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-24T09:49:47.446Z","etag":null,"topics":["await-async","cil","dotnet","obfuscation"],"latest_commit_sha":null,"homepage":"https://blog.washi.dev/posts/awaitfuscator","language":"C#","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/Washi1337.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}},"created_at":"2024-01-21T16:22:37.000Z","updated_at":"2025-03-21T06:23:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"c16a6093-8e08-4bde-bffa-490809edf4b8","html_url":"https://github.com/Washi1337/AwaitFuscator","commit_stats":null,"previous_names":["washi1337/awaitfuscator"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Washi1337%2FAwaitFuscator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Washi1337%2FAwaitFuscator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Washi1337%2FAwaitFuscator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Washi1337%2FAwaitFuscator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Washi1337","download_url":"https://codeload.github.com/Washi1337/AwaitFuscator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246899641,"owners_count":20851894,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["await-async","cil","dotnet","obfuscation"],"created_at":"2024-11-07T16:19:07.351Z","updated_at":"2025-04-03T03:13:09.082Z","avatar_url":"https://github.com/Washi1337.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AwaitFuscator\n\nThis is the AwaitFuscator; a .NET binary-to-binary obfuscator that translates your code into long chains of `await` expressions:\n\n![](/assets/example.png)\n\nFor more details on how it works, check the [FAQ](#how-does-it-work) or read the [accompanied blog post](https://blog.washi.dev/posts/awaitfuscator).\n\n\n## How To Build\n\nThis project depends on a few other projects.\nMake sure you have all submodules cloned:\n\n```sh\n$ git clone --recursive https://github.com/Washi1337/AwaitFuscator.git\n```\n\nIf you accidentally didn't clone the submodules, you can go to your repository directory and run the following instead:\n\n```sh\n$ git submodule update --init\n```\n\nThen, just compile using your favourite IDE like Visual Studio or JetBrains Rider, or run the following:\n\n```sh\n$ dotnet build\n```\n\nThe binaries will then appear in `src/AwaitFuscator/bin`.\n\n\n## How To Use\n\nTo awaitfuscate a program, simply run Awaitfuscator with the path of the binary to obfuscate:\n\n```sh\n$ AwaitFuscator [path]\n```\n\nIf everything goes well (which is a big \"if\"), this will create a folder called `Obfuscated` in the parent directory of the input file containing the output.\n\nFor example:\n\n```sh\n$ AwaitFuscator /path/to/file.exe\n```\n\nwill produce a file at `/path/to/Obfuscated/file.exe`.\n\n## FAQ\n\n### How does it work?\n\nC# allows for custom awaiters to be defined on any type using custom `GetAwaiter` extension methods and custom awaiter types.\nThese awaiter types define a method called `GetResult` can contain any code you want.\n\nAwaitfuscator locates all \"awaitifiable\" methods in the input binary, and creates for each statement a new awaiter with the original statement's code moved into its `GetResult` method.\nThen, by defining custom `GetAwaiter` extension methods, it is possible to await the custom awaiters, and thus chain a bunch of awaiters together.\nThis effectively rewrites the entire method body as one long chain of awaits.\n\nFor more details, read the [accompanied blog post](https://blog.washi.dev/posts/awaitfuscator).\n\n\n### Is the code in the output binary really hidden?\n\nNo. \nThe original code is still more or less there, just slightly rewritten and scattered around the assembly in different places.\nAwaitfuscator just plays a bunch of tricks that confuses decompilers a lot.\n\nFor more details, read the [accompanied blog post](https://blog.washi.dev/posts/awaitfuscator).\n\n\n### Can I use it in my next product?\n\nYou could.\nNot sure if it is a good idea though.\n\n\n### Is it production-ready?\n\nProbably not.\n\n\n### Heeelp it...\n\n- ... crashes,\n- ... produces errors I don't understand,\n- ... corrupts my files,\n\nThese are very likely to happen as this is more of a proof of concept rather than a finalized product.\nNonetheless, [bug reports](https://github.com/Washi1337/AwaitFuscator/issues/new) are appreciated :).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwashi1337%2Fawaitfuscator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwashi1337%2Fawaitfuscator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwashi1337%2Fawaitfuscator/lists"}