回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我一直在努力让代理生效。我需要解密来自服务器和客户机的数据包((这可能是无序的..)),然后解压缩除了包头以外的所有内容。在</p>
<p>前2个包(<code>10101</code>和<code>20104</code>)没有被压缩,并且正确地解密、销毁和反编译。在</p>
<p>唉,但无济于事;失败!;<code>zlib.error: Error -5 while decompressing data: incomplete or truncated stream</code></p>
<p>当我试图解压加密版本的数据包时出现同样的错误。在</p>
<p>当我包含包头时,我得到一个随机选择的<code>-3</code>错误。在</p>
<p>我也尝试过将<code>-zlib.MAX_WBITS</code>改为<code>zlib.MAX_WBITS</code>,以及其他一些方法,但是仍然得到相同的错误。在</p>
<p>这是密码</p>
<pre><code>import socket, sys, os, struct, zlib
from Crypto.Cipher import ARC4 as rc4
cwd = os.getcwd()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.2.12',9339))
s.listen(1)
client, addr = s.accept()
key = "fhsd6f86f67rt8fw78fw789we78r9789wer6renonce"
cts = rc4.new(key)
stc = rc4.new(key)
skip = 'a'*len(key)
cts.encrypt(skip)
stc.encrypt(skip)
ss.connect(('game.boombeachgame.com',9339))
ss.settimeout(0.25)
s.settimeout(0.25)
def io():
while True:
try:
pack = client.recv(65536)
decpack = cts.decrypt(pack[7:])
msgid, paylen = dechead(pack)
if msgid != 10101:
decopack = zlib.decompress(decpack, -zlib.MAX_WBITS)
print "ID:",msgid
print "Payload Length",paylen
print "Payload:\n",decpack
ss.send(pack)
dump(msgid, decpack)
except socket.timeout:
pass
try:
pack = ss.recv(65536)
msgid, paylen = dechead(pack)
decpack = stc.decrypt(pack[7:])
if msgid != 20104:
decopack = zlib.decompress(decpack, -zlib.MAX_WBITS)
print "ID:",msgid
print "Payload Length",paylen
print "Payload:\n",decpack
client.send(pack)
dump(msgid, decpack)
except socket.timeout:
pass
def dump(msgid, decpack):
global cwd
pdf = open(cwd+"/"+str(msgid)+".bin",'wb')
pdf.write(decpack)
pdf.close()
def dechead(pack):
msgid = struct.unpack('>H', pack[0:2])[0]
print int(struct.unpack('>H', pack[5:7])[0])
payload_bytes = struct.unpack('BBB', pack[2:5])
payload_len = ((payload_bytes[0] & 255) << 16) | ((payload_bytes[1] & 255) << 8) | (payload_bytes[2] & 255)
return msgid, payload_len
io()
</code></pre>
<p>我意识到这很混乱,杂乱无章,非常糟糕,但除了减压,一切都如期而至。在</p>
<p>是的,我确信数据包是<code>zlib</code>压缩的。在</p>
<p>这里出了什么问题?为什么?在</p>
<p>完全回溯:</p>
^{pr2}$