This release drops support for Go 1.20, continues support for Go 1.21, and adds initial support for the upcoming Go 1.22.
@lu4p and @mvdan improved the code using SSA to detect which types are used with reflection,
which should fix a number of errors such as cannot use T1 as T2
or cannot convert T1 to T2
.
See: #685, #763, #782, #785, #807.
@pagran added experimental support for control flow obfuscation, which should provide stronger obfuscation of function bodies when enabled. See the documentation at docs/CONTROLFLOW.md. See #462.
A number of bugfixes are also included:
This bugfix release continues support for Go 1.20 and the upcoming 1.21, and features:
go-spew
- #765This release drops support for Go 1.19, continues support for Go 1.20, and adds initial support for the upcoming Go 1.21.
@lu4p rewrote the code to detect whether reflect
is used on each Go type,
which is used to decide which Go types should not be obfuscated to prevent breakage.
The old code analyzed syntax trees with type information, which is cheap but clumsy.
The new code uses SSA, which adds a bit of CPU cost to builds, but allows for a
more powerful analysis that is less likely to break on edge cases.
While this change does slow down builds slightly, we will start using SSA for more
features in the near term, such as control flow obfuscation. See #732.
@pagran improved the patching of Go's linker to also obfuscate funcInfo.entryoff, making it harder to relate a function's metadata with its body in the binary. See #641.
@mvdan rewrote garble's caching to be more robust, avoiding errors such as
"cannot load garble export file". The new caching system is entirely separate
from Go's GOCACHE
, being placed in GARBLE_CACHE
, which defaults to a directory
such as ~/.cache/garble
. See #708.
@DominicBreuker taught -literals
to support obfuscating large string literals
by using the "simple" obfuscator on them, as it runs in linear time. See #720.
@mvdan added support for garble run
, the obfuscated version of go run
,
to quickly test that a main program still works when obfuscated. See #661.
A number of bugfixes are also included:
sync/atomic
types are still aligned by the compiler - #686-seed=random
- #696git apply
if the system language isn't English - #698This bugfix release continues support for Go 1.19 and 1.20, and features:
GOARCH=ppc64
- #672reflect.Value
to fix davecgh/go-spew
- #676garble build
inside a VCS directory - #675This bugfix release continues support for Go 1.19 and 1.20, and features:
go:linkname
directives referencing methods - #656-literals
- #658This bugfix release continues support for Go 1.19 and the upcoming Go 1.20, and features:
math/bits
work again - #655This release continues support for Go 1.19 and the upcoming Go 1.20.
Noteworthy changes include:
pclntab
- #622-tiny
by 4% - #633-literals
by 20% - #637Note that the first two changes are done by patching and rebuilding Go's linker. While this adds complexity, it enables more link time obfuscation.
This release drops support for Go 1.18, continues support for Go 1.19, and adds initial support for the upcoming Go 1.20.
Noteworthy changes include:
GOGARBLE=*
is now the default to obfuscate all packages - #594GOPRIVATE
is no longer used, being deprecated in v0.5.0time
and syscall
reflect
is obfuscatedThis bugfix release continues support for Go 1.18 and 1.19 and features:
garble reverse
on packages using cgo or assembly - #555This bugfix release finishes support for Go 1.19 and features:
net
and runtime/debug
This release drops support for Go 1.17, continues support for Go 1.18, and adds initial support for the upcoming Go 1.19.
Noteworthy changes include:
-literals
more reliably - #481.go
- #539garble test
- #522This release adds support for Go 1.18 while continuing support for Go 1.17.x. Note that building generic code isn't supported just yet.
Noteworthy changes include:
-seed
- #449-ldflags
as per go help build
- #492This bugfix release features:
main
packages-literals
with GOGARBLE=*
-ldflags=-X
when -literals
is used-debugdir
runtime
packageThis release of Garble adds initial support for the upcoming Go 1.18, continues support for Go 1.17.x, and drops support for Go 1.16.x. Note that building generic code isn't supported just yet.
Two breaking changes are introduced:
GOPRIVATE
in favor of GOGARBLE
(see https://github.com/burrowers/garble/issues/276)garble reverse
now requires a main package argumentNoteworthy changes include:
reflect
usage even further-debug
flag to log details of the obfuscated buildruntime
package is built in a reproducible wayThis release of Garble adds support for Go 1.17.x while maintaining support for Go 1.16.x. A few other noteworthy changes are included:
-literals
reflect
usage with standard library APIsiota
with -literals
Known bugs:
GOPRIVATE=*
is not well supported yetThis release of Garble fixes a number of bugs and improves existing features, while maintaining support for Go 1.16.x. Notably:
GOCACHE
GOPRIVATE=*
are now supportedgo:linkname
are now obfuscatedgarble reverse
can now reverse field names and lone filenamesKnown bugs:
GOPRIVATE=*
is not well supported yetThis release of Garble drops support for Go 1.15.x, which is necessary for some of the enhancements below:
garble test
allows running Go tests built with obfuscationgarble reverse
allows de-obfuscating output like stack tracesGOPRIVATE=*
now works with packages like crypto/tls
and embed
garble build
can now be used with many main packages at once-literals
is more robust and now works on all of std
The README is also overhauled to be more helpful to first-time users.
Known bugs:
GOPRIVATE=*
is not well supported yetThis is the first release of Garble. It supports Go 1.15.x and 1.16.x.
It ships all the major features that have worked for the past year, including:
-tiny
-literals
Known bugs:
GOPRIVATE=*
is not well supported yetgarble test
is temporarily disabled, as it is currently broken