`
donnki
  • 浏览: 45945 次
  • 性别: 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的IO笔记,希望对大伙有用哦!

    Java的IO(输入/输出)系统是编程中一个至关重要的部分,它允许程序与外部世界进行数据交换。本文将深入探讨Java IO的一些基础知识,包括基本流、缓冲流、数据流和对象序列化。 首先,我们从最基础的流开始。在Java...

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

    大伙房水库信息化工程建设技术研究是一项旨在提升水库管理效率与决策能力的重要项目。该工程于2005年启动,总投资1632万元,其中中央财政投资占比70%,地方自筹30%。其核心目标是构建一个统一的信息平台,集成水文...

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

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

    Java语言基础

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

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

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

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

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

    电子时钟代码

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

    MINA/JAVA游戏服务端源码

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

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

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

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

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

    大伙房水库的浮游植物分布情况调查研究

    在对大伙房水库的浮游植物分布情况进行调查研究的过程中,涉及了众多方面的知识点。首先,浮游植物是水生生态系统中非常重要的组成部分。它们是水域中的主要初级生产者,能够进行光合作用,生成有机物质。同时,浮游...

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

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

    运行Eclipse生成的Java项目

    Eclipse是一个很好的java项目开发平台,但是,好多人不知道在命令行下如何运行Eclipse生成的Java项目。本作者为了给大伙儿排忧,特献上此资料。

    操作日期时间的工具类,封装的比较完善

    大伙下载后可以根据自已喜好再做扩展,再分享出来,使这工具类变强大一点,代码都在这文件里头,修改后将你大名追加上去,版本信息更新下。哈哈,同时代码写的不好之处请大伙指点。再分享时请转达这段描述,谢谢!...

    先上传一个线切割教程,大伙用的着用不着?

    大家看一看,先上传一个线切割教程,不知大伙能不能用的着。

    劫持最新版 QQNT / QQ / TIM 客户端 ClientKeys 演示工具

    大伙应该都知道自从 QQ 9.7.20 版本起就已经不能通过模拟网页快捷登录来截取 Uin 跟 Clientkey 数据,而此次 TX官网 最新发布的 QQNT 9.9.6 与 QQ 9.7.21 可谓是采用了全新的技术、全新的架构,截取数据的流程大大...

    ASP 使用jqGrid实现读写删的代码(json)

    jqGrid是一个优秀的基于jQuery的DataGrid框架,想必大伙儿也不陌生,网上基于ASP的资料很少,我提供一个,数据格式是json的: 、一个针对jqGrid的json类:这段代码似乎是由官网论坛的一些PHP中转化而来,我们存为...

Global site tag (gtag.js) - Google Analytics