arg_decl: | arg_decl_1; arg_decl_1: identifier|identifier , arg_decl_1 /*语句结构*/ block: { instr_list } | { }; instr_list: instr|instr instr_list /*语句*/ instr: simple_instr ; |block|i
arg_decl: | arg_decl_1;
arg_decl_1: identifier|identifier ′,′ arg_decl_1
/*语句结构*/
block: ′{′ instr_list ′}′ | ′{′ ′}′;
instr_list: instr|instr instr_list
/*语句*/
instr: simple_instr ′;′ |block|if_block|loop;
/*简单语句*/
simple_instr : aff|post_pre_incr
|func_call|ret|inc|loc|glob
|break|continue|/*空语句*/
/*返回*/
ret:return expr|return;
/*If语句*/
if_block: if ′(′ expr ′)′ instr
| if ′(′ expr ′)′ instr else instr;
/*循环语句*/
loop: for_loop|while_loop;
for_loop: for ′(′ aff_func ′;′ expr ′;′ aff_func ′)′ instr;
while_loop: while ′(′ expr ′)′ instr;
/*赋值操作*/
aff_func: aff|post_pre_incr|func_call|/*空*/
/*赋值语句*/
aff:value=expr
|value+=expr
|value-=expr
|value*=expr
|value/=expr
|value%=expr;
/*函数调用*/
func_call: identifier ′(′ arg_list ′)′
arg_list:arg_list_1
arg_list_1: arg|arg ′,′ arg_list_1
arg: expr|identifier ′:′ expr
string: STRING|STRING_RAW;
/*文件包含*/
inc:include ′(′ string ′)′
value: identifier|array_elem;
identifier: IDENT;
array_elem: identifier ′[′ array_index ′]′;
array_index: expr;
post_pre_incr:++value
|--value|value++|value--;
/*表达式*/
expr: ′(′ expr ′)′
|expr AND expr
|′!′ expr|expr OR expr
|expr ′+′ expr|expr ′-′ expr
|′-′ expr| ′~′ expr
|expr ′*′ expr|expr ′%′ expr
|expr ′/′ expr|expr ′&′ expr
|expr ′^′ expr|expr ′|′ expr
|expr>>expr|expr>>>expr
|expr< |expr>! |expr=~string|expr!=string
|expr ′<′ expr|expr ′>′ expr
|expr==expr|expr!=expr
|expr>=expr|expr<=expr
|var|aff||atom;
atom: INTEGER|STRING|STRING_RAW;
var: var_name|array_elem|func_call;
var_name: identifier
程序后
3 基于ANTLR的DASL解释器设计
DASL的解释器主要完成对DASL编写的脚本代码进行扫描和分析,解释执行其中的语义动作,从而产生有效的攻击操作。解释器的设计主要包括词法分析、语法分析和语义执行三个主要功能[10-13]。
1)词法分析。根据词法规则识别出DASL脚本源程序中符号(token),每种符号代表一类词法单词。这些词法单词可以分为:标识符、运算符、关键字、数据、特殊符号等。词法分析的本质是将字符流转换成符号流。
2)语法分析。根据语法规则识别出符号流中的语法成分,检查所给的单词序列是否是符合DASL语法的一个句子,如果是则构造出能够正确反映该语法结构的语法树,如果不是则表明有语法错误,给出错误的性质和位置。
3)语义执行。依据语法分析构造的语法树,对语法树进行遍历,执行语法树所描述的语义动作,对DASL脚本中使用到的原子攻击按照语法树传递的参数进行调用,实现攻击动作。
根据DASL功能的划分和实现的要求,所设计的解释器包括:符号表、词法分析、语法分析、语义执行、出错处理等部分,其结构如图1所示。
在解释器的实现过程中,使用语言解释器生成工具ANTLR(Another Tool for Language Recognition)[14-15]来实现。相较于BISON[16]来说,它可自动生成代码,且同使用递归下降方法生成的代码很相似,便于阅读,容易理解;同时又可直接生成C++、C#描述的源程序,即降低解释器的开发难度,又提高了解释器的开发效率。同时,当需要对DASL进行功能扩展时,又便于增补功能函数、语法修改与测试维护。
4 实例与比较
4.1 代码实例
利用DASL开发的SYNFlood攻击脚本代码如下:
程序前
//属性描述部分
Description {
attackname=SYNFlood;
attacktype=DoS;
…}
//建立连接——原始套接字
soc=open_sock_raw();
//强度控制
While(true) {
//构造带有SYN标志的TCP数据包
tcp=tcp_packet_construct(sport: 7000,
dport:80,
//序号为随机序号
seq:0x6839+rand(),
ack:0,
flags:2,
urp:0);
//构造IP数据包
ip=ip_packet_construct(ip_v:4, (责任编辑:南粤论文中心)转贴于南粤论文中心: http://www.nylw.net(南粤论文中心__代写代发论文_毕业论文带写_广州职称论文代发_广州论文网)
顶一下
(0)
0%
踩一下
(0)
0%
版权声明:因本文均来自于网络,如果有版权方面侵犯,请及时联系本站删除.