|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.& e. H2 V d% O6 V: Y3 n& L
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
" y! t' l6 b4 t
! c- U2 @& y+ }8 D/ x \6 Z: i- w9 Fstatic const DWORD UnknownSig=0x1E3A86BA;
+ B$ X+ t1 |+ |2 r: S7 F. ^5 zstatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
# n. H; o# ]" M$ Stypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
/ s- }; _9 y" x+ G2 XVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
6 P4 C, t/ F" ?8 R{' V, P# z" c( n* \" w. S, I
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);6 h1 B! ?$ Z& i+ S) z6 y, @- J
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);2 H7 p& [9 ^( j: `" q4 a7 R% j
}3 a. N8 m/ [& x/ r
: ~4 R0 |! ~& Y
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd), z5 w3 X2 |. l. s, s' K; ^
{3 h9 D2 @% ]. N2 C$ }3 T
DWORD dwRet=0;: V1 o; U2 ]6 K) C
__asm1 X' _& x2 t3 `2 Q: o+ l4 j" x$ d
{
2 e5 W! B! m- Z6 @+ P6 b2 T lea eax,dwRet
* o3 x, G) p0 f% O- h2 @ push eax
, v: e: u' U) N& S6 K0 _ push szCmd+ ^# @# \) b% D" L( q1 C
mov eax, DynamicData
/ d$ k E) [8 f& e/ q- b1 ] push eax
+ H/ Z3 W: k9 C2 l, J( [ mov ecx,[eax]
8 _) A& n4 m5 F1 J5 |* E mov eax,ecx- @" v: n9 L" w |
add eax,iOffset
- B/ k% O+ ^* I- G" w, B% ` call [eax]5 C( F* ]" ?4 H# |/ w6 a, ^# J
}
8 K/ O: S6 N, h1 F' ~ return dwRet;2 Z( l! t: U4 |' B5 i0 e% H
}
/ @/ S) v5 f& q4 o
6 S4 h$ S# `- N8 f' Nstatic const LPSTR szdwRecentIP="dwRecentIP";
/ X; y+ z6 A H8 G# Ystatic const LPSTR szdwIP="dwIP";
' w% i5 I. f2 A i; gstatic const LPSTR szdwC2CIP="dwC2CIP";
3 l, _. l+ n. F! ^; EDWORD GetIP(DWORD Uin): O7 J3 q/ d) v8 A4 T' k
{
! ?6 S8 b3 b9 c" u DWORD dwRet=0;
l' }( B- L, q/ { n LPVOID IQQData=NULL;
; f0 @( H" N# m if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;% @1 m( k9 i/ ] X
LPVOID DynamicData=NULL;8 L2 U' g2 Z# q6 F' N
PrepareData(IQQData,&DynamicData);
" F, \; o, X$ F) o9 ?4 ^. L& c6 C if (NULL==DynamicData) return dwRet;" M0 E W3 B% R' v
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18# b U! ^; T% \3 Q0 A
if (dwRet) return dwRet;
4 D4 ] C- x @! h1 g dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);+ J; a* y6 k8 Q; f
if (dwRet) return dwRet;% A+ K; x t( B" y) X& i3 A: g
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);6 d' g4 Z" D8 f5 ?' r
return dwRet;
$ D! d: Z9 K$ z5 d8 [9 Y}8 \; A- ~1 G# B9 A( Y# I+ a
' M. f( t; {$ y6 s* j6 S
static const LPSTR szwRecentPort="wRecentPort";
- G5 o& V# I7 `static const LPSTR szwPort= "wPort";
8 l* ?' r+ Y" m" cstatic const LPSTR szwC2CPort= "wC2CPort";
$ S: x$ G5 p: f" H3 Z3 Z7 vDWORD GetPort(DWORD Uin) I/ K6 z( l- b$ {( S% y% A/ C$ ?( W( |
{( `! Z0 ?: |, d$ f8 g+ X% F
DWORD dwRet=0;3 Q' N2 s {* x* Y: Q* I
LPVOID IQQData=NULL;, I- Z+ @6 B2 ^. o2 T" y
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
G. Z" w( {% m; q; ]2 l LPVOID DynamicData=NULL;
9 i i3 C0 H: H# \. J1 d# I. Y PrepareData(IQQData,&DynamicData);
- {0 Q" k% s: u9 D+ ^6 m0 k- O if (NULL==DynamicData) return dwRet;
8 I* l; S9 r8 Y0 C6 a1 a dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14# C* f% }: k/ `3 ~1 E
if (dwRet) return dwRet;
" p7 V+ U$ g- i7 a! J$ I# M6 q/ [ dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);; ~/ u$ X D9 { X, v: j
if (dwRet) return dwRet;
5 m2 t+ P N: w; i+ k4 b) o dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
3 q/ X! V+ ^% K2 Z5 Q return dwRet;
, i" }3 W/ {" g/ T}% {6 y6 u; q1 u4 d9 I+ j9 Q
7 R7 M& m- L5 ~- p# i. O$ xstatic const LPSTR szwProcotol = "wProcotol";
$ v, L. z8 X0 K) d' [DWORD GetVer(DWORD Uin)
9 n o' _ e* y8 a1 U{
}- p3 _! H2 p. j) s4 H# P DWORD dwRet=0;
; g/ ?$ b: t9 K% a* l7 h LPVOID IQQData=NULL;
0 E* V- ]- w' d# I2 J, X6 t if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
+ s% @5 K( D4 H9 }6 y8 C$ [ LPVOID DynamicData=NULL;
; d. a/ N, H* y' D. b9 T PrepareData(IQQData,&DynamicData);3 V- D9 u/ h# w& i9 _9 h3 i
if (NULL==DynamicData) return dwRet;
h. Y( P( z2 [/ C dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
0 b; n% }5 k$ a: ?. y8 p return dwRet;, ?& ~$ B6 h: I6 r
}
* @4 N# i; J. j0 s. P/ L# H B; L! u# M8 i% H
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|