Yara安装使用教程

一、安装

官方文档(含python调用yara):https://yara.readthedocs.io/en/v4.1.1/gettingstarted.html

开源yara规则库:https://github.com/Yara-Rules/rules

bash;gutter:true; git clone https://github.com/VirusTotal/yara.git</p> <p>cd yara ./bootstrap.sh ./configure make 最后可以看到安装到的路径,不配置默认应该是/usr/local/bin sudo make install</p> <pre><code> ## 二、规则的基本写法 将如下结果保存为test_rule.yar: </code></pre> <p>/<em> 块注释 https://yara.readthedocs.io/en/v4.1.1/writingrules.html </em>/</p> <p>// 行注释 // rule_name为设置的规则名 // rule_tag为规则标签,方便后边设置只启用隶属某个tag的规则集;可省略(冒号和tag一起) rule rule_name1 : rule_tag1 rule_tag2 { // 一条规则一般由strings + condition组成,meta节区可省略</p> <pre><code>// meta节区主要用于放置一些备注、规则说明,并不用于实际匹配 meta: rule_desc = "this just a rule comment." // 基础规则一般有十六进制字符串、字符串、正则三种类型 strings: // 其中十六进字符串内也可以用正则,但匹配元素只能是十六进制字符 // $hex_string = { E2 34 A1 C? 23 FB } $text_string = "root" // 虽然yara不再使用PCRE库,但支持的正则写法和PCRE基本一致 // $re_string = /md5: [0-9a-fA-F]{32}/ // 配置条件。由基础规则进行逻辑运算而得,运算结果为true则命中,为false则未命中 condition: $text_string </code></pre> <p>}</p> <p>// 一个文件内可以写多个规则,但rule_name不要重复 rule rule_name2 { // condition: false }</p> <pre><code> ## 三、命令行使用 上边我们写了一个规则文件,按rule_name1这条规则的condition,只要被审查文件中出现"md5: 加空格 加一个md5值"的字符串就会命中。 我们来准备一个会命中和一个不会命中的文件,然后看实际如何使用yara及命不命中会是什么现像。 </code></pre> <p>使用test_rule.yar中的规则去匹配/etc/passwd文件的内容 /etc/passwd有root字符串,会打印出匹配的规则,即rule_name1 yara test_rule.yar /etc/passwd</p> <p>可以使用-s参数打印出具体匹配的位置 yara -s test_rule.yar /etc/passwd</p> <p>/etc/profile没有root字符串,没有匹配的规则,什么都不会打印 yara test_rule.yar /etc/profile</p> <pre><code> ![Yara安装使用教程](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/1116722-20210811170545049-1005925754.png) ## 四、通过python调用yara python调用yara我们可以通过python执行系统命令的方式调用,但这种方式比较丑,建议还是通过作者提供的yara-python库去调用(虽然我们还是得先安装yara)。 </code></pre> <p>pip install yara-python</p> <pre><code> ### 4.1 匹配字符串 </code></pre> <p>import yara</p> <p>编译规则 当规则文件编写有语法错误时,compile会报错,但不会具体指出是哪一行出了什么错 此时建议用命令行来查看具体错误。如yara ./test_rule.yar /etc/passwd rules = yara.compile(filepath='./test_rule.yar') 使用data参数来指定要匹配的字符串 matches = rules.match(data="root:toor") matches是一个匹配的规则名对象列表,形如[rule_name1] print(matches) 对象属性包括rule/namespace/tags/meta/strings print(f"{matches[0].rule}--{matches[0].strings}")</p> <pre><code> ![Yara安装使用教程](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/1116722-20210811171627299-108347365.png) ### 4.2 匹配文件 </code></pre> <p>import yara</p> <p>编译规则 当规则文件编写有语法错误时,compile会报错,但不会具体指出是哪一行出了什么错 此时建议用命令行来查看具体错误。如yara ./test_rule.yar ./be_test_file1.txt rules = yara.compile(filepath='./test_rule.yar')</p> <p>匹配文件可以是文本文件 使用filepath来指定要进行匹配的文件,由于filepath是第一个参数所以也可以省略 matches = rules.match(filepath='/etc/passwd') matches是一个命中的规则对象列表 print(matches) print(f"{matches[0].rule}--{matches[0].strings}")</p> <p>匹配文件也可以是二进制文件 使用filepath来指定要进行匹配的文件,由于filepath是第一个参数所以也可以省略 matches = rules.match('/usr/bin/passwd') print(matches) print(f"{matches[0].rule}--{matches[0].strings}")</p> <pre><code> ![Yara安装使用教程](https://johngo-pic.oss-cn-beijing.aliyuncs.com/articles/20230526/1116722-20210811172146654-1101259413.png) ### 4.3 即时处理 上边的rules.match()返回的只是一个命中的规则对象列表,我们可以对他进行处理;但有时我们可能想完成一条规则匹配就进行处理,这可借助回调函数实现。 </code></pre> <p>import yara</p> <p>编译规则 rules = yara.compile(filepath="./test_rule.yar")</p> <p>回调函数,默认一 def match_callback(data): """</p> <pre><code>:param data: { 'matches': False, # 表示该条规则是否有匹配内容 'rule': 'rule_name2', # 该条规则规则名 'namespace': 'default', 'tags': [], # 该条规则所属标签 'meta': {}, # 该条规则的meta节区内容 'strings': [] # 该条规则匹配的内容列表 } :return: </code></pre> <p>""" # 打印匹配信息 print(data) # 指示程序继续进行 return yara.CALLBACK_CONTINUE</p> <p>filepath--要进行匹配的文件。可以是文本文件,也可以是二进制文件 callback--回调函数,默认匹配完一条规则回调一次 which_callbacks--回调函数过滤参数,yara.CALLBACK_ALL(默认)、yara.CALLBACK_MATCHES(规则有匹配回调)、 yara.CALLBACK_NON_MATCHES(规则不匹配时回调) matches = rules.match(filepath='/etc/passwd', callback=match_callback, which_callbacks=yara.CALLBACK_ALL) 还是一样,matches只是最终的匹配规则名列表 print(matches)

Yara安装使用教程

Original: https://www.cnblogs.com/lsdb/p/14977924.html
Author: 诸子流
Title: Yara安装使用教程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/552594/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • PI规划会,研发团队价值聚焦的一剂良方

    随着数字化建设如火如荼地推进,中大型企业的数字化建设团队规模也越来越大,团队规模的扩大一方面带来了更多产能与可能性,另一方面,不同的角色在不同的业务场景也带来了一些现实问题,例如:…

    技术杂谈 2023年7月24日
    0110
  • 12GDB在无符号表情况下调试程序

    1)加载无符号表程序 2)断点到某一个函数,通过tab键可以模糊匹配查找要断点的函数3)运行程序4)查看第一个参数寄存器:i r rdi,我们传入的是字符a,可以看到查看到的值是9…

    技术杂谈 2023年6月1日
    0104
  • chromium 绘制 paint 与 合成

    关于paint的文档有两个。一个是下面的平台相关的 Paint artifact,即绘制指令执行完的生成品;另一个是core内核生成paint。 这个目录包含 display li…

    技术杂谈 2023年5月31日
    0121
  • 类的动态装载java

    类的动态装载 首先,我们要明白类加载的过程,再来区分静态加载和动态加载,类加载的过程,本质上就是将类文件,从硬盘读取到内存中的过程,而静态加载是在编译时加载,动态加载是在程序运行时…

    技术杂谈 2023年7月23日
    093
  • CentOS 文件管理

    一、目录管理 1.1、目录结构 1.2、切换目录 1.3、查看目录 1.4、创建目录 1.5、复制目录 1.6、剪切目录 1.7、删除目录 二、文件管理 2.1、查看文件 2.2、…

    技术杂谈 2023年7月10日
    089
  • Linux中的RCU机制

    什么是RCU? RCU(Read-Copy Update),顾名思义就是读-拷贝-修改,它是基于其原理命名的。对于被RCU保护的共享数据结构,读者不需要获得任何锁就可以访问它,但写…

    技术杂谈 2023年7月24日
    092
  • 删除IIS日志

    如果服务器IIS访问量比较大,那么IIS日志一定时间后会变的很大,这时候需要手动清理一下。 日志目录可以在IIS中找到。 Original: https://www.cnblogs…

    技术杂谈 2023年5月31日
    0102
  • 【证券从业】金融基础知识-第三章 证券市场主体03

    注1:后续学习并整理到第八章,全书完结后再合并成一个笔记进行源文件分享 注2:本章内容巨多,大约分为三篇文章记录消化 posted @2022-06-04 00:48 陈景中 阅读…

    技术杂谈 2023年7月10日
    090
  • maven项目集成findbugs详解

    文章目录0、概述一、接入方式二、如何使用方式一、在控制台中执行打包命令方式二、使用IntelliJ IDEA的maven工具(其他IDE用户忽略)三、bug详情查看四、忽略指定的包…

    技术杂谈 2023年5月30日
    086
  • python工具—snmp流量监控,自定义粒度,业务突发可视化

    个人博客地址 现在主流监控软件和云平台提供的流量监控,监控粒度最小只能设置为1分钟,无法准确定位故障,特别是瞬时突发较大的业务 对比python的snmp库还是更喜欢用subpro…

    技术杂谈 2023年7月25日
    085
  • TCP/IP和UDP

    TCP/IP即传输控制/网络协议,是面向连接的协议,发送数据前要先建立连接(发送方和接收方的成对的两个之间必须建 立连接),TCP提供可靠的服务,也就是说,通过TCP连接传输的数据…

    技术杂谈 2023年7月24日
    082
  • idea tomcat启动后没有编译java文件

    在项目结构artifact处,Available Elements右键项目,选择 Put into Output Root,就会将依赖和classes编译到out目录 需要重启id…

    技术杂谈 2023年7月11日
    0116
  • 3分钟快速了解猪齿鱼权限

    猪齿鱼 Choerodon 数智化开发管理平台 ,提供协作、测试、DevOps及容器等工具,帮助企业拉通软件开发和项目管理的需求、设计、开发、部署、测试和运营全流程,全面满足企业研…

    技术杂谈 2023年7月24日
    0125
  • Selenium

    Selenium 简介 Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium…

    技术杂谈 2023年6月21日
    0122
  • JAVA第一课(Hello World)—-下载配置Java环境

    一、前期准备工作 1、下载Java(推荐下载JDK8) (1)百度搜索JDK8,找到下载地址(注册一下Oracle的账号就能直接下载) (2)配置环境 此电脑→属性 →高级系统设置…

    技术杂谈 2023年6月21日
    0117
  • 分布式常见面试题如何防止表单重复提交?

    前端。每次点击后都要等X秒才能点击。 数据库添加唯一索引 服务器返回表单页面时,会先生成一个subToken保存于session或redis,当表单提交时候携带token,如果to…

    技术杂谈 2023年5月31日
    0134
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球