查看完整版本: QQ去广告+显示IP外挂 编写方法

51819 2007-10-1 07:08 PM

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天功夫,大功告成!!

[[i] 本帖最后由 51819 于 2007-10-1 07:46 PM 编辑 [/i]]

似水年华 2007-10-9 09:28 PM

[attach]1593[/attach]

hnist 2007-10-12 09:08 PM

好懂!自己试试看啊yct16

wangchong 2008-2-24 01:49 PM

就是我不会看

失弈浪人 2008-5-28 03:03 PM

研究研究。嘻,楼主太有才了

失弈浪人 2008-6-2 05:39 PM

没学过这个,有点难,研究一下,呵

vcd365 2008-8-18 10:25 PM

偶不懂也偶只能用别人做好的东西

hziming 2008-9-3 02:20 PM

研究研究。嘻,楼主太有才了yct09

ee13521 2008-9-4 04:04 PM

你的这个是什么语言?

chinap 2008-9-5 12:05 PM

收藏备用,有空研究下。谢谢

卩s丶孩孓灬 2008-9-29 03:14 AM

我还真需要这样的东西~
页: [1]
查看完整版本: QQ去广告+显示IP外挂 编写方法
Google