网上冲浪 | 反毒杀毒 | 菜鸟进阶 | 网络安全 | 实用技术 | 网络安全 | 操作系统 |
工具软件 | 电脑医院 | 网上赚钱 | 网页制作 | 网络营销 | 经典教程 | IT趣 谈 |
当前位置:IT快活林网上冲浪工具软件

QQ去广告+显示IP外挂  编写方法

主要技术原理:

做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方式来调用~至此一切OK,花了我2天功夫,大功告成!!


欢迎大家转载 -------
好帖,虽然不懂. -------
太深奥了,只会用qq -------
不太懂,如果能够有个相关的软件(soft),方便的东西就好了,这样普及率就会越高了 -------
我和2楼一样,也是只会用QQ -------
期待您弄出来个给大家用 -------
珊瑚虫公开原码吧
到时候就是百家争鸣了~ -------
当然我看不懂,哈哈,太难了 -------
直接或者间接发个工具出来就行啦.

您好像发错地方了吧 -------
虽然看不懂..还是支持了!

[1] [2] [3] [4]  下一页

[]作者:本站整理  来源:不祥