前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Acheron修改Go程序中并尝试绕过反病毒产品的检测

如何使用Acheron修改Go程序中并尝试绕过反病毒产品的检测

作者头像
FB客服
发布2023-08-08 13:00:08
2190
发布2023-08-08 13:00:08
举报
文章被收录于专栏:FreeBufFreeBuf

关于Acheron

Acheron是一款真的Go程序的安全产品绕过工具,该工具受到了SysWhisper3/FreshyCalls/RecycledGate等代码库的启发,其绝大部分功能都采用了Golang来实现。

Acheron工具可以向Golang程序中添加间接系统调用的能力,并以此来绕过使用用户模式钩子和指令回调检测的反病毒产品/EDR。

功能特性

1、不需要任何其他的依赖组件; 2、基于纯Go语言或Go程序集开发; 3、支持自定义字符串加密和哈希函数以对抗静态代码分析

工具运行机制

当创建一个新的系统调用代理实例时,工具将执行下列操作步骤:

1、遍历PEB并检索内存中ntdll.dll的基地址; 2、解析导出目录并检索每一个导出函数的地址; 3、计算每一个Zw*函数的系统服务数量; 4、枚举ntdll.dll中干净的syscall;ret工具; 5、创建代理实例,用于发送间接/直接系统调用;

工具下载

由于该工具基于Golang开发,因此我们首先需要在本地设备上安装并配置好Golang环境。

接下来,广大研究人员可以使用下列命令将该项目源码克隆至本地:

代码语言:javascript
复制
git clone https://github.com/f1zm0/acheron.git

(向右滑动,查看更多)

或者使用go get命令来下载Acheron:

代码语言:javascript
复制
go get -u github.com/f1zm0/acheron

工具使用

下载完成后,我们只需要在代码中调用acheron.New()来创建一个系统调用代理实例,并使用acheron.Syscall()来针对Nt* API发送间接系统调用即可。

最简化样例:

代码语言:javascript
复制
package main

import (

    "fmt"

    "unsafe"

    "github.com/f1zm0/acheron"

)

func main() {

    var (

        baseAddr uintptr

        hSelf = uintptr(0xffffffffffffffff)

    )

    // creates Acheron instance, resolves SSNs, collects clean trampolines in ntdll.dlll, etc.

    ach, err := acheron.New()

    if err != nil {

        panic(err)

    }

    // indirect syscall for NtAllocateVirtualMemory

    s1 := ach.HashString("NtAllocateVirtualMemory")

    if retcode, err := ach.Syscall(

        s1,                                     // function name hash

        hSelf,                                  // arg1: _In_     HANDLE ProcessHandle,

        uintptr(unsafe.Pointer(&baseAddr)),     // arg2: _Inout_  PVOID *BaseAddress,

        uintptr(unsafe.Pointer(nil)),           // arg3: _In_     ULONG_PTR ZeroBits,

        0x1000,                                 // arg4: _Inout_  PSIZE_T RegionSize,

        windows.MEM_COMMIT|windows.MEM_RESERVE, // arg5: _In_     ULONG AllocationType,

        windows.PAGE_EXECUTE_READWRITE,         // arg6: _In_     ULONG Protect

    ); err != nil {

        panic(err)

    }

    fmt.Printf(

        "allocated memory with NtAllocateVirtualMemory (status: 0x%x)\n",

        retcode,

    )


    // ...

}
(向右滑动,查看更多)

工具使用样例

许可证协议

本项目的开发与发布遵循MIT开源许可证协议。

项目地址

Acheron:https://github.com/f1zm0/acheron

https://github.com/klezVirus/SysWhispers3

https://github.com/crummie5/FreshyCalls

https://github.com/thefLink/RecycledGate

https://winternl.com/detecting-manual-syscalls-from-user-mode/

https://www.usenix.org/legacy/events/vee06/full_papers/p154-bhansali.pdf

https://redops.at/en/blog/direct-syscalls-a-journey-from-high-to-low

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能特性
  • 工具运行机制
  • 工具下载
  • 工具使用
  • 工具使用样例
  • 许可证协议
  • 项目地址
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档