当前位置: 首页 > 知识库问答 >
问题:

.png和.jpg文件的解密

祝高超
2023-03-14

我正在尝试修改我正在使用的软件的图形资产(为了美观性,我猜很难对图形资产做一些有害的事情),但开发人员加密了它们。我不知道为什么他决定这么做,因为我使用并修改了一堆类似的软件,而那些软件的开发人员并不费心(因为我看不出为什么加密这些资产是必要的)。

总之,下面是这些加密图形资产的示例

有办法解密吗?如果是的话,我该怎么做呢?

共有1个答案

宋腾
2023-03-14

头“CF10”似乎是一个私人添加的签名,表示文件的其余部分是“编码的”。这是一个非常简单的异或编码:异或8dh是我尝试的第一个值,我第一次也是正确的。尝试将其作为第一个值的原因是,值8d在前100个字节中出现得非常频繁,在前100个字节中,它们通常可能是很多零。

因此,“解密”非常简单:如果一个文件以四个字节cf10开头,则删除它们,并对文件的其余部分应用异或8dh。解码文件显示第一个“jpg”实际上是一个很小的PNG映像(而且引导起来不是很有趣),第二个确实是一个PNG文件:

文件扩展名可以是原始文件扩展名,也可以不是原始文件扩展名;一个名为“.jpg”的示例实际上也是一个PNG文件,这可以从它的头签名看出。

下面的快速和脏的C源代码将对图像进行解码。同样的程序也可以调整为对它们进行编码,因为异或操作是完全相同的。唯一需要的是添加一点逻辑流:

  1. 读取输入文件的前4个字节(最大值),并测试这是否形成字符串cf10
  2. 如果不是,则不对文件进行编码:
    A。将cf10写入输出文件
    b。通过对每个字节应用异或8dh对图像进行编码
  3. 如果是,
    b。通过对每个字节应用异或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;
}
 类似资料:
  • 问题内容: 我环顾四周,阅读文档,没有找到任何方法或解决方案,所以我在这里问。是否有可用的软件包可用于使用Python将JPG图像转换为PNG图像? 问题答案: 为此,您始终可以使用Python图像库(PIL)。可能还会有其他包/库,但是我之前曾用过它来在格式之间进行转换。 这适用于Windows下的Python 2.7(适用于Python 2.7的Python Imaging Library 1

  • 了解如何从 Adobe XD 中将适用于生产的资源导出为 PNG、SVG、JPG 和 PDF 文件。 您可以与开发人员共享适用于生产的资源,用于网站或移动应用程序。设计资源可以从 XD 导出为 PNG、SVG、JPG 和 PDF,并针对 iOS、Android 或 Web 部署进行优化。 您可以导出项目中的特定资源或文本、特定画板或所有画板。如果您在 Mac 上使用 XD,则还可以将资源导出到其他

  • 本文向大家介绍对python遍历文件夹中的所有jpg文件的实例详解,包括了对python遍历文件夹中的所有jpg文件的实例详解的使用技巧和注意事项,需要的朋友参考一下 python发现文件夹下所有的jpg文件,并且安装文件排放的顺序输出 glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:”*”, “?

  • 我目前正在尝试编写一个程序,将文本编码到一个png文件中,只改变我想在图片中编码的每个字母的最低有效位,例如我有一个'a',它是65,我使用8个不同的字节来编码字母a。所以01010100<-1010110<-11011010<-10101010<-1010101010<-1010101010<-10101010<-10101010<-10101010<-10101010<-10101010<-1

  • 本文向大家介绍Android png透明图片转jpg时背景变黑的解决方法,包括了Android png透明图片转jpg时背景变黑的解决方法的使用技巧和注意事项,需要的朋友参考一下 在做view保存图片后,压缩格式转为jpg的时候出现了黑色背景,其根本原因在于透明背景时背景的情况下,转换为jpg的时候会变成黑色背景,原因是PNG支持透明图而 JPG格式不支持透明背景。 我们的解决方案如下: 总结 以

  • 问题内容: 是否可以捕获或打印html画布中显示为图像或pdf的内容? 我想通过画布生成图像,并能够从该图像生成png。 问题答案: 原始答案是针对类似问题的。这已被修改: 使用IMG中的值,您可以将其写为新图像,如下所示: