因此,我在 C++ 中使用 libyara 并尝试创建一个扫描器,根据给定的 yara 规则扫描文件,并在找到任何匹配项时返回。 这是该项目的流程 -
这是我的 yara 规则源文件,扩展名为 .yar -
rule AlwaysTrue {condition:true }
下面,我附上了我的compiler.cpp和scanner.cpp文件(这里以txt格式上传,因为不允许使用cpp) 扫描.txt 编译.txt
现在,根据规则文件,我应该始终获得匹配,因为规则始终为真,但我收到未知的回调消息。如我的扫描仪文件中所述
但是,当我尝试使用相同的 .yar 规则文件使用 yara cli 扫描我的文件时,它可以工作并给我一个匹配。
现在我不知道我错在哪里,但希望得到任何帮助:)(已经坚持了两天了:/)
我编译了我的代码,并运行了 ./scanner 但它给了我这个输出 -
然而,它应该给我匹配我的 yara 规则,而不是
Callback: Message received with code -2052980432 Callback: Message received with code -2052980432
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