Skip to content

C1ph3rX13/variant

Repository files navigation

variant

Golang Malware Framework

Description

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

Docs:Install | variantUsage | variant

Quick:

go run .\demo\Base\main.go

Update

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

About

Golang Malware Framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published