|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.
$ O* A0 l, w: i% xrunjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了., h; c' Y2 ~& E; j5 [5 t
$ J- `) b6 ~! d7 j# Y* \static const DWORD UnknownSig=0x1E3A86BA;
( W! K/ F2 \* \9 S Q Tstatic const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";
3 X1 E& n1 A4 f* k8 f; Ntypedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);/ h- Y& U" F( Z/ m0 @4 k* C& C
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)
$ }7 c2 U( t! m{9 w9 @; j( y( d* n
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);
% ]1 B7 L0 T7 H9 a. ]) g PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
2 l8 K6 l. N! C! ]}- M$ K" ?6 l' t: G: t3 R; M
9 n d% {2 A- l
DWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd) O% L# H# }7 n% U( H
{
: ^3 j3 S- @) V- R0 f DWORD dwRet=0;7 v9 O/ B, Q2 T6 Y' i% S! s
__asm
D4 ]8 i& d+ `. P Y Y {( l0 r* R% x% \
lea eax,dwRet
5 J% o" s) K+ J l) d# B% L" c. B3 s push eax+ k5 b2 _" R# w; F4 s1 W0 z k
push szCmd
; K. }) w, W$ \$ ~& C, a& ?- X mov eax, DynamicData
" t5 T1 }9 h# c) P, _) P0 H7 z push eax
, `7 M$ e" z& v7 k$ J mov ecx,[eax]
\( V5 k8 y" d mov eax,ecx
7 \/ I V" V! j0 O4 G- k1 V# u add eax,iOffset
2 i- S* k2 M a' I" {0 } call [eax]6 y! Y+ M/ i8 o4 b* ]
}0 x+ h ?2 q4 L t7 M3 D+ F
return dwRet;
: v7 u* e# c; [( i( I4 V}
J! q* c* S- U9 K# h0 W; J. v% b8 M% _& P( i9 \; Z
static const LPSTR szdwRecentIP="dwRecentIP";
) ?; K6 N; ]- i! J, V- c* l6 Q. cstatic const LPSTR szdwIP="dwIP";, Q7 P! c- _) Z/ P$ p2 b B9 f
static const LPSTR szdwC2CIP="dwC2CIP";. R7 P, k/ n3 I* A7 }: q
DWORD GetIP(DWORD Uin)
2 Q9 h5 O! r, V{% m" a( N- Y. N2 |# `6 P
DWORD dwRet=0;
/ Y+ `" W% r+ S4 F( E LPVOID IQQData=NULL;
4 \# x( Y1 F% h" U( h5 {2 x# j if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;) y. g k$ h6 M
LPVOID DynamicData=NULL;( G* B1 D( X2 _2 X
PrepareData(IQQData,&DynamicData);; `+ Z, A, X# g1 ~
if (NULL==DynamicData) return dwRet;
$ @. r2 R7 U, e+ g9 o dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+18
3 |8 \% w4 y/ H0 \+ D. Y if (dwRet) return dwRet;
% _. H- o: }+ i1 {' q) i1 U dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);# m3 i' |2 w) s* s/ ?' B& ~7 O
if (dwRet) return dwRet;
& A" b( I5 y2 n! a+ Z |: Q dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);
5 Z8 s5 I1 p& V( F8 Q2 ?) o return dwRet;
9 x4 a D, ?2 b, B8 O! z+ `}
* K& T* A. P! T5 m, I* \ G" I. |5 `; ~
& T8 H2 t0 e& C5 y% ystatic const LPSTR szwRecentPort="wRecentPort";! {& ?8 g2 _+ P- _7 G/ f" i
static const LPSTR szwPort= "wPort";
, T3 R0 w; m! pstatic const LPSTR szwC2CPort= "wC2CPort";
8 t/ j5 T# ? k2 \: L% W& MDWORD GetPort(DWORD Uin): L" \$ }2 r+ }" I! y
{5 R! J" L* ?; i: b/ z9 M$ D
DWORD dwRet=0;
) ?- s3 v1 Z3 y* M" r: Q% B1 A LPVOID IQQData=NULL;: z) @% I; c9 a1 s/ S8 L+ |) m
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
0 p5 C0 b+ K7 J" g2 f LPVOID DynamicData=NULL;- }/ c8 v0 |9 n. o6 L2 S* K# |) W
PrepareData(IQQData,&DynamicData);
: s( k# n) n$ p0 k: H# ` if (NULL==DynamicData) return dwRet;+ b" e: s" T1 o* {
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
1 H; I3 @- v& L if (dwRet) return dwRet;4 L* |8 r0 c1 {1 @ B% N& ?) V" b
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);# E2 d2 b; d3 ^; O
if (dwRet) return dwRet;
) [! ?% ~4 M4 p dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);- u+ w( x8 Z) |5 r; L$ D) S
return dwRet;! m4 y! Q) @2 q; z
}! s9 P9 _" I& k
+ B: H6 Y4 h/ o3 F) c' I8 ^static const LPSTR szwProcotol = "wProcotol";
" A6 a( w- ]' C4 Y+ N FDWORD GetVer(DWORD Uin)
% C# m* F# m+ J) E{
4 c+ u3 r, N4 T/ N) x* Y9 _: u DWORD dwRet=0;
6 G" S% p' Y: K% p) v( Z LPVOID IQQData=NULL;
% a3 S6 N8 w+ u' u% n if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
4 k/ {; R: [9 g LPVOID DynamicData=NULL;) e! Q. [ [: \8 j3 J
PrepareData(IQQData,&DynamicData);! O; v0 r8 j& l% o
if (NULL==DynamicData) return dwRet;2 J2 {3 E: m5 C8 M2 s0 P8 g* s
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
+ j7 b3 W% P0 z return dwRet;
+ E6 |+ n6 d, m' i2 Q6 U( s3 F# S}) P+ H5 v2 E4 @' {" P% k7 \
! T9 a O% T7 ]" X+ V; A# M \
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|