基于二进制码的yara规则生成

mkYARA的Python项目详细描述


mkyara

在恶意软件中基于可执行代码编写yara规则可能是一项乏味的任务。分析师不能简单地将原始可执行代码复制并粘贴到yara规则中,因为此代码包含变量值,如内存地址和偏移量。分析员必须反汇编代码和通配符代码中可以在样本之间更改的所有部分。mkyara的目标是通过生成可执行代码签名来自动编写规则的这一部分,这些可执行代码签名通配符将所有这些非静态的可执行代码片段通配符化。

安装

安装和安装pip包一样简单。

pip install mkyara

用法

importcodecsfromcapstoneimportCS_ARCH_X86,CS_MODE_32frommkyaraimportYaraGeneratorgen=YaraGenerator("normal",CS_ARCH_X86,CS_MODE_32)gen.add_chunk(b"\x90\x90\x90",offset=1000)gen.add_chunk(codecs.decode("6830800000E896FEFFFFC3","hex"),offset=0x100)gen.add_chunk(b"\x90\x90\x90\xFF\xD7",is_data=True)rule=gen.generate_rule()rule_str=rule.get_rule_string()print(rule_str)

独立工具

mkyara附带了一个独立的跨平台工具,它可以为运行在linux下的windows二进制文件创建签名。

usage: mkyara [-h] [-i {x86}] [-a {32,64,x86,x64}] -f FILE_PATH [-n RULENAME]
              -o OFFSET -s SIZE [-m {loose,normal,strict}] [-r RESULT] [-v]

Generate a Yara rule based on disassembled code

optional arguments:
  -h, --help            show this help message and exit
  -i {x86}, --instruction_set {x86}
                        Instruction set
  -a {32,64,x86,x64}, --instruction_mode {32,64,x86,x64}
                        Instruction mode
  -f FILE_PATH, --file_path FILE_PATH
                        Sample file path
  -n RULENAME, --rulename RULENAME
                        Generated rule name
  -o OFFSET, --offset OFFSET
                        File offset for signature
  -s SIZE, --size SIZE  Size of desired signature
  -m {loose,normal,strict}, --mode {loose,normal,strict}
                        Wildcard mode for yara rule generation
                        loose = wildcard all operands
                        normal = wildcard only displacement operands
                        strict = wildcard only jmp/call addresses
  -r RESULT, --result RESULT
                        Output file
  -v, --verbose         Increase verbosity

IDA插件

mkyara附带一个ida插件,通过选择一组指令并选择mkyara->;生成yara规则选项之一,可以轻松创建yara签名。安装与安装pip包和将mkyara_plugin.py复制到您的ida plugin目录一样简单。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaSWT树项目高度   java如何通过单击按钮向JFrame添加文本字段?   java keytool如何保护密钥?   java在Apache Camel中构建一个报告来测量事务时间   安卓为什么这个Java类的参数不能按预期工作?   java参数化JUnit中的测试方法,而不仅仅是整个类   java N级地图,需要把地图放在地图里面   屏幕右侧的java抽屉?   JAVA网MalformedURLException:解析xml时没有协议异常   java为什么调用时出现JSON异常。getJSONObject()?   socketJava服务器关闭代码   java如何为计算器生成命令行参数   java如何将活动意图传递给另一个类?   java Apache HttpClient临时错误:NoHttpResponseException   java JVM选项XX:UseFastEmptyMethods/XX:UseFastAccessorMethods   类Java构造函数问题   验证PDF和Excel文件类型的java模式   java循环菜单问题   java如何返回tar。Spring中通过http的gz文件   java使用NetBeans设置图像库