2024年6月5日发(作者:)

主要技术原理:

做IPQQ,那么这几个必备工具是不可缺的:OllyDbg,PEExplorer,DASM32,MFCSpy2

QQ是基于接口调用架构的,这为窥探其内部提供了方便之门

0) 经过分析,获知QQ获取IP信息是通过接口调用实现的,其步骤为

IQQCore->IQQData->IQQUserDynData->dwIP方法

1) 获得IQQCore.要获得此全局描述接口的方法有很多,最好的就是通过

的 ?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的

的?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 =

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] // _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] // _34h

mov eax, pIQQUDD

mov ecx, [eax]

lea edx, wPort

push edx

push szwPort

push eax

call [ecx + $30] // _30h

end;

上面的代码,懂ASM的人很容易就能理解的,其实这些代码也是来自QQ的DASM工程.

注意一下接口调用和Cdecl就行了,因为用Delphi写的,所以不好直接支持C++的thiscall,故采用BASM方式

来调用~

至于去广告,把目录AD下全部文件和Dat下删除了,广告就不会出来了.

可是这样QQ还是会下载新的广告的,怎么办呢?只好修改QQ内部了,这是属于破解的范畴,做起来也并不复

杂.

DASM分析即可查询到"广告"和"下载逻辑"的文本常量和OD查找字符串常量"Download_Start",

它的上面是"SECTION_AD",然后把相关的地方NOP了就能使QQ不再下载广告.不同的版本要修改的地方

不一样,这里就仅以QQ2007II Beta1为例

004E9D49 |. 57 push edi