找出专有二进制文件格式的字符串编码/转换

逆向工程 文件格式 去混淆 编码 字符串
2021-07-03 23:47:20

我正在尝试对专有文件格式进行逆向工程,以便能够从这种格式的文件中提取某些字符串。我手头有写入文件的应用程序。

通过反复试验,我发现了一些字符,但是我目前不知道这是哪种编码,或者是否存在某种混淆事物的转变。

我通过使用专有应用程序保存字符串发现的字母表如下所示:

0x3B: 'a'
0x38: 'b'
0x39: 'c'
0x3E: 'd'
0x3F: 'e'
0x3C: 'f'
0x3D: 'g'
0x32: 'h'
0x33: 'i'
0x30: 'j'
0x31: 'k'
0x36: 'l'
0x37: 'm'
0x34: 'n'
0x35: 'o'
0x2A: 'p'
0x2B: 'q'
0x28: 'r'
0x29: 's'
0x2E: 't'
0x2F: 'u'
0x2C: 'v'
0x2D: 'w'
0x22: 'x'
0x23: 'y'
0x20: 'z'

我尝试查看 Unicode 代码点的转变。a以后你会得到 38, 42, 42, 38, 38, 42, 42, 54, 54, 58, 58, 54, 54 等的班次。

你看到任何模式了吗?除了继续通过手动试错来完成所有字符之外,关于如何进行的任何想法?真的很想得到一些基本的提示/我可以尝试的其他事情,因为这是我第一次这样做。

1个回答

这是一个简单的异或 (^) 操作,包含字节 0x5A。

用你的例子 -

'a' 0x61 ^ 0x5A = 0x3B
'b' 0x62 ^ 0x5A = 0x38
'z' 0x7A ^ 0x5A = 0x20

加上其他一些你应该能够检查的 -

'!' 0x21 ^ 0x5A = 0x7B
'4' 0x34 ^ 0x5A = 0x6E
'Q' 0x51 ^ 0x5A = 0x0B
']' 0x5D ^ 0x5A = 0x07