所以我正在尝试从文件偏移量到文件结尾写入零序列,这是我的代码:
HANDLE hFile = CreateFileA((LPCSTR)"hello.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile < 0) return -1;
DWORD fileSize = GetFileSize(hFile, NULL);
DWORD offset = 0x13d4;
DWORD check = NULL;
DWORD pos = SetFilePointer(hFile, offset, 0, FILE_BEGIN);
BYTE* zeroes = new BYTE[fileSize-offset];
ZeroMemory((PVOID)zeroes, fileSize-offset);
WriteFile(hFile, (PVOID)&zeroes, fileSize-offset, &check, NULL);
printf("Wrote %d bytes at %x\n", check, pos);
if(check < fileSize-offset)
{
printf("[+] An error occured while trying to patch the file.");
return EXIT_FAILURE;
}
CloseHandle(hFile);
现在,我检查了我的fileSize是否正确,文件offset(pos
)与相同offset
,我的文件句柄有效,写入的字节数check
等于zeroes
缓冲区长度,最后一个错误为0。但是,当我检查我的文件处于十六进制模式,最后没有添加任何零。
有任何想法吗?
提前致谢
线
WriteFile(hFile, (PVOID)&zeroes, fileSize-offset, &check, NULL);
是错的。您正在将数据写入指针变量zeroes
本身,而不是变量所指向的内容。通常,指针只有4或8个字节,因此如果文件足够大,则可能导致超出范围的访问。
在删除&
之前zeros
,请先写入指向的缓冲区的内容zeroes
。
WriteFile(hFile, (PVOID)zeroes, fileSize-offset, &check, NULL);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句