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


发布评论