{"id":44707530,"url":"https://github.com/nick-jones/gost","last_synced_at":"2026-02-15T11:10:57.713Z","repository":{"id":75128160,"uuid":"268257124","full_name":"nick-jones/gost","owner":"nick-jones","description":"String extraction from Go compiled binaries","archived":false,"fork":false,"pushed_at":"2022-10-31T10:54:40.000Z","size":140,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-06-20T15:48:51.131Z","etag":null,"topics":["binary-analysis","go-binary","golang","golang-binaries","string","string-extraction","string-extractor"],"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/nick-jones.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-31T10:30:02.000Z","updated_at":"2023-06-08T22:31:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"c4236566-4fed-4307-badd-bd9c40d0e258","html_url":"https://github.com/nick-jones/gost","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nick-jones/gost","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nick-jones%2Fgost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nick-jones%2Fgost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nick-jones%2Fgost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nick-jones%2Fgost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nick-jones","download_url":"https://codeload.github.com/nick-jones/gost/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nick-jones%2Fgost/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29476300,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T10:25:47.032Z","status":"ssl_error","status_checked_at":"2026-02-15T10:25:01.815Z","response_time":118,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["binary-analysis","go-binary","golang","golang-binaries","string","string-extraction","string-extractor"],"created_at":"2026-02-15T11:10:57.273Z","updated_at":"2026-02-15T11:10:57.696Z","avatar_url":"https://github.com/nick-jones.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gost\n\nWIP experiments in extracting string constants from Go compiled binaries.\n\nAt the moment it has a number of limitations:\n- It only works with x86-64 ELF and Mach-O executables\n- Since this is heuristic driven, not all cases will be captured. In particular string comparisons are not well captured currently.\n- This relies on certain characteristics of how Go compiles binaries; these are liable to change between versions\n- Functions can get inlined, making some reference information a little imperfect\n\n## About\n\n_Why not use bin-utils/strings?_ Go handles strings a little differently to languages such as C in that \nit doesn't use NULL terminated strings. Instead, it carries the length of a given string, along with a pointer. Due to\nthat, `strings` doesn't perform well with Go binaries; it'll print long incoherent and joined up strings that aren't\neasily parsed.  \n\nGost uses a number of heuristics to extract strings from binaries; these are imperfect by nature, so be warned, results\nmay vary! For more information about how Go handles strings, see [docs/strings.md](docs/strings.md)\n\n## Installing\n\n```\nGO111MODULE=on go get github.com/nick-jones/gost\n```\n\n## Running\n\nSimply supply a path to a binary as an argument. Note that if the binary must have been compiled with symbols (which is\nthe default, but can be prevented).\n\nAs a quick measure we can run `gost` against itself and obtain strings referenced in `main.go`:\n\n```\n$ go build\n$ ./gost gost | rg 'main\\.go'\n123b852: \"gost\" → /Users/nicholas/Dev/gost/main.go:22 \n123c1f6: \"nulls\" → /Users/nicholas/Dev/gost/main.go:34 \n123ec66: \"template\" → /usr/local/Cellar/go/1.15.4/libexec/src/text/template/parse/lex.go:84 /Users/nicholas/Dev/gost/main.go:25 \n12409a8: \"string-table\" → /Users/nicholas/Dev/gost/main.go:30 /Users/nicholas/Dev/gost/main.go:86 \n12448af: \"failed to open file: %w\" → /Users/nicholas/Dev/gost/main.go:57 \n1245257: \"failed to parse flags: %w\" → /Users/nicholas/Dev/gost/main.go:63 \n124693a: \"failed to execute template: %w\" → /Users/nicholas/Dev/gost/main.go:75 \n1246dba: \"failed to parse format flag: %w\" → /Users/nicholas/Dev/gost/main.go:52 \n12473fb: \"invalid str-table flag value: %s\" → /Users/nicholas/Dev/gost/main.go:93 \n124796a: \"failed to search instructions: %w\" → /Users/nicholas/Dev/gost/main.go:69 \n124bdab: \"string candidates containing null characters will be included\" → /Users/nicholas/Dev/gost/main.go:35 \n124c066: \"template string for printing the results (format is text/template)\" → /Users/nicholas/Dev/gost/main.go:26 \n124c2a9: \"if symbols are missing, use values \\\"guess\\\" or \\\"ignore\\\" to enable more fuzzy matching\" → /Users/nicholas/Dev/gost/main.go:31 \n124c641: \"{{printf \\\"%x: %q\\\" .Addr .Value}} → {{range $i, $e := .Refs}}\\n{{- if le $i 5}}{{ printf \\\"%s:%d \\\" .File .Line }}{{end}}\\n{{- end}}\\n{{- if gt (len .Refs) 5}}... (truncated, {{len .Refs}} total){{- end -}}\\n\" → /Users/nicholas/Dev/gost/main.go:27\n```\n\n## Fuzzing\n\nFuzzing of this tool is catered for in a separate repository - [gost-fuzz](https://github.com/nick-jones/gost-fuzz)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnick-jones%2Fgost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnick-jones%2Fgost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnick-jones%2Fgost/lists"}