gpt4 book ai didi

c - 二进制数据的模式搜索

转载 作者:行者123 更新时间:2023-11-30 18:37:25 25 4
gpt4 key购买 nike

我正在尝试用 C 语言构建防病毒软件。我这样做是这样的:

  1. 读取病毒数据和图片文件进行扫描。

  2. 检查图片数据中是否出现病毒数据。

我这样读取扫描文件和病毒文件的数据:(我以二进制方式读取文件,因为文件是图片(.png))

// open file
file = fopen(filePath, "rb");
if (!file)
{
printf("Error: can't open file.\n");
return 0;
}

// Allocate memory for fileData
char* fileData = calloc(fileLength + 1, sizeof(char));

// Read data of file.
fread(fileData, fileLength, 1, file);

在我读取文件数据和病毒数据后,我检查病毒是否出现在文件中,如下所示:

char* ret = strstr(fileData, virusID);
if (ret != NULL)
printf("Infetecd file");

即使在我的图片中我有 VirusID,它也不起作用。我想检查图片的二进制数据中是否出现了病毒的二进制数据。

例如:我的病毒的二进制数据 http://pastebin.com/xZbWA9qu

我的图片的二进制数据(带有病毒):http://pastebin.com/yjXr84kr

最佳答案

首先,注意fread的参数顺序,fread(void *ptr, size_t size, size_t nmemb, FILE *stream);这样就可以得到字节,最好执行 fread(fileData, 1, fileLength, file);。您的代码将返回 0 或 1 取决于文件中是否有足够的数据可供读取,而不是已读取的字节数。

第二,strstr是搜索字符串,而不是内存块,为了搜索二进制 block ,需要自己编写,也可以使用GNU扩展函数memmem.

// Allocate memory for fileData
char *fileData = malloc(fileLength);

// Read data of file.
size_t nread = fread(fileData, 1, fileLength, file);

void *ret = memmem(fileData, nread, virusID, virusLen);
if (ret != NULL)
printf("Infetecd file");

关于c - 二进制数据的模式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com