这是已知的编码或密码吗?(多人游戏网络流量)

逆向工程 字符串 联网
2021-06-11 07:25:50

我正在尝试解码多人游戏网络流量中的聊天字符串;它对它们进行编码的方式似乎是某种任意编码。我一直在使用wireshark分析到服务器的UDP流量。我的目标是找到一种从十六进制返回原始消息的通用算法。我能够获得任何字符串的编码十六进制结果,所以这是我记录的最有说服力的一对:

从字符串

'aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk
 lll mmm nnn ooo ppp qqq rrr sss ttt uuu vvv www xxx yyy zzz AAA BBB CCC'

(换行只是为了便于阅读)发送的数据包中的结果是这样的

0020   b9 b0 3c 90 **b0 b0 30 10 31 31 31 90 b1 b1 31 10
0030   32 32 32 90 b2 b2 32 10 33 33 33 90 b3 b3 33 10
0040   34 34 34 90 b4 b4 34 10 35 35 35 90 b5 b5 35 10
0050   36 36 36 90 b6 b6 36 10 37 37 37 90 b7 b7 37 10
0060   38 38 38 90 b8 b8 38 10 39 39 39 90 b9 b9 39 10
0070   3a 3a 3a 90 ba ba 3a 10 3b 3b 3b 90 bb bb 3b 10
0080   3c 3c 3c 90 bc bc 3c 10 3d 3d 3d 90 a0 a0 20 10
0090   21 21 21 90 a1 a1 a1** 2a 66 10 04 20 02 34 5a 42

我已经用星号标记了我认为相关数据的位置。如您所见,似乎

a = b0, b = 31
c = b1, d = 32
e = b2, f = 33
g = b3, h = 34
i = b4, j = 35
k = b5, l = 36
m = b6, n = 37
o = b7, p = 38
q = b8, r = 39
s = b9, t = 3a
u = ba, v = 3b
w = bb, x = 3c
y = bc, z = 3d

然而,这不是 1:1 编码。这里的空格字符是 90 或 10,它会影响前一个(?)字符的编码。我不知道任何其他字符会影响这样的编码。

这是字符串 'the cat is back' 的编码

hex:       3a b4 32 90 b1 30 3a 90 b4 39 10 b1 b0 b1 35 90 
desired:   t  h  e     c  a  t     i  s     b  a  c  k    
actual:    t  e  d     c  ?  t     i  r     c  a  c  j

空格不仅仅对这里的前一个字符产生影响。

这里有模式吗?到底是怎么回事?欢迎任何帮助或猜测。

1个回答

aaa b以二进制形式编写示例以及编码字符串0xb0 0xb0 0x30 0x10 0x31

       a        a        a      ' '        b
01100001 01100001 01100001 00100000 01100010

10110000 10110000 00110000 00010000 00110001

看起来编码字符串的每个字节都是原始字节右移一位,下一个字节的最后一位复制到当前字节的高位。

所以,让我们颠倒一下:如果我们使用你的编码字符串, 3a b4 32 90 b1

00111010 10110100 00110010 10010000 10110001

每个字节左移一位,并用前一个字节的高位替换低位,我们得到:

01110100 01101000 01100101 00100000 01100011 ...
      74       68       65       20       63 ...
       t        h        e      ' '        c ...