要在自己的程序登陆到webqq,密码加密是第一步
看了webqq上qq密码加密代码:
A.p.value = md5(md5_3(A.p.value) + B);
A.p.value就是QQ密码,B就是验证码,B占4个字节
function md5_3(B) {
var A = new Array;
A = core_md5(str2binl(B), B.length * chrsz);
A = core_md5(A, 16 * chrsz);
A = core_md5(A, 16 * chrsz);
return binl2hex(A)
}
注意红色部分,16byte,而core_md5返回的结果是32byte
所以这里也不是完全原本md5加密。
网上找个通用Md5程序貌似也用不了。
想既然有现存的Js代码加密,在Vc中调用Js中函数就可以了
至于如何调用,还是用msscript.ocx。
已经有前辈写好的代码,共四个文件
ScriptObject.h ScriptObject.cpp SafeArrayHelper.h SafeArrayHelper.cpp
//=====================================================
要初始化com环境...
CString CCInternetDlg::Md5_qqPwd(CString qqPwd,CString veryCode)
{
CScriptObject m_ScriptObj;
m_ScriptObj.SetLanguage("JScript"); //设置脚本语言
CString strCode;
HINSTANCE hInst = AfxGetResourceHandle();
HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(IDR_JSCODE), "txt");
//IDR_JSCODE是放Js代码地方,里面document.write之类要删了
DWORD len = SizeofResource(hInst, hRes);
strCode = (char*)LoadResource(hInst, hRes);
if (!m_ScriptObj.AddScript( strCode ))
{
CString strError = m_ScriptObj.GetErrorString();
MessageBox( strError );
return "error";
}
CSafeArrayHelper sfHelper;
try{
_variant_t var;
sfHelper.Create(VT_VARIANT, 1, 0, 1); // 1 parameter
var = _bstr_t(qqPwd);
sfHelper.PutElement(0, (void*)&var); // parameter1 -> index 0
LPSAFEARRAY sa = sfHelper.GetArray();
_variant_t varRet;
if(m_ScriptObj.RunProcedure("md5_3", &sa, &varRet))
{
var = _bstr_t(varRet) + _bstr_t(veryCode);
sfHelper.PutElement(0, (void*)&var);
sa = sfHelper.GetArray();
m_ScriptObj.RunProcedure("md5",&sa, &varRet);
return (LPCTSTR)(_bstr_t(varRet));
}
else
{
CString strError = m_ScriptObj.GetErrorString();
MessageBox( strError );
}
}
catch(...)
{
CString strError = m_ScriptObj.GetErrorString();
MessageBox( strError );
}
return "error";
}
//=====================================================
实现登陆webqq,先不要验证码,不成功在下验证码,登陆在
hostname = "ptlogin2.qq.com";
登陆成功就转到,
hostname = "web-proxya.qq.com";
hostfile = "/conn_s";
过程还是麻烦的,最后在保持连接
cmd=qqNum*** ";00;" +messNum+ ";" +session+ ";";
无法同步,没法接收到QQ消息,但可发送QQ消息
cmd=qqNum*** ";16;" +messNum+ ";" +session+ ";";qq号;qq消息;
发现WebQQ 协议是不怎么好,把浏览器脱机一下,就出现脚本错误了。