From 8520a26837fb32ca43c9b8351d46d0f57730cd82 Mon Sep 17 00:00:00 2001 From: Alexander Bersenev Date: Fri, 23 Aug 2019 01:59:53 +0500 Subject: [PATCH] ability to disable replay protection --- mtprotoproxy.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mtprotoproxy.py b/mtprotoproxy.py index d49d6be..dbe3391 100755 --- a/mtprotoproxy.py +++ b/mtprotoproxy.py @@ -154,7 +154,7 @@ def init_config(): # the data quota for user conf_dict.setdefault("USER_DATA_QUOTA", {}) - # length of used handshake randoms for active fingerprinting protection + # length of used handshake randoms for active fingerprinting protection, zero to disable conf_dict.setdefault("REPLAY_CHECK_LEN", 32768) # block bad first packets to even more protect against replay-based fingerprinting @@ -960,7 +960,10 @@ async def handle_fake_tls_handshake(handshake, reader, writer, peer): writer.write(hello_pkt) await writer.drain() - used_handshakes[digest] = True + if config.REPLAY_CHECK_LEN > 0: + while len(used_handshakes) >= config.REPLAY_CHECK_LEN: + used_handshakes.popitem(last=False) + used_handshakes[digest] = True reader = FakeTLSStreamReader(reader) writer = FakeTLSStreamWriter(writer) @@ -1095,9 +1098,10 @@ async def handle_handshake(reader, writer): dc_idx = int.from_bytes(decrypted[DC_IDX_POS:DC_IDX_POS+2], "little", signed=True) - while len(used_handshakes) >= config.REPLAY_CHECK_LEN: - used_handshakes.popitem(last=False) - used_handshakes[dec_prekey_and_iv] = True + if config.REPLAY_CHECK_LEN > 0: + while len(used_handshakes) >= config.REPLAY_CHECK_LEN: + used_handshakes.popitem(last=False) + used_handshakes[dec_prekey_and_iv] = True reader = CryptoWrappedStreamReader(reader, decryptor) writer = CryptoWrappedStreamWriter(writer, encryptor)