存档

‘QQ’ 分类的存档

[ZT]QQ/FOX中转站通用下载方法

2009年6月7日 Galaxy 3 条评论

http://bbs.sfileydy.com/viewthread.php?tid=286962&extra=page%3D1
[版块] QQ/FOX中转站通用下载方法(修正)
本帖最后由 cypunker 于 2009-6-3 13:09 编辑

前言:老办法比较麻烦,新办法和以前老办法也差不错;另外,有大量老文件的用户可以去i720.org申请长期有效链接的服务
QQ通用下载方法实例:
1.随便找了个链接,http://mail.qq.com/cgi-bin/ftnExs_download?k=623339316b01999c904c67184238514a0d030b00000b020615010d070115575c5e571453060800485c500d00530f07535d505b05641e632c561d6d43015917085d5d4d1f375d0216575d0b1f21685356676014770d540616164154470638&t=exs_ftn_download&code=8391d8ce
提示无法下载
2,页面点右键,“查看源文件”
3,在记事本中,搜索 ?uin,找到 ?uin=694058920&svrid=&fid=
4,把694058920填入下面JS代码的相应位置,就是username=与;之间:

javascript:var s=/mail.qq.com/;if(!s.exec(location.host)){top.window.location='http://mail.qq.com';Break;}function a(){document.cookie='username=694058920;domain=.qq.com;path=/;expires='+(new Date((new Date()).getTime()+60000)).toUTCString();alert('你可以按F5刷新了');}a();

如果要下载同一个邮箱里的多个文件,可适当把getTime()+60000改大,1000=1秒

5,粘贴JS代码到提取页面的地址栏,回车,提示“你可以按F5刷新了”,1分种内刷新提取页面(必须)即可正常下载。提取页面就是你正在访问的QQ中转下载页面,千万别搞错了
缺点:此方法会在1分钟内影响QQMAIL的永久登陆,但1分钟后仍然正常使用;会退出QQMAIL的临时登陆,1分钟后才能登陆
QQ中转站小窍门

是用https://mail.qq.com访问邮箱,上传的文件可以直接得到提取页面地址,不用再自己发邮件给自己

FOX通用下载方法(无需登陆邮箱,有FOX邮箱的不要用此方法):

1.访问FOX提取页面,就是http://mail.foxmail.com/cgi-bin/ftnExs_download?k=XXXXXXXXXXXXXXXXXX
2,粘贴以下代码到刚才访问页面的地址栏:

javascript:var s=/mail.foxmail.com/;if(!s.exec(location.host)){top.window.location='http://mail.foxmail.com';Break;}function a(){document.cookie='username=1523770;domain=.foxmail.com;path=/;expires='+(new Date((new Date()).getTime()+999999)).toUTCString();alert('你可以按F5刷新了');}a();

注意,这里不用修改,直接粘贴回车即可

3,回车,提示“你可以按F5刷新了”,按F5刷新提取页面 (必须),即可正常下载!FOX通用下载方法使用一次后长时间有效,无须重复操作

2009-6-3 11:35

老方法可以退休了,转载请注明原作者。阿弥陀佛
阅读全文…

分类: QQ 标签: , ,

[ZT]18个顶级的腾讯qq技巧

2008年9月14日 Galaxy 没有评论


18个顶级的腾讯qq技巧!

本文从其他网站整理而来的18个顶级的腾讯qq技巧,能让你用腾讯qq更加潇洒自如,炉火纯青。

1.让电脑只能上到自己的腾讯qq,任何腾讯qq都无法登陆。 首先把自己的腾讯qq设置为自动登陆模式,接下来最关键的就是移动或删除腾讯qq主目录下的WizardCtrl.dll文件 ,这样就算别的腾讯qq怎么样也登陆不了的了。如果你想上两个腾讯qq的话就把腾讯qq整个目录复制多一份,按照刚才 的方法操作就可以了。

2.破解查看腾讯qq加密码的相册. 第一步-打开IE-工具-IE选项-删除文件F-删除COOKISS-打开设置-查看文件夹 第二步-打开相册-在刚才打开的文件夹里点击刷新,然后找到一个文件名为 cgi_腾讯qqzone.cgi的文件.打开他-看到一些代码…然后就按Ctrl+F 输入相册的名字<比如加密相册叫:宝贝….则输入”宝贝” 按两次 查找下一个…然后在下面一点看到一个http://开头和一串数字结尾的连接就是加密相册的图片 拉,复制到IE上就可以看到了.

以下内容需要回复才能看到

3.如何免费领养到腾讯qq宠物。 本人收集的砸腾讯qq宠物蛋的有效网址: http://pet.qq.com/act/angel/index.shtml http://pet.qq.com/oneyear/index3.htm http://client.pet.qq.com/pet.htm

4.解除已忘记的手机号码的腾讯qq手机绑定。 在腾讯qq资料个人设置的联系方式显示的绑定手机号码中间的数字带*星号而无法查看,要想看到的话很简单 ,使用TM模式登陆(在腾讯qq菜单里点一下‘使用TM’,电脑没装的话就会自动提示你下载安装),登陆之后 再查看你个人资料的联系方式你会发现绑定的手机号码全部显示出来了。接着点击”菜单”,选择“无线 腾讯qq–无线腾讯qq向导”,选择第一项”腾讯qq免费绑定/解绑–手机/小灵通”,下一步,输入手机号码,回车。

5.禁止运行腾讯qq自带的进程TIMPlatform.exe 先说说这个进程的作用:无法在一台电脑登陆两个相同的腾讯qq的进程。(这当然不是禁止它运行的目的) 操作流程如下: 开始→运行→输入dcomcnfg.exe回车→组件服务→计算机→我的电脑→DCOM配置→腾讯qqMainCreator Component→按右键选‘属性’→安全标签→启动和激活权限→自定义→编辑→将“组或用户名称”里所 使用帐户下的用户权限全部选为拒绝,这样就可以节省2M的系统占用内存了,就是这个目的。补充一下: 在Windows9X系统无效。

6.腾讯qq登陆密码不能粘贴的解决方法。 这个技巧对于批量盗腾讯qq的人有用,如果你不是的话就不用看了。 在腾讯qq主目录下把npkcrypt.vxd文件改名(后面的.vxd不能改),同时破解了键盘加锁保护。

7.非会员免费克隆腾讯qq好友。 首先找到你的腾讯qq安装目录,然后打开你想被克隆的腾讯qq号码的文件夹(前提是登陆过的腾讯qq)找到名字为 user.db的文件,最后把它复制到你要克隆好友的腾讯qq号码文件夹里覆盖原文件就可以了。(这个过程你必 须要把腾讯qq关掉)。这时登陆腾讯qq会看到腾讯qq好友成功‘移植’过来了,不过他们还没‘复活’,你还不能和他 们聊天,接下来就是最关键的一步了,打开好友管理器,在好友列表里选中自己想要加的人,选择多人的 话要按着ctrl键, 选好后再把刚才选中的好友全拉到陌生人一栏里,然后到陌生人一栏中,把他们拉到好 友列表里,复活成功。从这个思路可以领悟到,想找回被盗的腾讯qq的好友也是用这个方法。

8.强制和任意的腾讯qq聊天. 把下面代码中“********”星号换成你想与其聊天的腾讯qq号复制到浏览器的地址栏处按回车即可。无论他是 否你的好友,你无须加他为好友就能给他发腾讯qq消息。 http://wpa.qq.com/msgrd?V=1&Uin=********&Site=ioshenmue&Menu=yes

9.无限申请免费腾讯qq号码。 前提你必须是ADSL宽带拨号上网,通常一部电脑一天只能申请一个免费腾讯qq号码,其实就是IP的限制,ADSL 宽带就可以解决这个限制,当你申请到一个腾讯qq后断开你的宽带连接,再连接上,这时重新打开腾讯qq登陆界面 申请号码就可以再申请了,一直重复步骤:申请腾讯qq→断开连接→连接上网……如果不是ADSL或在网吧上的 朋友就要代理服务器了,不过要比较麻烦,这里我就不详诉了,想知道的话就加我腾讯qq吧。

10.随时随地上腾讯qq把自己的聊天纪录累积起来+网络硬盘免排队方法。 我去到哪里上网都是这样的,这样做可以怀旧啦、可以不忘他人啦,也可以有时当证据用等等。。。。。 。总之各人有各人想法。其实很简单,但是知道的人极少,每当你聊完腾讯qq走人之前把腾讯qq主目录下自己的文 件夹里找到MsgEx.db这个文件上传到你的腾讯qq网络硬盘里,到别的电脑上腾讯qq时就把MsgEx.db文件下载下来放 到自己腾讯qq号码文件夹里(放之前一定要关闭腾讯qq,否则无法覆盖),搞定之后就可以看到上次的聊天纪录了 ,每次都这样做的话就累积起来了。有人干脆把整个自己腾讯qq号码文件夹打包来携带,当然如果你的网络硬 盘有512M空间就没问题,我自己的腾讯qq号码269914664文件夹都有100多M了。非会员携带聊天纪录就不方便了 ,每次网络硬盘要用时就要排长龙,这里有个100%免排队方法,切换到TM模式来打开网络硬盘就不用排队 了。

11.没安装摄像头也能在腾讯qq业务栏中显示摄像头图标。 有两种方法: 一:利用软件,下载地址http://www.skycn.com/soft/26196.html, 安装之后重登陆腾讯qq就可以显示出来了 。(本人鄙视这种方法,理由:占用内存,不稳定,视频时响应速度变慢) 二:(本人强烈推荐这种方法)首先你的一定是腾讯qq珊瑚虫版本,总之能显IP的版本都行。在腾讯qq主目录下找 到C腾讯qqCfg.exe,这个叫作参数定制器(非显IP的腾讯qq是没有这个的),打开之后依次选中‘参数设置’→‘ 扩展功能’,在‘摄像头状态’右边的‘由腾讯qq设置决定’改为‘始终显示为有摄像头’,保存,退出,这 时离线腾讯qq再上线腾讯qq即可看到摄像头图标。既不占用内存,也不影响看对方的视频速度。

12.免费给网络硬盘加密码。 给腾讯qq网络硬盘添加密码是属于收费功能,只有会员和网络硬盘的高级用户才可以使用。废话不说,开始。 首先你的号码要有密码保护,打开网页“http://service.qq.com”, 输入腾讯qq号和附加码后点击“立即取 回密码”按钮,在第二步输入密码保护的正确答案,在第三步选择“网络硬盘密码”,在第四步选择“将 邮件发送到默认的Email信箱”,然后点击“下一步”按钮,如果资料正确的话,就会有一封修改密码的 邮件发送到申请密码保护时指定的信箱中,打开收到的邮件,点击里面的链接就可以给该腾讯qq号的网络硬盘 添加密码了。

13.查询任何腾讯qq的总财富、腾讯qq秀以及3钻业务。 在浏览器输入http://qqshow.qq.com/cgi-bin/qqshow_user_info** 等号的后面加上你想查询的腾讯qq号码,回车。

14.把自己加为好友。 在你腾讯qq的黑名单分组点击鼠标右键弹出对话框选择‘添加坏人名单’,输入你自己的腾讯qq号码,接着再把自 己拉上你的好友分组就OK了。(前提必须你腾讯qq个人设置的身份验证为‘允许任何人把我列为好友’。

15.腾讯qq空间个人形象照片任意换。 进入自己的腾讯qq空间之后,在地址输入http://izone.qq.com/client/index.htm?uin=

(等号的后面加上你的腾讯qq号码),回车,进入之后在上面选择‘个人挡’,接着在左边选择‘显示我的图 片’,在这里输入图片地址点确定就OK了。

16.修改腾讯qq性别为任意一个字。 下载地址(长期有效):http://hackol.com/soft/2006/03/qq2–6.rar

17.腾讯qq付费服务,就是不付费。 腾讯qq付费服务可以用手机开通,大家也知道;每个月20号到当月月底用手机开通收费服务,当月是不收费的 ,大家也知道。比如说你当月20号以后开通腾讯qq会员:设置腾讯qq头像,克隆好友……这些都是免费的,只要你 在下个月1号收费之前取消腾讯qq会员服务就可以了。取消后腾讯qq头像自己已经改变成自己喜欢的了,好友腾讯qq也 成功克隆了。简单的说只要你有一部手机,每月20号至月末,你申请付费服务,不扣费,这段时间你想怎 么玩就怎么玩,到下个月1号收费之前记得取消就可以了。有一点要注意,某项服务同一个月开通2次会收 费的。

18.让腾讯qq秀购物券永不过期的秘笈。 这个秘笈对盗Q币的人相当有用,因为Q币是无法赠送的,只能通过兑换成购物券来赠送,如果盗来的Q币 不是用来买或送腾讯qq秀的人就不必用了。相信很多人都知道腾讯qq秀购物券的使用期限为当月有效,到下个月1 号就会全消失,因而不少人不得不在过期前将腾讯qq购物券用光。好了,开始演示,首先要说明一件事,这个 过程一定要在当月的25号至31号之间做才有用,原因你不需要知道,照我说就是了。登陆腾讯qq商城 http://腾讯qqshow.qq.com单 击上面的‘照相馆’,在“发起合影”文本处,输入自己的另外一个腾讯qq号码,再 强调一次,必须输入自己的另外一个腾讯qq号码,操作完后,单击“发起合影”,进入合影物品的购买区,这 里要将所剩的购物券余额花完,如果一次性花不完购物券,可以再合影多几次直到账户没有购物券为止, 不然剩余的购物券到下个月就会消失的了,支付完毕之后登陆另一个合影的腾讯qq就会收到“等待您确认的合 影请求”的系统信息,单击“查看”按钮进入“合影请求信息”页面全部选择‘忽略’,现在什么都不用 理了,到下个月1号腾讯就会把上个月合影的所有费用全部退还到你的账户了。 (这里补充一点:如果腾讯qq上同时有Q币和购物券的话,消费的时候购物券是优先支付的)

18个顶级的腾讯qq技巧! – 『免费资源』 – 真实de世界 – The true world

分类: QQ 标签: , ,

[ZT]LYSoft出品之QQ去广告+本地会员+显示IP外挂原理

2008年3月14日 Galaxy 没有评论

LYSoft出品之QQ去广告+本地会员+显示IP外挂原理

http://lysoft.g4soft.net/article.asp?id=44

采用自动代码分析,支持QQ2007,并支持QQ程序没架构改动下的一切新版
下载 v80124+ IP数据库 80120

[本文针对QQ2007而写]

主要技术原理:

做IPQQ,那么这几个必备工具是不可缺的:OllyDbg,PEExplorer,DASM32,MFCSpy2
QQ是基于接口调用架构的,这为窥探其内部提供了方便之门

0)    经过分析,获知QQ获取IP信息是通过接口调用实现的,其步骤为
IQQCore->IQQData->IQQUserDynData->dwIP方法

1)    获得IQQCore.要获得此全局描述接口的方法有很多,最好的就是通过QQHelperDll.dll的 ?IsLogin@@YAHPAUIQQCore@@@Z方法获得,函数表达为int __cdecl IsLogin (struct IQQCore **).因为这个IsLogIn方法被QQ频繁调用,于是Hook这个函数,便能轻易获得IQQCore了

function IsLogin(pQQCore: Pointer): Integer; cdecl;
begin
  Result := Call original Func;  调用原函数
  pIQQCore := pQQCore;  获得IQQCore
end;

2)    从IQQCore获得IQQData.这个事情好办,QQ的BasicCtrlDll.dll的?GetFriendQQData@@YAHPAUIQQCore@@KPAPAUIQQData@@@Z方法,就是从IQQCore和UIN获得IQQData,函数表达为int __cdecl GetFriendQQData(struct IQQCore *,unsigned long,struct IQQData * *)

asm
      // int __cdecl GetFriendQQData(struct IQQCore *,unsigned long,struct IQQData * *)
      mov eax, pIQQCore
      mov edx, UIN  // QQ Uin (QQ number)
      lea ecx, Result  // return = pIQQData
      push ecx
      push edx
      push eax
      call GetFriendQQData
      add esp, $C  // fix call stack
end;

3)    从IQQData获得IQQUserDynData.很不幸,QQ没有直接提供该方法,只好DASM QQ的内部,来模拟此过程的调用.
const
  szQQUSER_DYNAMIC_DATA : PChar = ‘QQUSER_DYNAMIC_DATA’;
  clsid_IQQData : TGUID = ‘{BA863A1E-C979-498A-975C-C501C4F310A3}’;
asm
      // pIQQData = Pointer(IQQData);
      mov ecx, pIQQData
      mov ecx, [ecx]  // ecx = IQQData.vtbl
      mov eax, pIQQData  // this pIQQData
      lea edx, Result  // return = pIQQUDD
      push edx
      lea edx, clsid_IQQData  // clsid_IQQData
      push edx
      push szQQUSER_DYNAMIC_DATA
      push eax
      call [ecx + $54]  // IQQData.vf_54h QQUSER_DYNAMIC_DATA proc entry
end;

4)    从IQQUserDynData获得IP信息.
const
  szdwIP : PChar = ‘dwIP’;
  szwPort : PChar = ‘wPort’;
asm
      // get Uin info
      mov eax, pIQQUDD
      mov ecx, [eax]
      lea edx, dwIP
      push edx
      push szdwIP
      push eax   
     call [ecx + $34]  // IQQUDD.vf_34h
      mov eax, pIQQUDD
      mov ecx, [eax]
      lea edx, wPort
      push edx
      push szwPort
      push eax   
      call [ecx + $30]  // IQQUDD.vf_30h
end;

上面的代码,懂ASM的人很容易就能理解的,其实这些代码也是来自QQ的DASM工程.
注意一下接口调用和Cdecl就行了,因为用Delphi写的,所以不好直接支持C++的thiscall,故采用BASM方式来调用~

至于去广告,把目录AD下全部文件和Dat下Ad.gif删除了,广告就不会出来了.
可是这样QQ还是会下载新的广告的,怎么办呢?只好修改QQ内部了,这是属于破解的范畴,做起来也并不复杂.

DASM分析QQ.EXE即可查询到”广告”和”下载逻辑”的文本常量和OD查找字符串常量”Download_Start”,它的上面是”SECTION_AD”,然后把相关的地方NOP了就能使QQ不再下载广告.不同的版本要修改的地方不一样,这里就仅以QQ2007II Beta1为例

004E9D49  |.  57            push    edi
004E9D4A  |.  50            push    eax
004E9D4B  |.  57            push    edi
004E9D4C  |.  53            push    ebx
004E9D4D  |.  68 EFB14E00   push    004EB1EF                         ;  Entry address
^ 这里是广告下载过程入口,到入口改为retn直接返回就OK了
004E9D52  |.  E8 DE4EF2FF   call    0040EC35
004E9D57  |.  83C4 14       add     esp, 14
004E9D5A  |.  BF 7CF55A00   mov     edi, 005AF57C                    ;  ASCII “C:\config_asam.ini”
004E9D5F  |.  C745 10 60EA0>mov     dword ptr [ebp+10], 0EA60
004E9D66  |.  57            push    edi                              ; /FileName => “C:\config_asam.ini”
004E9D67  |.  FF15 E0035400 call    dword ptr [<&KERNEL32.GetFileAtt>; \GetFileAttributesA
004E9D6D  |.  83F8 FF       cmp     eax, -1
004E9D70  |.  74 64         je      short 004E9DD6
004E9D72  |.  A8 10         test    al, 10
004E9D74  |.  75 60         jnz     short 004E9DD6
004E9D76  |.  57            push    edi
004E9D77  |.  8D4D B8       lea     ecx, dword ptr [ebp-48]
004E9D7A  |.  E8 657BFAFF   call    <jmp.&MFC42.#537_CString::CStrin>
004E9D7F  |.  BF 84DB5500   mov     edi, 0055DB84
004E9D84  |.  C645 FC 0C    mov     byte ptr [ebp-4], 0C
004E9D88  |.  897D B4       mov     dword ptr [ebp-4C], edi
004E9D8B  |.  B8 70F55A00   mov     eax, 005AF570                    ;  ASCII “SECTION_AD”
004E9D90  |.  C645 FC 0D    mov     byte ptr [ebp-4], 0D
004E9D94  |.  8BC8          mov     ecx, eax
004E9D96  |.  85C9          test    ecx, ecx
004E9D98  |.  74 1A         je      short 004E9DB4
004E9D9A  |.  B9 60F55A00   mov     ecx, 005AF560                    ;  ASCII “Download_Start”
004E9D9F  |.  8BD1          mov     edx, ecx
004E9DA1  |.  85D2          test    edx, edx
004E9DA3  |.  74 0F         je      short 004E9DB4
004E9DA5  |.  FF75 B8       push    dword ptr [ebp-48]               ; /IniFileName
004E9DA8  |.  6A 00         push    0                                ; |Default = 0
004E9DAA  |.  51            push    ecx                              ; |Key => “Download_Start”
004E9DAB  |.  50            push    eax                              ; |Section => “SECTION_AD”
004E9DAC  |.  FF15 3C035400 call    dword ptr [<&KERNEL32.GetPrivate>; \GetPrivateProfileIntA
004E9DB2  |.  EB 02         jmp     short 004E9DB6
004E9DB4  |>  33C0          xor     eax, eax
004E9DB6  |>  85C0          test    eax, eax
004E9DB8  |.  74 09         je      short 004E9DC3
004E9DBA  |.  69C0 E8030000 imul    eax, eax, 3E8
004E9DC0  |.  8945 10       mov     dword ptr [ebp+10], eax
004E9DC3  |>  C645 FC 0B    mov     byte ptr [ebp-4], 0B
004E9DC7  |.  897D B4       mov     dword ptr [ebp-4C], edi
004E9DCA  |.  8D4D B8       lea     ecx, dword ptr [ebp-48]
004E9DCD  |.  C645 FC 0B    mov     byte ptr [ebp-4], 0B
004E9DD1  |.  E8 D679FAFF   call    <jmp.&MFC42.#800_CString::~CStri>
004E9DD6  |>  68 A0F45A00   push    005AF4A0                         ;  ASCII

“D:\QQ\qqbuilder_QQ2007IIbeta1Proj_int\Basic_QQ_VOB\QQ\QQMainApp\QQCSCenterSubApp.cpp”
004E9DDB  |.  B9 886C5B00   mov     ecx, 005B6C88
004E9DE0  |.  E8 997AFAFF   call    <jmp.&MFC42.#860_CString::operat>
004E9DE5  |.  BF 906C5B00   mov     edi, 005B6C90
004E9DEA  |.  68 40165400   push    00541640
004E9DEF  |.  8BCF          mov     ecx, edi
004E9DF1  |.  C705 8C6C5B00>mov     dword ptr [5B6C8C], 470
004E9DFB  |.  E8 7E7AFAFF   call    <jmp.&MFC42.#860_CString::operat>
004E9E00  |.  8B45 10       mov     eax, dword ptr [ebp+10]
004E9E03  |.  33D2          xor     edx, edx
004E9E05  |.  B9 E8030000   mov     ecx, 3E8
004E9E0A  |.  F7F1          div     ecx
004E9E0C  |.  50            push    eax
004E9E0D  |.  68 40F55A00   push    005AF540
004E9E12  |.  68 38F55A00   push    005AF538                         ;  ASCII “AD|asam”
004E9E17  |.  E8 AE78F1FF   call    004016CA
004E9E1C  |.  83C4 0C       add     esp, 0C
004E9E1F  |.  837D EC 00    cmp     dword ptr [ebp-14], 0
004E9E23  |.  74 17         je      short 004E9E3C
004E9E25  |.  6A FF         push    -1
004E9E27  |.  FF75 EC       push    dword ptr [ebp-14]
004E9E2A  |.  56            push    esi
004E9E2B  |.  FF75 10       push    dword ptr [ebp+10]
004E9E2E  |.  6A 0B         push    0B
004E9E30  |.  E8 ED4CF2FF   call    0040EB22
004E9E35  |.  83C4 14       add     esp, 14
004E9E38  |.  85C0          test    eax, eax
004E9E3A  |.  74 3D         je      short 004E9E79
^ 这里是判断广告是否要下载, 直接JMP就可以跳过广告下载了
004E9E3C  |>  68 A0F45A00   push    005AF4A0                         ;  ASCII

“D:\QQ\qqbuilder_QQ2007IIbeta1Proj_int\Basic_QQ_VOB\QQ\QQMainApp\QQCSCenterSubApp.cpp”
004E9E41  |.  B9 886C5B00   mov     ecx, 005B6C88
004E9E46  |.  E8 337AFAFF   call    <jmp.&MFC42.#860_CString::operat>
004E9E4B  |.  68 40165400   push    00541640
004E9E50  |.  8BCF          mov     ecx, edi
004E9E52  |.  C705 8C6C5B00>mov     dword ptr [5B6C8C], 476
004E9E5C  |.  E8 1D7AFAFF   call    <jmp.&MFC42.#860_CString::operat>
004E9E61  |.  68 18F55A00   push    005AF518
004E9E66  |.  68 38F55A00   push    005AF538                         ;  ASCII “AD|asam”
004E9E6B  |.  E8 5A78F1FF   call    004016CA
004E9E70  |.  59            pop     ecx
004E9E71  |.  59            pop     ecx
004E9E72  |.  8BCB          mov     ecx, ebx
004E9E74  |.  E8 76130000   call    004EB1EF
004E9E79  |>  8B45 EC       mov     eax, dword ptr [ebp-14]
004E9E7C  |.  33FF          xor     edi, edi
004E9E7E  |.  3BC7          cmp     eax, edi
004E9E80  |.  74 09         je      short 004E9E8B

可是广告窗口还是照样存在的,而且点击了仍旧会有响应的.这就靠外挂才好处理的.要找到QQ聊天窗口中任意一个WinControl的Handle就能轻松用代码干掉广告窗口的.

procedure DisableQQAd(Wnd: LongInt);
label DoNext;
var
  h, t: THandle;
  cn: array [0..254] of Char;
begin
  // get root Win control
  while GetParent(Wnd) > 0 do Wnd := GetParent(Wnd);
  // remove QQ 2007 II tips url label
  h := GetWindow(Wnd, GW_CHILD or GW_HWNDFIRST);
  while h > 0 do
    begin
      cn := ”;
      GetClassName(h, @cn, SizeOf(cn));
      if cn = ‘#32770′ then  // QQ frame
         begin
           h := GetWindow(h, GW_CHILD or GW_HWNDFIRST);
           while h > 0 do
             begin
               GetClassName(h, @cn, SizeOf(cn));
               if cn = ‘Static’ then
                  if GetWindowText(h, @cn, SizeOf(cn)) > 0 then
                     if Trim(cn) <> ” then
                        begin
                          DestroyWindow(h);
                          goto DoNext;
                        end;
               h := GetWindow(h, GW_HWNDNEXT);
             end;
         end;
      h := GetWindow(h, GW_HWNDNEXT);
    end;
  DoNext:
  // remove QQ AD panel
  h := GetWindow(Wnd, GW_CHILD or GW_HWNDFIRST);
  while h > 0 do
    begin
      cn := ”;
      GetClassName(h, @cn, SizeOf(cn));
      if cn = ‘#32770′ then  // QQ frame
         begin
           h := GetWindow(h, GW_CHILD or GW_HWNDFIRST);
           while h > 0 do
             begin
               t := GetWindow(h, GW_CHILD or GW_HWNDFIRST);
               if t > 0 then  // has child control
                  begin
                    GetClassName(h, @cn, SizeOf(cn));
                    if cn = ‘Static’ then  // found!
                       begin
                         DestroyWindow(t);  // destroy Ad window                        
{ CreateWindow(‘Static’, ‘Hello world!!!’, // 这里可以做什么?
// 创建一个Form,用SetParent让你的Form附着在上面的,
// 这样可以用你自己的窗口替换QQ的广告栏,TX一定会非常生气的,
// 为了避免麻烦,最好还是不要做此类事情啦.这里只是讨论方法而已.
// 如果要添加自己的Form,那么你还得用SetWindowLong来Hook WndProc过程,
// 以用来处理WM_CLOSE,确保关闭聊天窗口时能释放你的Form.
                           WS_VISIBLE or WS_CHILD or SS_LEFT,
                           0, 0, 242, 36, h, 0, h, nil); }

                         Exit;
                       end;
                  end;
               h := GetWindow(h, GW_HWNDNEXT);
             end;
         end;
      h := GetWindow(h, GW_HWNDNEXT);
    end;
end;

问题是如何找到QQ聊天窗口中的任意个对象的Handle?
方法可以是EnumWindows列举窗口,从标题栏入手,但是这个方法不保险.最好的做法就是
Hook QQBaseClassInDll.dll中的函数,
QQ2007为?SetUin@CAllInOneStatusBar@@QAEX_JH@Z
QQ2007II Beta为?SetUin@CAllInOneStatusBar@@QAEX_JKH@Z
这个函数用于设置QQ聊天窗口中对方号码的信息用的,调用此函数必定传递一个Handle,这个Handle必定在聊天窗口中的,于是一切好办,剩下要注意的就是Delphi不支持thiscall的,所以Hook这个函数必须用assembler方式.
至于Handle在那里,用MFCSpy2分析就知道,在+0×20那里嘛~
另外此函数同时传递对方的QQ号码,也是目前很多在窗口上现实IP显示的外挂所喜欢Hook的函数之一.

到此时,就显IP+去广告上一切OK了,花了俺2天功夫,大功告成!!

顺便公开另外一个去除广告的方法,此方法不必给QQ程序中打硬补丁,而且兼容性更理想,但是QQ广告下载还是必须Nop掉, 不然广告会照样下载而只是不显示而已.
这就是BasicCtrlDll中的?IsVIP@@YAHPAUIQQCore@@@Z其原型为int __cdecl IsVIP(struct IQQCore *)
和QQHelperDll.dll中的?GetSysBoolData@@YAHPBDAAHH@Z.
OD分析QQAllInOne有:

03605EFF    FF15 38506C03   call    dword ptr [<&BasicCtrlDll.IsVIP>] ; BasicCtr.IsVIP
* ^判断当前登陆的QQ是否为VIP,因为VIP用户是可以关闭QQ广告的
03605F05    8365 FC 00      and     dword ptr [ebp-4], 0
03605F09    8BF0            mov     esi, eax
03605F0B    8D45 FC         lea     eax, dword ptr [ebp-4]
03605F0E    6A 01           push    1
03605F10    50              push    eax
03605F11    68 E8A76D03     push    036DA7E8                          ; ASCII “m_bMemberDisableAD”
03605F16    FF15 206D6C03   call    dword ptr [<&QQHelperDll.GetSysBoolData'>; QQHelper.GetSysBoolData
* ^获取广告显示设置
03605F1C    83C4 10         add     esp, 10
03605F1F    85F6            test    esi, esi
03605F21    5E              pop     esi
03605F22    74 0B           je      short 03605F2F
* ^关键!!! 不是VIP就跳的,所以把这个NOP了
03605F24    837D FC 00      cmp     dword ptr [ebp-4], 0
03605F28    74 05           je      short 03605F2F
* ^关键!!! 没关闭AD就跳,所以再把这个NOP了
03605F2A    6A 01           push    1
03605F2C    58              pop     eax
这样,就实现了去AD了

具体可以使直接NOP代码,或者采用Hook方法:
function IsVIP(pQQCore: Pointer): Integer; cdecl;
begin
  Result := 1;
end;

function GetSysBoolData(AText: PChar; p: Pointer; bIsVIP: Boolean): Integer; cdecl;
// int __cdecl GetSysBoolData(char const *,int &,int)
begin
  if AText = ‘m_bMemberDisableAD’ then
     begin
       Integer(p^) := 1;
       Result := 1;
       Exit;
     end;  
  Result := Call original Func;  调用原函数
end;

说到这里,肯定有人会说,如果实现了本地会员,那就不用这么麻烦了嘛?!
显然,这是个捷径,实现起来也不难,关键是找到突破口
经过DASM分析,QQHelperDll是个入手点
用PEExplorer认真查找看看,果然有发现,那就是IsVipUser@qdatCurrentUser@@QAEHXZ
一个无参数函数,Hook了,并让其返回EAX=1,嘿嘿,果然成了本地VIP,这个本地VIP可以享受QQ2007II的涂鸦表情哦~
可是到了这里却仍旧发现QQ的设置上,还是说你是”非会员”,不能屏蔽广告,咋办?
显然的是QQQSettingCtrl.dll并没有调用qdatCurrentUser::IsVipUser来判断.那它调用了那个函数呢?
继续努力…N小时后发现!原来是IsQQServiceEnable@@YAHI@Z
这是一个unsigned int入口的函数,估计是服务功能号,由此函数判断当前登录QQ用户可用的服务,于是Hook了,不管三七二十一,一律返回EAX=1,再测试…一切OK!

至此,QQ外挂可告一段落也~~

[本日志由 lysoft 于 2008-01-24 09:49 PM 编辑]

分类: QQ 标签: , ,
Locations of visitors to this page