前言

大部分的国产ddos集群都是这种通讯方式,还有一种是用gh0st的.

本人并不懂c艹,如有错误欢迎指正.

正文

这些木马的通讯其实非常简单,连加密都有没有加密。先是解密域名和端口,然后直接建立一个tcp socket,然后获取系统信息,打包进msghead这个结构体里.

然后直接发送,没有任何加密,就是这么朴实无华.

只要你一直保持着连接,客户端就显示你上线

下面就是收包,执行相应的任务了。

我还无聊用Go写了个上线,只能上线啥事都干不了.

package main

import (
	"fmt"
	"net"
	"unsafe"
)

type MSGHEAD struct {
	id       uint32
	data     [1024]byte
	dnsMsg   [100]byte
	dwTime   uint32
	dwThread uint32
	dwPort   uint32
	brrowdns [256]byte
}

type SYSINFO struct {
	Country       uint32   //地区
	Os            [64]byte //操作系统
	Memery        [32]byte //内存
	Version       [32]byte //服务端版本
	dwSpeed       uint32   //网卡
	CPUClockMhz   int      //CPU频率
	dwCPU         int
	strCPU        [128]byte
	szPort        [128]byte //远程端口
	bIs64         bool      //平台
	dwCPUClockMhz uint32    // CPU频率
	nCPUNumber    int       // CPU核数
}

const (
	STORM_ONLINE = 0x00001
)

type SliceMock struct {
	addr uintptr
	len int
	cap int
}

func login(){
	conn,err:=net.Dial("tcp","127.0.0.1:2016")
	if err!=nil{
		fmt.Println(err)
		return
	}
	sysinfo:=new(SYSINFO)
	sysinfo.Country=10000
	copy(sysinfo.Os[:],"win7")
	copy(sysinfo.Memery[:],"500G")
	copy(sysinfo.Version[:],"xxsyes")
	sysinfo.dwCPUClockMhz=12345
	sysinfo.nCPUNumber=50
	sysinfo.dwSpeed=10000000
	Len := unsafe.Sizeof(*sysinfo)
	testBytes := &SliceMock{
		addr: uintptr(unsafe.Pointer(sysinfo)),
		cap: int(Len),
		len: int(Len),
	}
	data := *(*[]byte)(unsafe.Pointer(testBytes))
	msghead := new(MSGHEAD)
	msghead.id = STORM_ONLINE
	copy(msghead.data[:],data)
	Len = unsafe.Sizeof(*msghead)
	testBytes = &SliceMock{
		addr: uintptr(unsafe.Pointer(msghead)),
		cap: int(Len),
		len: int(Len),
	}
	data = *(*[]byte)(unsafe.Pointer(testBytes))
	conn.Write(data)
	a:=make([]byte,1024*1234)
	conn.Read(a)
}
func main() {
	login()
}

说点什么
支持Markdown语法
在"鬼影/暴风/cctv/台风等国产DDOS木马通讯分析"已有3条评论
Loading...