|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
7 i' n. W3 P2 `3 O( g( J5 srunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.$ i4 p2 u( q& i! A" m( t
& {; X! E' y( d3 tstatic const DWORD UnknownSig=0x1E3A86BA;
7 P! U# m' C: i3 G/ s5 [1 Ustatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";) l4 c& A5 G; R
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);
( j0 {. n: C4 M; R- e2 TVOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)2 d( d, F7 B, i
{0 A1 T) F# C d4 k8 Z. x
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
0 v" G" k9 \) Q/ t ~+ m( ~ PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
0 y. a! U D7 a3 q5 u2 M}! f1 C: f# E9 T
0 l9 ^% x, L. J: |5 Q2 K! v4 HDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)/ w' X; o6 g* r- h2 y4 t0 x# e
{1 q! C' Z# c: L% G
DWORD dwRet=0;; e o& L }$ p% L" p
__asm, G: j6 _% P7 e
{
1 o, V. a. j5 z2 C9 N7 r& V: C; S lea eax,dwRet9 Q& K% b X" \3 ^9 f
push eax7 `# D. ~) q0 [8 Q; t) M% l$ }3 [
push szCmd
$ u+ n9 J5 v! q& L, R/ I" W mov eax, DynamicData
% q2 \( g' L" @ push eax
1 ~: S) n* e5 d$ I$ p mov ecx,[eax] _6 V! h/ k2 v# L! Y
mov eax,ecx
' p* {1 p+ Z* e. b add eax,iOffset
0 e- b z% N4 j( O2 p! r call [eax]3 U0 |- G* O+ s
}
9 M# H( \6 [5 D/ F return dwRet;
2 b0 t$ f$ U+ A% e6 k}
- r* X" t$ `# c5 w4 V5 N& `9 x: ]' A# k9 S
static const LPSTR szdwRecentIP="dwRecentIP";
, j6 E6 @& {) [: bstatic const LPSTR szdwIP="dwIP";
7 z% k' ] a: d9 G3 j7 R H, l# W5 ystatic const LPSTR szdwC2CIP="dwC2CIP";
/ X6 ^, ?, R1 C# x; _; dDWORD GetIP(DWORD Uin); l9 Y6 j3 O. V. p% }# f( o
{
3 H/ t1 V$ {9 }: d DWORD dwRet=0;
$ J0 Q( z" C: }' e, S8 I6 p4 ? LPVOID IQQData=NULL;6 z2 i `' A/ `9 V5 }
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
+ [* |" P f( ?7 y) i9 n LPVOID DynamicData=NULL;
' q0 M' `) M5 j9 \% e$ B PrepareData(IQQData,&DynamicData);% F& L3 t3 @! m3 [
if (NULL==DynamicData) return dwRet;. E2 V1 h- s3 N0 f
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
! M" c2 A/ L/ O* b% b! C if (dwRet) return dwRet;' @9 l6 g/ f8 a( t. |4 e
dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);( Z# {1 D$ T& \/ g
if (dwRet) return dwRet;
8 }, ]' X7 z) R+ A dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
- u: g2 f. {7 Y. i: L1 r return dwRet;
0 c8 u; O8 R- u* j2 Q}
% V* O0 D W) ]8 Y& b& x8 s0 Z# _- W4 \ H) l# q" w! B+ A* t$ I' c
static const LPSTR szwRecentPort="wRecentPort";
V ]- P% g# M D# y' estatic const LPSTR szwPort= "wPort";
( v a: |5 ~+ }static const LPSTR szwC2CPort= "wC2CPort";# [" E1 V! R, q; }
DWORD GetPort(DWORD Uin)+ S! q$ L" x% d# l
{
/ a4 N# k- }6 ?4 B/ E* v4 p DWORD dwRet=0; C, o) J4 p2 Q- G
LPVOID IQQData=NULL;
/ a1 j& E# H* v1 C( J/ V if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;0 h/ O8 @+ O8 @# b A
LPVOID DynamicData=NULL;
, [ ^4 m7 q& q" j! I' v( z* M. X7 } PrepareData(IQQData,&DynamicData);4 J; Q5 H6 y3 I: _7 g; |/ V
if (NULL==DynamicData) return dwRet; C) x) g0 |- U7 g' f& Y) Q7 J
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
- C% _6 l( q4 V0 n% j; Q! [3 R if (dwRet) return dwRet;
" H/ u$ Y2 C! B* B dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);
! g T3 ?9 n* ?4 J. W if (dwRet) return dwRet; B- w9 n% v* q5 d
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);; `3 ^! K, U" {" w
return dwRet;
4 B3 Z" { `) m1 a( N/ a0 \}4 x5 H- Q$ N* y
& ]" _! f7 T0 G8 e m. R- U% k8 r
static const LPSTR szwProcotol = "wProcotol";
. T5 Z4 R' W# C' [9 [$ I5 GDWORD GetVer(DWORD Uin)
4 I8 ^3 \/ S6 C' r9 } U{3 o! H6 E* w, g7 v8 |$ ^4 O7 }
DWORD dwRet=0;
5 d6 J4 x( v# Z2 K, S LPVOID IQQData=NULL;/ {% U1 Z. R3 r: p; \
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
! E. R( [7 t3 b( m( T2 M8 s* J3 h LPVOID DynamicData=NULL;
r" r' a4 \5 T) s2 f8 J2 B PrepareData(IQQData,&DynamicData);
t4 j% M, t, c; T& A$ b7 ]0 K if (NULL==DynamicData) return dwRet;
: V) O& r8 c# Q0 J& K dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
! C/ p9 n0 j5 d: y% ^( M return dwRet;2 O6 p2 k1 p6 T2 ]3 I$ v. B
}
1 y2 y: P; v. J' N5 l$ r5 q3 h5 y8 T6 w o" \
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|