Delphi制作QQ自动登录器源码

Delphi制作QQ自动登录器源码

http://www.cnblogs.com/sunsoft/archive/2011/02/25/1964967.html

以TM2009为例,检查了一下,未登录之前一个窗体,上边两个控件,登录以后,窗体捕获到一个控件,根据这个,首先找到QQ登录框,输入用户名,密码的位置,获取窗体句柄的具体代码如下:

这里先定义了一个record类型,

1   TQQWnd= record

2     QQWnd,QStatusWnd: HWND;  //QQ窗口句柄,QQ弹出登录状态句柄

3     QQNumWnd, QQPassWnd: HWND; //QQ号码输入句柄,QQ密码输入句柄

4   end;

5

1   function GetQQLoginHwdvar A QQWnd: TQQWnd: Boolean;

2   var

3     WinTitle: array[0..254] of Char;

4     WinClass: array[0..254] of Char;

5   begin

6     Result:= False;

7     A QQWnd.QQWnd:= 0;

8     A QQWnd.QQNumWnd:= 0;

9     A QQWnd.QQPassWnd:= 0;

10     A QQWnd.QQWnd:= FindWindownil, ‘TM2009‘;

11     while A QQWnd.QQWnd<> 0 do begin

12       A QQWnd.QQNumWnd:= FindWindowExAQQWnd.QQWnd, 0, ‘A TL:30A 4D1D8‘, nil;

13       A QQWnd.QQPassWnd:= FindWindowExAQQWnd.QQWnd, 0, ‘Edit‘, nil;

14       if AQQWnd.QQNumWnd<> 0and AQQWnd.QQPassWnd<> 0 then begin

15         Result:= True;

16         FOpened:= True;

17         Exit;

18       end else begin

19         A QQWnd.QQWnd:= GetWindowAQQWnd.QQWnd, GW_HWNDNEXT;

20         if A QQWnd.QQWnd=0 then Continue;

21         GetWindowTextAQQWnd.QQWnd, @WinTitle, SizeOfWinTitl;

22         if WinTitle<>‘TM2009‘ then Continue;

23       end;

24     end;

25   end;

26

因为腾讯的密码输入框,采用的低级钩子,然后定时的释放,建立钩子这种方式来防止木马顺序去捕获,尝试了下,直接的用Sendmessag去发送密码信息,没反应,因此这里我采用了SendInput方式去输入密码,而用户框因为没有做任何的维护措施,所以可以直接的通过发送消息,将QQ账户信息给赋值过去,具体代码为

1       SetForegroundWindowQQWnds.QQWnd; //QQ窗体设置为活动窗体

2       //设置QQ号码

3        SendMessagQQWnds.QQNumWnd,WM_SETFOCUS,0,0; //聚焦至QQ号码输入框

4       Sleep20;

5       SendMessagQQWnds.QQNumWnd,WM_SETTEXT,0,LPA RA MFQQNum; //设置QQ号码

6

7       SendMessagQQWnds.QQPassWnd,WM_SETFOCUS,0,0; //聚焦密码输入框

8       Sleep20;

9       //设置QQ密码

10       SIKeyInputFQQPass, 10; //QQ密码采取SENDINPUT方式

11

12

13

解下来要操作的就是设置登录方式了譬如说“线上”隐身”等状态,由于腾讯的登录窗体是采用的GUI所以是捕获不到句柄的只能通过坐标来捕获,之前的时候,用的固定坐标,然后有的电脑可以用,有的不能用,后来才发现,由于腾讯的界面可以拉动,只要一拉动,坐标位置就变了因此我这里采取相对坐标,根据QQ密码框的坐标,来设置点击的坐标。腾讯的状态是窗体上点击以后,弹出一个跟登录框平级的窗口,因此点击以后,需要检测是否弹出选择状态窗口,找到那个窗口句柄以后,再发送相应的点击命令,这样就完成整个的流程了

1 const

2   QQStatusYA rray: array[0..5] of Integer= 19, 38, 62, 86, 105, 131;

3

4

5       ClickTimes:= 0; //为防止有的时候点击过程中出现其他不可预料的错误,这里可以重复点击三次

6       QQWnds.QStatusWnd:= 0; //设置QQ状态初始句柄为0

7       //鼠标点击

8       while ClickTimes<3 do begin

9         PostMessagQQWnds.QQWnd,$201,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+21,4+IntToHexQQNumRec.Left-QQRect.Left+25,4; //发送点击消息,这里如果采用SendMessag会死线程,因此我采用了PostMessage

10         PostMessagQQWnds.QQWnd,$202,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+21,4+IntToHexQQNumRec.Left-QQRect.Left+25,4;

11         Sleep200;

12         QQWnds.QStatusWnd:= FindWindow‘TXGuiFoundation‘,‘TXMenuWindow‘; //检测是否存在QQ设置状态窗体

13         if QQWnds.QStatusWnd<>0 then begin

14           try

15             PostMessagQQWnds.QStatusWnd,$201,MK_LBUTTON,StrToInt#36+IntToHexQQStatusYA rray[FQQStatus],4+IntToHex27,4; //如果存在窗体,直接的发送点击信息

16             PostMessagQQWnds.QStatusWnd,$202,MK_LBUTTON,StrToInt#36+IntToHexQQStatusYA rray[FQQStatus],4+IntToHex27,4;

17           except

18           end;

19           Break;

20         end;

21         ClickTimes:=ClickTimes+1;

22       end;

23       if QQWnds.QStatusWnd=0 then begin //如果一直没有捕捉到设置状态窗体,顺序则自动退出

24         Task.Comm.SendMSG_QQ_ERR, IntToStrQQRect.Left+‘‘+ IntToStrQQRect.Top+ ‘‘+ In

tToStrQQRect.Right+ ‘‘+ IntToStrQQRect.Bottom

25           +‘‘+ IntToStrQQNumRec.Left+‘‘+ IntToStrQQNumRec.Top+ ‘‘+ IntToStrQQNu

mRec.Right+ ‘‘+ IntToStrQQNumRec.Bottom

26           + IntToStrQQNumRec.Bottom- QQRect.Top+21+‘设置状态失败‘;

27 //        Task.Comm.SendMSG_QQ_ERR, IntToStrQQNumRec.Left-QQRect.Left+25+‘‘+ IntToStrQQNumRec.Bottom- QQRect.Top+21+‘设置状态失败‘;

28         Exit;

29       end;

30

最后,直接的点击登录按钮就可以了这个地方,也是要计算相对于密码输入框的坐标

1       //点击登录按钮

2       try

3         PostMessagQQWnds.QQWnd,$201,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+114,4+IntToHexQQNumRec.Left-QQRect.Left+64,4;

4         PostMessagQQWnds.QQWnd,$202,MK_LBUTTON,StrToInt#36+IntToHexQQNumRec.Bottom- QQRect.Top+114,4+IntToHexQQNumRec.Left-QQRect.Left+64,4;

5       except

6       end;

7

至此,整个的流程完毕了最后,还可以增加上检测该QQ号码是否已经登录

以下是最后进去的界面,直接的将QQ信息保管在数据库当中,密码采用了AES加密,所以也不用担心密码信息被泄

时间: 2024-10-11 05:14:11

Delphi制作QQ自动登录器源码的相关文章

C++、VC++、MFC网页自动注册、登陆、发帖、留言,QQ注册、QQ申请器源码、注册邮箱源码、自动发帖源码

C++.VC++.MFC网页自动注册.登陆.发帖.留言,QQ注册.QQ申请器源码.注册邮箱源码.自动发帖源码 参考资料: 自动登录yahoo邮箱http://blog.csdn.net/suisuibianbian/archive/2005/12/12/550260.aspx VC采集网页所有表单域http://blog.csdn.net/fjssharpsword/archive/2010/12/17/6081689.aspx 说说这类软件最常见的使用方式吧. 也许你经常看到有人发布了以下这类

linux调度器源码分析 - 初始化(二)

本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 上期文章linux调度器源码分析 - 概述(一)已经把调度器相关的数据结构介绍了一遍,本篇着重通过代码说明调度器在系统启动初始化阶段是如何初始化和工作的.通过上期文章我们知道,在多核CPU和SMP系统中,每个CPU(多核COU中的每个核)都有自己的struct rq队列,而rq队列中又有着自己的struct cfs_rq和struct rt_rq.在初始化时就是对这三个结构进行初始化. init_tas

美女图片采集器 (源码+解析)

前言: 有一段时间没写博客了, "持之以恒"徽章都暗了, 实在不该. 前一段确实比较忙, ...小小地给自己的懒找个借口吧. 大二即将结束, 学习iOS也有一段时间了.今天抽点时间, 开源一个前几天刚上传的App里面的一个功能, RT, 美女图片采集器.   美女.. 相信没有人不喜欢吧, 基于此, 这个小Demo应运而生. 效果演示: 看到这里, 如果还有兴趣学习的话, 可以先到我的git中下载源码, 然后配合着源码看我下面的解析.相信, 会让你有所收获的. git下载链接: Bea

利用phantomjs模拟QQ自动登录

之前为了抓取兴趣部落里的数据,研究了下QQ自动登录. 当时搜索了一番,发现大部分方法都已经失效了,于是准备自己开搞. 第一个想到的就是参考网上已有方案的做法,梳理登陆js的实现,通过其他语言重写.考虑到js可能会更新,放弃了此方案. 第二个想到的是能不能直接调用QQ自己的js方法,模拟进行提交呢.搜索一番后发现神器 ---- "phantomjs". PhantomJS is a headless WebKit scriptable with a JavaScript API. It

vbs-计算机硬件信息查看器-源码-.exe程序-可直接使用复制使用

vbs-计算机硬件信息查看器-源码-可直接使用复制使用 #----------------------------------------------------------------------------------------以下为源代码 msgbox "               正在加载本机配置信息,请按确认继续!       ", 40, "配置信息查询" On Error Resume Next   SerVerPath = "c:\硬件

Python解析器源码加密系列之(二):一次使用标准c的FILE*访问内存块的尝试

摘要:由于近期打算修改Python解释器以实现pyc文件的加密/解密,出于保密的要求,解密之后的数据只能放在内存中,不能写入到文件中.但是后续的解析pyc文件的代码又只能接受FILE*作为入参,所以就提出了一种把通过FILE*来访问内存的需求,下文是针对这个需求的几个方面的尝试及其结论. 以下尝试的前提是:Win7 + VS2010. 在vc中,FILE其实就是_iobuf,定义如下: struct _iobuf { char *_ptr; //文件输入的下一个位置 int _cnt; //当前

Android短信插入器源码

package com.examp.createsms; import android.app.Activity; import android.content.ContentResolver; import android.content.ContentValues; import android.net.Uri; import android.os.Bundle; public class MainActivity extends Activity { @Override protected

Android应用经典主界面框架之一:仿QQ (使用Fragment, 附源码)

最近反复研究日常经典必用的几个android app,从主界面带来的交互方式入手进行分析,我将其大致分为三类.今天记录第一种方式,即主界面下面有几个tab页,最上端是标题栏,tab页和tab页之间不是通过滑动切换的,而是通过点击切换tab页.早期这种架构一直是使用tabhost+activitygroup来使用,随着fragment的出现及google官方也大力推荐使用fragment,后者大有代替前者之势.本文也使用fragment进行搭建,标题中的"经典"指这种交互经典,非本文的代

自制Android中的短息备份器源码

短信的实体bean package com.examp.backsms.domain; public class SmsInfo { private String address; private String date; private String type; private String body; public SmsInfo() { } public SmsInfo(String address, String date, String type, String body) { thi