|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
1 L: W- |. j% Q7 s% b- `0 u; P* |runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
8 c6 C& K* n0 E8 a" E m
2 }7 J1 y7 V6 }4 Zstatic const DWORD UnknownSig=0x1E3A86BA;. z4 d! s6 x; C. ~) K5 w
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";3 p% B( @: R6 N
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);( B. b$ x/ z( m- q1 W+ s
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)# i) h1 e8 P3 R( P9 }3 O) x
{
9 R- s5 [7 S0 B V( o: z" n L$ U pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);* a! Z5 P5 c) {. {* ?1 ~
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
3 E. y1 M3 _9 Z# x}, C6 E8 [6 M6 ~
7 y( `3 r7 w) C: ADWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
5 M4 C8 q9 d: \2 t/ x8 [2 J0 o{
9 }, E8 N4 c# [/ h DWORD dwRet=0;- D7 M, p7 j3 f" T1 S( A+ S
__asm$ R) C) ~$ D, f8 p) K+ F% I
{
' Q) u! K0 e1 M& N) h# P, M+ j lea eax,dwRet
0 W0 B7 b0 I* P# r: j push eax
' v4 h0 R2 D* Y% G3 a push szCmd- f( [" k+ X2 D/ }- x
mov eax, DynamicData
2 I- J% \7 t4 S+ [9 N push eax; z! O. q) `6 M& l6 Z& s
mov ecx,[eax]0 ?7 U. l9 ~8 K6 I3 I3 C! t
mov eax,ecx( r9 t7 p+ H& D, R, c1 l. j) {
add eax,iOffset+ p) d8 O3 ^' q% a5 Q1 s2 h
call [eax]
i/ F( D4 f& {, `( U }4 E- e1 Q3 [6 H+ g5 G3 y
return dwRet;- E( \4 W+ w& R7 J/ |
}% C! {/ F }& {- ~
! t4 }7 @* t( m' P8 Ostatic const LPSTR szdwRecentIP="dwRecentIP";% M p9 v1 p) l- Y
static const LPSTR szdwIP="dwIP";5 H f5 t# \) D; U- g# p6 v5 v& G
static const LPSTR szdwC2CIP="dwC2CIP";- i* a2 G6 }) W6 O' I
DWORD GetIP(DWORD Uin)0 \6 @' B* ]; ]
{
+ A# ~( L+ @& I DWORD dwRet=0;/ [5 J6 \' `% I: C, G, k$ y4 [# F
LPVOID IQQData=NULL;) Z5 q% q, H' b
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;' v2 W3 s* J3 ]- S
LPVOID DynamicData=NULL;
% r& S5 M; T& q9 h S3 f- u- P' L1 ] PrepareData(IQQData,&DynamicData);
" P2 J- P/ V2 K2 b0 h y7 R if (NULL==DynamicData) return dwRet;
/ F$ t# m& J' q dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
- ^5 E5 |% u4 r+ ]3 `! W1 Y1 t0 F( A if (dwRet) return dwRet;' d) V9 N ?. J2 G) _9 j
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);2 i2 l1 O7 }$ V* }' W' |# P
if (dwRet) return dwRet;& h5 \2 L, P y, j3 M3 x8 x
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
0 g' i4 Q) E9 j" g return dwRet;
. c' j$ h0 a5 I" O# E p}: r2 V, g* H3 m' x) {# B
6 N& a M' a2 E4 W* lstatic const LPSTR szwRecentPort="wRecentPort";: ?* s y5 u7 Z# \" P2 a) ]& _
static const LPSTR szwPort= "wPort";
" J% g- [$ J+ astatic const LPSTR szwC2CPort= "wC2CPort";% {; ~$ d, p8 ~, x& ~. u2 h
DWORD GetPort(DWORD Uin)1 F6 r6 ]% N$ ~: a" X( G5 y
{( i* L" K" r3 I
DWORD dwRet=0;
; v, l4 m5 m7 W$ M2 W LPVOID IQQData=NULL;3 `# {: k% U( H, q! F. q
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;5 t; u3 G4 ~1 g
LPVOID DynamicData=NULL;) `6 ?9 h- s' J5 ]/ b& P
PrepareData(IQQData,&DynamicData);
. b+ |( Q- O- g9 `% M( ~2 v if (NULL==DynamicData) return dwRet;. R9 p& [( b- p$ }/ D0 v) F0 N, A" F
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14$ `& M6 }* ^0 N8 J5 C4 k
if (dwRet) return dwRet;' f5 S3 l# D s. |
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
$ g. P7 k f2 Q! r% c$ ~% } if (dwRet) return dwRet;
: g- e4 U5 L- v dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);4 K6 X3 [: n- Y5 _- I
return dwRet;' W/ _" v8 g' y2 ?& K& W
}; x. p0 d# ~, ?
4 L5 `) k/ m3 ~7 Y4 E' A. \7 `
static const LPSTR szwProcotol = "wProcotol"; m2 W- R, h! ^5 `& q
DWORD GetVer(DWORD Uin)
4 |( _1 G: g6 o/ H{
: ]# ]4 R% g& i3 x7 M DWORD dwRet=0;7 z4 s9 w2 @ [. ~( k
LPVOID IQQData=NULL;
; ]& l$ t# `/ M+ f7 [: I if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
2 s, T: ?0 f4 u( S LPVOID DynamicData=NULL;" ^0 X, y; b y: q% ?9 k
PrepareData(IQQData,&DynamicData);- j1 T5 i2 l: j u0 [
if (NULL==DynamicData) return dwRet;' b% A3 G+ `" S% C
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
+ P% y: ?- Q1 P. }. T: O7 Z8 x* x9 [) \ return dwRet;
/ s# e$ K3 U" Z}
' n( K# g% W. D. `4 |, F7 m M& C+ v1 m+ |( Z6 D, l
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|