From ef1f96159263af036e0512f0195bd22fa0e8548b Mon Sep 17 00:00:00 2001 From: Paulo Rogerio Panhoto Date: Tue, 20 Feb 2018 15:25:20 -0300 Subject: [PATCH] Added debug logging to MtProtoSender, so that state machine can be "visible". --- TLSharp.Core/Network/MtProtoSender.cs | 7 ++++++- TLSharp.Core/Network/Sniffer.cs | 25 +++++++++++++++++++++++++ TLSharp.Core/TLSharp.Core.csproj | 4 ++++ TLSharp.Core/packages.config | 1 + 4 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 TLSharp.Core/Network/Sniffer.cs diff --git a/TLSharp.Core/Network/MtProtoSender.cs b/TLSharp.Core/Network/MtProtoSender.cs index f7d9dc9..98dd95c 100644 --- a/TLSharp.Core/Network/MtProtoSender.cs +++ b/TLSharp.Core/Network/MtProtoSender.cs @@ -18,6 +18,8 @@ namespace TLSharp.Core.Network { //private ulong sessionId = GenerateRandomUlong(); + private static NLog.Logger logger = NLog.LogManager.GetLogger("MTProto"); + private readonly uint UpdatesTooLongID = (uint) new TeleSharp.TL.TLUpdatesTooLong ().Constructor; private TcpTransport _transport; @@ -88,7 +90,9 @@ namespace TLSharp.Core.Network plaintextWriter.Write(packet.Length); plaintextWriter.Write(packet); - msgKey = Helpers.CalcMsgKey(plaintextPacket.GetBuffer()); + var buffer = plaintextPacket.GetBuffer(); + logger.Debug(Sniffer.MessageOut(buffer)); + msgKey = Helpers.CalcMsgKey(buffer); ciphertext = AES.EncryptAES(Helpers.CalcKey(_session.AuthKey.Data, msgKey, true), plaintextPacket.GetBuffer()); } } @@ -123,6 +127,7 @@ namespace TLSharp.Core.Network AESKeyData keyData = Helpers.CalcKey(_session.AuthKey.Data, msgKey, false); byte[] plaintext = AES.DecryptAES(keyData, inputReader.ReadBytes((int)(inputStream.Length - inputStream.Position))); + logger.Debug(Sniffer.MessageIn(plaintext)); using (MemoryStream plaintextStream = new MemoryStream(plaintext)) using (BinaryReader plaintextReader = new BinaryReader(plaintextStream)) diff --git a/TLSharp.Core/Network/Sniffer.cs b/TLSharp.Core/Network/Sniffer.cs new file mode 100644 index 0000000..e80a105 --- /dev/null +++ b/TLSharp.Core/Network/Sniffer.cs @@ -0,0 +1,25 @@ +using System; +using System.Text; + +namespace TLSharp.Core.Network +{ + public static class Sniffer + { + public static string MessageOut(byte[] data) + { + return WriteMessage(new StringBuilder("[OUT]:"), data); + } + + public static string MessageIn(byte[] data) + { + return WriteMessage(new StringBuilder("[IN]:"), data); + } + + private static string WriteMessage(StringBuilder log, byte[] data) + { + foreach (var b in data) + log.AppendFormat(" {:x2}", b); + return log.ToString(); + } + } +} diff --git a/TLSharp.Core/TLSharp.Core.csproj b/TLSharp.Core/TLSharp.Core.csproj index fbef942..7cca179 100644 --- a/TLSharp.Core/TLSharp.Core.csproj +++ b/TLSharp.Core/TLSharp.Core.csproj @@ -42,6 +42,9 @@ + + ..\..\packages\NLog.4.4.12\lib\net45\NLog.dll + @@ -68,6 +71,7 @@ + diff --git a/TLSharp.Core/packages.config b/TLSharp.Core/packages.config index 204475c..518c7dc 100644 --- a/TLSharp.Core/packages.config +++ b/TLSharp.Core/packages.config @@ -1,4 +1,5 @@  + \ No newline at end of file