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)); }
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; } } }
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)); }
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); } }
private void Form1_Load(object sender, EventArgs e) { mMClient = new MMClient(); mMClient.deviceID = "49aa7db2f4a3ffe0e96218f6b92cde32".ToByteArray(16, 2); Console.WriteLine(ChangeType.ToHexString(mMClient.deviceID)); }