在 C++ 中使用 libyara 扫描仪时出现问题

问题描述 投票:0回答:1

因此,我在 C++ 中使用 libyara 并尝试创建一个扫描器,根据给定的 yara 规则扫描文件,并在找到任何匹配项时返回。 这是该项目的流程 -

  1. 使用compiler.cpp(我自己使用libyara制作的c++编译器)将yara规则源文件编译为已编译的yara规则文件
  2. 然后在我的 Scanner.cpp 文件中使用编译的规则来根据提供给它的编译的规则文件扫描文件。

这是我的 yara 规则源文件,扩展名为 .yar -

rule AlwaysTrue {condition:true }

下面,我附上了我的compiler.cpp和scanner.cpp文件(这里以txt格式上传,因为不允许使用cpp) 扫描.txt 编译.txt

现在,根据规则文件,我应该始终获得匹配,因为规则始终为真,但我收到未知的回调消息。如我的扫描仪文件中所述

但是,当我尝试使用相同的 .yar 规则文件使用 yara cli 扫描我的文件时,它可以工作并给我一个匹配。

现在我不知道我错在哪里,但希望得到任何帮助:)(已经坚持了两天了:/)

我编译了我的代码,并运行了 ./scanner 但它给了我这个输出 -

  • 正在初始化 libyara...
  • Libyara初始化成功
  • 从文件加载已编译的规则...
  • 规则加载成功
  • 创建扫描仪...
  • 扫描仪创建成功
  • 设置回调...
  • 正在扫描文件...
  • 回调:收到消息,代码为-2052980432
  • 回调:收到消息,代码为-2052980432
  • 文件扫描成功
  • Libyara敲定成功

然而,它应该给我匹配我的 yara 规则,而不是

Callback: Message received with code -2052980432 Callback: Message received with code -2052980432

yara
1个回答
0
投票

YR_CALLBACK_FUNC
的定义如下:

typedef int (*YR_CALLBACK_FUNC)(
    YR_SCAN_CONTEXT* context,
    int message,
    void* message_data,
    void* user_data);

您的回调函数具有以下签名:

int callback(int message, void* message_data, void* user_data);

这意味着您的“消息”实际上是 YR_SCAN_CONTEXT 的地址。 修复了

callback
的原型后,我得到:

Scanning a file...
Match found for rule: AlwaysTrue
Callback: Message received with code 3
File scanned successfully
Libyara finalized successfully
© www.soinside.com 2019 - 2024. All rights reserved.