|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.' Q. I: [2 f$ m" R" R. r
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.2 L. [$ R$ b7 y, C: E$ x
/ E. A9 \# O, v; kstatic const DWORD UnknownSig=0x1E3A86BA;
$ ]+ v' i7 i. Y# i/ [9 dstatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
% w3 W1 J7 i/ Z- t9 N4 }typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
* n q& M* e, r1 rVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
7 a& ^+ t4 s7 R- V/ ]9 _) l! ]{
. W! k0 o0 B. n; x/ N3 r7 w1 E pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);' i4 N) n8 Q9 P, u9 H% V
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);, f0 f; E9 _: L
}
$ j) M7 u& G* G0 V, Y1 W, {7 c8 d D% k: ^8 c$ B* P, G r
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)
' _' m! H4 r# ^4 t+ ]$ V{9 \3 n, i+ y: |; C+ A# \
DWORD dwRet=0;
/ f& u. D2 G. q, d" d- t% ^ D __asm- k/ }7 d( {0 t' [2 M% e
{
; y0 w/ W* y. D& V% ]: s lea eax,dwRet) k- z7 R* [3 R2 C& ~! {- K
push eax, b+ L# e6 Z, V) M
push szCmd
" G- K9 H+ Y7 c9 o4 e b0 r mov eax, DynamicData
0 d! |4 x+ p1 |8 b" ?/ B6 w push eax0 s( ~1 b/ h" D9 l
mov ecx,[eax]9 F' j, B( t: t0 [# w% C+ o
mov eax,ecx9 {, G0 X5 O1 n# l, N$ ~- C+ E: }3 N
add eax,iOffset
: Z: c, `4 ]3 g call [eax]& I/ l# k$ Q( I; o: A( p
}
" W0 R9 E7 B# p+ g! l return dwRet;7 S7 V9 s0 g, N) ]
}! |& u4 u- i, Z8 s& F) I
5 g1 I4 t U/ t9 r8 Z- Pstatic const LPSTR szdwRecentIP="dwRecentIP";$ c9 m8 X! j. w) a4 P2 b
static const LPSTR szdwIP="dwIP";
9 z& d0 D# T' j% K9 j0 Vstatic const LPSTR szdwC2CIP="dwC2CIP";# J+ _: v' W$ y Q7 U
DWORD GetIP(DWORD Uin)- \/ W" O7 i, ?; J7 f
{
4 G4 `- N# z. A! k) ~1 P% f! C DWORD dwRet=0;
# Z" j7 R' g" G& W5 \7 X LPVOID IQQData=NULL;
4 W& o! R! h' Y+ Q7 l; I if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
7 ?# W8 V \: r8 H, E LPVOID DynamicData=NULL;) d% H: e9 Z" M3 O, ]0 b
PrepareData(IQQData,&DynamicData);
9 S8 D C' f, a if (NULL==DynamicData) return dwRet;6 o2 L. _+ l3 F
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
: [& P7 g# M! z+ X, W if (dwRet) return dwRet;9 h0 _0 _! P" V; V
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
0 _ Z6 s" y5 a! k$ `) O6 C if (dwRet) return dwRet;6 J/ N" _+ ^. u# a# j! F
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
% I" h6 d$ Y/ h3 C5 b0 d6 z, \, _ return dwRet;$ o4 e* k8 i8 A) N, ^& g
}- l" f0 k9 Q" t8 W; c
* g2 z. {6 F8 q/ A) X. [6 _
static const LPSTR szwRecentPort="wRecentPort";
! s' p/ l ] \1 j4 mstatic const LPSTR szwPort= "wPort";; Y% e& ]! }; s# [5 v: i* u
static const LPSTR szwC2CPort= "wC2CPort";
) o) d, [* g+ ?DWORD GetPort(DWORD Uin)
! n% Y f% r# F: @{
. r2 h1 |. c$ m' ]# u8 |$ G DWORD dwRet=0;( j5 W% [* y5 p+ h/ s% \/ p# D) t
LPVOID IQQData=NULL;
; Z5 u; Y' k) s8 n if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
9 x- a/ [* ~7 V6 }" [: V3 P; |6 j LPVOID DynamicData=NULL;6 u' a$ }! q% N6 U; y
PrepareData(IQQData,&DynamicData);
; k T4 |* F' o if (NULL==DynamicData) return dwRet;; ^- c. T" s1 |( b$ T' e
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14( u7 X- U( g& b
if (dwRet) return dwRet;
0 c. e$ o! p: Z# C" h8 W q4 Q8 ^0 h dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);8 g+ F& _( N) N- {$ c7 V0 Y6 x
if (dwRet) return dwRet;* M7 G+ L7 A8 `6 y
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);, \- {2 E) U, j, R4 W& h; S& _
return dwRet;! C+ U& B( W# a* v5 n+ \4 ~5 t: C
}' T1 J* k$ w3 e" z# j% Z% b
% {8 [: p$ S- j0 y n7 b
static const LPSTR szwProcotol = "wProcotol";* s' U. ]/ C1 ^& p1 i
DWORD GetVer(DWORD Uin)
+ R0 K: v8 c- Y, U! @ Y{3 c% l" Z# J% R1 m# {3 t, C
DWORD dwRet=0;
# ` ?- X/ O* ~2 j w( ~! j LPVOID IQQData=NULL;6 d/ i4 _: k* P& n) ]; _
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;5 H4 _4 l* v" @
LPVOID DynamicData=NULL;" O( G, v% |; l- ~' r8 B7 F- \& Z
PrepareData(IQQData,&DynamicData);, u7 d6 b/ n* a/ o! ?& v! v
if (NULL==DynamicData) return dwRet;: `) P9 d1 q2 Y7 \) ^) c
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);. w( T+ ]3 w x% L F# e: ^4 v
return dwRet;
6 ]) E5 @4 [, F, K9 i1 g}3 j" p$ G. ]* H
& z( |4 z9 o4 K* i% x原文出处:http://www.ye-soft.net/article.asp?id=43 |
|