Help us shape the future of Go! Take the 2026 Go Developer Survey

core

package
v0.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 25, 2025 License: Apache-2.0 Imports: 45 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Connections = &connections{
		connections: &sync.Map{},
	}
	ListenerSessions = &listenerSessions{
		sessions: &sync.Map{},
	}
)
View Source
var (
	// Sessions - Manages implant connections
	Sessions         *sessions
	ExtensionModules = []string{consts.ModuleExecuteBof, consts.ModuleExecuteDll}
	// ErrUnknownMessageType - Returned if the implant did not understand the message for
	//                         example when the command is not supported on the platform
	ErrUnknownMessageType = errors.New("unknown message type")

	// ErrImplantSendTimeout - The implant did not respond prior to timeout deadline
	ErrImplantSendTimeout = errors.New("implant timeout")
)
View Source
var CacheName = "cache.bin"
View Source
var (
	// Clients - Manages client active
	Clients = &clients{
		mutex:  &sync.Mutex{},
		active: map[int]*Client{},
	}
)
View Source
var (
	// EventBroker - Distributes event messages
	EventBroker *eventBroker
)
View Source
var (
	Forwarders = &forwarders{
		forwarders: &sync.Map{},
	}
)
View Source
var (
	GlobalTicker = NewTicker()
)
View Source
var (
	Jobs = &jobs{
		Map: &sync.Map{},
	}
)
View Source
var (
	Listeners = listeners{
		&sync.Map{},
	}
)

Functions

func CurrentJobID

func CurrentJobID() uint32

func GetCurrentID added in v0.0.3

func GetCurrentID() uint32

func GetKeyPairForSession added in v0.1.2

func GetKeyPairForSession(sid uint32, secureConfig *types.SecureConfig) *clientpb.KeyPair

GetKeyPairForSession 获取会话的密钥对 优先从 ListenerSessions 获取,如果没有则从 secureConfig 获取交换密钥对

func HandleFileOperations added in v0.1.0

func HandleFileOperations(op string, data []byte, task *Task) error

func HandleScreenshot added in v0.1.0

func HandleScreenshot(data []byte, task *Task) error

func LoadContext added in v0.1.0

func LoadContext(ctx output.Context) (output.Context, error)

func NewBroker added in v0.0.3

func NewBroker() *eventBroker

func NewSessions added in v0.0.3

func NewSessions() *sessions

func NextCtrlID

func NextCtrlID() uint32

func NextJobID

func NextJobID() uint32

func PushContextEvent added in v0.1.0

func PushContextEvent(Op string, ctx *models.Context)

func ReadFileForContext added in v0.1.0

func ReadFileForContext(ctx output.Context) ([]byte, error)

func SaveContext added in v0.1.0

func SaveContext(ctx output.Context, task *Task) (*models.Context, error)

Types

type Cache

type Cache struct {
	// contains filtered or unexported fields
}

func NewCache

func NewCache(savePath string) *Cache

NewCache initializes a new cache with a specified size, duration, and save path

func (*Cache) AddMessage

func (c *Cache) AddMessage(spite *implantpb.Spite, index int)

AddMessage adds a new item to the cache with TaskId and Index as part of the key

func (*Cache) GetAll

func (c *Cache) GetAll() map[string]*implantpb.Spite

GetAll returns all items in the cache

func (*Cache) GetLastMessage

func (c *Cache) GetLastMessage(taskID int) (*implantpb.Spite, bool)

func (*Cache) GetMessage

func (c *Cache) GetMessage(taskID, index int) (*implantpb.Spite, bool)

GetMessage retrieves a cache item by TaskId and Index

func (*Cache) GetMessages

func (c *Cache) GetMessages(taskID int) ([]*implantpb.Spite, bool)

func (*Cache) Load

func (c *Cache) Load() error

Load deserializes cache items from a file using protobuf

func (*Cache) Save

func (c *Cache) Save() error

Save serializes the cache items to a file using protobuf

type Client

type Client struct {
	*clientpb.Client
}

Client - Single client connection

func NewClient

func NewClient(operatorName string) *Client

NewClient - Create a new client object

func (*Client) ToProtobuf

func (c *Client) ToProtobuf() *clientpb.Client

type Connection

type Connection struct {
	RawID       uint32
	SessionID   string
	LastMessage time.Time
	PipelineID  string
	C           chan *clientpb.SpiteRequest // spite
	Sender      chan *implantpb.Spites
	Alive       bool
	Parser      *parser.MessageParser
	// contains filtered or unexported fields
}

func GetConnection added in v0.1.2

func GetConnection(conn *cryptostream.Conn, pipelineID string, secureConfig *types.SecureConfig) (*Connection, error)

GetConnection 统一的连接获取/创建函数 (适用于 TCP 和 HTTP pipeline) 从 cryptostream.Conn 中提取 SID 并获取/创建连接

func NewConnection

func NewConnection(p *parser.MessageParser, sid uint32, pipelineID string, keyPair *clientpb.KeyPair) *Connection

func (*Connection) Handler added in v0.0.3

func (c *Connection) Handler(ctx context.Context, conn *cryptostream.Conn) error

func (*Connection) HandlerSimplex added in v0.1.0

func (c *Connection) HandlerSimplex(ctx context.Context, conn *cryptostream.Conn) error

func (*Connection) Send

func (c *Connection) Send(ctx context.Context, conn *cryptostream.Conn)

type Event

type Event struct {
	Session *clientpb.Session
	Job     *clientpb.Job
	Client  *clientpb.Client
	Task    *clientpb.Task
	Spite   *implantpb.Spite

	Important bool
	EventType string
	Op        string
	Message   string
	Err       string
	Callee    string
	IsNotify  bool
}

func (*Event) String added in v0.1.0

func (event *Event) String() string

func (*Event) ToProtobuf added in v0.1.0

func (event *Event) ToProtobuf() *clientpb.Event

toprotobuf

type Forward

type Forward struct {
	Pipeline
	ListenerId string
	Stream     listenerrpc.ListenerRPC_SpiteStreamClient

	ListenerRpc listenerrpc.ListenerRPCClient
	// contains filtered or unexported fields
}

Forward is a struct that handles messages from listener and server

func NewForward

func NewForward(rpc listenerrpc.ListenerRPCClient, pipeline Pipeline) (*Forward, error)

func (*Forward) Add

func (f *Forward) Add(msg *Message)

func (*Forward) Context added in v0.1.0

func (f *Forward) Context(sid string) context.Context

func (*Forward) Count

func (f *Forward) Count() int

func (*Forward) Handler

func (f *Forward) Handler()

Handler is a loop that handles messages from implant

type Job

type Job struct {
	ID       uint32
	Name     string
	Pipeline *clientpb.Pipeline
}

func (*Job) ToProtobuf

func (j *Job) ToProtobuf() *clientpb.Job

type Listener

type Listener struct {
	Name      string
	IP        string
	Active    bool
	Pipelines map[string]*clientpb.Pipeline
	Ctrl      chan *clientpb.JobCtrl
	CtrlJob   *sync.Map
}

func (*Listener) AddPipeline added in v0.0.3

func (l *Listener) AddPipeline(pipeline *clientpb.Pipeline)

func (*Listener) AllPipelines added in v0.0.3

func (l *Listener) AllPipelines() []*clientpb.Pipeline

func (*Listener) GetPipeline added in v0.0.3

func (l *Listener) GetPipeline(name string) *clientpb.Pipeline

func (*Listener) PushCtrl added in v0.1.0

func (l *Listener) PushCtrl(ctrl *clientpb.JobCtrl) uint32

func (*Listener) RemovePipeline added in v0.0.3

func (l *Listener) RemovePipeline(pipeline *clientpb.Pipeline)

func (*Listener) ToProtobuf

func (l *Listener) ToProtobuf() *clientpb.Listener

func (*Listener) WaitCtrl added in v0.1.0

func (l *Listener) WaitCtrl(i uint32) *clientpb.JobStatus

type Message

type Message struct {
	Spites     *implantpb.Spites
	RawID      uint32
	SessionID  string
	RemoteAddr string
}

type Notifier added in v0.0.2

type Notifier struct {
	// contains filtered or unexported fields
}

func (*Notifier) Send added in v0.0.2

func (n *Notifier) Send(event *Event)

type Pipeline

type Pipeline interface {
	ID() string
	Start() error
	Close() error
	ToProtobuf() *clientpb.Pipeline
}

type PipelineConfig added in v0.0.3

type PipelineConfig struct {
	ListenerID   string
	Parser       string
	TLSConfig    *types.TlsConfig
	Encryption   types.EncryptionsConfig
	SecureConfig *types.SecureConfig
}

func FromPipeline added in v0.1.1

func FromPipeline(pipeline *clientpb.Pipeline) *PipelineConfig

func (*PipelineConfig) WrapConn added in v0.0.3

func (p *PipelineConfig) WrapConn(conn io.ReadWriteCloser) (*cryptostream.Conn, error)

type Pipelines

type Pipelines map[string]Pipeline

func (Pipelines) Add

func (ps Pipelines) Add(p Pipeline)

func (Pipelines) Get

func (ps Pipelines) Get(id string) Pipeline

func (Pipelines) ToProtobuf

func (ps Pipelines) ToProtobuf() *clientpb.Pipelines

type RingCache added in v0.1.0

type RingCache struct {
	// contains filtered or unexported fields
}

func NewMessageCache added in v0.1.0

func NewMessageCache(capacity int) *RingCache

func (*RingCache) Add added in v0.1.0

func (mc *RingCache) Add(message interface{})

func (*RingCache) GetAll added in v0.1.0

func (mc *RingCache) GetAll() []interface{}

func (*RingCache) GetLast added in v0.1.0

func (mc *RingCache) GetLast() interface{}

func (*RingCache) GetN added in v0.1.0

func (mc *RingCache) GetN(n int) []interface{}

GetN 返回最后 N 条消息

type SecureManager added in v0.1.2

type SecureManager struct {
	// contains filtered or unexported fields
}

SecureManager 专注于密钥交换请求和响应处理

func NewSecureSpiteManager added in v0.1.2

func NewSecureSpiteManager(sess *Session) *SecureManager

NewSecureSpiteManager 创建新的安全管理器

func (*SecureManager) IncrementCounter added in v0.1.2

func (s *SecureManager) IncrementCounter()

IncrementCounter 增加消息计数器

func (*SecureManager) ResetCounters added in v0.1.2

func (s *SecureManager) ResetCounters()

ResetCounters 重置计数器(密钥交换完成后调用)

func (*SecureManager) ShouldRotateKey added in v0.1.2

func (s *SecureManager) ShouldRotateKey() bool

ShouldRotateKey 检查是否需要轮换密钥

func (*SecureManager) UpdateKeyPair added in v0.1.2

func (s *SecureManager) UpdateKeyPair(keyPair *clientpb.KeyPair)

UpdateKeyPair 更新KeyPair引用

type Session

type Session struct {
	Type        string
	PipelineID  string
	ListenerID  string
	ID          string
	RawID       uint32
	Name        string
	Group       string
	Note        string
	Target      string
	Initialized bool
	LastCheckin int64
	CreatedAt   time.Time
	Tasks       *Tasks // task manager
	*types.SessionContext

	// Age 密码学安全管理器(运行时,负责密钥交换和轮换)
	SecureManager *SecureManager

	*Cache
	Taskseq uint32

	Ctx    context.Context
	Cancel context.CancelFunc
	// contains filtered or unexported fields
}

Session - Represents a connection to an implant

func RecoverSession added in v0.0.3

func RecoverSession(sess *models.Session) (*Session, error)

func RegisterSession added in v0.0.3

func RegisterSession(req *clientpb.RegisterSession) (*Session, error)

func (*Session) Abstract added in v0.1.0

func (s *Session) Abstract() string

func (*Session) DeleteResp

func (s *Session) DeleteResp(taskId uint32)

func (*Session) FillSysInfo added in v0.1.2

func (s *Session) FillSysInfo()

func (*Session) GetResp

func (s *Session) GetResp(taskId uint32) (chan *implantpb.Spite, bool)

func (*Session) NewTask

func (s *Session) NewTask(name string, total int) *Task

func (*Session) Publish added in v0.0.3

func (s *Session) Publish(Op string, msg string, notify bool, important bool)

func (*Session) PushCtrl added in v0.1.2

func (s *Session) PushCtrl()

func (*Session) PushUpdate added in v0.1.1

func (s *Session) PushUpdate(msg string)

func (*Session) Recover added in v0.0.3

func (s *Session) Recover() error

func (*Session) RecoverTaskIDByLog added in v0.0.3

func (s *Session) RecoverTaskIDByLog() (int, error)

func (*Session) Request

func (s *Session) Request(msg *clientpb.SpiteRequest, stream grpc.ServerStream) error

Request

func (*Session) RequestAndWait

func (s *Session) RequestAndWait(msg *clientpb.SpiteRequest, stream grpc.ServerStream, timeout time.Duration) (*implantpb.Spite, error)

func (*Session) RequestWithAsync

func (s *Session) RequestWithAsync(msg *clientpb.SpiteRequest, stream grpc.ServerStream, timeout time.Duration) (chan *implantpb.Spite, error)

func (*Session) RequestWithStream

func (s *Session) RequestWithStream(msg *clientpb.SpiteRequest, stream grpc.ServerStream, timeout time.Duration) (chan *implantpb.Spite, chan *implantpb.Spite, error)

RequestWithStream - 'async' means that the response is not returned immediately, but is returned through the channel 'ch

func (*Session) RpcLogger added in v0.0.3

func (s *Session) RpcLogger() *logs.Logger

func (*Session) Save added in v0.1.2

func (s *Session) Save() error

func (*Session) StoreResp

func (s *Session) StoreResp(taskId uint32, ch chan *implantpb.Spite)

func (*Session) TaskLog added in v0.0.3

func (s *Session) TaskLog(task *Task, spite *implantpb.Spite) error

func (*Session) ToModel added in v0.0.3

func (s *Session) ToModel() *models.Session

func (*Session) ToProtobuf

func (s *Session) ToProtobuf() *clientpb.Session

func (*Session) ToProtobufLite added in v0.0.3

func (s *Session) ToProtobufLite() *clientpb.Session

func (*Session) Update

func (s *Session) Update(req *clientpb.RegisterSession)

func (*Session) UpdateKeyPair added in v0.1.2

func (s *Session) UpdateKeyPair(keyPair *clientpb.KeyPair)

UpdateKeyPair 更新KeyPair并同步到SecureManager

func (*Session) UpdatePrivateKey added in v0.1.2

func (s *Session) UpdatePrivateKey(key string)

func (*Session) UpdatePublicKey added in v0.1.2

func (s *Session) UpdatePublicKey(key string)

func (*Session) UpdateSysInfo

func (s *Session) UpdateSysInfo(info *implantpb.SysInfo)

type Task

type Task struct {
	Id        uint32
	Type      string
	SessionId string
	Callee    string
	Cur       int
	Total     int
	Callback  func()
	Ctx       context.Context
	Cancel    context.CancelFunc
	Session   *Session
	DoneCh    chan bool
	Closed    bool
	Deadline  time.Time
	CallBy    string
}

func FromTaskProtobuf added in v0.0.3

func FromTaskProtobuf(task *clientpb.Task) *Task

func (*Task) Close

func (t *Task) Close()

func (*Task) Done

func (t *Task) Done(spite *implantpb.Spite, msg string)

func (*Task) Finish

func (t *Task) Finish(spite *implantpb.Spite, msg string)

func (*Task) Finished added in v0.0.3

func (t *Task) Finished() bool

func (*Task) Name

func (t *Task) Name() string

func (*Task) Panic

func (t *Task) Panic(event Event)

func (*Task) Publish added in v0.0.3

func (t *Task) Publish(op string, spite *implantpb.Spite, msg string)

func (*Task) String

func (t *Task) String() string

func (*Task) TaskID added in v0.0.3

func (t *Task) TaskID() string

func (*Task) Timeout added in v0.0.3

func (t *Task) Timeout() bool

func (*Task) ToProtobuf

func (t *Task) ToProtobuf() *clientpb.Task

type Tasks

type Tasks struct {
	// contains filtered or unexported fields
}

func NewTasks added in v0.0.3

func NewTasks() *Tasks

func (*Tasks) Add

func (t *Tasks) Add(task *Task)

func (*Tasks) All

func (t *Tasks) All() []*Task

All - Return a list of all tasks

func (*Tasks) Get

func (t *Tasks) Get(taskID uint32) *Task

get

func (*Tasks) GetNotFinish added in v0.0.3

func (t *Tasks) GetNotFinish() []*clientpb.Task

func (*Tasks) Remove

func (t *Tasks) Remove(taskId uint32)

func (*Tasks) ToProtobuf

func (t *Tasks) ToProtobuf() *clientpb.Tasks

type Ticker

type Ticker struct {
	// contains filtered or unexported fields
}

func NewTicker

func NewTicker() *Ticker

func (*Ticker) Remove

func (t *Ticker) Remove(id cron.EntryID)

func (*Ticker) RemoveAll

func (t *Ticker) RemoveAll()

func (*Ticker) Start

func (t *Ticker) Start(interval int, cmd func()) (cron.EntryID, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL