variant

module
v0.0.0-...-c65d5b7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 7, 2025 License: MIT

README

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 // 最小化构建
    }
    
  2. loader:删除wdll依赖,统一使用 C1ph3rX13 | xwindows

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

  4. 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
    
  5. EncoderPokemonStrings 函数改名 PokemonEncoder,加密逻辑优化

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

  7. 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
    
  2. loader:逐渐统一使用xwindows作为支持

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

2025.1.23
  1. build:优化upx的使用逻辑
  2. build:优化编译参数的构建逻辑
  3. build:优化SigThief文件读取方式,改为流式读取
  4. network:链式调用优化
  5. alive模块更名为persistence(权限维持)
2025.1.3
  1. 新增gostrip模块

    // 添加PE新节
    func PEBoom(buff []byte, size int) []byte 
    
    // 消除Go的编译特征
    func GoStrip(in, out string)
    
  2. 更新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
    
  3. 更新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
    
  2. build模块,新增文件命名 / 格式化函数

    // RenameGoTrimSuffix 删除文件名 .go 后缀,重命名为 .exe
    func RenameGoTrimSuffix(name string) string
    
    // RandomGoFile 随机命名 Go 代码文件
    func RandomGoFile() string
    
    // RenameSignedPEName 命名签名后的PE文件
    func RenameSignedPEName(name string) string
    
  3. 完善 demo,详情查看 Usage | variant

2024.12.30
  1. 说明文档更新:安装和代码使用
2024.12.19
  1. hook,新增AMSIByPass(),进程选择powershell.exe即可
  2. crypto,新增中文加密Buddha()
  3. sandbox,新增时区判断IsBeijingTimezone()
  4. 新增inject注入模块,AddressOfEntryPointInject()CreatRemoteThreadInject()
  5. TODO:删除wdll模块,使用衍生库 C1ph3rX13 | xwindows
2024.10.18
  1. 更新SigTheif,简化代码逻辑,更换读取文件的方法
  2. 更新渲染模板 v6,更换调用逻辑
  3. 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,模板渲染调用结构体优化
  2. 更新渲染模板v5,支持新增的cloader
  3. demo更新,适配其他模块的更新
  4. Hide Cmd隐藏执行窗口的函数移动到sandbox模块
  5. DLL渲染模板和调用方式更新
2024.8.14
  1. cloader模块新增 23 个CGO类型 loader
  2. 跟随编译需求更新initialize.bat,新增依赖检查
  3. xwindows模块文档完善,新增 20+ API (详情见:xwindows 仓库)
2024.8.13
  1. 新增cloader模块,使用CGO调用C,代码更简洁
2024.7.20
  1. enc模块改名encoder
  2. encoder模块新增降熵方法ReduceEntropy()、恢复方法ReverseEntropy()
  3. render模块TmplRender()方法更新,符合整体设计逻辑
func (tOpts TmplOpts) TmplRender() error {}
  1. wdll模块更新,添加更多API
2024.6.26
  1. hook模块重构,现支持etwpatchselfdelete
  2. dynamic模块重构,现支持获取任意URL资源 SHA256 的指定切片新增对AES和DES Key和IV生成位数限制
  3. network模块优化,所有的请求方式均支持代理(可选),优化客户端的仿真设置
2024.5.13
  1. 新增DLL编译:指定DllBase.tmpl模板,使用BuildMode: "c-shared"
  2. 新增DLL渲染模板:DllBase.tmpl
  3. 新增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
  2. 文档更新
2024.3.19
  1. 更新自删除,将hook.SelfDelete()置于loader,inject方法之前即可

selfdelete

  1. 新增hashdump功能
  2. 更新demo
2024.3.12
  1. 新增initialize.bat,自动配置项目依赖项,移除go.mod, go.sum
  2. 新增反沙箱:Beep,利用该方法达到Sleep的效果
  3. wdll模块同步更新
2024.2.28
  1. remote模块改名为network
  2. 新增多种加密:elliptic_curvemorsepokemonrot13rot47
  3. 模板更新V4 Base.tmpl:兼容全部渲染方式(参数加载暂时除外)
  4. 加载模块更新:ADsMemLoad
  5. remder模块同步更新
  6. enc模块新增:PokemonStringspokemon加密专用方法;修改其他加密的兼容性
2024.2.20
  1. 新增loaderipv4, macaddress, enumsystemlocales + Hell's Gate + Halo's Gate technique
  2. Dll模块重构调用方式,特征更新
  3. 新增hook模块,Hook函数检测ETW Patch权限检测/提权
2024.2.18
  1. 新增loaderEnumerateLoadedModulesLoad, EnumChildWindowsLoad, EnumPageFilesWLoad
  2. Dll模块根据loader同步更新
  3. 新增garble编译参数:-tiny
  4. 新增构建模式:-buildmode,详情执行go help buildmode查看
  5. 新增FileAnalyzer方法,计算文件的特征:entropy, md5, sha1, sha256, sha512
2024.2.7
  1. 新增garble(需安装)编译,支持-seed, -literals, -debug,但会导致编译的文件体积增大和熵值增加
  2. 重构编译模块,现在支持原生go编译, garble编译
  3. 调整编译的流程和日志输出逻辑
  4. 重构Upx模块,支持自定义Upx.exe的路径
  5. 重构Winres模块,现在使用HandleWinRes方法可以直接添加图标
  6. 预计新增Go编译器: llvm, tinygo - 实验性
  7. 新增install.bat,初始化工具
2024.2.6
  1. 新增两种远程加载的方式UsersCloud, file.io (web)
  2. 新增github.com/imroc/req/v3的请求客户端
  3. 优化远程加载模块的函数描述
  4. 简化远程模块上传加密文件的结构体
  5. 模板更新,兼容新的远程加载方式
2024.2.5
  1. 新增参数加载模块,可以自定义(随机)密钥
  2. 模板简化,兼容所有模块的渲染
  3. 渲染模块优化,兼容所有模块的调用
  4. 新增远程加载模块,远程加密数据的上传会在渲染阶段完成,上传(curl:已完成, web:开发中...)支持代理
  5. 新增动态数据模块可以和任意加载方式联动
  6. 新增上传加密Payload随机化
  7. 新增loader:earlybird
2024.2.4
  1. 新增动态获取解密数据的模块 - Dynamic: payload, key, iv
  2. 按照本地、远程、参数加载的方式重构,减少模板渲染的复杂度
  3. 新增分离加载模块
  4. 渲染模板优化
2024.1.30
  1. lzw压缩导致熵值上升到7.0+;测试fmt.Printf("Hello World")编译后熵值在6.0-6.1之间,压缩模块下次一定
  2. 远程加载:模块、模板、配置更新
  3. 重构加密模块,利用反射根据传入的方法签名判断加密
  4. 使用windows package重写了DLL调用模块,syscall&windows的总结
  5. 模板新增根据自定义导入对应库设置
  6. 新增多个多重加密/编码方法,Base32/62编码测试熵值比较低
2024.1.29
  1. 新增渲染判断,模板可根据结构体来渲染
  2. 更改为验证为沙箱之后程序正常退出
  3. 新增代码检查:检查通过再编译;初始化:go install golang.org/x/tools/cmd/goimports@latest
  4. 细化结构体:根据功能区分
  5. 新增压缩算法:lzw, zstd;熵值模块
  6. 新增动态方法:GetSelfSHA256Nth
  7. 优化代码逻辑
2024.1.27
  1. 模块化配置
  2. 模板渲染
  3. 编译控制
  4. UPX压缩:需要检查upx.exe是否正确放置在build文件夹,才能正确初始化
  5. 签名伪造
  6. 添加图标文件信息:初始化:go install github.com/tc-hib/go-winres@latest
  7. 模板更新
  8. 反沙箱模块

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

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL