go语言免杀-garble混淆
题记
“愿先生心境,四季如春”
作者回答:剑来之所以最大宗旨,是“我们不要轻易对这个世界失望”,因为道理太简单不过了,我们每个人在现实生活当中,太容易对人对事,产生大大小小的失望。而“愿先生心境四季如春”这句话,以后在书中会被主角回答一句“愿学生心境如春”,我会有意去掉四季一词,因为四季如春,太难做到,但是当我们能够每次从失望,重新变成心怀希望,就是一次新年辞旧岁,心境再次入春。
自评:初识此句,陈平安即将入局书简湖,这是学生对先生的殷切期盼,祝先生能度过此难关。某天,我走在路上,脑中突然浮现这句话,我感受到了一种最美好的祝福。人这一生,是不断变化的一个过程,今天你的想法,明天就会变,甚至两极反转。一个人无法保证今天的标准适用明天的你,所以总有人说“想起一出儿是一出儿”,可见坚守本心是多么不容易的一件事,当初胸怀天下、慷慨激昂立志说要改变世界的少年,也许就会因为平平淡淡的工作而磨平棱角并自嘲说躺平了。人的想法一直在变化,想法的变化又带来情绪的变化,我们总是在伤心、难过、失落、开心、惊喜、委屈中循环往复,愿先生心境,四季如春,这是多么美好的祝福啊!我们不要伤心,不要难过,我们的心情,一直如春天一样,将会多么幸福。
安装高版本go
由于garble不支持低版本的go,要求版本大于1.20。所以要先把之前的go卸载掉,然后安装新版本的go。
go env我们可以看到GOROOT与GOPATH两部分。问过chatgpt后我们可以知道。
GOROOT是Go语言安装目录的路径,指向 Go 语言的安装位置。包含 Go 语言的标准库和工具链(如编译器、工具等)。通常在安装 Go 语言时自动设置,用户一般不需要手动修改。
GOPATH是Go语言工作区的路径,指向用户的工作目录。用于存放用户的 Go 语言项目和第三方库。
将这两个路径下的go文件删掉就好了。
安装新版本的go:
下载和解压go高版本: wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gztar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
编辑环境变量配置:vi ~/.bashrc
在后面加入: export PATH=$PATH:/usr/local/go/bin export GOPATH=$HOME/go
让配置文件立即生效:source ~/.bashrc
验证版本:go version |
garble混淆
安装garble,只需要一条命令:go install mvdan.cc/garble@latest
这里需要注意的是,go把garble下载到了GOPATH路径下的bin文件夹里,正常执行不了,需要把这个移动到/usr/local/go/bin下边,让环境变量能够读取到。
一切都完成后发现还需要安装下sys模块。
这里可参考我上篇文章。
一切准备就绪后,可以使用garble混淆go代码了。以下是参考命令。
混淆偏移: GOOS=windows GOARCH=386 garble -literals -tiny -seed=random build -ldflags="-s -w -H windowsgui" -o 333.exe 333.go 无黑框
GOOS=windows GOARCH=amd64 garble -literals -tiny -seed=random build -o app.exe main.go
去除路径:可以通过 -trimpath 参数来去除路径。 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 garble -seed=random build -ldflags "-s -w -H=windowsgui" -trimpath -o loader2_garble.exe
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 garble -tiny -literals build -ldflags "-s -w -H=windowsgui" -trimpath -o loader2_garble.exe
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 garble -literals build -ldflags "-s -w -H=windowsgui" -trimpath -o loader2_garble.exe
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 garble -tiny build -ldflags "-s -w -H=windowsgui" -trimpath -o loader2_garble.exe 其他编译: garble -tiny -literals -seed=random build -ldflags="-w -s -H windowsgui" -race go-sc.go |
garble(混淆库): -tiny 删除额外信息 -literals 混淆文字 -seed=random base64编码的随机种子 go: -w 去掉调试信息,不能gdb调试了 -s 去掉符号表 -H windowsgui 隐藏执行窗口,不占用 cmd 终端。(被查杀率高) -race 使数据允许竞争检测,编译时改变了生成后的文件特征,使得杀软无法检测,当然有一天也会失效的。 |
编译完成后我们可以看到,木马体积变得很大,变得大了小一半。
可直接过火绒上线,360过不了。
其他处理-这里不进行测试了,用的时候再说
upx压缩体积
马子太大的话可以使用这个压缩体积
项目地址:
https://github.com/upx/upx
upx.exe -9 xxx.exe
去特征
项目地址:
https://github.com/optiv/Mangle
可以使用去特征工具再进行一步特征去除:Mangle_1.2_windows_amd64.exe -I app-amd64.exe -M -O aaa.exe
参考文章
免杀fscan教程:https://mp.weixin.qq.com/s/k2uoGGODWZ_QxpBSTeqhwA
go语言学习过程报错处理:https://www.cnblogs.com/sunny11/p/18367820
免杀与 golang 实现:https://xz.aliyun.com/t/13581?time__1311=GqmxuDciit%3D05DK5YK0%3DeD%3Dwoxxjrk7GbD#toc-12