Encryption 解码/解密:入门

Encryption 解码/解密:入门,encryption,decode,Encryption,Decode,我截获了计算机软件和远程服务器软件之间的数据包。其想法是在两者之间对API进行反向工程,并将API集成到另一个软件模块中 问题是我不知道如何读取数据。下面是92字节十六进制数据的示例: 10:02:42:6d:95:72:1a:70:be:00:ba:cc:a9:95:72:81:49:dd:00:ae:39:bd:c2:4a:0e:00:d1:fe:a6:01:fc:51:09:42:c1:49:dd:00:59:57:31:b2:3a:ce:00:d1:7e:7c:fa:1d:65:c9:4

我截获了计算机软件和远程服务器软件之间的数据包。其想法是在两者之间对API进行反向工程,并将API集成到另一个软件模块中

问题是我不知道如何读取数据。下面是92字节十六进制数据的示例:

10:02:42:6d:95:72:1a:70:be:00:ba:cc:a9:95:72:81:49:dd:00:ae:39:bd:c2:4a:0e:00:d1:fe:a6:01:fc:51:09:42:c1:49:dd:00:59:57:31:b2:3a:ce:00:d1:7e:7c:fa:1d:65:c9:42:41:7c:b6:40:dd:f5:71:52:f1:c7:65:12:be:c0:86:71:03:62:eb:81:49:dd:00:dd:f5:71:dc:7a:ce:00:d1:be:00:ba:1d:65:61:52:c2
这将转换为ASCII字符串:

??Bm?r?p??????r?I???9??J???????Q?B?I??YW1?:???~|??e?BA|?@??qR??e????q?b??I????q?z???????eaR?
如果有帮助的话,我大概知道这个数据应该包含什么


我只是在寻找一些入门技巧来帮助我破解密码

这些数据实际上可能没有被加密,甚至可能被编码

您可能要处理的一种可能的编码是称为基本编码规则(BER)的标准。这是一种将抽象语法表示法1(ASN.1)数据结构编码为二进制流的方法

查看一些细节

然而,值得注意的是,有几种不同语言的工具包可以使BER数据的处理变得更容易。我见过的最广泛的一个是名为Convert::ASN1的Perl库

希望这是有帮助的,当我遇到这些工具时,我会用更多的工具来更新这些代码


此外,如果这仅仅是编码的,那么也可能是二进制数据使用给定的值进行简单的ASCII分隔。该值可以是您在输出中看到的管道(|)字符。有许多格式使用这种形式的有线协议,例如HL7。

假设数据只是编码的,而不是加密的,有一件事可能会揭示很多关于数据的信息,那就是随着时间的推移比较数据包。 随时间变化的部分可能是数据,而不随时间变化的部分可能是结构信息

通过改变软件的状态进行实验(假设这是可能的),在数据中观察到的任何变化都是线索

由于您知道数据包中应该包含哪些内容,因此可能会提供足够的线索来确定数据格式。尤其是如果你能很好地控制软件的状态

注意: 还要记住,多字节数据有一个endianess,假设endianess错误会使事情变得非常混乱。类似地,除了ASCII之外,还有许多其他编码字符串的方法


如果发送了大量数据,您可能还需要检查数据是否以任何方式被压缩。

如果您不确定数据是否加密,检查的一个好方法是查看数据的随机性


任何名副其实的加密算法都会输出看起来完全随机的数据。因此,您可以迭代字节并检查值是否均匀分布。如果是,您可以非常确定数据是真正加密的,而不仅仅是编码的。

十六进制数据到底做什么?你怎么知道它是加密的?使用什么加密算法?加密密钥存储在哪里?@Petey我不知道使用了什么加密。数据最终应该转换为平面数据(数字等),我很确定它不是DER/BER,否则它将以30或31(序列或集合标记)开始。