Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.5 KiB

5 years ago
from telethon import TelegramClient, events, sync
from telethon.network import ConnectionTcpAbridged
4 years ago
from telethon.network.mtprotostate import MTProtoState
from telethon.crypto.authkey import AuthKey
from telethon.network.connection.tcpobfuscated import ConnectionTcpObfuscated
from telethon.network.connection.tcpintermediate import IntermediatePacketCodec
5 years ago
4 years ago
import struct
import logging
logging.basicConfig(level=logging.DEBUG)
# import sys
# print(sys.path)
5 years ago
# These example values won't work. You must get your own api_id and
# api_hash from https://my.telegram.org, under API Development.
api_id = 1025907
api_hash = '452b0359b988148995f22ff0f4229750'
client = TelegramClient('session_name', api_id, api_hash, connection=ConnectionTcpAbridged)
#client.start()
4 years ago
#client.connect()
authKey = AuthKey(bytes.fromhex("2c45ed62da34d41bc82b6ef660760d3b01cb80028b0c363633f1c40ec80d5f4ad9d4ddee646736b6a9465fd7258b8936dedde6a86c69b4a03277ed6c543ccfd31fa8fa9f9449d686b4822b54542c91255231ecfa6aed4a9896cdcc3d5491e7f1b7529cbff75597f262813ced7eb3b5ac1e7e6794ca7aa00c5ea4d1d714e7c276fb63e5f8a1742cf4707eace8a6ec2ed4dcceceabdc7fc92bd099c811931e0da337f1b0271d8ba33e7a4a22fa1e4a913d8220edb0dd3a810ed408f03fe5d7f2d5dd43db4272d314b20a22376c03b0a05423600f4d012e7196ce9b3c45b28a75dbfa053222f5c86d1c6a706a2fd68ca270fd9a6449df1fa15a21837d34f4cf4e95"))
state = MTProtoState(authKey, loggers=client._log)
state.salt = struct.unpack('q', bytes.fromhex("d1b37eebb4997ca9"))[0]
state.id = struct.unpack('q', bytes.fromhex("502368ee46d39313"))[0]
#print(state.id)
""" with open('file_part.txt', 'r') as file:
data = file.read()
messageData = bytes.fromhex(data)
#messageData = bytes.fromhex("146f8265b5342560290000000c000000ec77be7aaa40f90300000000")
#print(data)
encrypted = state.encrypt_message_data(messageData)
file.close()
with open('file_part_encrypted.txt', 'w') as file:
file.write(encrypted.hex())
file.close()
#print(encrypted) """
ConnectionTcpObfuscated.packet_codec = IntermediatePacketCodec
connection = ConnectionTcpObfuscated("", "", 2, loggers=client._log)
obfuscatedIo = connection.obfuscated_io(connection)
#print(encrypted)
#exit()
#encoded = connection.packet_codec.encode_packet(connection.packet_codec, bytes.fromhex("deadbeef"))
#print(encoded)
#exit()
name = "debugPayloads"
#name = "debugRequests"
with open(name + '_before.txt', 'r') as fileBefore:
data = fileBefore.read()
lines = data.splitlines()
with open(name + '_after.txt', 'r') as fileAfter:
data = fileAfter.read()
linesAfter = data.splitlines()
length = len(lines)
for i in range(length):
print("processing line %i, of %i", i, length)
lineBefore = lines[i]
lineAfter = linesAfter[i]
messageData = bytes.fromhex(lineBefore)
messageData = connection.packet_codec.encode_packet(connection.packet_codec, messageData)
encrypted = obfuscatedIo._encrypt.encrypt(messageData)
#encrypted = state.encrypt_message_data(messageData) # need to comment padding inside
#print(encrypted.hex())
#print(len(encrypted.hex()))
#print(len(lineAfter))
#print(encrypted.hex() == lineAfter)
#break
if encrypted.hex() != lineAfter:
print("lol")
with open('difference_before.txt', 'w') as file:
file.write(lineAfter)
file.close()
with open('difference_after.txt', 'w') as file:
file.write(encrypted.hex())
file.close()
#print(encrypted.hex())
#print(lineAfter)
exit()