頭文件「CF10」似乎是一個私人添加的簽名,表示文件的其餘部分是「編碼的」。這是一個非常簡單的異或編碼:xor 8Dh
是我嘗試的第一個值,我也是第一次。 嘗試後面的推理原因是,作爲第一個值,值8D
在前100個字節中非常頻繁地出現,其中它們通常可能大量爲零。
「解密」因此非常簡單:如果文件以四個字節0開頭,請刪除它們並在文件的其餘部分應用xor 8Dh
。解碼文件顯示第一個「JPG」,其實是一個很小的PNG圖像(而不是一個很有趣的一個啓動),二是確實是一個PNG文件:
文件擴展名可能會或可能不是原文文件擴展名;一個名爲「.jpg」的樣本實際上也是一個PNG文件,可以通過它的頭部簽名來看到。
以下快捷C源碼將解碼爲的圖片。同樣的程序也可以調整到這個編碼他們也是,因爲xor
的操作是完全一樣的。唯一需要的是增加一個比特邏輯流:
- 讀取輸入文件和測試的前4個字節(最大)如果此形成串
CF10
- 若否,該文件不被編碼:
a。將CF10
寫入輸出文件
b。通過在每個字節上應用xor 8Dh
來編碼圖像
- 如果是的話,
b。通過在每個字節上應用xor 8Dh
來解碼圖像。
正如你所看到的,沒有「3a」和兩個「b」步驟是相同的。
#include <stdio.h>
#include <string.h>
#ifndef MAX_PATH
#define MAX_PATH 256
#endif
#define INPUTPATH "c:\\documents"
#define OUTPUTPATH ""
int main (int argc, char **argv)
{
FILE *inp, *outp;
int i, encode_flag = 0;
char filename_buffer[MAX_PATH];
char sig[] = "CF10", *ptr;
if (argc != 3)
{
printf ("usage: decode [input] [output]\n");
return -1;
}
filename_buffer[0] = 0;
if (!strchr(argv[1], '/') && !strchr(argv[1], 92) && !strchr(argv[1], ':'))
strcpy (filename_buffer, INPUTPATH);
strcat (filename_buffer, argv[1]);
inp = fopen (filename_buffer, "rb");
if (inp == NULL)
{
printf ("bad input file '%s'\n", filename_buffer);
return -2;
}
ptr = sig;
while (*ptr)
{
i = fgetc (inp);
if (*ptr != i)
{
encode_flag = 1;
break;
}
ptr++;
}
if (encode_flag)
{
/* rewind file because we already read some bytes */
fseek (inp, 0, SEEK_SET);
printf ("encoding input file: '%s'\n", filename_buffer);
} else
printf ("decoding input file: '%s'\n", filename_buffer);
filename_buffer[0] = 0;
if (!strchr(argv[2], '/') && !strchr(argv[2], 92) && !strchr(argv[2], ':'))
strcpy (filename_buffer, OUTPUTPATH);
strcat (filename_buffer, argv[2]);
outp = fopen (filename_buffer, "wb");
if (outp == NULL)
{
printf ("bad output file '%s'\n", filename_buffer);
return -2;
}
printf ("output file: '%s'\n", filename_buffer);
if (encode_flag)
fwrite (sig, 1, 4, outp);
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;
}
http://stackoverflow.com/questions/113641/file-format-of-cf10-jpg – 2014-10-18 16:48:24
你的第一個例子中的字符有太高的重複次數要加密。也許你看不懂,但這更多的是圖像編碼/解碼的問題。 – 2014-10-18 16:59:02