|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.' Z7 p# J" R* y: ]: R
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.( |. h! G) I: ?
; c0 e6 [& y% u
static const DWORD UnknownSig=0x1E3A86BA;3 ~4 C3 g* K& J% d" u* \' `
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
9 K2 q5 ~: Q1 m( v4 r- etypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);7 x- e% H2 x3 w% I% g
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
+ x0 G4 V4 X! F6 C) y! P. Y: Q{" C- W2 t+ f- ]! \+ r Y' ?: \
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
5 `4 ^. n8 q8 `- e2 k9 F1 C PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
- ^) H- ~% v( k" `3 U: v( l}! k# w0 h7 p) g$ O" |
/ x5 @: S( r. o% j! k! F
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
. j4 Z6 Z2 _/ @; |4 t) ]1 O3 {6 W{5 t$ L& Q' m5 n* ]8 O" x
DWORD dwRet=0;/ k5 z8 c, L. J. K
__asm6 a n7 K( @/ f' _2 J5 w
{' J, ]5 E4 ~8 d
lea eax,dwRet2 Q8 ?) v7 p1 z. e
push eax2 K$ \1 ~3 Z/ e" N4 h2 ~
push szCmd
! k2 Y) l$ j5 P mov eax, DynamicData; u% x' P3 U* Q1 a# T
push eax
% ^- I* E+ d; B' x7 S" ` mov ecx,[eax]
, d. J; g8 b: o c# o mov eax,ecx
, a, Y4 E; i0 O- S+ v add eax,iOffset
( |$ f s5 g) l1 @ call [eax]
. u5 { D% z- ^" T }% t7 u# u. j4 u& e, J2 d
return dwRet;- A2 [8 n8 z0 A
}
! T7 H8 |6 j( M: e/ ?6 a
% n( T6 ~, y% D. D. Estatic const LPSTR szdwRecentIP="dwRecentIP";
- _2 x7 \+ P+ u# S, }- ^. N7 Kstatic const LPSTR szdwIP="dwIP";5 c+ f7 R% }1 ~# |1 d* b: [
static const LPSTR szdwC2CIP="dwC2CIP";& }8 \5 w) f) w7 E" A( Y) ?/ ?
DWORD GetIP(DWORD Uin)
9 w F; o2 x6 p) c* W: q) Z{; `9 M) e. ]% r
DWORD dwRet=0;
& V2 Q( j; ?/ Z. t6 m5 y4 n LPVOID IQQData=NULL;+ I8 w+ t9 O' E
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
' Z [ e* ~1 b LPVOID DynamicData=NULL;
0 A2 ]& j5 F7 p( _" d+ Z! h PrepareData(IQQData,&DynamicData);7 c4 D0 w9 X2 X6 n& v5 ?
if (NULL==DynamicData) return dwRet;$ O# Y& B% E5 a* [$ l
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
4 A5 o! b4 b% @7 W0 P% H; w if (dwRet) return dwRet;
2 r' G( }; t: K$ M9 Q dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
; m9 _* |& o5 @/ K: I5 N7 i if (dwRet) return dwRet;
8 ]7 N* J8 E' |' `! _/ ], _ dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);2 k' ] D' g; q3 |$ I4 B
return dwRet;$ y' T: p6 }: _' ~
}
; U6 @9 h0 D- Z* \ o6 f# A1 u/ b/ m% X. U, S7 Y+ d. x
static const LPSTR szwRecentPort="wRecentPort";
& ^3 _% |& o4 x8 ^0 ^6 `static const LPSTR szwPort= "wPort";0 i# I" H1 Z7 p3 b( Z
static const LPSTR szwC2CPort= "wC2CPort";/ [# O) m; }5 H6 h4 @ a; ?
DWORD GetPort(DWORD Uin)+ O2 R% _" b# y+ ^
{- P( y/ G6 C+ d, s4 T0 T
DWORD dwRet=0;. [! ?0 \) k! Q+ ]5 ^) ]3 C
LPVOID IQQData=NULL;
+ P% R7 v* g; i3 ? if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;# B8 B: `' @: i3 B! }
LPVOID DynamicData=NULL;
4 A3 j6 {9 j' N/ v: C4 T* Z3 ]9 | PrepareData(IQQData,&DynamicData);
+ B9 y u j7 T* b if (NULL==DynamicData) return dwRet;
- N5 r& W( k! J8 o: H dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
( m J8 }2 h3 B if (dwRet) return dwRet;
% p* Q- ?' v7 `/ {/ b7 X dwRet=GetDyncDWORD(DynamicData,0x30,szwPort); O. e8 `+ ]0 X& H q9 Z
if (dwRet) return dwRet;6 n, d& J$ S5 L- B
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);5 s( ]2 j0 Z5 I. x7 O" Q+ L/ A/ `
return dwRet;
: I) Y5 N& A% M" q* R& U4 ]. q}" J) y9 S2 r% e/ u3 Y; P1 W
8 s) y2 @( _. I# \6 Fstatic const LPSTR szwProcotol = "wProcotol";
$ j& k9 u* `( N! Y' M/ BDWORD GetVer(DWORD Uin)1 N- |4 l9 q) q% H& s
{
2 L, _4 Q4 ^; r6 T; r) G DWORD dwRet=0;$ B0 m# i" r2 _6 \/ t
LPVOID IQQData=NULL;
0 n% q* r+ d$ D$ T if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
1 }1 W6 z( n5 F" F9 `1 e LPVOID DynamicData=NULL;
+ h* g8 j" L& t7 [6 { PrepareData(IQQData,&DynamicData);/ N- J0 H' W! ]- r% F
if (NULL==DynamicData) return dwRet;5 B, C1 z- `4 o! N1 T
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol); T6 F1 Z6 B# _) C
return dwRet;
6 v9 o" @' J) C! U7 e; p7 m' o}; x+ U% z+ I# d0 B9 _' r5 g0 w
6 A! Q j5 F1 j6 F, X原文出处:http://www.ye-soft.net/article.asp?id=43 |
|