我正在尝试解码多人游戏网络流量中的聊天字符串。它编码它们的方式似乎是任意编码。我一直在使用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,并且对前一个(?)字符的编码有影响。我不知道其他任何字符会影响这种编码。

这里是字符串“猫回来了”的编码。

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 ...


评论


哇,好被发现!这种过程是否有名称,还是只是一些自定义编码来阻止分析?服务器以另一种编码方式将文本发送给其他播放器,如果自己不知道,我可能会发布另一个问题。

– Adrian Rothan
16年4月8日在23:52

您可以称其为移位,但是没有通用名称行rot13或caesar(我知道)。是的,它的目的似乎是令人困惑,但正如您所看到的那样,它并不是很好。 (我承认我有一定的领先优势,因为它使用了类似的技术,所以我已经看到了)。但是,以二进制形式记录原始消息和编码后的消息,并对它们执行一些简单的操作(“异或”,“取反”,“加”,“减”,“旋转”),在处理这些简单的混淆类型时通常会为您提供正确的思路。

–贡特拉姆·布洛姆(Guntram Blohm)
16年4月9日在23:04