コード例 #1
0
        public static void NewInit(MMClient mm)
        {
            NewInitRequest.Builder init = new NewInitRequest.Builder();
            byte[] sessionKey           = mm.AESKey.ToByteArray(16, 2);



            SKBuiltinBuffer_t.Builder Bmaxsync = new SKBuiltinBuffer_t.Builder();
            Bmaxsync.SetBuffer(ByteString.CopyFrom(new byte[0]));
            Bmaxsync.SetILen(0);
            SKBuiltinBuffer_t maxsynckey = Bmaxsync.Build();

            SKBuiltinBuffer_t.Builder sync = new SKBuiltinBuffer_t.Builder();
            sync.SetBuffer(ByteString.CopyFrom(new byte[0]));
            sync.SetILen(0);
            SKBuiltinBuffer_t synckey = sync.Build();

            BaseRequest bBase = GetBasePack(sessionKey, mm.uin, 3);

            init.SetBase(bBase);
            init.SetLanguage("zh_CN");
            init.SetUserName(mm.wxid);
            init.SetMaxSynckey(maxsynckey);
            init.SetCurrentSynckey(synckey);
            NewInitRequest initPack = init.Build();

            // byte[] buf = initPack.ToByteArray();
            // Console.WriteLine(initPack.ToString());
            // byte[]senddata =  mm.ShortLinkPack((MMPro.MM.CGI_TYPE)139, buf);
            // IntPtr AESpushstr = IntPtr.Zero;
            // byte[]afterC =  MyFuckSSL.AesEncodeComprese(buf, buf.Length, sessionKey, AESpushstr);
            //   IntPtr pushstr = IntPtr.Zero;
            // byte[]head = MyFuckSSL.AesHeader((int)mm.uin, mm.cookie, mm.cookie.Length, 139, buf.Length, afterC.Length,pushstr);
            //   var senddata = head.Concat(afterC).ToArray();
            byte[] senddata = null;
            senddata = mm.MakeAESHead(initPack.ToByteArray(), (MMPro.MM.CGI_TYPE) 139);
            ChangeType.Add4Bytes(ref senddata, initPack.ToByteArray());
            Console.WriteLine(ChangeType.ToHexString(senddata));
            byte[] retbuf = null;
            WeChatPost(mm.shortLink + "/cgi-bin/micromsg-bin/newinit", senddata, ref retbuf);
            Console.WriteLine("初始化包已发送");
            Console.WriteLine(ChangeType.ToHexString(retbuf));
        }
コード例 #2
0
        public static void Main(string[] args)
        {
            var client = new MMClient("Ars")
            {
                OnInviteAccepted = System.Console.WriteLine,
                OnInviteCanceled = System.Console.WriteLine,
                OnInviteDeclined = System.Console.WriteLine,
                OnInviteRecieved = Recieve,
                OnInviteError    = System.Console.WriteLine
            };

            client.Connect(System.Net.IPAddress.Parse("127.0.0.1"), 26000);
            while (true)
            {
                var s = System.Console.ReadLine();
                client.Tick();
                switch (s)
                {
                case "crt":
                    client.CreateInvite("Ars");
                    break;

                case "acc":
                    client.AcceptInvite(inviteToken);
                    break;

                case "dec":
                    client.DeclineInvite(inviteToken);
                    break;

                case "can":
                    client.CancelInvite(inviteToken);
                    break;

                default:
                    client.Tick();
                    break;
                }
            }
        }
コード例 #3
0
        public static byte[] GetLoginQRCode(MMClient mm)
        {
            mm.AESKey = (new Random()).NextBytes(16).ToString(16, 2);
            Console.WriteLine("随机AESKEY:" + ChangeType.ToHexString(mm.AESKey.ToByteArray(16, 2)));
            GetLoginQRCodeRequest.Builder qrcode = new GetLoginQRCodeRequest.Builder();
            SKBuiltinBuffer_t.Builder     aes    = new SKBuiltinBuffer_t.Builder();
            //GetLoginQRCodeRequest getLoginQRCodeRequest = new GetLoginQRCodeRequest()


            aes.SetBuffer(ByteString.CopyFrom(mm.AESKey.ToByteArray(16, 2)));
            aes.SetILen(16);
            SKBuiltinBuffer_t randomAes = aes.Build();

            byte[] session = new byte[0];
            qrcode.SetBase(GetBasePack(session, 0, 0));
            qrcode.SetOpcode(0);
            qrcode.SetDeviceName("daivis.IPAD");

            qrcode.SetRandomEncryKey(randomAes);
            GetLoginQRCodeRequest pack = qrcode.Build();

            Console.WriteLine(pack.ToString());
            var src       = pack.ToByteArray();
            int bufferlen = src.Length;



            var senddata = mm.ShortLinkPack(MMPro.MM.CGI_TYPE.CGI_TYPE_GETLOGINQRCODE, src, 1);

            byte[] retbuf = null;
            WeChatPost(mm.shortLink + "/cgi-bin/micromsg-bin/getloginqrcode", senddata, ref retbuf);

            Console.WriteLine(ChangeType.ToHexString(retbuf));

            return(mm.shortUnPack(retbuf));
        }
コード例 #4
0
        public static byte[] MakeHeader(MMClient mm, byte[] buff, UInt32 cgi_, int type = 5)
        {
            try
            {
                List <byte> strHeader  = new List <byte>();
                int         nCur       = 0;
                byte        SecondByte = 0x2;
                strHeader.Add(SecondByte);
                nCur++;
                //加密算法(前4bits),RSA加密(7)AES(5)
                byte ThirdByte = (byte)(type << 4);

                ThirdByte += 0xf;
                strHeader.Add((byte)ThirdByte);
                nCur++;
                //int dwUin = 0;
                strHeader = strHeader.Concat(mm.ver.ToByteArray(Endian.Big).ToList()).ToList();
                nCur     += 4;

                strHeader = strHeader.Concat(mm.m_uid.ToByteArray(Endian.Big).ToList()).ToList();
                nCur     += 4;

                //登录包不需要cookie 全0占位即可
                if (mm.cookie == null)
                {
                    strHeader = strHeader.Concat(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }).ToList();
                    nCur     += 15;
                }
                else
                {
                    strHeader = strHeader.Concat(mm.cookie.ToList()).ToList();
                    nCur     += 15;
                }

                //byte[] szCookie = new byte[15];

                byte[] strcgi = MMClient.Dword2String(cgi_);
                strHeader = strHeader.Concat(strcgi.ToList()).ToList();
                nCur     += strcgi.Length;
                byte[] strLenProtobuf = MMClient.Dword2String((UInt32)buff.Length);
                strHeader = strHeader.Concat(strLenProtobuf.ToList()).ToList();
                nCur     += strLenProtobuf.Length;
                byte[] strLenCompressed = MMClient.Dword2String((UInt32)buff.Length);
                strHeader = strHeader.Concat(strLenCompressed.ToList()).ToList();
                nCur     += strLenCompressed.Length;
                //var rsaVer = Dword2String((UInt32)LOGIN_RSA_VER);
                //strHeader = strHeader.Concat(rsaVer).ToList();
                //nCur += rsaVer.Length;
                strHeader = strHeader.Concat(new byte[] { 0, 0xd }.ToList()).ToList();
                nCur     += 2;
                var ___ = buff.ToString(16, 2);
                strHeader = strHeader.Concat(new byte[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }).ToList();
                nCur     += 15;
                //     byte rsaVer = LOGIN_RSA_VER;
                //     strHeader = strHeader + string((const char*)&rsaVer, 1);
                //    nCur++;

                // byte[2] unkwnow = { 0x01, 0x02 };
                //  strHeader = strHeader + string((const char*)unkwnow, 2);
                // nCur += 2;

                //加密后数据长度
                // string subHeader;
                //short uLenProtobuf = nLenRsa;
                // strHeader = strHeader + string((const char*)&uLenProtobuf, 2);
                //nCur += 2;

                //毫无意义的5个字节(随意填写)
                //char szUnknown[5] = { 0 };
                // strHeader = strHeader + string((const char*)szUnknown, 5);
                // nCur += 5;

                //将包头长度写入第二字节前6bits(包头长度不会超出6bits)
                //SecondByte += (nCur << 2);
                //  var unkwnow = (5 * (1 & code)).ToByteArray(Endian.Little).Copy(2);// "0100".ToByteArray(16, 2);
                // strHeader = strHeader.Concat(unkwnow.ToList()).ToList();
                // nCur += unkwnow.Length;
                // nCur++;
                SecondByte  += (byte)(nCur << 2);
                strHeader[1] = SecondByte;

                strHeader.Insert(0, 0xbf);
                return(strHeader.ToArray());
            }
            catch (Exception)
            {
                System.Diagnostics.Debug.Print("MakeHead Error");
                return(null);
            }
        }
コード例 #5
0
 private void Form1_Load(object sender, EventArgs e)
 {
     mMClient          = new MMClient();
     mMClient.deviceID = "49aa7db2f4a3ffe0e96218f6b92cde32".ToByteArray(16, 2);
     Console.WriteLine(ChangeType.ToHexString(mMClient.deviceID));
 }