【问题标题】:Reverse Engineer a File Format对文件格式进行逆向工程
【发布时间】:2012-02-26 07:00:58
【问题描述】:

这是我第一次尝试逆向工程,真的,我不知道该怎么做。我有一种程序性思维,没有流行加密方法的知识基础。

但是,在我看来,如果我拥有正确格式的最少数据,并且知道某个单词的数据中出现了一个或多个单词,以及该单词在数据中的开始和结束位置- 我能以某种方式发现解密整个文件的方法。

----- ENCRYPTED -------------------------------------------
HEX     44 5E 12 47 55 5E 53 17 4C 5C 49 4F 4F
ACII    D  ^  ?  G  U  ^  S  ?  L  \  I  O  O
DEC     68 94 63 71 85 94 83 63 76 92 73 79 79 
BIN     01000100 01011110 00111111 01000111 01010101 01011110 01010011 00111111    01001100 01011100 01001001 01001111 01001111
----- DECRYPTED -------------------------------------------
HEX     74 6F 20 74 61 6B 65 20 74 65 73 74 73
ASCII   t  o     t  a  k  e     t  e  s  t  s
DEC     116 111 32 116 97 107 101 32 116 101 115 116 115 
BIN     01110100 01101111 00100000 01110100 01100001 01101011 01100101 00100000 01110100 01100101 01110011 01110100 01110011

这只是一个数据样本。我知道标题信息在哪里开始和结束,因为我检查了两个具有不同标题的文件 - 所以我知道这些文件翻译成正确的单词 - 但是我从这里到哪里去识别加密过程?

*我知道人们会问为什么:这是来自 VCE(考试)文件格式,我想将其转换为 XML 或 JSON。这将使我更容易编写一个程序来比较多个考试文件中的问题和答案,追加、删除重复项和创建新的。 *

【问题讨论】:

  • 我猜你读到的是上面的 ENCRYPTED 部分?但是你从哪里得到那个 DECRYPTED 部分,实际上它没有被解密?谢谢
  • @NiklasR 我能够比较多个我知道是 100% 相同的文件,除了我创建的一个值。因此,我知道上面的文字在解密后会是“参加考试”。
  • 你做这件事的感觉如何?我正在考虑做类似的事情。
  • @WernerCD 很抱歉回复晚了,但在我从事这个项目的过程中,他们对他们的软件进行了一些更新。我从来没有得到解密的问题/答案/任何图像数据。不过,每个人都非常乐于助人,下面有一些链接提供了加密算法和方法的示例。祝你好运!
  • 你找到路了吗?我看到它每次保存时都会更改整个文件。即使你没有改变任何东西。

标签: reverse-engineering file-format


【解决方案1】:

尝试对两个字符串进行异或运算。你得到的是

HEX     30 31 32 33 34 35 36 37 38 39 3A 3B 3C
ASCII   0  1  2  3  4  5  6  7  8  9  :  ;  <

看到模式了吗?

【讨论】:

  • 是的,位操作,在我的脑海里有这个,但没有看它。你怎么这么快就知道了?我一直在盯着这个看!
  • @Markus:这是我尝试的第一件事。 (第二件事是模256的加减法。)此外,比较加密和解密的数据有点类似,因为附近的ASCII码(例如解密文本中的两个空格)清楚地映射到附近的(但不相同)值。
  • @IlmariKaronen 谢谢!看起来我在这个过程中还有几个步骤要走。考试的标题似乎是唯一以这种方式编码的东西,文件中的其他数据在使用相同的规则时会变成乱码,但我能够检测到每个 vce 文件的考试标题。
  • 你能告诉我们你为了得到结果而异或的“两个字符串”吗?应该如何解释该结果:它是否已经是搜索到的异或键?一些细节会使这个答案更有价值。
  • @masi:上面的问题包含两个字节字符串(标记为“加密”和“解密”),每个都以几种表示形式(十六进制、ASCII、十进制、二进制)显示。这些是我异或在一起的字符串。而且,是的,这直接给出了密钥流,当与明文异或时,产生密文,反之亦然。当然,由于问题中的示例字符串只有 12 个字节长,我们只得到了密钥流的前 12 个字节,但这些字节已经暗示了一个相当明显的模式。
【解决方案2】:

当您有一个 hex 文件并且您认为它已加密时,请务必先尝试 XOR'ing(按位运算)。
有很多原因。

  • 通过 XOR 应用加密后,您可以再次应用 XOR 对其进行解密
  • 因此,这是一种非常简单的加密方法。
    您可以通过以下 wiki 页面了解更多详细信息:
    XOR_wiki
    此外,如果您可以访问“编程艺术”(还有时间参考 :D),请阅读按位操作部分。
    很好地解释了这一点。值得一读的伙伴:)

【讨论】:

【解决方案3】:

问题字段 XOR 值以 19 开头,然后是每隔一个字符。

加密:

6D 1A 74 1C 3D 1E 6B 20 40 22 48 24 40 26 07 28 5D 2A 4E 2C 5E 2E 5B 30 42 32

异或:

19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32

已解密:

t?o? ?t?a?k?e? ?t?e?s?t?s?

【讨论】:

  • 也许它被编码为 UTF-16 而不仅仅是带有“其他字符”的 ASCII?
猜你喜欢
  • 2015-12-20
  • 2010-10-04
  • 2010-09-12
  • 2012-07-21
  • 2016-04-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2010-12-06
相关资源
最近更新 更多