|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.. @1 ]& S: I, J0 x( h+ p
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了." _, Y1 h+ c8 r* v( h. ^
0 F3 [4 F7 b4 `; }7 Wstatic const DWORD UnknownSig=0x1E3A86BA;5 j; m8 ]* _# J; l4 I5 o
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";$ X1 ?0 V8 ^1 X
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);! J* y8 Y0 L. ]. ?0 |
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
" s/ f q1 T S4 E* x) y{
( _7 u; w. W1 W" e pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);4 ~4 r- t- A) Q2 g$ s+ L" V: |- Y
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);% F7 j1 H& G7 l1 |' i; N: w
}$ { v9 f7 n2 q: e
3 W0 {: x) l7 q" k
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)0 l6 S+ ]' X4 x6 M2 [8 F
{/ U$ G- T: q) w* B& W
DWORD dwRet=0;
, A2 |4 n& E7 H% G2 n __asm
1 q) s! i* F: d) ^ z {; v! D* k+ v& J
lea eax,dwRet
; k, p8 i, B" v push eax: j1 s! M) V, J( C1 i3 T1 p
push szCmd0 Y; d3 J, R* A/ k& n+ i
mov eax, DynamicData
- {' \: w) H9 v: C6 P& p push eax
3 f t7 W3 I8 H- A! k7 ^3 q5 y# I mov ecx,[eax]- a# L- a8 L& d. }
mov eax,ecx! J5 U! k, F" D1 ?. v
add eax,iOffset s& F/ k( X% o& Z9 b% Y' m
call [eax]5 `0 w; i. j8 E
}
& X' {2 [' i1 E" m return dwRet;
+ @% J1 ?- _& E7 y+ W% u}
' G1 s1 F/ X3 G e4 s/ B- d1 o& o2 g( F9 B8 _/ Y) a& l
static const LPSTR szdwRecentIP="dwRecentIP";
, }0 b2 t' j6 o: G/ r7 Y/ Ustatic const LPSTR szdwIP="dwIP";6 e. S; N: h4 v; L# H- V
static const LPSTR szdwC2CIP="dwC2CIP";
5 p$ N$ X* i% G% }# V4 j1 BDWORD GetIP(DWORD Uin)
9 [3 n8 U. H& _) O{
% A, u* f' A; r6 R7 m DWORD dwRet=0;4 w% r/ C9 G: n! {* q8 T. V
LPVOID IQQData=NULL;6 a. @$ ^2 y9 I9 d0 [( b$ O3 O
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: @9 I1 ]/ z+ u$ i! p
LPVOID DynamicData=NULL;
/ G, W b7 A9 k4 p& [! F PrepareData(IQQData,&DynamicData);" g8 l% ~ z: i* H
if (NULL==DynamicData) return dwRet;% v z4 z* i/ N+ d$ s
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
) A c7 Y& s1 U if (dwRet) return dwRet;. K/ v% ?5 L3 T# X9 q" [) `+ d
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
( ]' c* E; M! \( M0 X, Q if (dwRet) return dwRet;( O4 [, i3 J' }7 U8 L* J# S. i
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
. g9 y6 }1 f; ?3 O7 u return dwRet;
4 O. f2 C1 E/ |7 h# D0 Q+ D. g6 Z: D}
+ |% [3 m! H4 k9 y" \6 Q; p
4 {* r8 p! d; V- Y2 pstatic const LPSTR szwRecentPort="wRecentPort";
) H- ^+ _) m/ R0 kstatic const LPSTR szwPort= "wPort";, y2 f- ]; _3 Q+ _" b1 ^( G) F( e
static const LPSTR szwC2CPort= "wC2CPort";+ f2 s. ?% B$ Q
DWORD GetPort(DWORD Uin)' d4 e- E# k: p' [( l F
{
. ? p; A* d7 p y; H! X DWORD dwRet=0;/ O/ N Q3 B2 v3 a1 }7 S( s
LPVOID IQQData=NULL;
# h. t" T+ V- T/ o2 [ if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
, G* R1 n( ?4 j$ p LPVOID DynamicData=NULL;: `' b F" r! @' H/ T0 C9 |, m7 n$ `
PrepareData(IQQData,&DynamicData);
. S# x* g. ^+ o! W& D& u! d/ [1 [ if (NULL==DynamicData) return dwRet;
3 E" `7 Y2 R) S" N dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14; R' [6 p$ I( A2 ?
if (dwRet) return dwRet;4 s; \; X0 j0 N2 n
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);$ P/ N) G8 r7 F5 g. j
if (dwRet) return dwRet;
" D0 x6 j# f Q) G4 H- N dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);) h6 F0 Y# u. T: O( O7 i& ?
return dwRet;
4 e1 y/ p- {0 A6 l7 D/ x4 i! j}, } W t3 X4 ]
. E9 ]4 ]0 h( L8 Y
static const LPSTR szwProcotol = "wProcotol";
, S1 E' n: A! pDWORD GetVer(DWORD Uin)
+ t1 j5 P$ d4 S' t{
( ^; Z4 V7 ~* v* N; B: d DWORD dwRet=0;
% x4 a% p( k7 @ LPVOID IQQData=NULL;
; W, {" i0 A% O! R% X if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
4 G9 k- x3 S) w" I LPVOID DynamicData=NULL;: o* R- w( T: W$ M* j5 [! ?
PrepareData(IQQData,&DynamicData);
9 h3 X* W& C3 c6 r- ]9 k( } if (NULL==DynamicData) return dwRet;
6 Z/ K& f. j; T+ S2 _ dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
9 Z( f$ G' p( g! y# a# G return dwRet;
) @5 n0 c$ w! l" \1 R3 b/ d2 p" b: Q}' R; t0 ^. A. E" U0 }" S
) {. G$ h4 B; _8 a/ F7 O9 |- E5 N
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|