|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.0 u/ |) c5 r0 c: `5 ~' I! C" i
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.% M; s4 X8 G4 s
' r) Y" D( |6 E
static const DWORD UnknownSig=0x1E3A86BA;7 N; g6 `8 ~ K$ [1 k
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";6 J; z4 O) @: B3 d6 C
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);+ q5 M! T7 e0 b8 B; {* x% Y
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
: a8 s7 t3 w' U% u5 C9 T4 r{( ]) C, ]( L5 y+ r
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
8 Y' t* V6 O! W, ~" |5 \ PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
& Q4 O$ C# d) L) V: F8 W3 s' t}
: B& b( _8 M+ p2 W! `& @# @1 \0 A$ g$ i6 e! w
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)' V/ w9 B$ ~2 x+ x3 p
{% I3 {3 L: N( o5 i& r' Y' G
DWORD dwRet=0;& |# S: E3 i6 C; G B9 m% @
__asm
1 t" L- {7 Y, F; G {1 { W1 [; R: W6 I) M
lea eax,dwRet; |3 ^3 C, x7 `7 p
push eax7 @5 P- U% P) l2 D) F
push szCmd/ Y; x/ N! P7 I& M: c+ \8 q: A$ s
mov eax, DynamicData: N5 n7 ^' W( f! ~
push eax: D( k, N% ~" R/ W5 o$ D) I" K( V
mov ecx,[eax]
% p7 G" Z+ K' r" x" U mov eax,ecx
$ ]0 d4 \; m# [2 T1 N/ U add eax,iOffset
& |* B/ }, f. N5 z L1 _ call [eax]
( _: i; z. Q# j5 }, M }: Q. _: T3 Z+ |$ `/ m* k# k5 l
return dwRet;' Z5 ]+ V9 X( {' u( q
}
9 T B6 W d+ z& b0 K6 [ a/ b6 E
8 G0 A, i9 Q v: }, q2 [+ g# i% e" kstatic const LPSTR szdwRecentIP="dwRecentIP";# s9 D( A6 \6 ^: F1 Y) z
static const LPSTR szdwIP="dwIP";- S6 s" Y; @6 b# |' D. t1 Y
static const LPSTR szdwC2CIP="dwC2CIP";: q" R" i! _6 t/ Z
DWORD GetIP(DWORD Uin)
5 r0 X& E# [8 U0 a2 p{% F' S! @1 w# l! H
DWORD dwRet=0;
1 }5 b& @0 e: } LPVOID IQQData=NULL;# I, F7 k* [2 S+ Z# J
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
- ?6 L4 M& ?2 B1 ]) ~ LPVOID DynamicData=NULL;4 `2 s6 J. O% X5 @; B. g: e3 s
PrepareData(IQQData,&DynamicData);6 a: [# e6 R/ L3 z
if (NULL==DynamicData) return dwRet;4 B. ]* E9 E0 m
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
; d4 D2 f" V2 U0 K( ? if (dwRet) return dwRet;$ C0 q/ P4 M1 P- w7 j! D, i
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);% j6 f2 u2 V& }2 j* S
if (dwRet) return dwRet;; L8 y7 d" L' B: c% F* b: u
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);: v4 V: |7 ], ]6 o
return dwRet;9 ^$ N) ~& I# E1 D' U
}
6 |- }( }5 i1 m5 g6 e1 g# B1 r7 j0 ]1 R# g- D3 T; N/ Q: h
static const LPSTR szwRecentPort="wRecentPort";5 Q6 Z# Y' @) \6 L' h: l' D' ^% {
static const LPSTR szwPort= "wPort";
J @, z/ j3 B9 @- Cstatic const LPSTR szwC2CPort= "wC2CPort";& N3 a6 U7 D) t: } b% k
DWORD GetPort(DWORD Uin)+ @) W6 _9 h; @0 {9 q) z, B1 Q' |6 C
{
8 z; m6 b) u( I$ ]2 R+ P$ u2 y DWORD dwRet=0;7 K4 i; A) |* D6 K
LPVOID IQQData=NULL;
& k) A3 O- g9 M1 O! a w2 Y! j* ~ if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;2 {6 I0 w8 t& t; n/ d& {$ [ Q
LPVOID DynamicData=NULL;
1 J# i( \' d: M" W. w5 o PrepareData(IQQData,&DynamicData);8 g& @$ f }0 ~- v9 x( |; B
if (NULL==DynamicData) return dwRet;5 b" W: `7 o8 l# L. _- i3 j
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
* c% k9 f' i: e/ ^7 w if (dwRet) return dwRet;( {% M0 H+ e6 t$ [$ y4 R9 p2 u! _/ N
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
7 s5 [" v$ u# [' U6 \ if (dwRet) return dwRet;
( j& x- R! d* W dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
8 @/ \6 d% {2 v% i. c! O return dwRet;7 M/ U7 Q9 E8 ]$ V
}
3 k, T+ e t# e6 {1 e5 x
1 u* t* w$ k0 lstatic const LPSTR szwProcotol = "wProcotol";, s* U. l; _8 ]# E B/ L
DWORD GetVer(DWORD Uin); s. v) U8 E! F% A0 B* n6 R
{) r6 R: E O4 _3 l) W2 i9 H: O
DWORD dwRet=0;3 _- n: Z! b+ s$ h0 K) Z% y) u
LPVOID IQQData=NULL;' W' L' i( U }9 Y: V
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;+ `. }% W) ?, m' Y; G% O: `
LPVOID DynamicData=NULL;2 B. V& D. H/ I' g3 u( s8 O
PrepareData(IQQData,&DynamicData);
! S& h, J7 ~. u; F( W; {' M r1 q if (NULL==DynamicData) return dwRet;
5 L4 o8 o8 k/ B9 d3 t, e' q dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
f) p5 P$ q0 w9 G return dwRet;
# x& ~: m+ d! ]/ y, S}
" l+ m7 |* P, L$ J. p& _5 |5 h- f! Z3 L( H$ u7 @( ^4 C) I. n
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|