分类: 系统运维
2008-12-19 20:40:17
chinaunix网友2008-12-22 11:07:51
我的意思是这样的 每次链接建立后传输使用的密钥就会重新确立一次。但是在这次传输未结束时其密钥是不会改变的。 传输时双方互发bt协议消息。每个消息在这次传输中属于一个单独的数据流。 我的意思是说同一次传输中的两个类型相同的消息比如6号消息 它使用的密钥是相同的,xbox里的子密钥序列也是相同的。加密其实位置也是向同的(都是从消息流起始处加密)所以才有我前面的说法。我现在不打算再详细说明这个问题了。原因1是把原始数据发上来太费劲。2是我已经找到问题的所在—— bitcomet 没有用RC4对数据加密,它采用的加密算法是AES。这是在脱壳后反汇编查然后查找它PE里的字符串发现的 有AES-128-CBC 和 AES-256-CBC 等。现在我对AES还不太熟。还不能完全肯定我的想法。
chinaunix网友2008-12-20 09:49:28
加密协议你如果打算做的话,你对这个问题就得深入的分析了。 TCPProtocolDecoderPHE.java 里有相关加密解密代码。我对java不熟悉看着头痛。但是我想这个能对你有帮助。 Azureus的源代码在这里下载: http://prdownloads.sourceforge.net/azureus/Azureus_2.4.0.2_source.zip?download 我发现的问题是这样的BT采用的加密协议是RC4 这是个异或加密 我测试他有这样的特点 如果用相同密钥加密两个数据流。在两个加密流的相同位置,如果明文相同。其加密后的密文也相同。 例如 用相同密钥对 “1234” 和“ar3b"加密,那么两个密文的第三个字节肯定相同。 但是我截获的bt加密数据流则不是这样。传输过程中两次6号消息数据流 没有相同的部分。确实令我费解。 敢兴趣的话你可以下个0.96版本的bitcomet 在虚拟机里互相传次明文 再传次密文。来看看密文和明文的变化。确实没有一点特征。但是这是怎么做出来的呢。能让相同内容有不同的加密结果(关键是用的是CR4加密,分组加密算法可以实现这个效果