澳门至尊网站-首页

您的位置:澳门至尊网站 > 黑客安全 > 群聊消息收发,登入成功后得到

群聊消息收发,登入成功后得到

2019-10-22 11:32

图片 1

发送 poll包

 

public static void Login_PostPoll()
{
try
{
string url = "";
string dat = "{"ptwebqq":"#{ptwebqq}","clientid":53999199,"psessionid":"#{psessionid}","key":""}";
dat = dat.Replace("#{ptwebqq}", Login_ptwebqq).Replace("#{psessionid}", Login_Psessionid);
dat = "r=" + HttpUtility.UrlEncode(dat);
HTTP.Post_Async_Action action = Message_Get;
HTTP.Post_Async(url, dat, action);
}
catch (Exception) { Login_PostPoll(); }
}
#endregion
#region 接收到消息的回调函数
/// <summary>
/// 接收到消息的回调函数
/// </summary>
/// <param name="data">接收到的数据(json)</param>
private static bool Running = true;
public static void Message_Get(string data)
{
Task.Run(() => Login_PostPoll());
if (Running)
Task.Run(() => Message_Process(data));//这个是处理收到信息的另外一个方法具体处理 在源码
}

public static void Login_GetPHV()
{
string urldata = "{"ptwebqq":"#{ptwebqq}","clientid":53999199,"psessionid":"","status":"online"}".Replace("#{ptwebqq}", Login_ptwebqq);
urldata = "r=" + HttpUtility.UrlEncode(urldata);
string dat = HTTP.Post("", urldata, "");

以上就是poll包的处理以及 收到的信息处理

Login_Psessionid = dat.Replace(":", ",").Replace("{", "").Replace("}", "").Replace(""", "").Split(',')[10];
Login_QQ = dat.Replace(":", ",").Replace("{", "").Replace("}", "").Replace(""", "").Split(',')[14];//登录QQ
//Login_Vfwebqq = dat.Replace(":", ",").Replace("{", "").Replace("}", "").Replace(""", "").Split(',')[18];
Login_Hash = Hash2(Login_QQ, Login_ptwebqq);// 在这个js 拿到那个hash的值 JS里面的方法名是Hash2 里面是16进制 需要转换成C#的类型。第一个参数是真实QQ第二个ptwebqq
//一开始拿上面的cookie 里面的Vfwebqq,是不行的,再请求一遍,拿到获取好友信息的vfwebqq
string urlvfwebqq = "", Login_ptwebqq).Replace("#{t}", TimeStamp());
string datVfwebqq = HTTP.Get(urlvfwebqq, "");
Login_Vfwebqq = datVfwebqq.Split('"')[7];
SendOnlog(Login_QQ +"/r/n"+ Login_Vfwebqq + "/r/n" + Login_Psessionid

接下来是 发送的 

  • "/r/n" + Login_Hash);
    }

图片 2

上面就可以拿到 Login_ptwebqq  Login_Psessionid ,Login_Hash 这个hash  需要

 

在这个js 拿到那个hash的值 JS里面的方法名是Hash2 里面是16进制 需要转换成C# 也可以直接  调用这个JS。第一个参数是Login_QQ 第二个Login_ptwebqq  

 上面是发送的连接以及 发送后返回的 poll包信息。代码如下 

public static string Hash2(string uin, string ptvfwebqq)
{
int[] ptbIndex = new int[4];
long QQ_Long = long.Parse(uin);
for (int i = 0; i < ptvfwebqq.Length; i++)
{
ptbIndex[i % 4] ^= ptvfwebqq.ToCharArray()[i];
}
string[] salt = { "EC", "OK" };
long[] uinByte = new long[4];
uinByte[0] = QQ_Long >> 24 & 255 ^ salt[0].ToCharArray()[0];
uinByte[1] = QQ_Long >> 16 & 255 ^ salt[0].ToCharArray()[1];
uinByte[2] = QQ_Long >> 8 & 255 ^ salt[1].ToCharArray()[0];
uinByte[3] = QQ_Long & 255 ^ salt[1].ToCharArray()[1];

/// <summary>
///
/// </summary>
/// <param name="type">私聊0 群聊1 讨论组2</param>
/// <param name="uin">uin</param>
/// <param name="messageToSend">消息</param>
/// <param name="auto"></param>
/// <returns></returns>
public static bool Login_Postsend_buddy_msg(int type, string uin, string messageToSend)
{
if (messageToSend.Equals("") || uin.Equals(""))
return false;
string[] tmp = messageToSend.Split("{}".ToCharArray());
messageToSend = "";
for (int i = 0; i < tmp.Length; i++)
if (!tmp[i].Trim().StartsWith("..[face") || !tmp[i].Trim().EndsWith("].."))
messageToSend += "\"" + tmp[i] + "\",";
else
messageToSend += tmp[i].Replace("..[face", "[\"face\",").Replace("]..", "],");
messageToSend = messageToSend.Remove(messageToSend.LastIndexOf(','));
messageToSend = messageToSend.Replace("rn", "n").Replace("nr", "n").Replace("r", "n").Replace("n", Environment.NewLine);
try
{
string to_groupuin_did, url;
switch (type)
{
case 0:
to_groupuin_did = "to";
url = "";
break;
case 1:
to_groupuin_did = "group_uin";
url = "";
break;
case 2:
to_groupuin_did = "did";
url = "";
break;
default:
return false;
}
string postData = "{"#{type}":#{id},"content":"[#{msg},[\"font\",{\"name\":\"繁体\",\"size\":10,\"style\":[0,0,0],\"color\":\"000000\"}]]","face":#{face},"clientid":53999199,"msg_id":#{msg_id},"psessionid":"#{psessionid}"}";
postData = "r=" + HttpUtility.UrlEncode(postData.Replace("#{type}", to_groupuin_did).Replace("#{id}", uin).Replace("#{msg}", messageToSend).Replace("#{face}", SelfInfo.face.ToString()).Replace("#{msg_id}", rand.Next(10000000, 99999999).ToString()).Replace("#{psessionid}", Login_Psessionid));

long[] result = new long[8];

string dat = HTTP.Post(url, postData, "");
return dat.Equals("{"errCode":0,"msg":"send ok"}");
}
catch (Exception)
{
return false;
}
}

for (int i = 0; i < 8; i++)
{
result[i] = i % 2 == 0 ? ptbIndex[i >> 1] : uinByte[i >> 1];
}

 

string[] hex = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F" };
string buf = "";

这一讲费了很多时间,中间又去查了资料。特别是处理返回的 包的json ,不知道怎么格式化,只能替换出来,拿到想要的数据。

for (int i= 0; i < result.Length; i++)
{
buf += hex[(int)((result[i] >> 4) & 15)];
buf += hex[(int)(result[i] & 15)];
}
return buf;
}

 

 

到现在为止,整个新手smart qq http 协议的教程 已经可以说完成了,因为这个协议的功能非常单一,并且很多都已经被TX去掉的,就像获取好友的 真实QQ也已经是报错的。接下来就可以做图形界面,还有部分业务了(qq机器人自动回复等)

以上就是C# 获取smart qq  的vfwebqq ,psessionid,hash 

 

本文由澳门至尊网站发布于黑客安全,转载请注明出处:群聊消息收发,登入成功后得到

关键词: