【问题标题】:Delphi encoding德尔福编码
【发布时间】:2014-06-18 22:40:17
【问题描述】:

我工作的公司有一个不再受支持的程序,称为 QADisplay。该程序内部是一个用于注释图像的工具。它与 Photoshop 非常相似,因为它采用基于层的方法来处理注释,每个注释在 Delphi 7 中作为自己的类。这些注释存储为基础图像和文本文件,其中包含描述注释内容的信息。

问题在于注释中显示的文本以某种方式编码在文本文件中。例如,如果注释显示为“Arial”(不带引号),则文本文件将写为: TEXT(注释类型) 5(文字字符串的长度,在这种情况下:Arial) 07)I86P(编码后的字符串)

我需要做的是从注释中提取所有文本,为安装我们的新软件系统做准备。

我不熟悉 Delphi,也无法访问源代码。我试图反汇编可执行文件,但在那里运气不佳。有人对如何解码这个有任何想法吗?我用谷歌搜索了一下(Arial“07)I86P”),发现了一些与病毒扫描错误日志和类似性质的东西有关的结果,但我发现与我遇到的问题有关的任何东西都没有骰子。

【问题讨论】:

    标签: delphi encoding character-encoding delphi-7


    【解决方案1】:

    这不是标准的文本编码。也许它是加密的?

    如果没有文档或与原始开发人员联系,您将不得不对应用程序进行逆向工程。使用 IDA 之类的反汇编器/调试器,如果您可以在应用程序将 07)I86P 加载到内存后暂停应用程序,则可以在处理字符时按照代码进行操作,这将帮助您重建解码算法。

    【讨论】:

    • 如果我不得不猜测,它可能是类似于 base64 的算法。 Arial 是 40 位,07)I86P 是 56 位。 40可以被7整除(07)I86P的长度),所以Arial的原始位可以分成7组,每组5位,然后每组可以作为编码字符查找表的索引。 IOW:Arial=41 72 69 61 6C=01000001 01110010 01101001 01100001 01101100=01000 00101 11001 00110 10010 11000 01011 01100=8 5 25 6 18 24 11 12=07)I86P?只是一个猜测,没有更多的样本可供查看......
    • 我很接近 :) UUE 使用类似于我描述的位组,但使用 6 位组:"Arial" = 0x41 0x72 0x69 0x61 0x6C = 01000001 01110010 01101001 01100001 01101100 = 010000 010111 001001 101001 011000 010110 1100[00] = 16 23 9 41 24 22 48 -> 添加 32 -> 16+32 23+32 9+32 41+32 24+32 22+32 48+32 = 0x30 0x37 0x29 0x49 0x38 0x36 0x50 = "07)I86P"。 UUE 在需要时使用填充(shown as [00] 以上),但由于您的文本文件包含源长度,解码 UUE 可以忽略填充。
    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多