Skip to content

Commit 8e33497

Browse files
authored
Update MTProtoPacket.py
1 parent e5ab81c commit 8e33497

1 file changed

Lines changed: 58 additions & 41 deletions

File tree

MTProtoPacket.py

Lines changed: 58 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,19 @@
1-
from AESEncryptor import AESModeCTR
2-
import os
31
from hashlib import sha256
4-
import numpy
5-
import hexdump
2+
from AESEncryptor import AESModeCTR
3+
from config import Config
4+
import random
5+
import asyncio
6+
7+
TG_DC = [
8+
"149.154.175.50", "149.154.167.51", "149.154.175.100",
9+
"149.154.167.91", "149.154.171.5"
10+
]
11+
612

713
class MTProxy:
814
class MTProtoPacket:
9-
def __init__(self):
10-
pass
1115

12-
def to_client_obfuscated2(self, raw_data, secret):
13-
obf_enc_key_bytes = bytes(os.urandom(64))
14-
obf_enc_key = obf_enc_key_bytes[8:40] # 8 - 39 bytes [32]
15-
obf_enc_iv = obf_enc_key_bytes[40:56] # 40 - 55 bytes [16]
16-
secret = bytes.fromhex(secret)
17-
dec_key = sha256 ()
18-
dec_key.update (obf_enc_key)
19-
dec_key.update (secret)
20-
obf_enc_key = dec_key.digest ()
21-
encryptor = AESModeCTR(key=obf_enc_key,
22-
iv=obf_enc_iv)
23-
enc_data = encryptor.encrypt(raw_data)
24-
return enc_data
25-
26-
def from_client_deobfuscated2(self, enc_data, secret):
16+
async def from_client_to_telegram(self, enc_data, secret):
2717
obf_dec_key_bytes = bytes(enc_data[0:64])
2818
obf_dec_key = obf_dec_key_bytes[8:40] # 8 - 39 bytes [32]
2919
obf_dec_iv = obf_dec_key_bytes[40:56] # 40 - 55 bytes [16]
@@ -32,27 +22,54 @@ def from_client_deobfuscated2(self, enc_data, secret):
3222
dec_key.update(obf_dec_key)
3323
dec_key.update(secret)
3424
obf_dec_key = dec_key.digest()
35-
encryptor = AESModeCTR (key=obf_dec_key,
36-
iv=obf_dec_iv)
37-
raw_data = encryptor.decrypt(enc_data)
38-
return raw_data
39-
40-
def from_telegram_deobfuscated2(self, enc_data):
41-
obf_dec_key_bytes = bytes(enc_data[0:48])[::-1] # reversed
42-
obf_dec_key = obf_dec_key_bytes[0:32] # 0 - 32 bytes [32]
43-
obf_dec_iv = obf_dec_key_bytes[32:48] # 32 - 48 bytes [16]
44-
encryptor = AESModeCTR(key=obf_dec_key,
25+
decryptor = AESModeCTR(key=obf_dec_key,
26+
iv=obf_dec_iv)
27+
28+
obf_enc_key_bytes = bytes(enc_data[8:56])[::-1]
29+
obf_enc_key = obf_dec_key_bytes[0:32]
30+
obf_enc_iv = obf_dec_key_bytes[32:48]
31+
enc_key = sha256()
32+
enc_key.update(obf_enc_key)
33+
enc_key.update(secret)
34+
obf_enc_key = enc_key.digest()
35+
encryptor = AESModeCTR(key=obf_enc_key,
36+
iv=obf_enc_iv)
37+
38+
raw_data = decryptor.decrypt (enc_data)
39+
40+
dc_idx = int.from_bytes (raw_data[60:62], "little") - 1
41+
if dc_idx < 0 or dc_idx >= len(TG_DC):
42+
raise Exception
43+
dc = TG_DC[dc_idx]
44+
if b'\xef\xef\xef\xef' == raw_data[56:60]:
45+
return dc, decryptor, encryptor
46+
else:
47+
raise Exception
48+
49+
async def from_telegram_to_client(self,dc,secret):
50+
tg_reader, tg_writer = await asyncio.open_connection(dc, TG_DC)
51+
52+
obf_dec_key_bytes = bytearray([random.randrange(0, 256) for i in range(64)])
53+
obf_dec_key_bytes[56] = obf_dec_key_bytes[57] = obf_dec_key_bytes[58] = obf_dec_key_bytes[59] = 0xef
54+
obf_dec_key_iv = bytes (obf_dec_key_bytes[8:56])[::-1]
55+
obf_dec_key = obf_dec_key_iv[0:32]
56+
obf_dec_iv = obf_dec_key_iv[32:48]
57+
decryptor = AESModeCTR(key=obf_dec_key,
4558
iv=obf_dec_iv)
46-
raw_data = encryptor.decrypt(enc_data)
47-
return raw_data
4859

49-
def to_telegram_obfuscated2(self, raw_data):
50-
obf_enc_key_bytes = os.urandom(64)
51-
obf_enc_key = obf_enc_key_bytes[8:40] # 8 - 40 bytes [32]
52-
obf_enc_iv = obf_enc_key_bytes[40:56] # 40 - 56 bytes [16]
53-
encryptor = AESModeCTR (key=obf_enc_key,
54-
iv=obf_enc_iv)
55-
enc_data = encryptor.encrypt(raw_data)
56-
return enc_data
60+
obf_enc_key_bytes = bytes (obf_dec_key_bytes)[::-1]
61+
obf_enc_key = obf_enc_key_bytes[8:40] # 8 - 39 bytes [32]
62+
obf_enc_iv = obf_enc_key_bytes[40:56] # 40 - 55 bytes [16]
63+
secret = bytes.fromhex (secret)
64+
enc_key = sha256 ()
65+
enc_key.update(obf_enc_key)
66+
enc_key.update(secret)
67+
obf_enc_key = enc_key.digest ()
68+
encryptor = AESModeCTR(key=obf_enc_key,
69+
iv=obf_enc_iv)
70+
enc_data = obf_dec_key_bytes[:56] + encryptor.encrypt(bytes(obf_dec_key_bytes))[56:]
5771

72+
tg_writer.write(enc_data)
73+
await tg_writer.drain()
5874

75+
return encryptor, decryptor, tg_reader, tg_writer

0 commit comments

Comments
 (0)