登录qq空间可以用保密招行手机端登录验证码验证码登录吗

大家好,我的qq要密保手机短信验证,才能登录,原来号码不用了,该怎么办啊?_百度知道
大家好,我的qq要密保手机短信验证,才能登录,原来号码不用了,该怎么办啊?
通过邮件里的回执编号,QQ申诉页面会提示申诉人通过帐号申诉把QQ号申诉回来后重新设置密码和二代密码保护,腾讯一般会在4小时内将申诉结果发到申诉人填写的联系邮箱里;  二:QQ安全中心——密保工具——密保手机,从而更改密码、密保资料了  有两种方法刚换密保手机,这个情况只能通过申诉来更改掉先前的密保手机了:若有先前的密保手机号码的话。  具体解决方案如下(电脑端进入QQ安全中心):  一,只要申诉人所提交的证据较充分且与腾讯的记录相吻合、原来的密保手机号码记得的话。  成功提交申诉单后,申诉人会收到腾讯发给申诉人的成功提示邮件。路径。一种方法:QQ安全中心—账号管理——QQ申诉、申诉成功凭证按邮件提示就可以重新设置密码:陆腾讯未提示需要手机验证码才行)是可以直接更换密保手机的。尽量提供此号码较早前的使用记录,再通过换好了的密保手机进行QQ密码修改,申诉成功了就可以重新设置密码。申诉通过后、若忘记了先前的密保手机号码的话;另一种方法是通过申诉找回、原始性和正确性来综合进行判定,就能通过申诉,工作人员是根据申诉人所提交证据的充分性,并满足一定条件下(前提是有QQ账号和密码并在常用登陆地登。操作路径,注,符合一定条件可以下课直接更改密保手机
来自团队:
其他类似问题
为您推荐:
其他3条回答
那只能申诉,换绑你常用的手机号。
申诉,更换密保手机
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁腾讯QQ空间登录的方法实现方式与验证过程分析_狼吻酷族
欢迎来到狼吻酷族
当前位置:>>>腾讯QQ空间登录的方法实现方式与验证过程分析正文
腾讯QQ空间登录的方法实现方式与验证过程分析
下面是李昱的关于QQ空间登陆方式以及写法,并对实现方式与写法进行了解释,主要用与在设计QQ空间小工具需要验证空间登陆信息时候用到,比如留言,日志提交等,还能适用到其他的腾讯产品比如微博等.
一、腾讯QQ空间登录与验证过程
&&&&&& 腾讯QQ空间的登录一共需要经过三次验证,分别是在登录页面1、验证帐号状态,并通过帐号获取令牌的原始密钥;2、对原始密钥进行运算生成令牌密钥并提交服务器,服务器进行一次验证;3、经过第二次验证通过,服务器自动跳转,进行第三此验证,最后返回登录令牌&&终成功后才能获取到加密过后的登录令牌,而利用此令牌就可以顺利的操作任何腾讯的产品与服务了。
&&&&& 接下来我们以腾讯微博为例来进行一些在合法的限度内的讲解,旨在开拓各位读者的思维与分享技术思路,因为这东西其实我用了很久很久了,相信很多技术大牛们也都自己偷偷在应用着,只是懒得拿出来分享,或者用来赚钱而已。但是很不爽的就是腾讯最近宣布推出了开放平台,可实际上是换汤不换药的东西,所以才想要跟大家分享分享。因此如果您抱着想要通过本文的讲解来进行获利的目的,那我建议您可以就此打住了。因为,接下来的内容中我并不会去讲解或者说分享那些您会感兴趣的东西。
二、协议详解
&&&&&& 1、言归正传,首先第一次的登录是发生在我们打开登录页面的时候。 还是以腾讯微博为例,当我们打开微博的登录页面时,页面上的js会触发一个地址:/check?uin=&appid=&r=0.9408
这个地址是用来判断您的用户名是否是正常状态,以及是否有效用户名,并返回一个状态值以及一个验证码。其中uin就是你的用户名,appid指的是腾讯QQ空间的编码。r是一个随机生成的数字,用来避免浏览器缓存。
1正常时,请求这个地址,会获得类似ptui_checkVC('0','!AFO');这样的返回值,这其中0是代表正常状态,不采用图片验证。但是如果短时间内这个帐号多次在不同的ip登录,那么返回值就是另外的一种返回值了,那表明需要进行图片验证码验证。
此外,0还有可能变为其他的数值,用来标明诸如帐号不存在,帐号状态不正确,帐号已锁定等等的。。。。。而后面的!AFO是四位则是我们需要获得的原始令牌值,它是由腾讯服务器随机生成的一个令牌的原始密钥。当然也许您在获取的时候会发现这个值并不是4位,而是很多位。那么就要恭喜您了,您获得也是令牌的原始密钥,只不过不同的是,您获得是图片验证码的原始密钥而已。
当然其实图形验证码的自动识别也很简单,只是这已经超出本文的范围了,以后有机会可以与大家再次分享下。此时,当我们正确的获得!AFO时就已经完成了第一次的验证!但是有一点需要注意的是:腾讯的令牌是存储在cookies中的,
&2、此时我们需要对获取到的原始密钥进行一系列的运算,从而得到令牌密钥。这个算法其实也很简单,就是先把用户密码连续进行两次md5加密,每次md5加密输出二进制的结果,然后在对经过两次md5加密后的结果在进行一次md5加密,最后输出16进制大写的结果。在把我们第一步获取到的原始密钥合并在此结果之后,形成一个新的字符串。并且再次对此字符串进行md5加密,并输出16进制大写的字符串。此时,此字符串就为令牌密钥了。示例代码如下
1&&&&&&& def md5hash(self,str):
2&&&&&&& return hashlib.md5(str).digest()
3def hex_md5hash(self,str):
4&&&&&&& return hashlib.md5(str).hexdigest().upper()
5def md5hash_3(self,str):
6&&&&&&& return self.hex_md5hash(self.md5hash(self.md5hash(str)))
7def EncodePasswordWithVerifyCode(self,pwd, verifyCode):
8&&&&&&& return self.hex_md5hash(self.md5hash_3(pwd) + verifyCode.upper())
1EncodePasswordWithVerifyCode()即为此加密算法,pwd是密码,verifyCode为我们第一步获取到的4位的原始密钥。
二、先贴代码
01def Get_qzone(self,model,pushitem,**kwargs):
02&&&&&&&&&&&&&&& try:
03&&&&&&&&&&&&&&&&&&&&&&& message = mail.EmailMessage()
04&&&&&&&&&&&&&&&&&&&&&&& message.sender = '% pushitem.username
05&&&&&&&&&&&&&&&&&&&&&&& message.to = '% pushitem.username
06&&&&&&&&&&&&&&&&&&&&&&& message.body =htmllib.encoding(stringQ2B(htmllib.encoding(model.content)),'gb18030')
07&&&&&&&&&&&&&&&&&&&&&&& message.subject =htmllib.encoding(stringQ2B(htmllib.encoding(model.title)),'gb18030')
08&&&&&&&&&&&&&&&&&&&&&&& message.send()
09&&&&&&&&&&&&&&&&&&&&&&& return self.Get_True(model,pushitem)
10&&&&&&&&&&&&&&& except Exception,data:
11&&&&&&&&&&&&&&&&&&&&&&& return self.Get_False(model,pushitem,data)
三、简单解释
其实这个方法实现自己的qq空间的更新,或者实现自己的qq空间与其他博客同步更新等应用来说是最简洁的方法之一,技术含量也是最低的。
就是通过发送邮件到自己的来更新qq空间而已。甚至都不用写代码都可以实现,网易以及新浪的博客也具有类似的功能。
功能是简单,但是关键看怎么应用了。我是做新媒体,所以研究新媒体的营销方式,基于新媒体与基于网络的新的营销方式。
因此,我觉得这个简单的功能利用好了,能够实现非常不错的内容营销的效果。具体的,大家自己研究吧,这里仅仅抛砖引玉而已,你懂得。。。
四、其他实现方式
001&&&&&& def Get_qzone2(self,model,pushitem,**kwargs):
002&&&&&&& &&&
003&&&&&&& this method is used to get login to website,and put the content to the qzone
004&&&&&&& &&&
005&&&&&&& try:
008&&&&&&&&&&& html=u'%s 详细内容请查看:&a herf=%s&%s&/a&'% (
009&&&&&&&&&&&&&&&&&&&&&&& htmllib.decoding(htmllib.Filter_content(model.content)),
010&&&&&&&&&&&&&&&&&&&&&&& unicode(model.fullurl),unicode(model.fullurl))
011&&&&&&&&&&& html=htmllib.encoding(html,'gb18030')
012&&&&&&&&&&& title=htmllib.encoding(htmllib.decoding(model.title),'gb18030')
013&&&&&&&&&&& content=htmllib.Filter_html(html)
014&&&&&&&&&&& result=self.send_qzone2(pushitem.username,pushitem.password,content,title,html)
015&&&&&&&&&&& if result:
016&&&&&&&&&&&&&&& return self.Get_True(model,pushitem)
017&&&&&&&&&&& else:
018&&&&&&&&&&&&&&& return self.Get_False(model,pushitem)
019&&&&&&& except Exception,data:
020&&&&&&&&&&&&&&& return self.Get_False(model,pushitem,data)
022def Get_qzone2_val(self,username,password):
023&&&&&&& verifyURL = '/check?uin=%s&appid='% username
024&&&&&&& loginURL = '/login?'
025&&&&&&& redirectURL = ''
026&&&&&&& cookie = ''
027&&&&&&& qqn = username
028&&&&&&& md5Pass = ''
029&&&&&&& verifyCode = ''
030&&&&&&& result = urlfetch.fetch(url=verifyURL,method=urlfetch.GET,
031&&&&&&&&&&&&&&& follow_redirects = False,headers={
032&&&&&&&&&&&&&&& 'Content-Type': 'application/x-www-form-urlencoded',
033&&&&&&&&&&&&&&& 'user-agent':'Mozilla/5.0 (L U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko)_chrome/0.4.2.80 Safari/525.13',
034&&&&&&&&&&&&&&& },)
035&&&&&&& (result.content)
036&&&&&&& cookie1 = Cookie.SimpleCookie(result.headers.get('set-cookie', ''))
037&&&&&&& verifyCode=result.content[18:-3]
038&&&&&&& loginURL += &u=%s&p=&% username
039&&&&&&& loginURL+=self.EncodePasswordWithVerifyCode(password,verifyCode)
040&&&&&&& loginURL += &&verifycode=&+verifyCode+&&aid==http%3A%2F%%2Fqzone%2Fv5%2Floginsucc.html%3Fpara%3Dizone&ptredirect=1&h=1&from_ui=1&fp=loginerroralert&
041&&&&&&& result=urlfetch.fetch(url=loginURL,
042&&&&&&&&&&&&&&& headers={'Referer':'',
043&&&&&&&&&&&&&&& 'Cookie' : self.make_cookie_header(cookie1),
044&&&&&&&&&&&&&&& 'Content-Type': 'application/x-www-form-urlencoded',
045&&&&&&&&&&&&&&& 'user-agent':'Mozilla/5.0 (L U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko)_chrome/0.4.2.80 Safari/525.13',
046&&&&&&&&&&&&&&& },
047&&&&&&&&&&&&&&& method=urlfetch.GET,
048&&&&&&&&&&&&&&& follow_redirects = False,
049&&&&&&& )
051&&&&&&& setCookies = result.headers.get('set-cookie', '').split(';')
052&&&&&&& cookie2 = ''
053&&&&&&& cookie2+=setCookies[29]
054&&&&&&& cookie2+=setCookies[7]
055&&&&&&& cookie2+=setCookies[4]
056&&&&&&& cookie2+=';'+setCookies[0]
057&&&&&&& cookie2 = cookie2.replace(',', ';')
058&&&&&&& cookie2 = cookie2[1:]
059&&&&&&& callback_url = result.headers.get('location','/qzone/v5/loginsucc.html?para=izone')
060&&&&&&& result,cookie = self.do_redirect(callback_url, cookie2)
063&&&&&&& return result,cookie
064def Tmp_skey_get(self,cookie):
065&&&&&&& tmp=cookie.split(';')
066&&&&&&& for i in tmp:
067&&&&&&&&&&&&&&& if i[1:5]=='skey':
068&&&&&&&&&&&&&&&&&&&&&&& return i[6:]
069&&&&&&& return None
072def send_qzone2(self,username,password,content,title,html):
073&&& &&&
074&&& send qzone blog. use& username, password,content,title,html.
075&&& the content parameter like html,but no html tag.
076&&& &&&
077&&& memcachekey='send_qzone2'
078&&& cookie=''
079&&& if memcache.get(memcachekey):
080&&&&&&& cookie=memcache.get(memcachekey)
081&&&&&&& ('get cookie from memcache')
082&&& else:
083&&&&&&& result,oldcookie=self.Get_qzone2_val(username,password)
084&&&&&&& cookie='%s;%s'% (result.headers.get('set-cookie', ''),oldcookie)
085&&&&&&& memcache.set(memcachekey,cookie,36000)
086&&&&&&& ('set cookie')
087&&& tmphash=self.Tmp_skey_get(cookie)
088&&& tmphash=self.myhash(tmphash)
089&&& category='个人日记'
090&&& form_fields = {
091&&&&&&& &uin&:'',
092&&&&&&& &category&:htmllib.encoding(category,'gb18030'),
093&&&&&&& &title&:title,
094&&&&&&& &content&:content,
095&&&&&&& &html&:html,
096&&&&&&& &cb_autograph&:'1',
097&&&&&&& &topflag&:'0',
098&&&&&&& &needfeed&:'0',
099&&&&&&& &lp_type&:'0',
100&&&&&&& &g_tk&:tmphash,
101&&&&&&& &scorr__&:'/qzone/newblog/v5/editor.html|/qzone/newblog/v5/editor.html&http://user.//main',
103&&& form_data = urllib.urlencode(form_fields)
104&&& try:
105&&&&&&& result = urlfetch.fetch(url=&http://b./cgi-bin/blognew/blog_add&,
106&&&&&&&&&&&&&&&&&&&&&&& payload=form_data,
107&&&&&&&&&&&&&&&&&&&&&&& method=urlfetch.POST,
108&&&&&&&&&&&&&&&&&&&&&&& headers={'Referer':'/qzone/v5/toolpages/fp_gbk.html',
109&&&&&&&&&&&&&&&&&&&&&&& 'Cookie' : cookie,
110&&&&&&&&&&&&&&&&&&&&&&& 'user-agent':'Mozilla/5.0 (L U; Linux i686; en-US) AppleWebKit/525.13 (KHTML, like Gecko)_chrome/0.4.2.80 Safari/525.13',
112&&&&&&&&&&&&&&&&&&&&&&& },follow_redirects = False)
113&&& except Exception,data:
114&&&&&&&&&&&&&&& (data)
115&&&&&&&&&&&&&&& return False
116&&& if result.status_code == 200:
117&&&&&&&&&&&&&&& return True
118&&& else:
119&&&&&&&&&&&&&&& return False
121def make_cookie_header2(self,cookie):
122&&&&&&& ret = &&
123&&&&&&& for val in cookie.values():
124&&&&&&&&&&&&&&& ret+=&%s=%s; &%(val.split('=')[0], val.split('=')[1])
125&&&&&&& return ret
128def Make_cookie_dict(self,cookie):
129&&&&&&& tmpval=dict()
130&&&&&&& for val in cookie:
131&&&&&&&&&&&&&&& tmpval.update({val.split('=')[0]:val.split('=')[1]})
132&&&&&&& return tmpval
134def md5hash(self,str):
135&&&&&&& return hashlib.md5(str).digest()
136def hex_md5hash(self,str):
137&&&&&&& return hashlib.md5(str).hexdigest().upper()
138def md5hash_3(self,str):
139&&&&&&& return self.hex_md5hash(self.md5hash(self.md5hash(str)))
140def EncodePasswordWithVerifyCode(self,pwd, verifyCode):
141&&&&&&& return self.hex_md5hash(self.md5hash_3(pwd) + verifyCode.upper())
这就是常规我们所用的也是那些什么农场外挂之类的所应用的技术思路了。
具体可以参见本文第一部分所列的网址,里面有详细的解释。
这里只是简单的提几个需要注意的地方:
1、从第一讲开始,我就告诉大家了,获取到的令牌并不仅仅只是腾讯一项产品的令牌而已,他是腾讯统一的令牌,所以其他服务也可以用。记住令牌获取到了,可以一直使用下去,尽量不要每进行一个操作就从新获取一次令牌。
相信我,如果您这样做,您会哭的。。。。。这样只要3次,你就要考虑登录时进行自动智能图片验证码识别模块的编写的。。。虽然那也很简单,但是麻烦啊。。。。此外,登录的时候尽量的使用与你qq号码绑定的邮箱帐号登录,而不是qq号码。
因为,腾讯的帐号验证机制会对qq号码比较严格,所以用邮箱帐号登录可以获得一样的效果,而且很难出现图片验证码这个讨厌的东西。
2、Tmp_skey_get方法是用来从令牌cookies中获取skey值,这个值我在第一讲里面就已经说了,非常重要很多地方都要用到它的,它就相当于另一个令牌一样。。。腾讯还真是下足了功夫,弄个双保险啊。。
3、呃。。。不好意思前面贴代码少贴了一个方法。
1def myhash(self,tmpstr):
2&&&&&&&&&&&&&&& tmphash=5381
3&&&&&&&&&&&&&&& tmpstr=tmpstr
4&&&&&&&&&&&&&&& for i in range(0, len(tmpstr)):
5&&&&&&&&&&&&&&&&&&&&&&& tmphash+=(tmphash&&5)+ord(tmpstr )
6&&&&&&&&&&&&&&& return (tmphash & _0x7FFFFFFF)
就是这个myhash的方法,这个方法是用来对skey进行处理并生成另一块令牌。这个算法,是我研究了半天自己写出来的,但是运行的很好。也许有更好的算法,大家可以自己研究下。
4、tmphash=self.myhash(tmphash)是得到令牌,接下去构造表单中的g_tk的值就为这个令牌。这个g_tk不仅仅在qzone发布文章时候用到,包括获取好友列表啊,添加删除好友之类的地方以及qq邮箱都会用到的。
算法就是上面的那个算法了,但是还有一种更加容易,但是效率低的方法获得这个值&&每个页面中都会藏有这个g_tk的值,是当你打开这个页面的时候,腾讯生成在页面上的。你可以使用一些html解析库来分解html然后找到这个值也可以,但是就是效率比较低就是了。
5、还有一个需要注意的就是编码问题了,请使用gb18030而不是gb2312,为了更好的兼容性。
6、其他的部分可以参考本文第一部分中的两个网址,我的第一讲中详细的有介绍。
传说中的哥推荐你看
本分类最热门主题
最新发布推荐的主题
站长推荐的主题手机qq开启设备锁在网页登陆qq空间也需要验证吗?_百度知道
手机qq开启设备锁在网页登陆qq空间也需要验证吗?
我有更好的答案
那几个回答需要的
你爹了个尾巴的
自己去试试
上了设备锁
网页登陆你QQ
无需验证!
都后悔去吧
狗~蓝~子 ~腾~X
升级版的登陆保护什么B玩意!
还有没有人说实话了啊 全都扯淡!手机QQ开启过设备锁以后 在网页登陆都不需要认证了 即使你以前设置过认证 现在也不要认证了
是的解决办法QQ安全中心实验室关闭网页登录验证
不用的,应该。请点个大大的赞谢谢
这个是需要的
其他类似问题
为您推荐:
qq空间的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 招行手机端登录验证码 的文章

 

随机推荐