Как я могу использовать memfrob () для шифрования всего файла? - PullRequest
0 голосов
/ 19 сентября 2010
#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);
}

Вот мой код. Если вы не можете сказать, я не уверен, что я делаю. Я гуглил около часа, и я не видел пример того, как использовать 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 с 42. Так я могу получить еще одну подсказку?

Ответы [ 2 ]

3 голосов
/ 19 сентября 2010

Вам нужно передать memfrob фрагмент памяти, содержащий содержимое файла, а не имя файла.Это происходит сбой, потому что вы передаете буфер в постоянную память, а затем пытаетесь изменить его.

Изучите функции ввода / вывода open и read или, альтернативно, 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
}
2 голосов
/ 19 сентября 2010

Ну, несколько вещей здесь не так.Незначительная проблема заключается в том, что вы передаете ему местоположение файла, а не сам файл.Читайте о том, как выполнять файловый ввод / вывод в C (это довольно хорошая ссылка) .

Реальная проблема в том, что вы, похоже, думаете, что это шифрование.Это на самом деле не зашифровывает ваш файл от чего-либо, кроме самых тривиальных проблем безопасности (например, кто-то случайно открывает ваш файл).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...