[发明专利]一种用于木马检测的方法及系统有效
申请号: | 202110700781.5 | 申请日: | 2021-06-24 |
公开(公告)号: | CN113515745B | 公开(公告)日: | 2021-12-21 |
发明(设计)人: | 罗远哲;刘瑞景;李雪茹;罗晓婷;王玲洁;赵利波;罗晓萌;郭振庭;李文静 | 申请(专利权)人: | 北京中超伟业信息安全技术股份有限公司 |
主分类号: | G06F21/56 | 分类号: | G06F21/56;G06F21/57;G06F8/75 |
代理公司: | 北京高沃律师事务所 11569 | 代理人: | 杜阳阳 |
地址: | 102200 北京市昌平*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 用于 木马 检测 方法 系统 | ||
1.一种用于木马检测的方法,其特征在于,包括:
将待判断代码解析为抽象语法树;
遍历所述抽象语法树,判断每个节点是否包含在改变控制流的代码中,若包含在改变控制流的代码中,则将所述改变控制流的代码改写为goto指令,并将goto指令转换为静态单赋值形式,得到静态单赋值的中间表示;
根据所述静态单赋值的中间表示,构建控制流图;
遍历所述控制流图中除第一个基本块以外的基本块构成的基本块集合,将所述基本块集合中无前驱的基本块删除,并更新各基本块的前驱后继列表,获得更新后的控制流图;所述前驱后继列表用于记录基本块对应的前驱基本块和后继基本块;
采用深度优先策略遍历所述更新后的控制流图,将各基本块对应的指令分别组成常量集合、外部世界数据集合、外部世界函数集合、清洗函数集合或函数集合;所述常量集合中包括指令中存在常数的指令,所述函数集合包括指令中存在函数的指令,所述外部世界函数集合包括指令中存在外部输入函数的指令,所述清洗函数集合包括存在函数且函数不是外部输入函数且函数的返回值是常量的指令,所述外部世界数据集合包括指令中存在变量的指令;所述外部输入函数为参数中包括外部输入量的函数;
采用迭代近似算法遍历所述更新后的控制流图,若当前指令为存在外部输入函数的指令,则将当前指令中的函数名加入所述外部世界函数集合,将当前指令中函数的返回值加入所述外部世界数据集合,若当前指令中函数不是外部输入函数且函数的返回值是常量的指令,则将当前指令中的函数名加入所述常量集合,若当前指令函数中至少有一个参数为变量,则将当前指令中函数的返回值加入所述外部世界数据集合,若当前指令函数中参数均不是变量,将当前指令中函数的返回值加入所述常量集合,若当前指令为运算指令且运算指令中至少一个操作中包括变量,则将当前指令的运算结果加入所述外部世界数据集合,若当前指令为运算指令且运算指令中操作中不包括变量,则将当前指令的运算结果加入所述常量集合,直到所述常量集合、所述外部世界数据集合、所述外部世界函数集合和所述清洗函数集合中元素数量不变时退出遍历;
将所述清洗函数集合中每一个基本块中的指令按照一个状态单元包括一个函数调用指令进行拆分,将拆分出的多个状态单元按照前驱后继关系组合状态单元集合;各所述状态单元包括标号、函数调用指令和前驱后继列表;
将所述状态单元集合转换为kripke结构状态迁移系统;所述kripke结构状态迁移系统定义为四元组M:(S,S0,R,L),其中,S表示为状态单元集合中的标号集合,S0为第一个状态单元的标号,R表示标号对的集合,所述标号对中第一个标号对应的状态单元的后继列表包含第二个标号对应的状态单元,标号S1对应的状态单元的后继列表包含标号S2对应的状态单元,L表示函数解释集合,L中各函数解释用于记录各状态单元的函数调用指令信息;
根据所述kripke结构状态迁移系统生成SMV代码;
将所述SMV代码输入模型检测器中进行模型检测,获得待判断代码的类型;所述待判断代码的类型包括正常文件和木马类型。
2.根据权利要求1所述的用于木马检测的方法,其特征在于,所述根据所述静态单赋值的中间表示,构建控制流图,具体包括:
初始化基本块集合和当前基本块;
依次遍历各所述静态单赋值的中间表示中的所有指令,若当前指令为跳转指令,将当前指令跳转到的指令位置作为当前基本块的继后,将当前基本块加入所述基本块集合,若当前指令被反向引用,则将所述基本块集合中最后一个基本块的后继基本块更新为当前基本块,并将当前指令加入更新后的当前基本块,将更新后的当前基本块加入所述基本块集合,若当前指令不是跳转指令且不被反向引用,则将当前指令加入当前基本块。
3.根据权利要求1所述的用于木马检测的方法,其特征在于,所述遍历所述抽象语法树,判断每个节点是否包含在改变控制流的代码中,若包含在改变控制流的代码中,则将所述改变控制流的代码改写为goto指令,并将goto指令转换为静态单赋值形式,得到静态单赋值的中间表示,具体包括:
遍历所述抽象语法树,判断每个节点是否包含在改变控制流的代码中,若包含在改变控制流的代码中,则将所述改变控制流的代码改写为goto指令,采用SSA构造算法将goto指令转换为静态单赋值形式,得到静态单赋值的中间表示。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京中超伟业信息安全技术股份有限公司,未经北京中超伟业信息安全技术股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202110700781.5/1.html,转载请声明来源钻瓜专利网。
- 上一篇:通风锚杆
- 下一篇:一种脱硫废水的处理方法