|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
7 B% X; t+ t9 p. ^) A8 g4 Trunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.) h$ F$ ]/ H: H3 h+ s( E
4 I6 K5 P1 t; ?% X) Q4 \0 j
static const DWORD UnknownSig=0x1E3A86BA;9 ^& n" l3 ~2 b- G# p
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";4 R! g1 [$ [( H! u
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);/ G, A" ?7 |7 J7 g2 s% g' b. P( J
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
; ^7 P6 q& g- h% u% @$ K. m H/ r{
* N, m. V0 }. [& { pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);, Q" c( D4 c/ d, h: i! N
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);( C) ~, U6 q n: ?
}+ l1 ?( f2 P# l6 J1 M y
& |2 w- c! `, H- b b0 u2 FDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)5 P& |" @* [7 u
{3 J& c9 p. H" v$ G. R
DWORD dwRet=0;' @! b |" H/ J2 z" G8 ~+ O* ~
__asm
0 x0 q' S$ R( ?" P, R7 Y+ c+ I {
. Q$ t& n, F+ O: U# q lea eax,dwRet. f8 c |& S- z; Q0 Z
push eax
! l' ]9 P( Q1 f push szCmd
9 I/ l2 i2 L: D+ _1 `! \ mov eax, DynamicData
4 L; [0 f; m8 L9 b d push eax! k; ?$ V# q% q8 c$ a% M8 |7 o
mov ecx,[eax]+ D! d4 { J5 l
mov eax,ecx' V1 s# t( r: g8 ^/ X7 B
add eax,iOffset- c/ E6 l4 a3 I/ t
call [eax]
8 N) b6 Q0 K; L0 Q' y# r }
* } j8 I6 j" q2 v- T9 F, U8 { return dwRet;
* @3 A# t) b# G* [}
" e2 H! w+ @4 e) G5 ]/ R' c! z* S& Z# y
static const LPSTR szdwRecentIP="dwRecentIP";0 a O; Q- O/ `8 q4 T* o( x6 L
static const LPSTR szdwIP="dwIP";( p' {& a% h8 _0 |
static const LPSTR szdwC2CIP="dwC2CIP"; c5 [( ^% w- O2 t
DWORD GetIP(DWORD Uin)
9 c' ?4 O) Y8 ?6 X5 y0 @, X{1 n, O' x5 l' n0 Z* B1 }$ A4 u5 S
DWORD dwRet=0;
: a& b1 U6 ~% }- y+ a8 l LPVOID IQQData=NULL;
" U/ v+ N2 W! t, e) v3 E! y if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
4 g" C# X2 @0 @' v LPVOID DynamicData=NULL;
9 w9 `8 \: L7 v/ E9 } PrepareData(IQQData,&DynamicData);
7 e/ ]* H2 J1 l if (NULL==DynamicData) return dwRet; |5 p! Q3 o" T+ ]: N
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+181 o! R% @0 I- V- p/ M* c
if (dwRet) return dwRet;
( b. k- u1 _! x! z9 f5 s dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);( Y+ L; `, q' p7 o3 z, t' [& T+ a
if (dwRet) return dwRet;
& S+ r( q6 }& p" `% [8 z* t. O dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);3 D# C1 s% N& t* |& m' C! o
return dwRet;3 ]3 A9 N& U0 m9 C
}: }% W/ i6 @4 k$ Q" \
9 p, U- v$ M% J! M7 P8 _* p
static const LPSTR szwRecentPort="wRecentPort";, I' D- g: g" r+ w1 d
static const LPSTR szwPort= "wPort";
c6 J& S* B% D) p7 v$ kstatic const LPSTR szwC2CPort= "wC2CPort";3 I1 n' g; E1 ~* I( s
DWORD GetPort(DWORD Uin)2 i* h/ {8 a( ]% m- ^
{" S) ?" W1 S" W
DWORD dwRet=0;5 I. O9 q8 Q; R/ V' [% H
LPVOID IQQData=NULL;
5 v2 d& O% R% T& {& X" B: g5 t4 ^4 z Q if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
d. r0 S6 o( u7 }5 o+ W LPVOID DynamicData=NULL;
1 n# R; ~. C; P' m$ a5 k1 n PrepareData(IQQData,&DynamicData);
- B1 z' m- t ?: n: j if (NULL==DynamicData) return dwRet;
) R9 f) a, M* F# s! i dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14/ T9 h, F) p2 J( B- R5 D) c
if (dwRet) return dwRet;/ M, C; q- u& J0 g
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
1 _( A: ?4 D% K if (dwRet) return dwRet;
( h9 i& D1 l" a dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);+ g4 g9 \! Y' c
return dwRet;
) A! X' K+ w7 a$ V: F% q a: Q}
3 O! B: h; z( }( ]6 `& T" [6 U7 k2 B
static const LPSTR szwProcotol = "wProcotol";
$ N/ L4 x5 x" J% ?* r0 a! ZDWORD GetVer(DWORD Uin)$ j! l* z s- U; V# ^9 V4 H5 P8 i
{; q3 w! x f) `0 A
DWORD dwRet=0;
5 m. Q; q. `, n, M+ u, Y LPVOID IQQData=NULL;3 K" d& u i. u- I0 r8 S! s; s; W
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
7 t) c* j9 M0 L+ H- m3 q& u9 k LPVOID DynamicData=NULL;
$ S" Q3 W' R- Z PrepareData(IQQData,&DynamicData);6 |2 l. L$ {9 H1 V$ x9 J
if (NULL==DynamicData) return dwRet;9 T# K% A0 v0 |' b: q3 ?) }/ J9 U5 J
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);! t. g4 d- A0 f
return dwRet;0 j% G: S, v- e7 R
}9 u* a7 E; z g6 \* [
9 V' Q/ Y3 C9 f1 Q$ ~& W原文出处:http://www.ye-soft.net/article.asp?id=43 |
|