前言
大部分的国产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()
}
声明:
本文采用
BY-NC-SA
协议进行授权,如无注明均为原创,转载请注明转自
xxs的博客
本文地址: 鬼影/暴风/cctv/台风等国产DDOS木马通讯分析
本文地址: 鬼影/暴风/cctv/台风等国产DDOS木马通讯分析