|
|
这是LiteIM/FreePlus的取IP代码,感兴趣的朋友看看吧.! t0 }8 |' O, y( M
runjin的是汇编版本,这是c版本,希望有更多的人能读懂.后来者,愿它对你有益.闪了.
, g/ ^8 y/ N, |" k6 A+ e' a+ W
! Z' H( G% `0 c, a" ystatic const DWORD UnknownSig=0x1E3A86BA;8 o; o+ c. H5 {; {. c0 y
static const LPSTR szQQUSER_DYNAMIC_DATA="QQUSER_DYNAMIC_DATA";- q2 F+ D9 T6 g. f+ F+ A0 t
typedef void( *pPrepareDynData)(LPVOID IQQData,LPSTR szCmd,const DWORD* szSig,LPVOID* pDynamicData);" H- l) G, d9 R
VOID PrepareData(LPVOID IQQData,LPVOID* pDynamicData)- D8 }3 ]+ Q/ p! p E" k/ ]
{$ q7 Z1 m, D7 c U& t
pPrepareDynData PrepareDynData=(pPrepareDynData)*(LONG *)(*(LONG *)IQQData+0x54);/ ^8 G4 h# \/ q. j% V
PrepareDynData(IQQData,szQQUSER_DYNAMIC_DATA,&UnknownSig,pDynamicData);
* O- M& }( J* u}; H. C6 n( }; V8 ^) U
. u; U7 R# t( ~1 I; DDWORD GetDyncDWORD(LPVOID DynamicData, int iOffset,LPCSTR szCmd)9 }. W' [7 o1 |& n0 w
{( |' g2 Q$ g7 Z) W
DWORD dwRet=0;
' N+ Y" E& M0 `0 ^) j __asm
) O# x+ B3 ?0 @4 A+ p/ G {
) |' h+ r8 K9 {$ s7 | lea eax,dwRet% D! T" k: N& E
push eax" B+ ~7 i2 _6 ?
push szCmd
0 _5 A5 Y8 Z, P& {' E mov eax, DynamicData; K9 G9 ?' E3 J% O
push eax4 G( K7 _- ~2 X4 \' S$ {& E( u6 v
mov ecx,[eax]
4 q3 ~) q G+ J' Q4 F1 w5 y& W+ f0 @ mov eax,ecx: `$ R' U- z9 n& ?# H, a' N0 z b
add eax,iOffset
% R9 @6 Q# K! ~! u' f" T( S- e3 I call [eax], }5 W, l! f$ _/ U
}) D$ \" `& c s* L2 Q( M
return dwRet;3 g6 `5 s+ v& P
}, S+ o# p4 ?# x" F
, o. |1 F* C) E# \5 Rstatic const LPSTR szdwRecentIP="dwRecentIP";* A4 f" {! }" y! G# g; x9 t" Y
static const LPSTR szdwIP="dwIP";$ g1 I9 ~4 b" {/ X8 s, P
static const LPSTR szdwC2CIP="dwC2CIP";! p6 g( ^; d F+ g9 ]8 ~( t
DWORD GetIP(DWORD Uin)% @; _ [( y7 m" }- S" H9 h8 O
{
( [5 x$ m* F- F DWORD dwRet=0;
0 x' H8 j0 J! Y LPVOID IQQData=NULL;1 z i; n, m4 m8 Z9 z
if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;
; r& r1 g9 }* {/ W9 Y LPVOID DynamicData=NULL;
; ]7 c& n1 B# A$ m$ M PrepareData(IQQData,&DynamicData);1 I2 P& z5 V# J/ D1 N3 i; U
if (NULL==DynamicData) return dwRet;/ V% W4 T" ~* I8 t, A: R( _
dwRet=GetDyncDWORD(DynamicData,0x34,szdwC2CIP);//ecx+188 B `2 w" D7 T0 h
if (dwRet) return dwRet;
8 {1 i ~8 ?: a6 J; k8 e dwRet=GetDyncDWORD(DynamicData,0x34,szdwIP);
% Q5 I: Y1 b% y$ N: a: K if (dwRet) return dwRet;
1 C' p1 u/ _8 {% [% `+ Q dwRet=GetDyncDWORD(DynamicData,0x34,szdwRecentIP);, F9 A0 @7 S5 T- x7 C9 ~7 T* M
return dwRet;- N5 A$ r- Q( L% ~& V+ S
}
$ U6 T! K7 h+ i$ W! t( d: D1 r3 \6 `0 D! }
static const LPSTR szwRecentPort="wRecentPort";
# l% `# j% n$ k7 i5 Mstatic const LPSTR szwPort= "wPort";5 A% @" @' K/ r6 h! p
static const LPSTR szwC2CPort= "wC2CPort";
+ n: L/ O) u9 g1 Q4 ?DWORD GetPort(DWORD Uin)
! j1 F$ y' H, p7 {3 f, y \' X{
9 }# T0 A- b5 Z$ ?* l0 E2 ~$ x DWORD dwRet=0;6 z% P0 l9 L3 @0 R! H
LPVOID IQQData=NULL;
) F6 F& G) ]5 h5 u0 t if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;! X' j# t8 j4 o. r G, y
LPVOID DynamicData=NULL;& }" h2 a/ b% Y0 S
PrepareData(IQQData,&DynamicData);
# u# t0 t9 K+ C2 D7 ] if (NULL==DynamicData) return dwRet;0 b8 q ^: P5 ]. l
dwRet=GetDyncDWORD(DynamicData,0x30,szwC2CPort);//ecx+14
( n* ~8 i7 v! l if (dwRet) return dwRet;+ w7 n. n' h5 Q+ y" R
dwRet=GetDyncDWORD(DynamicData,0x30,szwPort);1 E+ ^" V; [# m4 s3 z3 V
if (dwRet) return dwRet;4 N. B; H6 Z3 i5 T
dwRet=GetDyncDWORD(DynamicData,0x30,szwRecentPort);1 o/ e' P/ C/ H% {7 \6 x
return dwRet;! J/ o8 M ^* [* K& ]1 y8 Y
}. @, L) R4 @2 M! h; U' b
4 X5 a7 U% M) H) M6 Y! x6 `& X0 f& Y/ estatic const LPSTR szwProcotol = "wProcotol";+ \1 R8 C! U- c; D9 v" n {' @4 l. I
DWORD GetVer(DWORD Uin)
' Y- e# j. C. y8 Q5 v: a9 F, _{0 n8 }% i1 g0 u) S1 `, t; B
DWORD dwRet=0;
1 ~: D& r% U2 X* k, ^ LPVOID IQQData=NULL;
+ H8 q( _4 R4 Z7 E4 Z if (!GetFriendQQData(g_IQQCore,Uin,&IQQData)) return dwRet;( _4 H% M0 S1 A0 I# M& p" ^5 a) M
LPVOID DynamicData=NULL;
x! n" g+ w- w& s8 ~+ R PrepareData(IQQData,&DynamicData);+ T6 \* u4 W5 Z/ q
if (NULL==DynamicData) return dwRet;/ k2 }$ d+ e- x$ m9 {# U
dwRet=GetDyncDWORD(DynamicData,0x30,szwProcotol);
$ s' k5 r+ ?. Q! g w h) b return dwRet;
0 a5 A3 i$ M, C}, Y$ b7 n, f( z, C, q1 s/ _
: Y; z) f+ f0 t) P
原文出处:http://www.ye-soft.net/article.asp?id=43 |
|