|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
+ f/ S X% N( R" Rrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.* e, G" a* y$ c% E/ A+ G7 `
5 H B6 \; Z. y, Z
static const DWORD UnknownSig=0x1E3A86BA;6 x, ^0 k7 y* l$ d1 ]+ }' _
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";- F2 b1 X: D0 z; [/ J1 A
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
/ ~2 ^: p3 k5 z, XVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)! z# i" ?6 z7 b O- W! v' s
{" |8 }5 ?$ i% }" e
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);2 J: `8 x3 z* N1 s
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
3 O9 K" f# H6 e% d, c- j}; h0 ~9 A `9 t9 J+ T
3 f7 X/ \+ ^( L& u: a4 {# }' w- B4 B
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)0 h0 E& W0 c' R
{ q- i0 |: J" ~( T( R7 o; T! p
DWORD dwRet=0;
$ p! C# h' q# D( ]9 l5 l __asm
0 a* B& r) F- E5 W {
F! I6 [# n. `1 D0 l lea eax,dwRet
- k d Q, _, |9 V( B$ M9 I3 T2 z) O push eax
1 b' N! D6 ~% C/ J, ]1 g push szCmd. \! |* w2 ~0 _ v. s
mov eax, DynamicData6 Y+ k& w3 b& ]- l
push eax2 F# H) o) b3 d7 H/ h- j
mov ecx,[eax]
# y5 i+ \9 J8 x1 `7 B mov eax,ecx6 k; n/ z5 a& O2 ~
add eax,iOffset
' u1 J |$ _, { call [eax] H \' c8 ^7 W7 `' R$ m7 x
}
6 E# j' K" h2 y return dwRet;7 h( c% ?" }1 _* x- H9 g- B
}
9 W) E( Y. r6 W% Z+ G% }- }+ K" `, E* e7 r' V) {; m& f( W9 Y
static const LPSTR szdwRecentIP="dwRecentIP";
9 E; `) y; j6 l# j. R$ N A0 o4 V/ Mstatic const LPSTR szdwIP="dwIP";& J: {/ K, h9 J4 d+ G' @) P
static const LPSTR szdwC2CIP="dwC2CIP";% Z( E) ?# B3 f Z- p4 c6 W
DWORD GetIP(DWORD Uin)% K/ [) Q6 ^. h& d+ i
{! p0 ^8 [; @* D b' ?
DWORD dwRet=0;
" g! _2 a- k1 k; V LPVOID IQQData=NULL;
5 g+ i* f4 D0 Z8 D! N, [: V if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;( F6 S* r$ U' f6 u: L1 Q
LPVOID DynamicData=NULL;) O$ H+ K" ]8 O) G
PrepareData(IQQData,&DynamicData);
+ f1 i! `4 j3 v& ^! O& B& s if (NULL==DynamicData) return dwRet;7 B* Z- k) t* q! Y7 x
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
, |2 e' U% ?, s if (dwRet) return dwRet;' k) F. J, v+ {4 d+ ~4 o( s
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);5 p: [4 }' \+ @; {
if (dwRet) return dwRet;) u7 s, D. Y, L
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
) }0 Z- _) }# \8 P; a$ z# `" t6 K return dwRet;" h' e# k2 N. ^ k7 E4 O
}
# M0 v! K2 W( s# Q0 X
+ T6 T7 g! m4 F0 P# h9 @: nstatic const LPSTR szwRecentPort="wRecentPort";
3 @8 b6 A. Y7 bstatic const LPSTR szwPort= "wPort";5 w, [( s/ F' J h
static const LPSTR szwC2CPort= "wC2CPort";
, N* j5 G6 G# V0 n- v6 fDWORD GetPort(DWORD Uin)
" F+ o$ _$ S" b: Q! x, k) }{
# I- m0 n3 T) c) J DWORD dwRet=0;
; u. X: s3 |& @$ W0 z LPVOID IQQData=NULL;
+ b4 U3 l% R: v if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;9 g5 N* v6 P. x% G( p
LPVOID DynamicData=NULL;
1 T$ e: f, G7 i# i7 [ PrepareData(IQQData,&DynamicData);' t& n$ j" N* N) D k% J# k8 v
if (NULL==DynamicData) return dwRet;! t# \+ M; w: h' A# P& ^
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14! L) o: h$ k7 ?( L4 \1 K
if (dwRet) return dwRet;
, }: }) ~8 y: t g6 m" [8 ?& G dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
9 @7 L5 Q: s% y2 f* a if (dwRet) return dwRet;& j5 _7 g ~& l! N) F3 O6 Y
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
M' Z) {+ s' s* i$ |/ y$ w return dwRet;
3 @8 M/ M6 L& a y' b) y9 p' ^. Q}
* p* l; {' _' M( D! [5 g6 R( f$ l4 E
static const LPSTR szwProcotol = "wProcotol";
; h y. K- v- K/ F: lDWORD GetVer(DWORD Uin); Z! @, s+ i1 |% g- c; f- ]" T/ R5 e
{- P: B$ }! C; E# Q+ I* P% @# k
DWORD dwRet=0;- H" N0 s# v+ M# J2 Q
LPVOID IQQData=NULL;2 Z& d& f, r; U
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
7 z; H4 r' L- }; M/ g- ? LPVOID DynamicData=NULL;6 d3 m9 y0 Y; y, }4 U* e
PrepareData(IQQData,&DynamicData);
" \& s- g/ \" _/ G6 ? if (NULL==DynamicData) return dwRet;
- Q6 f5 `# @ D dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);8 x9 ?6 A7 }- V( l1 z! r
return dwRet;
" `4 W. V. q9 u6 f/ H}
0 D4 p* k; B9 d6 F5 U; u
) o" R+ X+ _- Y( O1 W' ]原文出处:http://www.ye-soft.net/article.asp?id=43 |
|