|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.: S& T4 N* |% p$ e
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.- U, ?/ L: K" ?( [. V/ j" x" y
! g1 D/ l1 d* [1 p, e: v( v v
static const DWORD UnknownSig=0x1E3A86BA;' ~5 s6 g# Y) [& T4 H: t
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
?% E8 \$ `7 e% k, [- C0 X1 M* g$ h0 h* ytypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);8 p7 S( z0 T) X+ W. l
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)# o, O" h* y+ _& I( K
{: S* A7 N( |! v
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);/ I6 e5 n6 c$ F
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);' u2 x$ J8 ]4 _# J, R7 `4 R
}7 s' u$ x( ~, y5 X# ^
; C1 T) c6 c! X& {7 E3 A
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd); I$ Q7 d1 l" x5 Z. p
{9 ~) F4 r, n: x3 [
DWORD dwRet=0;5 J0 j; e* c! Q
__asm. F. `4 ~" v4 H9 j b! v) e
{
: p2 A1 d% \6 X, w& c7 o lea eax,dwRet' b0 R7 B2 P! N" M$ c
push eax! D7 r7 K) g" y/ n0 P1 e: `. v( @% r, S0 E
push szCmd
' N! o2 F( n# R# q8 ] mov eax, DynamicData
. a. N7 M3 d3 B/ B push eax8 Y# q* j+ j& T% _9 m+ V0 _
mov ecx,[eax]
4 Z$ h" o* j' U mov eax,ecx
. Q. K% P/ Y& O3 v( C9 H% B5 n add eax,iOffset, ` b$ [ k: c# Y& ?; Z2 O; t% x
call [eax]
; X3 x: r4 ^7 L }7 E3 _" A5 m+ J9 g3 o
return dwRet;
3 p" p& f; m7 y}
1 Q4 v; W: c6 E+ f1 r7 U/ l% G0 f+ } Y) O$ f7 F' R+ l
static const LPSTR szdwRecentIP="dwRecentIP";
7 n+ j2 j& N) Z, Tstatic const LPSTR szdwIP="dwIP";
: [& L/ |- ^& U# pstatic const LPSTR szdwC2CIP="dwC2CIP";& z0 B, }. A p0 X9 v: [8 e1 @
DWORD GetIP(DWORD Uin)( H. n3 ]/ y( S2 j+ W8 V$ s
{
2 p! d4 k) y( ~- j: X$ C9 a2 c% A; B DWORD dwRet=0;
1 n+ g/ O3 s: [9 f! C3 Z LPVOID IQQData=NULL;$ Y/ j2 R/ }( w
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;3 `( I, r# R H
LPVOID DynamicData=NULL;4 I) U. B) n8 n- B* i9 N" c
PrepareData(IQQData,&DynamicData);
; v/ b1 H& L _5 w% @ if (NULL==DynamicData) return dwRet;% D: g( w& B0 g% d8 `% _- ]
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18, q; G# @% V# d( g% R, ?
if (dwRet) return dwRet;" ^" x9 s5 h+ e* g8 V
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
. e5 j0 l3 d+ D# S8 z if (dwRet) return dwRet;
, w1 _0 D3 v0 r, A dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);. U- @. H( \7 J0 k/ Q
return dwRet;
' b, }9 b9 B" H+ W3 r. V}6 X, w: O; t8 H. D
, L. N2 H7 @6 A W* j, l8 L# Q
static const LPSTR szwRecentPort="wRecentPort";
, G& v8 D* K5 R: _' f% |static const LPSTR szwPort= "wPort";
3 H( v Z+ Q# L6 c9 Mstatic const LPSTR szwC2CPort= "wC2CPort";5 L2 P4 P7 b, I* {
DWORD GetPort(DWORD Uin)
: O! \1 G8 d* U" [8 v; l0 I{
" ?$ b$ J+ J! z* C( T0 j# y DWORD dwRet=0;
1 O+ g. p, s& l; U LPVOID IQQData=NULL;5 o( B% m* j# V
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
% j9 V9 }; X, I# s% ]1 O( F c/ s4 f LPVOID DynamicData=NULL;/ j3 [* \1 `# m
PrepareData(IQQData,&DynamicData);
8 d6 E' E9 S7 E: j# p8 Y( C if (NULL==DynamicData) return dwRet;: p+ P, ~8 U0 w6 e4 D4 D9 c( ?
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
9 N6 I% y1 m3 T* g, L if (dwRet) return dwRet;1 _* j, a0 W# E, I1 a
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);0 n- n3 h8 h6 c& s: a
if (dwRet) return dwRet;& f( d# c1 Q% J; x
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);: C- [7 g, \& Y6 y9 Q& `5 C
return dwRet;! |0 N9 p9 ?3 ?6 [3 ^$ p
}
M7 _, @2 p- s4 ]1 Z
% C1 B( H) v- S. I: [static const LPSTR szwProcotol = "wProcotol";& M8 `" I i$ Z4 q
DWORD GetVer(DWORD Uin)
- q, y u$ j; l2 R& |/ R2 f{; j1 `& d* w- V3 l0 X
DWORD dwRet=0;
0 w& I( _* y, g& X" }. m1 g LPVOID IQQData=NULL;# u, n0 e- ]3 ^: T
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;) j0 Y+ {# ]; X/ A3 A- `
LPVOID DynamicData=NULL;, I; e3 D9 K: A- }" Z6 W: ]
PrepareData(IQQData,&DynamicData);
9 }5 S# y" h$ T6 m8 L6 Q7 W if (NULL==DynamicData) return dwRet;
8 h8 r% V/ m, B3 f p; B dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
' P% o* {8 }6 h% n3 s( ~: n return dwRet;4 D0 _8 T: |& }
}4 i4 `) O! t1 ]1 {# K6 z
+ b. Q v# N7 D5 n3 O, g4 E1 M" t
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|