|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
- B4 e* e3 U5 J7 q: W# m" [2 t' _" Yrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.0 g4 ^: C9 r$ E0 O0 S, h$ z
' ^. A% k9 s! |9 Ostatic const DWORD UnknownSig=0x1E3A86BA;+ A2 N2 M l0 e% w) h6 r
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";5 o+ ]! h; O* W y
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
3 a7 D; K5 J" ?' i7 j# p. J; KVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
3 }2 u/ s8 i: _; g" l# V- K' a{
3 K9 I+ }" \) y pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);& ^6 @1 L4 [) }2 W0 `6 d2 W
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);. ^ _) u+ i/ j# _
}
+ Q! l7 A1 k/ a( { l0 {1 w2 e$ }7 N4 L" u, ]) r: G) k
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)* @+ Z$ }. z# h# A- v3 e
{' v1 h5 j. N; b7 D+ J
DWORD dwRet=0;
" e) U6 n. U# j- |; J. T __asm
) J: n2 N ?- ~ u; G, E {
6 U. F$ q( N& P5 F3 I1 X4 T lea eax,dwRet
+ x* ^9 ?7 y0 |* h. c push eax
+ w" s1 n! n/ B) C; J push szCmd
1 }7 [* V( Q+ f% n mov eax, DynamicData& W6 [- v' ?& T8 \2 J
push eax0 a9 { B0 k% S3 _& F2 s
mov ecx,[eax]+ z( Z6 q* G7 q* H! j- A
mov eax,ecx
. ?6 W1 v/ O- S" [3 h( \: I3 | add eax,iOffset0 r# U6 ^$ u9 l; R
call [eax]
( L! C4 A" u4 y1 l! G5 X& A8 b; ?, f }
$ z% H, X1 D2 Z8 B return dwRet;
) O5 T6 Z# D$ T8 j M1 x1 v% v}3 N* Q5 j; F6 u/ H$ D6 ~
# o0 d% t- U& F$ X- s/ K s
static const LPSTR szdwRecentIP="dwRecentIP";0 z1 ?9 {1 ~& u5 p6 _
static const LPSTR szdwIP="dwIP";; v" ~" _& V, K& I: ]' i
static const LPSTR szdwC2CIP="dwC2CIP";' S* X! d- A+ T1 q2 T/ O0 L
DWORD GetIP(DWORD Uin)9 C5 n/ r8 V) a5 [2 s; s& X
{6 J' L6 m# W" K$ W" ^ V
DWORD dwRet=0;' m6 C, h8 R( Q3 {* W% z
LPVOID IQQData=NULL;/ r9 m n1 f# \! X! ?3 C. ^
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;: y) g) e! h& z' |9 s2 |
LPVOID DynamicData=NULL;0 w; |& a! S2 H/ @$ ?( J
PrepareData(IQQData,&DynamicData);
% I2 ]- N; h$ f9 Q8 z if (NULL==DynamicData) return dwRet;$ j; T1 a7 G4 Y- g* a( r5 x9 O/ j
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
0 T0 b& ?4 l5 _0 O4 M if (dwRet) return dwRet;
* s& R5 R' N6 L+ u7 y! O: a. \ dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
. e: a/ f+ U* ^/ j1 r if (dwRet) return dwRet;; ^' M c! R: j5 k
dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP); | h4 m9 L Y3 ] f
return dwRet;+ I% Z- l+ o1 ?: s9 v" u' r8 c
}- H; e# }8 K% U7 ]7 o1 P+ [! C% y" [
& q2 _; D1 M4 g; l) l6 Zstatic const LPSTR szwRecentPort="wRecentPort";, V. w" D5 Q: i* j2 c/ z
static const LPSTR szwPort= "wPort";
+ _* ^! o% B- nstatic const LPSTR szwC2CPort= "wC2CPort";' A( g1 w1 X C$ a
DWORD GetPort(DWORD Uin); S% ]# L( }: t0 j3 a |
{
/ _8 V7 z0 F [( q6 f$ ~ DWORD dwRet=0; U* W- i' U+ b0 O# R" d: P0 o% H
LPVOID IQQData=NULL;
* V/ U6 x3 [. r8 u1 ~, Y if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;5 f1 x$ _' Y) i+ S/ C1 {" `
LPVOID DynamicData=NULL;
* u' w, f9 p# {+ y3 z3 C6 t PrepareData(IQQData,&DynamicData);* \3 [5 u6 `4 @4 W% f4 a4 ]
if (NULL==DynamicData) return dwRet;
' H" m% U4 Q" Z- ^5 J dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+142 G7 l: @: r8 F: A) g6 k2 @
if (dwRet) return dwRet;0 Q5 K. H0 M4 ]8 Z9 `6 I. y% j) ]
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
2 Q/ k' V2 P8 P$ ]" @: ^ if (dwRet) return dwRet;. d M+ d j& P+ S1 f5 \
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);
$ Q/ T N2 f( ?8 N3 O8 O return dwRet;
$ t8 v: T! O5 ?' E5 R+ V}7 E' Z$ {( Y# J/ Q# K% R
+ n; }, H3 Y/ n5 q9 N6 f5 nstatic const LPSTR szwProcotol = "wProcotol";5 P7 Q( D, p! s/ G! R3 u$ ^' D
DWORD GetVer(DWORD Uin)0 C P2 ^, S/ _1 [9 u' T
{- o% i( z6 g. B5 s
DWORD dwRet=0;9 j0 J, N1 X! g: w5 J, O/ ~9 I
LPVOID IQQData=NULL;/ y% M2 c3 E' I
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;7 b4 y( |) K* ~$ ~% `4 V; e
LPVOID DynamicData=NULL;' h0 F2 b( F$ Z6 T4 m
PrepareData(IQQData,&DynamicData);0 ]# c/ e. D% h$ T, r
if (NULL==DynamicData) return dwRet;
) `* f& a3 a8 d0 N4 N0 M/ J+ z5 s( L* O dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);7 O0 ?+ b" l6 r0 k; s
return dwRet;
' r! v+ t) W& R. i3 J}
x8 ?* G1 R' Y2 J" M# y$ x% A' \
& E" J" {$ p( n) B1 K* I; J原文出处:http://www.ye-soft.net/article.asp?id=43 |
|