mirror of
https://github.com/MountCloud/FireDog.git
synced 2026-10-16 20:20:49 +08:00
3dbac60203
2:重构特征库格式,从json改用yaml(json确实看起来不好看)。 3:更改特征匹配逻辑,将字节匹配与校验匹配结果拆分。 4:编辑器适配新的规则引擎和特征库格式。
58 lines
3.5 KiB
Plaintext
58 lines
3.5 KiB
Plaintext
1:请使用gui打开/demo/demo.fdog来参考
|
||
!!!修改完规则记得点击 添加或修改。修改完规则库记得点击顶部菜单->操作->保存或者另存为!!!
|
||
|
||
2:特征讲解
|
||
key:代表这个特征的标识。
|
||
hex:hex是以二进制形式进行匹配的二进制数据,允许模糊匹配如:0F ?0 A? ??。
|
||
text:以文本形式匹配的关键字。
|
||
|
||
3:规则
|
||
$and:[规则数组] 并运算,只有子规则结果全部为true(通过)时,结果为true(通过),如果有一条子规则结果为false(不通过),则结果为false(不通过)。
|
||
$or:[规则数组] 或运算,有一条子规则结果全部为true(通过)时,结果为true(通过),如果全部子规则结果为false(不通过),则结果为false(不通过)。
|
||
$not:[规则数组] 非运算,只有子规则结果全部为false(不通过)时,结果为true(通过),如果有一条子规则结果为true(通过),则结果为false(不通过)。意思就是如果$not的子规则是$lt($count(key1),$int(5))=$not(key1出现次数小于5)=不能(key1出现的次数小于5)=key1出现的次数需要大于5
|
||
|
||
$all:[字符串数组] 表示一组key必须至少全部出现1次。$all(key1,key2)表示key1和key2必须至少都出现一次。
|
||
$count:*数字规则*[字符串数组] 表示统计key出现的次数。$count(key1,key2)就是统计key1和key2出现的次数。
|
||
$int:*数字规则*[数字类型] 表示一个数字。$int(1)代表数字1
|
||
|
||
$lt:*比较规则*,小于比较,使用两个*数字规则*进行比较,数字规则1 < 数字规则2,则为true(通过)。
|
||
$le:*比较规则*,小于等于比较,使用两个*数字规则*进行比较,数字规则1 <= 数字规则2,则为true(通过)。
|
||
$gt:*比较规则*,大于比较,使用两个*数字规则*进行比较,数字规则1 > 数字规则2,则为true(通过)。
|
||
$ge:*比较规则*,大于等于比较,使用两个*数字规则*进行比较,数字规则1 >= 数字规则2,则为true(通过)。
|
||
|
||
4:demo中的规则描述(请勿复制描述的规则,因为引擎不识别注释):
|
||
规则库格式是yaml,yaml语法可以自学一下。
|
||
规则建议还是别手写,用gui配置减少错误率,而且gui用起来多爽。
|
||
|
||
特征库讲解:
|
||
version: 1.2.1 //当前规则引擎版本号
|
||
items: //规则集合
|
||
- name: test //单条规则名称
|
||
author: mountcloud //作者
|
||
describe: test new rule engine. //规则描述
|
||
features: //特征集合
|
||
- key: key1 //特征的key
|
||
text: a //text代表文本类型,hex代表二进制类型
|
||
- key: key2
|
||
text: b
|
||
- key: key3
|
||
text: c
|
||
- key: key4
|
||
text: d
|
||
- key: key5
|
||
hex: 0F ?0 A? ?? //二进制类型允许使用模糊匹配
|
||
rules: //规则
|
||
- $and: //(规则是第1层)规则是And类型
|
||
- $all: //($and的子规则)All是以下key至少全部都出现一次
|
||
- key1
|
||
- key2
|
||
- $and: //(第一层$and的子规则)
|
||
- $all: //(第二层$and的子规则)
|
||
- key3
|
||
- $all:
|
||
- key4
|
||
- $ge: //(第一层$and的子规则)$ge是大于比较,比较第一个规则要大于第二个规则
|
||
- $count: ($ge的子规则)$count是统计key出现的总数
|
||
- key1
|
||
- $int: 3 ($ge的子规则)$int代表一个固定数字,这里就是 key1出现的次数要大于3
|