fscan二开绕过与免杀实录:从认识结构到免杀化绕过数字某绒
前言
在日益严格的安全环境下,传统的木马样本很容易被静态分析、行为分析所识别。本文记录我对某 Go 编写的fscan安全工具进行二次开发,通过绕过特征、减小体积,从而实现较高程度的免杀。
很多人都想要自己的一个免杀化武器 但因为并不是开发或者安全开发出生 二开这种大型项目是特别困难 本人开发水平也极低 甚至完全不了解go语言 很多大佬对fscan的免杀化处理更多的是对项目进行重构 这里我不会牵扯到过多的开发知识 更多的是免杀技巧 所以新手也可以观看
下载项目
这里我用的是
https://github.com/shadow1ng/fscan的
git clone
https://github.com/shadow1ng/fscan
图中标记的地方是免杀的关键地方 基本做好这两个处理也就可以绕过大部分杀毒软件
除静态特征
首先去除静态特征 避免静态查杀 去除全项目下的"fscan"字样 fscan项目导入库含有大量的fscan项目 我们替换名称即可 修改成 module hacker
进入
go.mod文件
在module写上自定义的名字
如图所示 hacker变成是主项目 所有的就变成了hacker/xxxx 的形式 这样我们就去除了静态特征 此外在编辑器全局搜索fscan替换其他字符串
如图 箭头所指 参数分别为解析到的参数 命令行参数名 默认值 命令帮助输出
我们可以修改命令行参数名 让fscan运行的时候 参数不同 例如更改-h 原本-h的被我改成了ta
去除fscan中banner的信息 直接删掉即可 或者加入你想要的 尽可能避免危险字符串
在
i18n.go文件中是fscan帮助输出
我们可以对这部分进行修改实现更强的抗静态
过动态检测
接下来是绕过的关键
过动态的关键在于反沙箱和更换运行逻辑 对
main.go进行着重修改
可以参考我下面写的
func main() {
if len(
< 2 ||
!= "confirm" {
请以 confirm 模式启动程序:
confirm")
}//通过修改运行条件 默认无参数运行fscan会出现help 我们以固定一个参数才会正常启动 以此绕过沙箱的执行检测
// 注意这里是必要 因为前面的固定参数影响了fscan的命令解析 重写
"confirm" 去掉,否则
会误认为 confirm 是 -h
= append([]string{
//关键过沙箱 通过时间戳动态获得随机数 增加类似人机校验的操作 极大了加强了抗沙箱
rand.Seed(time.Now().UnixNano())
n1 :=
n2 :=
checktime()
enter your Verification")
%d ] + [ %d ] = ", n1, n2)
var num int
_, _ =
&num)
if num != n1+n2 {
}
check()
//随机睡眠时间 绕过部分沙箱的最大执行时间
sleeptime :=
time.Sleep(time.Duration(sleeptime)
*
var Info
_ =
_ =
defer
}
//这个函数非常好用 因为很多上传到云端的样本为了避免样本重名 会对样本进行改名 这时候我们检查当前运行的文件昵称是否被修改
func check() {
if
!= "
{
}
}
//通过是绕过沙箱的操作 免杀里经常出现的 可以加入自己的想法 不过其实这里抗沙箱强度已经够了 不必多写
func checktime() {
var kernel =
syscall.NewLazyDLL("Kernel32.dll")
GetTickCount :=
kernel.NewProc("GetTickCount")
r, _, _ :=
ms :=
* 1000 * 1000)
//
ms)
tm :=
*
if ms < tm {
}
}
编译与特征清洗:使用 garble 彻底打散 Go 二进制特征
为了提升免杀能力,我最终采用了 burrowers/garble 作为 Go 项目的构建器。它的作用不仅是 混淆变量名与函数符号,还能打乱静态结构、压缩调试信息、规避签名特征,非常适合用于生成更隐蔽的执行载荷。
garble 是什么?
garble 是一个透明的 go build 包装器,支持:
混淆符号名(函数、变量、结构体等)
去除调试信息(默认启用)
改写构建路径(默认启用 -trimpath)
随机化编译结果(每次构建输出不同)
支持构建 plugin、shared object、纯 PE 可执行文件
go install
mvdan.cc/garble@latest
安装后会在 $GOPATH/bin/garble 下生成可执行文件。
构建方式与 go build 类似,但会自动应用混淆和优化:
garble -literals -tiny build -o
payload.exe
main.go
说明:
-literals:混淆字符串/整数等字面量,绕过静态规则匹配
-tiny:进一步精简输出体积(剥离符号、缩减段表)
build:等效于 go build
这里已经完美的绕过了数字和某绒和defender 开发能力强的师傅可以对其他部分进行二开和重构
注意如果是数字的话 打入假签名效果会更好
https://www.freebuf.com/articles/web/429244.html】
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论