`
donnki
  • 浏览: 45280 次
  • 性别: Icon_minigender_1
  • 来自: 火星
文章分类
社区版块
存档分类
最新评论

大伙平时周末都忙啥?昨天没事研究了下QQ自动登录的,java实现的代码,有人要么?

阅读更多

周末闲着没事,看朋友在玩腾迅的那些个SNS游戏,打趣问我以前不是写过kaixin001的外挂程序,为啥不干脆再写个腾讯的,毕竟腾讯的用户多很多。于是也想尝试下。可是一开始就卡在QQ自动登录这里了~~

先是验证码的问题。自动识别验证码-。-没研究过,弄不出来。。只好采取折中的办法:自动把验证码图片下载下来放到本地目录,同时将cookie verifysession码给保存起来,作为登录时的cookie提交。

开玩开心网写外挂的思路,把form表单和隐藏域的值提交到QQ登录的表单,发现老是密码错误。。。觉得不对劲,于是截了个包看了下。果然,是加过密的密码提交的。。。

可以肯定的是在客户端JS加密,于是在一堆JS文件中翻出一个comm.js,找到了加密的那段JS。心想偷个懒先,JAVA6里不是可以用ScriptEngine来调用JS函数嘛,于是写了段JAVA调用JS的代码,将原始密码加密、发送。。。。还是登录失败!!

于是慢慢调试,发现貌似ScriptEngine调用的JS函数和用JS直接调用该函数,得到的结果竟然不一致!!(由于函数里有大量位运算操作,可能是Java的ScriptEngine和页面JS解释器的位数不一致吧?哪位仁兄有去仔细研究过的,来共享下知识嘛~~)。。。

没办法,只好自己去研究下那个加密函数,看了一下午才弄明白。。
QQ密码加密时,是先将初始密码先经过md5加密得到一个32位的密文,再将密文+4位验证码得到36位密文,再将36位密文进行三次MD5加密,就得到最后的发送密码了。
看来如果想通过截取QQ数据包来破解qq密码的可能性是几乎不存在了。。至少以俺的水平是不可能做到了。。。 T_T

接下来的“抢车位”自动停车、贴条的啥功能,“开心农场”种地偷菜的功能,技术上应该没多大问题了,可问题是…周末过完了。。。哎~~~
分享到:
评论
8 楼 nighthawk 2010-07-04  
不错,有点想法
7 楼 john2007 2010-07-02  
好文,要顶下的。
6 楼 wiwiluo 2010-04-10  
学习了,最近在搞RSA加密,也是在前台自动生成一个随机数,用脚本对随机数加密,然后用加密的随机数加密密码,再将两个加密数据提交到后台,进行解密。
5 楼 donnki 2009-07-20  
懒得写注释了。。要是啥地方不明白就问我吧
4 楼 donnki 2009-07-20  
package util.mygametools.qq;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Security {
	private final static char[] hexDigits = { '0', '1', '2', '3', '4', '5',
			'6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };

	private static String bytesToHex(byte[] bytes) {
		StringBuffer sb = new StringBuffer();
		int t;
		for (int i = 0; i < 16; i++) {
			t = bytes[i];
			if (t < 0)
				t += 256;
			sb.append(hexDigits[(t >>> 4)]);
			sb.append(hexDigits[(t % 16)]);
		}
		return sb.toString();
	}

	public static String md5(String input) throws Exception {
		return code(input, 32);
	}

	public static String code(String input, int bit) throws Exception {
		try {
			MessageDigest md = MessageDigest.getInstance(System.getProperty(
					"MD5.algorithm", "MD5"));
			if (bit == 16)
				return bytesToHex(md.digest(input.getBytes("utf-8")))
						.substring(8, 24);
			return bytesToHex(md.digest(input.getBytes("utf-8")));

		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			throw new Exception("Could not found MD5 algorithm.", e);
		}
	}
	public static String md5_3(String b) throws Exception{
		MessageDigest md = MessageDigest.getInstance(System.getProperty(
				"MD5.algorithm", "MD5"));
		byte[] a = md.digest(b.getBytes());
		a = md.digest(a);
		a = md.digest(a);
		
		return bytesToHex(a);
	}
}
3 楼 donnki 2009-07-20  
package util.mygametools.qq;
import static util.mygametools.qq.MD5Security.*;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;


import java.io.*;
public class QQcar {
	public static final String QQNUM = "10000";      //QQ行号码
	public static final String PASSWORD = "password";   //密码
	
	private static DefaultHttpClient httpclient = new DefaultHttpClient();
	private static boolean loginFlag = false;
	private static List<Cookie> cookies;
	private static HttpResponse response;
	private static HttpGet request;
	private static String verifyString;
	private static String verifySession;
	
	private static void getVerifyImage() throws Exception{
		String url = "http://ptlogin2.qq.com/getimage?aid=8000108&0.7022592303274631";
		HttpGet httpget = new HttpGet(url);
		httpget.addHeader("Cookie", "");
		httpget.setHeader("Accept", "text/html, */*");
		httpget.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727)");
		//httpget.addHeader("Connection", "close");
		//httpget.setHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.20) Gecko/20081217 Firefox/2.0.0.20")
		response = httpclient.execute(httpget);
		
		Header[] headers = response.getHeaders("Set-Cookie");//.getAllHeaders();
		
		for(Header h : headers){
			System.out.println(h);
		}
		verifySession = headers[0].getValue().split(";|=")[1];
		
		InputStream in = response.getEntity().getContent();
		File verifyFile = new File(QQcar.class.getResource("output").getPath() + "/verifycode.jpg");
		FileOutputStream out = new FileOutputStream(verifyFile);
		byte[] buf = new byte[1024];
		while(in.read(buf) != -1){
			out.write(buf);
		}
		out.flush();
		System.out.println("验证码图片已生成。路径:" + verifyFile.getCanonicalPath());
		System.out.println("请输入验证码:");
		verifyString = new BufferedReader(new InputStreamReader(System.in)).readLine();
		while(verifyString.length() != 4){
			System.out.println("验证码长度有误,请输入4位验证码:");
			verifyString = new BufferedReader(new InputStreamReader(System.in)).readLine();
		}
	}
	public static void doLogin() throws Exception{
		if(!loginFlag){	
			getVerifyImage();
			HttpPost httpost = new HttpPost("http://ptlogin2.qq.com/login");
	
	        List <NameValuePair> nvps = new ArrayList <NameValuePair>();
	        nvps.add(new BasicNameValuePair("u", QQNUM));
	        nvps.add(new BasicNameValuePair("p", md5( md5_3(PASSWORD) + verifyString.toUpperCase())));
	        
	        nvps.add(new BasicNameValuePair("verifycode", verifyString));
	        nvps.add(new BasicNameValuePair("aid", "8000108"));
	        nvps.add(new BasicNameValuePair("u1", "http://imgcache.qq.com/qzone/v5/loginsucc.html"));
	        nvps.add(new BasicNameValuePair("fp", "loginerroralert"));
	        nvps.add(new BasicNameValuePair("h", "1"));
	        nvps.add(new BasicNameValuePair("ptredirect", "0"));
	        nvps.add(new BasicNameValuePair("ptlang", "0"));
	        nvps.add(new BasicNameValuePair("from_ui", "1"));
	        nvps.add(new BasicNameValuePair("dumy", "1"));
	        
	        
	        
	        httpost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727)");
	        httpost.setHeader("Cookie", "verifysession=" + verifySession + ";");
	        httpost.setHeader("Referer", "http://ui.ptlogin2.qq.com/cgi-bin/login?link_target=blank&target=self&appid=8000108&qlogin_jumpname=vipmyqq&f_url=loginerroralert&qlogin_auto_login=1&s_url=http%3A//imgcache.qq.com/qzone/v5/loginsucc.html&qlogin_param=jump_url%3D");
	        httpost.setHeader("Accept", "text/html, */*");
	        httpost.removeHeaders("Cookie2");
	        httpost.removeHeaders("Expect");
			httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));	       
			response = httpclient.execute(httpost);
			
	        cookies = httpclient.getCookieStore().getCookies();
	        if (cookies.size() < 3) {
	            System.err.println("登录失败...");
	            loginFlag = false;
	        } else {
	        	System.out.println("登录成功...");
	        	for(Cookie c : cookies){
	        		System.out.println(c);
	        	}
	        	loginFlag = true;
	        }
		}
        
	}
	public static void main(String[] args) throws Exception{
		doLogin();
	}
}

2 楼 geminiyellow 2009-07-20  
贴上来共享下撒。
1 楼 eosite 2009-07-20  
有源码共享吗?

相关推荐

    java 实现词法分析器以及语法分析器

    由于这学期学了编译原理这门课,实验要求写词法分析器以及语法分析器,这才写的,不同网络其他的代码,我采用的是java实现的,也算费了好多脑细胞,希望能大伙看看咋样,不喜勿喷哦,各自学习就是了!

    Java编程思想习题答案代码

    这是Java编程思想的课后习题答案,方便大伙在学习的过程中参考。

    23种设计模式Java代码

    这是阎宏博士根据“四人帮”所著《设计模式》中描述的设计模式用Java实现的代码,我试过,对照着学设计模式很有效,特传上来跟大伙分享

    自动扫雷,扫雷解密程序VC++源代码

    自动扫雷,扫雷解密程序VC++源代码 给大伙学习

    Java语言基础

    压缩包有2本书,均是PDF格式 1.21天学通java 2.java程序设计入门教程 本来还有3本书想压缩在一起上传,但是限于50M的文件要求,只能上传这2本书,由于刚玩csdn社区,没什么资源积分,所以要了1资源分,希望大伙谅解...

    Code::Blocks天龙八部之C++实现(下),大伙儿著。

    Code::Blocks天龙八部之C++实现(下),大伙儿著。

    Java设计模式-图解-附代码

    该文档有助于帮助大伙学习设计模式,文档中使用java语言和类图以及一些实例来说明了设计模式。

    java源码注释翻译

    java源码注释翻译: 批量将源码文件夹下所有文件和子文件夹下类注释翻译为中文注释(调用百度翻译api接口), 欢迎大伙完善,评论!(在代码中成长!)。

    超短波通信在大伙房水库水文自动测报系统中的应用.pdf

    改造后的大伙房水库水文自动测报系统由34个遥测站、5个中继站和1个大伙房水库 调度中心站构成。系统应利用遥测、通信、计算机和网络等技术,完成流域及测区内固定站点 内的降水量、水位和流量的遥测。超短波通信是...

    电子时钟代码

    有关于电子表的C语言代码,只是比较繁琐,大伙可以借鉴下思路。

    MINA/JAVA游戏服务端源码

    我是个新手,有出错的地方莫怪哈,把源码发布出来更多的是想大伙帮忙改进下框架,改进的代码和新版本希望能够发到我的邮箱:xiamiy01@gmail.com,我会把新的修改和新版本发布出来,为大家服务。 文件夹简介: ...

    大伙房水库信息化工程建设技术研究.docx

    大伙房水库信息化工程建设技术研究.docx

    java web项目开发案例精粹--源代码6~10章

    该书我同样提供了资源下载,共20个项目及所有项目完整源代码,介绍的非常...认真学习完以后,相信java web编程能力会有一个质的提高。由于项目源码文件较大,我只能分成五部分供大家下载,好东西当然要同大伙一起分享。

    JAVA的IO笔记,希望对大伙有用哦!

    笔记 JAVA的IO方面的,适合初学者哈!

    java web项目开发案例精粹--源代码11~15章

    该书我同样提供了资源下载,共20个项目及所有项目完整源代码,介绍的非常...认真学习完以后,相信java web编程能力会有一个质的提高。由于项目源码文件较大,我只能分成五部分供大家下载,好东西当然要同大伙一起分享。

    JAVA 开发大恒DHQP300视频采集卡DEMO

    此资源是我在最近一次项目中使用JAVA开发DHQP300视频采集卡的DEMO,里面包括了JAVA工程,C++ 工程,以及相关的DMEO演示程序,给大伙分享一下,希望能帮助到一些人!

    java web项目开发案例精粹--源代码16~20章(part1)

    该书我同样提供了资源下载,共20个项目及所有项目完整源代码,介绍的非常...认真学习完以后,相信java web编程能力会有一个质的提高。由于项目源码文件较大,我只能分成五部分供大家下载,好东西当然要同大伙一起分享。

    Java冒泡排序算法

    没办法,有好资源只能上次20M,先上传小的,呵呵,大伙儿不要笑话我就是了!不过香蕉皮、鸡蛋就只管扔就是了,呵呵````

    基于投影寻踪的大伙房水库洪水分类研究

    基于投影寻踪的大伙房水库洪水分类研究,张静,陈静超,洪水分类是洪水自身规律研究的需要,也是人们认识洪水,控制与管理利用洪水的前提。以大伙房水库30场历史洪水过程为例,采用投影寻�

Global site tag (gtag.js) - Google Analytics