【发布时间】:2016-05-14 13:27:29
【问题描述】:
我正在尝试在 C 中构建防病毒软件。 我是这样做的:
读取病毒数据和图片文件进行扫描。
检查图片数据中是否出现病毒数据。
我读取扫描文件和病毒文件的数据是这样的:(我以二进制方式读取文件,因为文件是图片(.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
【问题讨论】:
-
什么是
fileLength? -
如果文件是二进制文件怎么办?
-
@SouravGhosh 它的变量,我一步一步检查长度的数量是否正确。
-
@stark 我通过二进制模式读取文件,因为文件是图片(.png)
-
您知道二进制数据可以包含嵌入的零吗?你知道在 C 语言中,字符串终止符是零吗?那么您认为如何使用
strstr之类的函数或任何其他查找字符串终止符的字符串函数?