#include <Windows.h>
void memfrob(void * s, size_t n)
{
char *p = (char *) s;
while (n-- > 0)
*p++ ^= 42;
}
int main()
{
memfrob("C:\\Program Files\\***\***\\***\***\\***", 30344);
}
有我的代码。如果你不能说,我不确定我在做什么。我用Google搜索了大约一个小时,我还没有看到如何使用memfrob()的例子,这可能就是我迷失的原因。我试图传递文件的名称,然后传递文件的大小,以字节为单位,但我的程序只是崩溃。
好吧,这就是我现在所拥有的:
#include <Windows.h>
#include <stdio.h>
int count = 0;
FILE* pFile = 0;
long Size = 0;
void *memfrob(void * s, size_t n)
{
char *p = (char *) s;
while (n-- > 0)
*p++ ^= 42;
return s;
}
int main()
{
fopen_s(&pFile, "C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj", "r+");
fseek(pFile, 0, SEEK_END);
Size = ftell(pFile);
char *buffer = (char*)malloc(Size);
memset(buffer, 0, Size);
fread(buffer, Size, 1, pFile);
fclose(pFile);
memfrob(buffer, Size);
fopen_s(&pFile, "C:\\Program Files\\CCP\\EVE\\lib\\corelib\\nasty.pyj", "w+");
fwrite(buffer, Size, 1, pFile);
fclose(pFile);
}
在我的调试器中,看起来fread没有写任何东西来缓冲,而我的结尾文件只是2A一遍又一遍,这是00 xor'd with 42.所以我可以得到另一个提示吗?
答案 0 :(得分:3)
您需要传递memfrob
包含文件内容的内存,而不是文件名。它正在崩溃,因为你传入一个只读内存的缓冲区,然后尝试修改它。
调查open
和read
I / O函数,或者fopen
和fread
。您的主线应该类似于:
int main() {
// open file
// find size of file
// allocate buffer of that size
// read contents of file into the buffer
// close the file
// call memfrob on the buffer
// do what you want with the file
// free the buffer
}
答案 1 :(得分:2)
嗯,这里有几件事是错的。 小问题是你传递文件的位置而不是文件本身。阅读有关如何在C (this being a pretty good link)中执行文件I / O的信息。
真正的问题是你似乎认为这是加密。除了最琐碎的安全问题(例如随机打开文件的人)之外,这并不会真正加密您的文件。