mirror of
https://github.com/MountCloud/FireDog.git
synced 2026-10-16 20:20:49 +08:00
3dbac60203
2:重构特征库格式,从json改用yaml(json确实看起来不好看)。 3:更改特征匹配逻辑,将字节匹配与校验匹配结果拆分。 4:编辑器适配新的规则引擎和特征库格式。
本项目为开源项目,MIT开源协议。 https://github.com/MountCloud/FireDog 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用起来多爽。 特征库讲解: 这个规则结果是:ab至少出现一次,并且c至少出现一次,并且d至少出现一次,并且a至少出现3次($ge是大于等于), 所以aaabcd能被该规则匹配到: 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