基于二进制码的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第三方库


热门话题
java API以编程方式创建ARM模板   java是否有合适的模式或方法来遍历数据和动态构造对象?   oop((类名)InstanceName)在java中有什么用途?   接口Java类方法未初始化   Java类:静态字段在内存中的位置?   java错误:服务类没有零参数构造函数   使用JDBC模板的java参数化sql查询   安卓致命异常:主java。lang.RuntimeException:   amazon web服务使用IAM角色从java访问AWS S3   java如何在Gradle中使用ojdbc   带块的Java类实例化   java日志记录是否有很大的开销,即使它是关闭的?   java JetBrains@Contract using字段   BluetoothGattCallback中从未调用java onDescriptorWrite()   java HttpMessageConverter无效的EOF处理   java在安卓的主活动类中调用另一个类   java防止在spring hibernate中存储重复值的正确方法   java如何在JAVADOC注释中使用变量?