被嫌弃免杀太菜,说是不能自己写加密壳
闲聊几句
上次说到随机渲染,其实也就是随机变量名。往大方向来设计的话,就是只渲染需要的模块,当然也可以根据模块来随机渲染,那就是自己也不知道最后的组合是什么了(开玩笑,当然可以看到每次渲染的结果)。
再来回忆一下一个加载器所需要的模块:1、ShellCode 2、Loader。
那基础的渲染模板就可以围绕着两个模块设计,第一是ShellCode生成的位置,第二是Loader的加载的时机和方式。
Golang template
说点官方话
Go标准库提供了几个package可以产生输出结果,而text/template 提供了基于模板输出文本内容的功能。html/template 则是产生 安全的HTML格式的输出。
Golang text/template
包是一个数据驱动的模版渲染工具。提供条件判断,数组或map遍历;参数赋值,函数或方法调用;自定义函数扩展,模板嵌套及重用等功能。基于该工具,可以轻松实现复杂场景的文本渲染。
模板没有限定扩展名,最流行的后缀是.tmpl
, vim-go提供了对它的支持,并且godoc的例子中也使用这个后缀。Atom 和 GoSublime 对.gohtml
后缀的文件提供了语法高亮的支持。通过对代码库的分析统计发现.tpl
后缀也被经常使用。当然后缀并不重要,在项目中保持清晰和一致即可。
基础模板
先来写一个简单的模板,模板的语法很简单,各位大佬去看看官方文档就好啦。
package main
import (
"variant/loader"
)
func main() {
{{.PlainText}} := {{.ShellCode}}
loader.{{.Loader}}({{.PlainText}})
}
带有 {{. }} 符号的就是模板变量,会根据定义的数据来进行模板的渲染,可以通过点号.
来访问。
如果数据是复杂类型的数据,可以通过{ { .FieldName }}
来访问它的字段。
如果字段还是复杂类型,可以链式访问 { { .Struct.StructTwo.Field }}
。
随机字段
可以看到除了 {{.ShellCode}} 这个模板变量我们无法进行随机(其实加密之后每次结果不一样,也算是随机了),其他两个模板变量都可以随机,简单写个demo看一下。
package main
import (
"os"
"path/filepath"
"text/template"
"time"
"golang.org/x/exp/rand"
)
type Anti struct {
PlainText string
Loader string
}
func RStrings(length int) string {
var result string
for i := 0; i < length; i++ {
// 随机选择是大写字母还是小写字母
char := byte(rand.Intn(26) + 'a')
if rand.Intn(2) == 1 {
char = byte(rand.Intn(26) + 'A')
}
result += string(char)
}
return result
}
func main() {
// 设置随机种子
rand.NewSource(uint64(time.Now().UnixNano()))
// 设置模板变量渲染数据
anti := Anti{
PlainText: RStrings(8),
Loader: RStrings(10),
}
// 读取模板
content, err := os.ReadFile("mht.tmpl")
if err != nil {
panic(err)
}
// 创建模板对象
tmpl, err := template.New(filepath.Base("mht")).Parse(string(content))
if err != nil {
panic(err)
}
// 创建输出的 Go 文件
goFile, err := os.Create("mhtAnti.go")
if err != nil {
panic(err)
}
defer goFile.Close()
// 渲染模板并写入到 Go 文件中
err = tmpl.Execute(goFile, anti)
if err != nil {
panic(err)
}
}
运行结果
这样就得到随机渲染的编译模板了,实现每次编译都是新的文件指纹。
总结
多看一眼https://pkg.go.dev/text/template,这个库非常好用。
想要实现一个通用的渲染器,其实也很简单。
如果你看到这里了,顺手帮我点个Star,再去看下项目中实现的渲染器吧
https://github.com/C1ph3rX13/variant/blob/main/render/buildtmpl.go
顺带一句,它有个不顺眼的地方,会在七月份更新解决。
请登录后查看评论内容