如何使用memfrob()加密整个文件?

时间:2010-09-18 21:54:16

标签: encryption

#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.所以我可以得到另一个提示吗?

2 个答案:

答案 0 :(得分:3)

您需要传递memfrob包含文件内容的内存,而不是文件名。它正在崩溃,因为你传入一个只读内存的缓冲区,然后尝试修改它。

调查openread I / O函数,或者fopenfread。您的主线应该类似于:

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的信息。

真正的问题是你似乎认为这是加密。除了最琐碎的安全问题(例如随机打开文件的人)之外,这并不会真正加密您的文件。