一款持续更新得go免杀工具 variant

variant

Golang Malware Framework

Description

本项目会不断添加各种免杀的技术,但是不适合直接不做任何修改的编译和使用,即使是有随机特征的编译

Docs:Install | variantUsage | variant

Quick:

go run .\demo\Base\main.go

Update

2025.2.7

    1. build:更新编译流程,简化代码

   // 新增编译控制参数 UseGarble
   // UseGarble 设置为 ture 即为使用 Garble 进行编译

   // 编译方法简化
   // 删除 GoCompile() 和 GarbleCompile(),统一使用 Compile()
   // UseGarble 设置为 true,即可使用 Garble 进行编译
   type CompileOpts struct {
       GoFileName  string // Go 文件名称
       ExeFileName string // Exe 文件名称
       CompilePath string // 编译路径
       HideConsole bool   // 编译隐藏控制台
       BuildMode   string // 构建模式, 推荐值:pie

       // Garble 专用参数
       UseGarble bool // Garble 编译
       GDebug    bool // 开启Debug日志
       GSeed     bool // 随机 Base64 编码的种子
       GLiterals bool // 对字符串和数字字面量进行混淆
       GTiny     bool // 最小化构建
   }

    1. loader:删除wdll依赖,统一使用 C1ph3rX13 | xwindows

    1. loader:修复 2025.1.26 更新中 RtlIpv4StringToAddressA无法调用的错误

    1. Encoder:优化SetKeyIV方法,可以判断传入函数签名来自动选择是否添加key or iv进行加密

   // func (p Payload) SetKeyIV(sign interface{}) (string, error) 
   // SetKeyIV() 方法最终调用的传入的加密函数后,会检查返回结果个数是否大于2个
   // SetKeyIV() 方法经过加密后返回的类型为 string
   // Pekomon 编码返回类型为 []string,需要使用专用方法 PokemonEncoder()

   // 调用函数并获取结果
       results := signVal.Call(params)

       if len(results) < 2 {
           return "", errors.New("sign function does not return expected result")
       }

       // 类型转换
       cipherText, ok := results[0].Interface().(string)
       if !ok {
           return "", errors.New("invalid ciphertext type")
       }

       if errValue, errOk := results[1].Interface().(error); errOk && errValue != nil {
           return "", fmt.Errorf("encryption failed: %w", errValue)
       }

       return cipherText, nil

    1. EncoderPokemonStrings 函数改名 PokemonEncoder,加密逻辑优化

    1. demo:本地加载、Pokenmon demo 更新

    1. xwindows:更新详情查阅 C1ph3rX13 | xwindows

2025.1.26

    1. loader:修复bugs,新增多个Enum类型加载方式

   func EnumChildWindowsX(shellcode []byte) error 

   func EnumerateLoadedModulesX(shellcode []byte) error 

   func EnumPageFilesWX(shellcode []byte) error 

   func EnumWindowsX(shellcode []byte) error 

   func EnumTimeFormatsAX(shellcode []byte) error 

   func EnumSystemLocalesAX(shellcode []byte) error 

   func EnumDesktopWindowsX(shellcode []byte) error

   func EnumThreadWindowsX(shellcode []byte) error

    1. loader:逐渐统一使用xwindows作为支持

    1. xwindows:更新详情查阅 C1ph3rX13 | xwindows

2025.1.23

    1. build:优化upx的使用逻辑

    1. build:优化编译参数的构建逻辑

    1. build:优化SigThief文件读取方式,改为流式读取

    1. network:链式调用优化

    1. alive模块更名为persistence(权限维持)

2025.1.3

    1. 新增gostrip模块

   // 添加PE新节
   func PEBoom(buff []byte, size int) []byte 

   // 消除Go的编译特征
   func GoStrip(in, out string)

    1. 更新rand模块

   // RandomLetters 随机生成指定长度的 a-z 或 A-Z 的字符串
   func RandomLetters(len int) string

   // LStrings 生成指定长度的字符串
   func LStrings(len int) string

   // RStrings 随机生成长度为 2-18 的字符串
   func RStrings() string

   // RNumbers 生成 1-n 之间的随机整数
   func RNumbers(n int) int

   // RNumbersString 生成长度为 n 的数字字符串
   func RNumbersString(n int) string

    1. 更新demo中的Base

2024.12.31

    1. build模块,重构编译方法和签名方法

   // GoCompile 使用GoCompiler进行编译
   func (c CompileOpts) GoCompile() error

   // GarbleCompile 使用GarbleCompiler进行编译
   func (c CompileOpts) GarbleCompile() error

   // SaveCertificate 将证书表保存到指定文件
   func (ct *CertThief) SaveCertificate() error

   // SignWithStolenCert 使用窃取的证书对源文件进行签名
   func (ct *CertThief) SignWithStolenCert() error

   // SignExecutable 使用目标文件的证书对源文件进行签名
   func (ct *CertThief) SignExecutable() error

    1. build模块,新增文件命名 / 格式化函数

   // RenameGoTrimSuffix 删除文件名 .go 后缀,重命名为 .exe
   func RenameGoTrimSuffix(name string) string

   // RandomGoFile 随机命名 Go 代码文件
   func RandomGoFile() string

   // RenameSignedPEName 命名签名后的PE文件
   func RenameSignedPEName(name string) string

    1. 完善 demo,详情查看 Usage | variant

2024.12.30

    1. 说明文档更新:安装和代码使用

2024.12.19

    1. hook,新增AMSIByPass(),进程选择powershell.exe即可

    1. crypto,新增中文加密Buddha()

    1. sandbox,新增时区判断IsBeijingTimezone()

    1. 新增inject注入模块,AddressOfEntryPointInject()CreatRemoteThreadInject()

    1. TODO:删除wdll模块,使用衍生库 C1ph3rX13 | xwindows

2024.10.18

    1. 更新SigTheif,简化代码逻辑,更换读取文件的方法

    1. 更新渲染模板 v6,更换调用逻辑

    1. demo更新适配 v6 渲染模板

2024.9.26

    1. 新增gores模块,支持自定义文件的资源信息和复制其他对象资源信息(todo:ICON随机Hash)

// 自定义资源信息,修改 variant/gores/render.go 中的 func NewResDate()
// 推荐使用下面 Extract() 方法直接复制指定对象的资源信息和文件
func NewResDate() ResDate {
    goRes := ResDate{
        ICOName:                           "icon.png",
        Name:                              "WPS Office",
        Version:                           "12.1.0.16399",
        Description:                       "WPS Office",
        MinimumOs:                         "win7",
        ExecutionLevel:                    "requireAdministrator",
        UIAccess:                          false,
        AutoElevate:                       true,
        DpiAwareness:                      "system",
        DisableTheming:                    false,
        DisableWindowFiltering:            false,
        HighResolutionScrollingAware:      false,
        UltraHighResolutionScrollingAware: false,
        LongPathAware:                     false,
        PrinterDriverIsolation:            false,
        GDIScaling:                        false,
        SegmentHeap:                       false,
        UseCommonControlsV6:               false,
        FixedFileVersion:                  "12.1.0.16399",
        FixedProductVersion:               "WPS Office",
        Comments:                          "",
        CompanyName:                       "",
        FileDescription:                   "WPS Office",
        FileVersion:                       "12.1.0.16399",
        InternalName:                      "",
        LegalCopyright:                    "Copyright©2024 Kingsoft Corporation. All rights reserved.",
        LegalTrademarks:                   "",
        OriginalFilename:                  "wps_host.exe",
        PrivateBuild:                      "",
        ProductName:                       "WPS Office",
        ProductVersion:                    "WPS Office",
        SpecialBuild:                      "",
    }

    return goRes
}

// 渲染输出 winres.json 文件
// 将 ICON 和 winres.json 放置在编译目录的 winres 文件夹中即可
winres := gores.ResTmpl{
        ResPath:   "gores/gores.tmpl",
        OutputDir: "output",
    }

    err := winres.ResRender()
    if err != nil {
        panic(err)
    }

    1. 更新gores编译方法,从build模块中分离,新增资源提取方法Extract()

    // 添加图标和文件信息
    winres := gores.GoWinRes{
        CompilePath: "output",          // 指定编译目录
        ExtractFile: "Code.exe",        // 指定提取资源文件的对象
        ExtractDir:  "",                // 指定提取资源文件后输出的路径
        PatchFile:   cOpts.ExeFileName, // 指定使用 Patch 添加资源文件的对象
    }

    // 提取 vscode 所有的资源文件
    err = winres.Extract()
    if err != nil {
        log.Fatal(err)
    }

    // 使用 Patch 添加资源文件到编译后的程序
    err = winres.HandleWinRes()
    if err != nil {
        log.Fatal(err)
    }

    1. 资源提取方法Extract()实现的效果

winres

2024.8.15

    1. 更新render模块,支持新增的cloader,模板渲染调用结构体优化

    1. 更新渲染模板v5,支持新增的cloader

    1. demo更新,适配其他模块的更新

    1. Hide Cmd隐藏执行窗口的函数移动到sandbox模块

    1. DLL渲染模板和调用方式更新

2024.8.14

    1. cloader模块新增 23 个CGO类型 loader

    1. 跟随编译需求更新initialize.bat,新增依赖检查

    1. xwindows模块文档完善,新增 20+ API (详情见:xwindows 仓库)

2024.8.13

    1. 新增cloader模块,使用CGO调用C,代码更简洁

2024.7.20

    1. enc模块改名encoder

    1. encoder模块新增降熵方法ReduceEntropy()、恢复方法ReverseEntropy()

    1. render模块TmplRender()方法更新,符合整体设计逻辑

func (tOpts TmplOpts) TmplRender() error {}

    1. wdll模块更新,添加更多API

2024.6.26

    1. hook模块重构,现支持etwpatchselfdelete

    1. dynamic模块重构,现支持获取任意URL资源 SHA256 的指定切片新增对AES和DES Key和IV生成位数限制

    1. network模块优化,所有的请求方式均支持代理(可选),优化客户端的仿真设置

2024.5.13

    1. 新增DLL编译:指定DllBase.tmpl模板,使用BuildMode: "c-shared"

    1. 新增DLL渲染模板:DllBase.tmpl

    1. 新增DLL编译demo,查看demoGoDLL文件夹

2024.4.1

    1. 新增计划任务隐藏

    • 修改 Index 为 0 隐藏:IndexToZero()

    • 修改/删除 SD 项:ChangeSD() & DeleteSD()

    • 删除注册表文件夹 SD 项:DeleteSD()

    • 删除注册表中的计划任务文件&文件夹:RegDeleteTaskDir()

    • 删除计划任务XML文件:DeleteTaskDir() & DeleteTaskFile()

RegTasks

2024.3.25

    1. 优化alive自动维权模块:WinTaskXML(), SetWinTask()

2024.3.21

    1. 新增alive自动维权模块,现支持注册表启动项,计划任务COM API

    1. 文档更新

2024.3.19

    1. 更新自删除,将hook.SelfDelete()置于loader,inject方法之前即可

selfdelete

    1. 新增hashdump功能

    1. 更新demo

2024.3.12

    1. 新增initialize.bat,自动配置项目依赖项,移除go.mod, go.sum

    1. 新增反沙箱:Beep,利用该方法达到Sleep的效果

    1. wdll模块同步更新

2024.2.28

    1. remote模块改名为network

    1. 新增多种加密:elliptic_curvemorsepokemonrot13rot47

    1. 模板更新V4 Base.tmpl:兼容全部渲染方式(参数加载暂时除外)

    1. 加载模块更新:ADsMemLoad

    1. remder模块同步更新

    1. enc模块新增:PokemonStringspokemon加密专用方法;修改其他加密的兼容性

2024.2.20

    1. 新增loaderipv4, macaddress, enumsystemlocales + Hell's Gate + Halo's Gate technique

    1. Dll模块重构调用方式,特征更新

    1. 新增hook模块,Hook函数检测ETW Patch权限检测/提权

2024.2.18

    1. 新增loaderEnumerateLoadedModulesLoad, EnumChildWindowsLoad, EnumPageFilesWLoad

    1. Dll模块根据loader同步更新

    1. 新增garble编译参数:-tiny

    1. 新增构建模式:-buildmode,详情执行go help buildmode查看

    1. 新增FileAnalyzer方法,计算文件的特征:entropy, md5, sha1, sha256, sha512

2024.2.7

    1. 新增garble(需安装)编译,支持-seed, -literals, -debug,但会导致编译的文件体积增大和熵值增加

    1. 重构编译模块,现在支持原生go编译, garble编译

    1. 调整编译的流程和日志输出逻辑

    1. 重构Upx模块,支持自定义Upx.exe的路径

    1. 重构Winres模块,现在使用HandleWinRes方法可以直接添加图标

    1. 预计新增Go编译器: llvm, tinygo – 实验性

    1. 新增install.bat,初始化工具

2024.2.6

    1. 新增两种远程加载的方式UsersCloud, file.io (web)

    1. 新增github.com/imroc/req/v3的请求客户端

    1. 优化远程加载模块的函数描述

    1. 简化远程模块上传加密文件的结构体

    1. 模板更新,兼容新的远程加载方式

2024.2.5

    1. 新增参数加载模块,可以自定义(随机)密钥

    1. 模板简化,兼容所有模块的渲染

    1. 渲染模块优化,兼容所有模块的调用

    1. 新增远程加载模块,远程加密数据的上传会在渲染阶段完成,上传(curl:已完成, web:开发中...)支持代理

    1. 新增动态数据模块可以和任意加载方式联动

    1. 新增上传加密Payload随机化

    1. 新增loader:earlybird

2024.2.4

    1. 新增动态获取解密数据的模块 – Dynamic: payload, key, iv

    1. 按照本地、远程、参数加载的方式重构,减少模板渲染的复杂度

    1. 新增分离加载模块

    1. 渲染模板优化

2024.1.30

    1. lzw压缩导致熵值上升到7.0+;测试fmt.Printf("Hello World")编译后熵值在6.0-6.1之间,压缩模块下次一定

    1. 远程加载:模块、模板、配置更新

    1. 重构加密模块,利用反射根据传入的方法签名判断加密

    1. 使用windows package重写了DLL调用模块,syscall&windows的总结

    1. 模板新增根据自定义导入对应库设置

    1. 新增多个多重加密/编码方法,Base32/62编码测试熵值比较低

2024.1.29

    1. 新增渲染判断,模板可根据结构体来渲染

    1. 更改为验证为沙箱之后程序正常退出

    1. 新增代码检查:检查通过再编译;初始化:go install golang.org/x/tools/cmd/goimports@latest

    1. 细化结构体:根据功能区分

    1. 新增压缩算法:lzw, zstd;熵值模块

    1. 新增动态方法:GetSelfSHA256Nth

    1. 优化代码逻辑

2024.1.27

    1. 模块化配置

    1. 模板渲染

    1. 编译控制

    1. UPX压缩:需要检查upx.exe是否正确放置在build文件夹,才能正确初始化

    1. 签名伪造

    1. 添加图标文件信息:初始化:go install github.com/tc-hib/go-winres@latest

    1. 模板更新

    1. 反沙箱模块

Thanks

https://github.com/Ne0nd0g/go-shellcode

https://github.com/safe6Sec/GolangBypassAV

https://github.com/afwu/GoBypass

https://github.com/piiperxyz/AniYa

https://github.com/wumansgy/goEncrypt

https://github.com/TideSec/GoBypassAV

https://github.com/Pizz33/GobypassAV-shellcode

https://github.com/timwhitez/Doge-Gabh

https://github.com/MrTuxx/OffensiveGolang

https://github.com/C1ph3rX13/variant

工具下载地址:

https://github.com/C1ph3rX13/variant

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容