主要技术原理:
做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 -------
期待您弄出来个给大家用 -------
珊瑚虫公开原码吧
到时候就是百家争鸣了~ -------
当然我看不懂,哈哈,太难了 -------
直接或者间接发个工具出来就行啦.
您好像发错地方了吧 -------
虽然看不懂..还是支持了!