Beispiel #1
0
        async void HandShakeClientStart(object sender, RoutedEventArgs e)
        {
            var port    = int.Parse(PortTextBox.Text);
            var options = new MiraiHttpSessionOptions("localhost", port, "PinkPill");
            var selfQQ  = long.Parse(SelfIDTextBox.Text);   // 自己
            var otherQQ = long.Parse(TargetIDTextBox.Text); // 对方

            TargetQQ = otherQQ;
            session  = new MiraiHttpSession();

            await session.ConnectAsync(options, selfQQ);

            var superStream  = new DelayedBufferStream((_, e) => { SendMessage(new ImageObfuscator().Obfuscate(e)); });
            var serverStream = new SslStream(superStream, false,
                                             (sender, certificate, chain, errors) =>
            {
                var subject = certificate.Subject;
                AddMessage($"握手完成: 证书名 {subject}");
                return(true);
            }, null);

            stream = serverStream;
            var cert = X509Certificate2.CreateFromPemFile(@"cert.pem");

            cert = new X509Certificate2(cert.Export(X509ContentType.Pkcs12));


            session.FriendMessageEvt += (_, args) =>
            {
                if (args.Sender.Id == otherQQ)
                {
                    var obfs = new ImageObfuscator();
                    var msg  = args.Chain;
                    if (msg.FirstOrDefault(c => c is ImageMessage) is not ImageMessage imageMessage)
                    {
                        return(Task.FromResult(true));
                    }
                    var imageBytes = new HttpClient().GetByteArrayAsync(imageMessage.Url).Result;

                    superStream.SendMessage(obfs.Deobfuscate(new MagickImage(imageBytes, MagickFormat.Png)));
                }

                return(Task.FromResult(true));
            };
            await serverStream.AuthenticateAsClientAsync("", new X509Certificate2Collection(new[] { cert }), SslProtocols.Tls12, false);

            _ = Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    var buffer = new Span <byte>(new byte[1024]);
                    var i      = serverStream.Read(buffer);
                    if (i > 0)
                    {
                        AddMessage($"接收到了: {Encoding.UTF8.GetString(buffer.Slice(0, i))}");
                    }
                }
            }, TaskCreationOptions.LongRunning);
        }
Beispiel #2
0
        public static async Task Main(string[] args)
        {
            // this project is for internal use

            /*
             * var obfuscate = new CustomBase64Obfuscator().Obfuscate(Encoding.UTF8.GetBytes(
             *  "一见短袖子,立刻想到白臂膊,立刻想到全裸体,立刻想到生殖器,立刻想到性交,立刻想到杂交,立刻想到私生子。" +
             *  "中国人的想像惟在这一层能够如此跃进。"));
             * File.WriteAllText("test.txt", PostObfuscator.Obfuscate(obfuscate));
             */

            /*
             * var source = Encoding.UTF8.GetBytes(new string('a', 500000));
             * var image = new ImageObfuscator().Obfuscate(source);
             * image.Write("t.png");
             * var deobfuscate = new ImageObfuscator().Deobfuscate(image);
             * if (deobfuscate.SequenceEqual(source))
             * {
             *  Console.WriteLine("success!");
             * }
             */

            var image = new ImageObfuscator().Obfuscate(new ReadOnlySpan <byte>(new byte[] { 1, 2, 3, 3, 3, 3, 3 }));

            image.Write("awffa.png");


            session = new MiraiHttpSession();

            if (Console.ReadKey().Key == ConsoleKey.A)
            {
                await ModeServer();
            }
            else
            {
                await ModeClient();
            }



            //var sourceImage = new MagickImage("a.png");

            /*
             * var image = new MagickImage(new MagickColor("#000000"), 110, 20);
             * image.Settings.Density = new Density(72);
             * image.Settings.FontPointsize = 162/10.0;
             * image.Settings.Font = "FiraCode-Regular.ttf";
             * image.Settings.TextAntiAlias = false;
             * image.Settings.StrokeColor = new MagickColor(255, 255, 255);
             * image.Settings.FillColor = new MagickColor(255, 127, 195);
             * image.Annotate("[Pink Pill]", new MagickGeometry(0, 10), Gravity.Northwest);
             *
             *
             */

            //image.Draw(new DrawableText(0, 100, "[Pink Pill]"));

            /*
             * new Drawables()
             *  // Draw text on the image
             *  .Density(72)
             *  .FontPointSize(162)
             *  .Font("FiraCode-Regular.ttf")
             *  .StrokeColor(new MagickColor(255, 255, 255))
             *  .FillColor(new MagickColor(255,127,195))
             *  .TextAlignment(TextAlignment.Left)
             *  .TextAntialias(false)
             *  .TextInterwordSpacing(0)
             *  .Text(0, 100, "[Pink Pill]")
             *  .Draw(image);
             */
            //image.Write("a.png");
            //var metric = image.FontTypeMetrics("[Pink Pill]");
        }
Beispiel #3
0
        static async Task ModeClient()
        {
            var options = new MiraiHttpSessionOptions("localhost", 8080, "INITKEYc15Hx0xs");
            var selfQQ  = 456;
            var otherQQ = 123;

            TargetQQ = otherQQ;
            Console.WriteLine("Act as B");
            await session.ConnectAsync(options, selfQQ);

            /*
             * var ramdom = new Random();
             * var bytes = new byte[1000000];
             * ramdom.NextBytes(bytes);
             * SendMessage(new ImageObfuscator().Obfuscate(bytes));
             */
            var superStream  = new DelayedBufferStream((_, e) => { SendMessage(new ImageObfuscator().Obfuscate(e)); });
            var serverStream = new SslStream(superStream, false,
                                             (sender, certificate, chain, errors) =>
            {
                var subject = certificate.Subject;
                Console.WriteLine($"Cert subject: {subject}");
                return(true);
            }, null);
            var cert = X509Certificate2.CreateFromEncryptedPemFile(@"C:\test\cert2.pem", "1234", @"C:\test\key2.pem");

            cert = new X509Certificate2(cert.Export(X509ContentType.Pkcs12));


            session.FriendMessageEvt += (_, args) =>
            {
                if (args.Sender.Id == otherQQ)
                {
                    var obfs = new ImageObfuscator();
                    var msg  = args.Chain;
                    if (msg.FirstOrDefault(c => c is ImageMessage) is not ImageMessage imageMessage)
                    {
                        return(Task.FromResult(true));
                    }
                    var imageBytes = new HttpClient().GetByteArrayAsync(imageMessage.Url).Result;

                    superStream.SendMessage(obfs.Deobfuscate(new MagickImage(imageBytes, MagickFormat.Png)));
                }

                return(Task.FromResult(true));
            };

            /*
             * session.FriendMessageEvt += (sender, args) =>
             * {
             *  if (args.Sender.Id == otherQQ)
             *  {
             *      var obfs = new Base64Obfuscator();
             *
             *      superStream.pipeServer.Write(obfs.Deobfuscate(args.Chain.GetPlain()));
             *  }
             *
             *  return Task.FromResult(true);
             * };*/
            serverStream.AuthenticateAsClient("", new X509Certificate2Collection(new[] { cert }), SslProtocols.Tls12, false);

            _ = Task.Factory.StartNew(() =>
            {
                while (true)
                {
                    var buffer = new Span <byte>(new byte[1024]);
                    var i      = serverStream.Read(buffer);
                    if (i > 0)
                    {
                        Console.WriteLine(Encoding.UTF8.GetString(buffer.Slice(0, i)));
                    }
                }
            }, TaskCreationOptions.LongRunning);

            while (true)
            {
                var line = Console.ReadLine();
                serverStream.Write(Encoding.UTF8.GetBytes(line));
            }
        }