All Projects → burrowers → Garble

burrowers / Garble

Licence: bsd-3-clause
Obfuscate Go builds

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Garble

Tensorflow Windows Wheel
Tensorflow prebuilt binary for Windows
Stars: ✭ 3,428 (+455.59%)
Mutual labels:  build, binary
Gowatch
🚀 gowatch is a command line tool that builds and (re)starts your go project everytime you save a Go or template file.
Stars: ✭ 539 (-12.64%)
Mutual labels:  build
Platformio Atom Ide
PlatformIO IDE for Atom: The next generation integrated development environment for IoT
Stars: ✭ 475 (-23.01%)
Mutual labels:  build
Ultra Runner
🏃⛰ Ultra fast monorepo script runner and build tool
Stars: ✭ 496 (-19.61%)
Mutual labels:  build
Puma
🐯 Build utilities in pure Swift
Stars: ✭ 477 (-22.69%)
Mutual labels:  build
Android interviews
🚀Everything you need to know to find a android job. 算法 / 面试题 / Android 知识点 🔥🔥🔥 总结不易,你的 star 是我最大的动力!
Stars: ✭ 510 (-17.34%)
Mutual labels:  binary
Hdiffpatch
a C\C++ library and command-line tools for Diff & Patch between binary files or directories(folder); cross-platform; run fast; create small delta/differential; support large files and limit memory requires when diff & patch.
Stars: ✭ 459 (-25.61%)
Mutual labels:  binary
Publish Docker Github Action
A Github Action used to build and publish Docker images
Stars: ✭ 578 (-6.32%)
Mutual labels:  build
Nimble parsec
A simple and fast library for text-based parser combinators
Stars: ✭ 532 (-13.78%)
Mutual labels:  binary
Asynctasks.vim
🚀 Modern Task System for Project Building, Testing and Deploying !!
Stars: ✭ 495 (-19.77%)
Mutual labels:  build
Wpfhexeditorcontrol
Wpf Hexeditor is a powerful and fully customisable user control for editing file or stream as hexadecimal, decimal and binary. Can be used in Wpf or WinForm application
Stars: ✭ 484 (-21.56%)
Mutual labels:  binary
Iguana
universal serialization engine
Stars: ✭ 481 (-22.04%)
Mutual labels:  binary
Dark Mode
Control the macOS dark mode from the command-line
Stars: ✭ 518 (-16.05%)
Mutual labels:  binary
Deta parser
快速中文分词分析word segmentation
Stars: ✭ 476 (-22.85%)
Mutual labels:  binary
Lazy importer
library for importing functions from dlls in a hidden, reverse engineer unfriendly way
Stars: ✭ 544 (-11.83%)
Mutual labels:  obfuscation
Gaia
Build powerful pipelines in any programming language.
Stars: ✭ 4,534 (+634.85%)
Mutual labels:  build
Msbuild
The Microsoft Build Engine (MSBuild) is the build platform for .NET and Visual Studio.
Stars: ✭ 4,643 (+652.51%)
Mutual labels:  build
Buildout
Buildout is a deployment automation tool written in and extended with Python
Stars: ✭ 510 (-17.34%)
Mutual labels:  build
Build
A Kubernetes-native Build resource.
Stars: ✭ 581 (-5.83%)
Mutual labels:  build
Angr
A powerful and user-friendly binary analysis platform!
Stars: ✭ 5,542 (+798.22%)
Mutual labels:  binary

garble

GO111MODULE=on go get mvdan.cc/garble

Obfuscate Go code by wrapping the Go toolchain. Requires Go 1.16 or later.

garble build [build flags] [packages]

See garble -h for up to date usage information.

Purpose

Produce a binary that works as well as a regular build, but that has as little information about the original source code as possible.

The tool is designed to be:

  • Coupled with cmd/go, to support modules and build caching
  • Deterministic and reproducible, given the same initial source code
  • Reversible given the original source, to deobfuscate panic stack traces

Mechanism

The tool wraps calls to the Go compiler and linker to transform the Go build, in order to:

  • Replace as many useful identifiers as possible with short base64 hashes
  • Replace package paths with short base64 hashes
  • Remove all build and module information
  • Strip filenames and shuffle position information
  • Strip debugging information and symbol tables
  • Obfuscate literals, if the -literals flag is given
  • Remove extra information if the -tiny flag is given

Options

By default, the tool obfuscates the packages under the current module. If not running in module mode, then only the main package is obfuscated. To specify what packages to obfuscate, set GOPRIVATE, documented at go help private.

Note that commands like garble build will use the go version found in your $PATH. To use different versions of Go, you can install them and set up $PATH with them. For example, for Go 1.16.1:

$ go get golang.org/dl/go1.16.1
$ go1.16.1 download
$ PATH=$(go1.16.1 env GOROOT)/bin:${PATH} garble build

You can also declare a function to make multiple uses simpler:

$ withgo() {
	local gocmd=go${1}
	shift

	PATH=$(${gocmd} env GOROOT)/bin:${PATH} "[email protected]"
}
$ withgo 1.16.1 garble build

Caveats

Most of these can improve with time and effort. The purpose of this section is to document the current shortcomings of this tool.

  • Exported methods are never obfuscated at the moment, since they could be required by interfaces and reflection. This area is a work in progress.

  • Go plugins are not currently supported; see #87.

  • There are cases where garble is a little too agressive with obfuscation, this may lead to identifiers getting obfuscated which are needed for reflection, e.g. to parse JSON into a struct; see #162. To work around this you can pass a hint to garble, that an type is used for reflection via passing it to reflect.TypeOf or reflect.ValueOf in the same file:

     // this is used for parsing json
     type Message struct {
     	Command string
     	Args    string
     }
    
     // never obfuscate the Message type
     var _ = reflect.TypeOf(Message{})
    

Tiny Mode

When the -tiny flag is passed, extra information is stripped from the resulting Go binary. This includes line numbers, filenames, and code in the runtime that prints panics, fatal errors, and trace/debug info. All in all this can make binaries 2-5% smaller in our testing.

Note: if -tiny is passed, no panics, fatal errors will ever be printed, but they can still be handled internally with recover as normal. In addition, the GODEBUG environmental variable will be ignored.

Contributing

We actively seek new contributors, if you would like to contribute to garble use the CONTRIBUTING.md as a starting point.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].