固件中的单色图像替换

逆向工程 固件
2021-06-15 01:01:38

希望我能找到可以帮助我解决这个问题的人。

我已经对电子烟着迷了,其中一种更受欢迎的受管制芯片被吹捧,它可以改变标识。

该芯片是YiHi E-Cigcar。该芯片的固件可以在http://www.yihiecigar.com/download_info/Upgrade-Software-for-SX350-50w-ONLY_OldBoot_YH_Logo_60W_20140813-Screen-flip_V2-4-d59228.html找到

我已经下载了一个 YouTube 发布者的软件来“更改”徽标,但是,在反编译他的 .NET 应用程序之后,我不相信这不会破坏我的芯片。 https://www.youtube.com/watch?v=kTy0AKTYzrg

我编写了一个应用程序,它以十六进制读取整个字符串,然后转换为二进制(假设固件未加密,并且我可以找到我正在寻找的部分图像的索引),但没有运气。

我不相信这个固件没有以某种方式打包,但我对如何找到它一无所知。

如果有人可以提供一些建议或对如何以另一种方式打开/搜索徽标有任何想法,那就太棒了。

并不是说这是一种需要,它让我夜不能寐,因为,我只是那些无法解决问题的人之一……可能就像你们中的很多人一样。

任何愿意接受挑战的人都将不胜感激。

1个回答

编译这个程序(将你的文件重命名为out1.SXI,或者在程序中更改文件名):

#include <stdio.h>

int main(int argc, char **argv) {
    char buf[256];
    int i, j;
    FILE *fp;
    int pos=0;              // file position
    int bpr=0;              // bits / bytes per row
    int blockno=0;          // 6 blocks * 8 bits = 48 rows
    if (argc>=2)
            bpr=atoi(argv[1]);
    if (bpr==0)
            bpr=64;
    if (argc>=3) {
            pos=strtol(argv[2], NULL, 0);
    }

    if ((fp=fopen("out1.SXI", "rb"))==NULL) {
            perror("out1.SXI");
            exit(1);
    }
    fseek(fp, pos, 0);
    while(fread(buf, bpr, 1, fp)) {
            if (blockno++%6==0)
                    printf("%06x\n", pos);
            for (j=128; j>0; j>>=1) {
                    for (i=0; i<bpr; i++) {
                            if (buf[i]&j)
                                    putchar('X');
                            else
                                    putchar(' ');
                    }
                    putchar('|');
                    putchar('\n');
            }
            pos+=bpr;
    }
}

然后运行它

$ xdump 64 0x83D4 | less
$ xdump 64 0x10FC8 | less 

我很确定这些是图像,尽管我无法理解它们;但是,如果将它们与刷新固件时设备显示的内容进行比较,也许可以。

此外,这假设显示器的分辨率为 64x48 像素,就像电影中的分辨率一样;您可能想通过放大镜拍照以检查它们没有改变分辨率。尽管 64x48 也是我的程序在生成这些图像时所假设的。

当然,如果显示的偏移量是字节偏移量,那么解压.rar 后得到的文件似乎比电影中的文件大得多。固件可能由两部分组成,一个是工厂部分(您可以下载的固件)和一个 OEM/供应商部分,其中包含图像(您无法下载,但在电影中使用),固件升级程序根据文件格式/内容决定覆盖哪一个。