2014-10-22 2 views
0

아래에 포함 된 코드를 사용하여 일부 그래픽 파일의 암호를 해독했습니다. 나는 그것을 다시 암호화 할 수 있도록 그것을 수정하고 싶다. 불행히도 저는 그래픽 디자이너이고 프로그래밍에 관한 기본적인 지식 만 가지고 있습니다. 그래서이 코드를 제가 직접 수정할 수있는 수준에서 이해하지 못합니다.파일 암호를 해독하는 대신 암호화 할 코드를 변경하는 방법은 무엇입니까?

#include <stdio.h> 

int main (int argc, char **argv) 
{ 
    FILE *inp, *outp; 
    int i; 
    char sig[] = "CF10", *ptr; 

    if (argc != 3) 
    { 
     printf ("usage: decode [input] [output]\n"); 
     return -1; 
    } 
    inp = fopen (argv[1], "rb"); 
    if (inp == NULL) 
    { 
     printf ("bad input file '%s'\n", argv[1]); 
     return -2; 
    } 
    ptr = sig; 
    while (*ptr) 
    { 
     i = fgetc (inp); 
     if (*ptr != i) 
     { 
      printf ("input file sig is not 'CF10'\n"); 
      return -2; 
     } 
     ptr++; 
    } 
    outp = fopen (argv[2], "wb"); 
    if (outp == NULL) 
    { 
     printf ("bad output file '%s'\n", argv[1]); 
     return -2; 
    } 
    do 
    { 
     i = fgetc(inp); 
     if (i != EOF) 
      fputc (i^0x8d, outp); 
    } while (i != EOF); 
    fclose (inp); 
    fclose (outp); 
    printf ("all done. bye bye\n"); 
    return 0; 
} 
+0

이것은 단순한 XOR 일 뿐이므로 아무 것도 변경할 필요가 없습니다 (암호 해독과 암호화가 정확히 동일 함). – Dmitri

+0

"프로그램 입력 출력"매개 변수와 함께 명령 프롬프트에서이 프로그램을 사용하려고하면 아래의 주석에 "입력 파일이 CF10이 아닙니다"라는 메시지가 나타납니다. 뭐가 잘못 됐는지 말해 줄래? – Forc3ofWill

+0

파일의 첫 번째 바이트가 "CF10"인 코드 검사와 비슷하지만 "CF10"을 ""로 변경하여 검사를 건너 뛸 수 있습니다. 여기서 "sig []"는 파일의 상단 근처에서 초기화됩니다 . – Dmitri

답변

3

이 내용은 기껏해야 내용을 모호하게 할 수 있습니다. 그것은 'xor'암호화를 사용하며, 그 장점 중 하나는 자기 해독이라는 것입니다.

암호화되지 않은 파일에서 코드를 실행하고 암호화 된 파일 또는 암호화 된 파일을 가져 와서 암호화되지 않은 파일을 가져올 수 있습니다.


코드를 잘못 읽었습니다. 죄송합니다. 당신의 코드는 CF10 매직 넘버를 읽고, xor'ing 한 후에 나머지 데이터를 씁니다; CF10은 그것이 가려져 있다고 말한다. 모호하지 않은 데이터를 가려 내기 위해서는 출력 파일에 CF10 매직 넘버를 쓴 다음 입력을 읽고이를 읽은 다음 작성해야합니다. 세련된 버전의 코드는 파일의 처음 4 바이트 (CF10과 동일 함)를 테스트하여 파일을 다시 보지 않고 이미 가려져 있지 않도록합니다.

암호화 또는 해독할지 여부를 결정하는 옵션 인수를 처리해야 할 수 있습니다 (흐려 지거나 눈에 띄지 않음). 또는 파일의 처음 4 바이트를 사용하여 암호화 또는 암호 해독 여부를 알릴 수 있습니다.

원문 대답 —의 기본 요점은 암호화 또는 암호 해독이 근본적으로 동일한 작업임을 의미합니다. —은 유효합니다.

+0

"프로그램 입력 출력"매개 변수와 함께 명령 프롬프트에서이 프로그램을 사용하려고하면 "입력 파일이 CF10이 아닙니다."가 표시됩니다. 그래서 나는 결국 코드를 ​​수정해야한다고 생각합니다. 나는 아주 작은 수정이 필요하다고 생각하지만 C에 대한 나의 지식은 존재하지 않으므로 나는 이것을 할 수 없다 : – Forc3ofWill

관련 문제