{"id":19965910,"url":"https://github.com/stephen-fox/finley","last_synced_at":"2025-07-26T02:39:42.471Z","repository":{"id":64302219,"uuid":"245853133","full_name":"stephen-fox/finley","owner":"stephen-fox","description":"finley makes it easy to quickly decompile several .NET binaries concurrently without involving a GUI.","archived":false,"fork":false,"pushed_at":"2021-05-24T23:35:37.000Z","size":47,"stargazers_count":8,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-25T10:56:47.066Z","etag":null,"topics":["dotnet","ilspy","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"Go","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/stephen-fox.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-08T16:58:45.000Z","updated_at":"2024-04-23T08:36:36.000Z","dependencies_parsed_at":"2023-01-15T09:45:18.693Z","dependency_job_id":null,"html_url":"https://github.com/stephen-fox/finley","commit_stats":null,"previous_names":["stephen-fox/ilspycmdw"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephen-fox%2Ffinley","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephen-fox%2Ffinley/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephen-fox%2Ffinley/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stephen-fox%2Ffinley/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stephen-fox","download_url":"https://codeload.github.com/stephen-fox/finley/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252272944,"owners_count":21721831,"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":["dotnet","ilspy","reverse-engineering"],"created_at":"2024-11-13T02:32:13.318Z","updated_at":"2025-05-04T00:31:10.531Z","avatar_url":"https://github.com/stephen-fox.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# finley\nfinley makes it easy to quickly decompile several .NET binaries concurrently\nwithout involving a GUI.\n\nIt does this by extending the CLI implementation of ILSpy\n(https://github.com/icsharpcode/ILSpy). ILSply is an open source .NET\ndecompiler. It is normally invoked as a GUI application. However, its CLI\nimplementation ('ilspycmd') provides a better platform for automation.\n\n## Features\n\n- Recursive decompilation of .NET binaries in a given directory\n- Duplicate .NET binary avoidance\n- Configurable concurrent decompilation of .NET binaries\n\n## Use cases\nMy primary use case for this application is to decompile all of the .NET files\nin a given directory into a new directory whose structure mimics that of the\noriginal directory.\n\nI would like this to happen as quickly as possible too. That means the\napplication must support running multiple decompilers simultaneously. Lastly,\nI would like to avoid decompiling the same .NET files over and over. Some\ndevelopers (who shall not be named) like to include the same .NET files\nmultiple times in their work.\n\nAll of these things are headaches that a simple script could never solve. That\nis why finley exists :)\n\n## Requirements\nBefore using finley, you must install `ilspycmd`. This requires the .NET Core\nSDK. If you are a chocolatey user, you can install this by running:\n```\nchoco install dotnetcore-sdk -y\n```\n\nAfter installing .NET Core SDK, you can install `ilspycmd` by executing the\nfollowing command:\n```\ndotnet tool install -g ilspycmd --version 6.0.0.5559-preview2\n```\n\nNote: the version number of `ilspycmd` is explicitly provided. This is because,\nat the time of writing this post, the current non-preview version of `ilspycmd`\ndoes not support the shipping version of .NET Core.\n\n## Usage\nTypically, finley is used to decompile a directory containing .NET binaries:\n```\nfinley some-directory\n```\n\nIf you would like to recursively decompile all of the binaries in a given\ndirectory (i.e., include sub-directories), you can add the `-r` option:\n```\nfinley -r some-directory\n```\n\nFor additional options, run with the `-h` option. This will produce a list of\noptions and an explanation of their effects:\n```\n  -allow-duplicates\n    \tDecompile file even if its hash has already been encountered\n  -e string\n    \tComma separated list of file extensions to search for (default \".dll,.exe\")\n  -h\tDisplay this help page\n  -ilspy string\n    \tThe 'ilspycmd' binary to use (default \"ilspycmd\")\n  -no-ilspy-errors\n    \tExit if ILSpy fails to decompile a file\n  -num-workers int\n    \tNumber of .NET decompiler instances to run concurrently (default n)\n  -o string\n    \tThe output directory. Creates a new directory if not specified\n  -r\tScan recursively\n  -respect-file-case\n    \tRespect filenames' case when matching their extensions\n  -v\tDisplay log messages rather than a progress bar\n  -version\n    \tDisplay the version number and exit\n```\n\n## Building from source\nYou can use any of the following methods to build the application:\n\n- `go build cmd/finley/main.go` - Build the application\n- `build.sh` - A simple wrapper around 'go build' that saves build artifacts\nto `build/` and sets a version number in the compiled binary. This script\nexpects a version to be provided by setting an environment variable\nnamed `VERSION`\n- `buildwin.sh` - Build the application for Windows (since that seems like the\nmost common OS this tool would be used on)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephen-fox%2Ffinley","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstephen-fox%2Ffinley","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstephen-fox%2Ffinley/lists"}